From 47b5b2a2882e215afafca6dc52ec8ef891a9033b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 1 Jan 2013 02:56:34 +0100 Subject: [PATCH 001/186] =?UTF-8?q?1.=20BUG=2015:=20TPH1=20<.=20=3F=20supe?= =?UTF-8?q?r=20TPH2=20f=C3=BChrt=20zu=20TPH1=20<.=20TPH2=20und=20zu=20Eq1?= =?UTF-8?q?=20einzugefuegt=201.=20BUG=2016:=20Unify=20in=20Zusammenhangsko?= =?UTF-8?q?mponenten=20aufgeteit,=20muss=20wieder=20zurueckgenommen=20werd?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dhbwstuttgart/syntaxtree/SourceFile.java | 2 +- .../typeinference/unify/Unify.java | 93 ++++++++++++++++++- 2 files changed, 92 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index f8a820f5..522727fb 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -801,7 +801,7 @@ public class SourceFile .map(i -> constraintsClone.elementAt(i)) .collect(Vector::new, Vector::add, Vector::addAll)); //Vector> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); - + System.out.println(); //Schritt 4: Unifikation Vector>> vecunifyResult = //streamconstraintsclone.map(x -> Unify.unify(x, finiteClosure)).collect(Vector::new, Vector::add, Vector::addAll); diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 153fa353..e302ca80 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -7,7 +7,9 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; +import java.util.TreeSet; import java.util.stream.Stream; +import java.util.function.BiFunction; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -150,8 +152,19 @@ public class Unify if(p.TA1 instanceof TypePlaceholder) { //TPH <. ? super Ty entspricht TPH <. Ty - if (p.TA2 instanceof SuperWildcardType) p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); + if (p.TA2 instanceof SuperWildcardType) { + p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); + + //HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12 + //Dann ist THP <. TPH in Eq2 anstatt in Eq1 + //Muesste mit folgendem if gelöst sein. PL 15-03-17 + if (p.TA2 instanceof TypePlaceholder) { + Eq1.addElement(p); + // Eq2.remove(p); + continue; + } + } if(p.OperatorEqual()) { //Alle Paare die bereits durch sub_unify die richtige Struktur haben einfach durchleiten. @@ -608,10 +621,87 @@ public class Unify } } } + + + /////////////////////////////////////////////////////////////////////////////////// + //EINSCHUB AUFTEILEN ZUSAMMENHANGSKOMPONENTEN PL 15-03-19 IN SCHRITTEN A. - C. + //BRINGT nichts OverloadingInMethod2 + ////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //A. Zusammenhangskomponenten bilden + + BiFunction,Vector,Vector> addAllSet = + (v1, v2) -> { for (TypePlaceholder v2elem : v2) { if (!v1.contains(v2elem)) v1.addElement(v2elem); } + return v1; + + }; + //A.1 Eq1 als Vec> zu cartProduktSets hinzufuegen + Vector>> VecVecEq1 = Eq1.stream().map(x -> { Vector PVec = new Vector<>(); + PVec.addElement(x); + Vector> PVecVec = new Vector<>(); + PVecVec.add(PVec); + return PVecVec;}) + .collect(Vector::new, Vector::add, Vector::addAll); + + cartProduktSets.addAll(VecVecEq1); + + //A.2 Schritt 1: Alle Variablen in den Paaren von Elementen einsammeln + + //A.2 Schritt 1: Alle Variablen in den Paaren von Elementen einsammeln + Stream>> constraintsclonevars2 = + cartProduktSets.stream() + .map(vecvec_p -> vecvec_p.stream().map(vec_p -> vec_p.stream() + .reduce(new Vector(), (vTPH, p) -> { addAllSet.apply(vTPH,p.TA1.getInvolvedTypePlaceholder()); + addAllSet.apply(vTPH, p.TA2.getInvolvedTypePlaceholder()); + return vTPH;}, + (x,y) -> {x.addAll(y); return x;}) + + ).collect(Vector::new, Vector::add, Vector::addAll) + );//.collect(Vector::new, Vector::add, Vector::addAll); + + Vector>> constraintsclonevars3 = constraintsclonevars2.collect(Vector::new, Vector::add, Vector::addAll); + + Vector> constraintsclonevars4 = + constraintsclonevars3.stream().map(vars -> vars.stream().reduce(new Vector(),(vTPH1, vTPH2) -> { addAllSet.apply(vTPH1,vTPH2); return vTPH1;})) + .collect(Vector::new, Vector::add, Vector::addAll); + + + Vector> constraintsclonevars = + cartProduktSets.stream() + .map(vecvec_p -> vecvec_p.stream().map(vec_p -> vec_p.stream() + .reduce(new Vector(), (vTPH, p) -> { vTPH.addAll(p.TA1.getInvolvedTypePlaceholder()); + vTPH.addAll(p.TA2.getInvolvedTypePlaceholder()); + return vTPH;}, + (x,y) -> {x.addAll(y); return x;}) + + ).reduce(new Vector(), (vTPH1, vTPH2) -> { vTPH1.addAll(vTPH2); return vTPH1;}) + //HIER STIMMT ES NICHT + ).collect(Vector::new, Vector::add, Vector::addAll); + + //A.3 Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen + //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen + Vector> indexeset = new Vector<>(); + if (constraintsclonevars4 != null && constraintsclonevars4.size()>0) { + indexeset = Unify.schnitt(constraintsclonevars4); + } + + //A.4 Schritt 3: Umwandlung der Indizes in die zugehoerigen Elemente + // In streamconstraintsclone sind die Mengen von Paar enthalten die unifiziert werden muessen + Stream>>> streamconstraintsclone = indexeset.stream().map(x -> x.stream() + .map(i -> cartProduktSets.elementAt(i))//); + .collect(Vector::new, Vector::add, Vector::addAll)); + Vector>>> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //B. Schitte 4. bis 7 der Unifikation auf den Zusammenhangskomponenten getrennt ausfuehren //Schritt 4, Teil 2: Kartesisches Produkt bilden. //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebilden. Vector helpvp; Vector> bigCartProductErg = new Vector>(); + + //auskommentiert, da bereits in Schritt A vor der Zusammenhangskomponenetenbildung hinzugefuegt PL 15-03-19 bigCartProductErg.addElement(copyVectorPair(Eq1)); for (Vector> vecvecpair : cartProduktSets) @@ -774,7 +864,6 @@ public class Unify } return ret; } - /** * Diese Methode wird verwendet, um Zuordnungen z.B. TPH a = Integer From 5c80215516d642b6f4e187244cbe6c943b5041ce Mon Sep 17 00:00:00 2001 From: Sascha Speidel Date: Tue, 5 Aug 2014 14:24:58 +0200 Subject: [PATCH 002/186] Andis letzter Stand --- .gitignore | 0 README.me | 0 Readme.md | 0 bin/.gitignore | 0 src/mycompiler/SyntaxTreeNode.java | 0 src/mycompiler/mybytecode/ClassFileMember.java | 0 src/mycompiler/myclass/Constructor.java | 0 src/mycompiler/myclass/Field.java | 0 src/mycompiler/myclass/FieldDeclaration.java | 0 src/mycompiler/myclass/Generic.java | 0 .../myclass/GenericDeclarationList.java | 0 .../myparser/BoundedClassIdentifierList.java | 0 .../myparser/GenericVarDeclarationList.java | 0 src/mycompiler/myparser/JavaLexer.java | 0 src/mycompiler/myparser/JavaParser.java | 0 src/mycompiler/mystatement/LambdaParameter.java | 0 src/typinferenz/FunNInterface.java | 0 src/typinferenz/FunNMethod.java | 0 src/typinferenz/GenericTypeInsertable.java | 0 src/typinferenz/JavaCodeResult.java | 6 +++++- src/typinferenz/TIPConstraints.java | 0 src/typinferenz/TypeInsertable.java | 0 src/typinferenz/assumptions/Assumption.java | 0 .../assumptions/ClassAssumption.java | 0 .../assumptions/ConstructorAssumption.java | 0 .../assumptions/FieldAssumption.java | 0 .../assumptions/GenericVarAssumption.java | 0 .../assumptions/LocalVarAssumption.java | 0 .../assumptions/MethodAssumption.java | 0 .../assumptions/ParameterAssumption.java | 0 src/typinferenz/exceptions/DebugException.java | 0 src/typinferenz/exceptions/ParserError.java | 0 .../typedeployment/GenericTypeInsertPoint.java | 0 .../typedeployment/SourcePatchPoint.java | 0 .../typedeployment/TypeInsertPoint.java | 2 +- .../typedeployment/TypeInsertSet.java | 0 test/bytecode/BytecodeTester.java | 0 test/bytecode/EmptyClassTest.java | 0 test/bytecode/FieldTest.jav | 0 test/bytecode/GeneralTest.java | 0 test/bytecode/MethodTest.java | 0 .../test/lambda/GenericParameterTest.jav | 0 .../test/lambda/GenericParameterTest.java | 0 test/mycompiler/test/lambda/TestInterface.jav | 0 test/mycompiler/test/lambda/TestInterface.java | 0 .../test/lambda/testResults/LambdaTest.log | 0 test/parser/BoundedParameter.jav | 0 test/parser/FieldInitializationTest.jav | 0 test/parser/GeneralParserTest.java | 0 test/parser/GenericFieldVarTest.jav | 0 test/parser/ImportTest.jav | 0 .../plugindevelopment/InsertSingleTypeTest.java | 0 test/plugindevelopment/MartinTestCases/Id.jav | 0 .../MartinTestCases/MatrixVectorMul.jav | 0 .../MartinTestCases/MatrixWhile.jav | 0 .../MartinTestCases/Matrix_lambda.jav | 0 .../MartinTestCases/MethodId.jav | 0 .../MartinTestCases/MethodIntegerUse.jav | 0 .../MartinTestCases/MethodUse.jav | 0 test/plugindevelopment/MartinTestCases/OL3.jav | 0 .../plugindevelopment/MartinTestCases/Plus1.jav | 0 .../MartinTestCases/Plus1_Float_Double.jav | 0 .../MartinTestCases/Tester.java | 0 .../jav/Lambda_usecases/Fehler Report | 0 .../MartinTestCases/jav/Lambda_usecases/Id.jav | 0 .../jav/Lambda_usecases/MatrixVectorMul.jav | 0 .../jav/Lambda_usecases/Matrix_lambda.jav | 0 .../jav/Lambda_usecases/MethodId.jav | 0 .../jav/Lambda_usecases/MethodIntegerUse.jav | 0 .../jav/Lambda_usecases/MethodUse.jav | 0 .../MartinTestCases/jav/Lambda_usecases/OL.jav | 0 .../jav/Lambda_usecases/Plus1.jav | 0 .../jav/Lambda_usecases/Plus1_Float_Double.jav | 0 test/plugindevelopment/MethodTypeInsertTest.jav | 0 .../plugindevelopment/MethodTypeInsertTest.java | 0 .../MethodTypeInsertTestSolution.jav | 0 test/plugindevelopment/ParameterInsertTest.java | 0 .../ParameterTypeInsertTest.jav | 0 .../ParameterTypeInsertTestSolution.jav | 0 test/plugindevelopment/SingleTypeInsertTest.jav | 0 test/plugindevelopment/SyntaxTreeTests.java | 0 test/plugindevelopment/TRMEqualTest.java | 0 .../TypeInsertSetEqualTest.jav | 0 .../TypeInsertSetEqualTest.java | 0 test/plugindevelopment/TypeInsertTester.java | 0 .../TypeInsertTests/BoundedGenericTest.jav | 0 .../TypeInsertTests/BoundedGenericsTest.java | 0 .../TypeInsertTests/FunNInsertTest.jav | 0 .../TypeInsertTests/FunNInsertTest.java | 0 .../GenericParaListInsertTest.jav | 0 .../GenericParaListInsertTest.java | 0 .../TypeInsertTests/GenericTypeVarTest.jav | 0 .../TypeInsertTests/GenericTypeVarTest.java | 0 .../TypeInsertTests/GenericTypeVarTest2.jav | 0 .../TypeInsertTests/GenericVarInsertTest.jav | 0 .../TypeInsertTests/GenericVarInsertTest.java | 0 .../TypeInsertTests/ImportTest.jav | 0 .../TypeInsertTests/ImportTest.java | 0 .../TypeInsertTests/ImportTest2.jav | 0 .../TypeInsertTests/ImportTest2.java | 0 .../TypeInsertTests/IntTest.jav | 0 .../TypeInsertTests/IntTest.java | 0 .../TypeInsertTests/LambdaTest1.jav | 0 .../TypeInsertTests/LambdaTest1.java | 0 .../TypeInsertTests/LambdaTest10.jav | 0 .../TypeInsertTests/LambdaTest10.java | 0 .../TypeInsertTests/LambdaTest11.jav | 0 .../TypeInsertTests/LambdaTest11.java | 0 .../TypeInsertTests/LambdaTest12.jav | 0 .../TypeInsertTests/LambdaTest12.java | 0 .../TypeInsertTests/LambdaTest13.jav | 0 .../TypeInsertTests/LambdaTest13.java | 0 .../TypeInsertTests/LambdaTest14.jav | 0 .../TypeInsertTests/LambdaTest14.java | 0 .../TypeInsertTests/LambdaTest15.jav | 0 .../TypeInsertTests/LambdaTest15.java | 0 .../TypeInsertTests/LambdaTest2.jav | 0 .../TypeInsertTests/LambdaTest2.java | 0 .../TypeInsertTests/LambdaTest3.jav | 0 .../TypeInsertTests/LambdaTest3.java | 0 .../TypeInsertTests/LambdaTest4.jav | 0 .../TypeInsertTests/LambdaTest4.java | 0 .../TypeInsertTests/LambdaTest5.jav | 0 .../TypeInsertTests/LambdaTest5.java | 0 .../TypeInsertTests/LambdaTest6.jav | 0 .../TypeInsertTests/LambdaTest6.java | 0 .../TypeInsertTests/LambdaTest7.jav | 0 .../TypeInsertTests/LambdaTest7.java | 0 .../TypeInsertTests/LambdaTest8.jav | 0 .../TypeInsertTests/LambdaTest8.java | 0 .../TypeInsertTests/LambdaTest9.jav | 0 .../TypeInsertTests/LambdaTest9.java | 0 .../MultipleTypesInsertTester.java | 0 .../TypeInsertTests/MutlitpleTestCases.java | 0 .../TypeInsertTests/OverloadingInsertTest.jav | 0 .../TypeInsertTests/OverloadingInsertTest.java | 0 .../TypeInsertTests/Recursive.jav | 0 .../TypeInsertTests/Recursive2.jav | 0 .../TypeInsertTests/ReursiveTest.java | 0 .../TypeInsertTests/ReursiveTest2.java | 0 .../plugindevelopment/TypeInsertTests/Test1.jav | 0 .../plugindevelopment/TypeInsertTests/Test2.jav | 0 .../VariableTypeInsertTest.jav | 0 .../VariableTypeInsertTest.java | 0 .../VariableTypeInsertTestSolution.jav | 0 test/syntaxTree/NodeEqualTest.jav | 0 test/syntaxTree/NodeEqualTest.java | 0 tools/JLex_neu.jar | Bin 53587 -> 0 bytes 148 files changed, 6 insertions(+), 2 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 README.me mode change 100644 => 100755 Readme.md mode change 100644 => 100755 bin/.gitignore mode change 100644 => 100755 src/mycompiler/SyntaxTreeNode.java mode change 100644 => 100755 src/mycompiler/mybytecode/ClassFileMember.java mode change 100644 => 100755 src/mycompiler/myclass/Constructor.java mode change 100644 => 100755 src/mycompiler/myclass/Field.java mode change 100644 => 100755 src/mycompiler/myclass/FieldDeclaration.java mode change 100644 => 100755 src/mycompiler/myclass/Generic.java mode change 100644 => 100755 src/mycompiler/myclass/GenericDeclarationList.java mode change 100644 => 100755 src/mycompiler/myparser/BoundedClassIdentifierList.java mode change 100644 => 100755 src/mycompiler/myparser/GenericVarDeclarationList.java mode change 100644 => 100755 src/mycompiler/myparser/JavaLexer.java mode change 100644 => 100755 src/mycompiler/myparser/JavaParser.java mode change 100644 => 100755 src/mycompiler/mystatement/LambdaParameter.java mode change 100644 => 100755 src/typinferenz/FunNInterface.java mode change 100644 => 100755 src/typinferenz/FunNMethod.java mode change 100644 => 100755 src/typinferenz/GenericTypeInsertable.java mode change 100644 => 100755 src/typinferenz/TIPConstraints.java mode change 100644 => 100755 src/typinferenz/TypeInsertable.java mode change 100644 => 100755 src/typinferenz/assumptions/Assumption.java mode change 100644 => 100755 src/typinferenz/assumptions/ClassAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/ConstructorAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/FieldAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/GenericVarAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/LocalVarAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/MethodAssumption.java mode change 100644 => 100755 src/typinferenz/assumptions/ParameterAssumption.java mode change 100644 => 100755 src/typinferenz/exceptions/DebugException.java mode change 100644 => 100755 src/typinferenz/exceptions/ParserError.java mode change 100644 => 100755 src/typinferenz/typedeployment/GenericTypeInsertPoint.java mode change 100644 => 100755 src/typinferenz/typedeployment/SourcePatchPoint.java mode change 100644 => 100755 src/typinferenz/typedeployment/TypeInsertPoint.java mode change 100644 => 100755 src/typinferenz/typedeployment/TypeInsertSet.java mode change 100644 => 100755 test/bytecode/BytecodeTester.java mode change 100644 => 100755 test/bytecode/EmptyClassTest.java mode change 100644 => 100755 test/bytecode/FieldTest.jav mode change 100644 => 100755 test/bytecode/GeneralTest.java mode change 100644 => 100755 test/bytecode/MethodTest.java mode change 100644 => 100755 test/mycompiler/test/lambda/GenericParameterTest.jav mode change 100644 => 100755 test/mycompiler/test/lambda/GenericParameterTest.java mode change 100644 => 100755 test/mycompiler/test/lambda/TestInterface.jav mode change 100644 => 100755 test/mycompiler/test/lambda/TestInterface.java mode change 100644 => 100755 test/mycompiler/test/lambda/testResults/LambdaTest.log mode change 100644 => 100755 test/parser/BoundedParameter.jav mode change 100644 => 100755 test/parser/FieldInitializationTest.jav mode change 100644 => 100755 test/parser/GeneralParserTest.java mode change 100644 => 100755 test/parser/GenericFieldVarTest.jav mode change 100644 => 100755 test/parser/ImportTest.jav mode change 100644 => 100755 test/plugindevelopment/InsertSingleTypeTest.java mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/Id.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/MatrixWhile.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/Matrix_lambda.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/MethodId.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/MethodUse.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/OL3.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/Plus1.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/Tester.java mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav mode change 100644 => 100755 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav mode change 100644 => 100755 test/plugindevelopment/MethodTypeInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/MethodTypeInsertTest.java mode change 100644 => 100755 test/plugindevelopment/MethodTypeInsertTestSolution.jav mode change 100644 => 100755 test/plugindevelopment/ParameterInsertTest.java mode change 100644 => 100755 test/plugindevelopment/ParameterTypeInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/ParameterTypeInsertTestSolution.jav mode change 100644 => 100755 test/plugindevelopment/SingleTypeInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/SyntaxTreeTests.java mode change 100644 => 100755 test/plugindevelopment/TRMEqualTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertSetEqualTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertSetEqualTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTester.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/FunNInsertTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest2.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/IntTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/IntTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest1.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest1.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest10.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest10.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest11.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest11.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest12.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest12.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest13.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest13.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest14.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest14.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest15.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest15.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest2.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest3.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest3.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest4.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest4.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest5.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest5.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest6.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest6.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest7.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest7.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest8.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest8.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest9.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest9.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/Recursive.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/Recursive2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ReursiveTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ReursiveTest2.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/Test1.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/Test2.jav mode change 100644 => 100755 test/plugindevelopment/VariableTypeInsertTest.jav mode change 100644 => 100755 test/plugindevelopment/VariableTypeInsertTest.java mode change 100644 => 100755 test/plugindevelopment/VariableTypeInsertTestSolution.jav mode change 100644 => 100755 test/syntaxTree/NodeEqualTest.jav mode change 100644 => 100755 test/syntaxTree/NodeEqualTest.java delete mode 100755 tools/JLex_neu.jar diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/README.me b/README.me old mode 100644 new mode 100755 diff --git a/Readme.md b/Readme.md old mode 100644 new mode 100755 diff --git a/bin/.gitignore b/bin/.gitignore old mode 100644 new mode 100755 diff --git a/src/mycompiler/SyntaxTreeNode.java b/src/mycompiler/SyntaxTreeNode.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/mybytecode/ClassFileMember.java b/src/mycompiler/mybytecode/ClassFileMember.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myclass/Constructor.java b/src/mycompiler/myclass/Constructor.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myclass/Field.java b/src/mycompiler/myclass/Field.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myclass/FieldDeclaration.java b/src/mycompiler/myclass/FieldDeclaration.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myclass/Generic.java b/src/mycompiler/myclass/Generic.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myclass/GenericDeclarationList.java b/src/mycompiler/myclass/GenericDeclarationList.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myparser/BoundedClassIdentifierList.java b/src/mycompiler/myparser/BoundedClassIdentifierList.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myparser/GenericVarDeclarationList.java b/src/mycompiler/myparser/GenericVarDeclarationList.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myparser/JavaLexer.java b/src/mycompiler/myparser/JavaLexer.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/myparser/JavaParser.java b/src/mycompiler/myparser/JavaParser.java old mode 100644 new mode 100755 diff --git a/src/mycompiler/mystatement/LambdaParameter.java b/src/mycompiler/mystatement/LambdaParameter.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/FunNInterface.java b/src/typinferenz/FunNInterface.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/FunNMethod.java b/src/typinferenz/FunNMethod.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/GenericTypeInsertable.java b/src/typinferenz/GenericTypeInsertable.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/JavaCodeResult.java b/src/typinferenz/JavaCodeResult.java index 4fa8ebac..4ec7160c 100755 --- a/src/typinferenz/JavaCodeResult.java +++ b/src/typinferenz/JavaCodeResult.java @@ -56,7 +56,11 @@ public class JavaCodeResult{ @Override public boolean equals(Object obj){ - throw new NotImplementedException(); + if(!(obj instanceof JavaCodeResult))return false; + JavaCodeResult equals = (JavaCodeResult)obj; + if(!equals.getJavaCode().equals(this.getJavaCode()))return false; + if(!equals.getUnresolvedTPH().equals(this.getUnresolvedTPH()))return false; + return true; } } diff --git a/src/typinferenz/TIPConstraints.java b/src/typinferenz/TIPConstraints.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/TypeInsertable.java b/src/typinferenz/TypeInsertable.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/Assumption.java b/src/typinferenz/assumptions/Assumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/ClassAssumption.java b/src/typinferenz/assumptions/ClassAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/ConstructorAssumption.java b/src/typinferenz/assumptions/ConstructorAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/FieldAssumption.java b/src/typinferenz/assumptions/FieldAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/GenericVarAssumption.java b/src/typinferenz/assumptions/GenericVarAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/LocalVarAssumption.java b/src/typinferenz/assumptions/LocalVarAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/MethodAssumption.java b/src/typinferenz/assumptions/MethodAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/assumptions/ParameterAssumption.java b/src/typinferenz/assumptions/ParameterAssumption.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/exceptions/DebugException.java b/src/typinferenz/exceptions/DebugException.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/exceptions/ParserError.java b/src/typinferenz/exceptions/ParserError.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/typedeployment/GenericTypeInsertPoint.java b/src/typinferenz/typedeployment/GenericTypeInsertPoint.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/typedeployment/SourcePatchPoint.java b/src/typinferenz/typedeployment/SourcePatchPoint.java old mode 100644 new mode 100755 diff --git a/src/typinferenz/typedeployment/TypeInsertPoint.java b/src/typinferenz/typedeployment/TypeInsertPoint.java old mode 100644 new mode 100755 index 4e6c5d75..a00258b1 --- a/src/typinferenz/typedeployment/TypeInsertPoint.java +++ b/src/typinferenz/typedeployment/TypeInsertPoint.java @@ -40,7 +40,7 @@ public class TypeInsertPoint extends SourcePatchPoint { this.resultSet = resultSet; this.node = insertNode; } - + /** * Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein. * @param fileContent - der Quelltext diff --git a/src/typinferenz/typedeployment/TypeInsertSet.java b/src/typinferenz/typedeployment/TypeInsertSet.java old mode 100644 new mode 100755 diff --git a/test/bytecode/BytecodeTester.java b/test/bytecode/BytecodeTester.java old mode 100644 new mode 100755 diff --git a/test/bytecode/EmptyClassTest.java b/test/bytecode/EmptyClassTest.java old mode 100644 new mode 100755 diff --git a/test/bytecode/FieldTest.jav b/test/bytecode/FieldTest.jav old mode 100644 new mode 100755 diff --git a/test/bytecode/GeneralTest.java b/test/bytecode/GeneralTest.java old mode 100644 new mode 100755 diff --git a/test/bytecode/MethodTest.java b/test/bytecode/MethodTest.java old mode 100644 new mode 100755 diff --git a/test/mycompiler/test/lambda/GenericParameterTest.jav b/test/mycompiler/test/lambda/GenericParameterTest.jav old mode 100644 new mode 100755 diff --git a/test/mycompiler/test/lambda/GenericParameterTest.java b/test/mycompiler/test/lambda/GenericParameterTest.java old mode 100644 new mode 100755 diff --git a/test/mycompiler/test/lambda/TestInterface.jav b/test/mycompiler/test/lambda/TestInterface.jav old mode 100644 new mode 100755 diff --git a/test/mycompiler/test/lambda/TestInterface.java b/test/mycompiler/test/lambda/TestInterface.java old mode 100644 new mode 100755 diff --git a/test/mycompiler/test/lambda/testResults/LambdaTest.log b/test/mycompiler/test/lambda/testResults/LambdaTest.log old mode 100644 new mode 100755 diff --git a/test/parser/BoundedParameter.jav b/test/parser/BoundedParameter.jav old mode 100644 new mode 100755 diff --git a/test/parser/FieldInitializationTest.jav b/test/parser/FieldInitializationTest.jav old mode 100644 new mode 100755 diff --git a/test/parser/GeneralParserTest.java b/test/parser/GeneralParserTest.java old mode 100644 new mode 100755 diff --git a/test/parser/GenericFieldVarTest.jav b/test/parser/GenericFieldVarTest.jav old mode 100644 new mode 100755 diff --git a/test/parser/ImportTest.jav b/test/parser/ImportTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/InsertSingleTypeTest.java b/test/plugindevelopment/InsertSingleTypeTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/Id.jav b/test/plugindevelopment/MartinTestCases/Id.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/MatrixWhile.jav b/test/plugindevelopment/MartinTestCases/MatrixWhile.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/MethodId.jav b/test/plugindevelopment/MartinTestCases/MethodId.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav b/test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/MethodUse.jav b/test/plugindevelopment/MartinTestCases/MethodUse.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/OL3.jav b/test/plugindevelopment/MartinTestCases/OL3.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/Plus1.jav b/test/plugindevelopment/MartinTestCases/Plus1.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav b/test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/Tester.java b/test/plugindevelopment/MartinTestCases/Tester.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MethodTypeInsertTest.jav b/test/plugindevelopment/MethodTypeInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MethodTypeInsertTest.java b/test/plugindevelopment/MethodTypeInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/MethodTypeInsertTestSolution.jav b/test/plugindevelopment/MethodTypeInsertTestSolution.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/ParameterInsertTest.java b/test/plugindevelopment/ParameterInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/ParameterTypeInsertTest.jav b/test/plugindevelopment/ParameterTypeInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/ParameterTypeInsertTestSolution.jav b/test/plugindevelopment/ParameterTypeInsertTestSolution.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/SingleTypeInsertTest.jav b/test/plugindevelopment/SingleTypeInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/SyntaxTreeTests.java b/test/plugindevelopment/SyntaxTreeTests.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TRMEqualTest.java b/test/plugindevelopment/TRMEqualTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.jav b/test/plugindevelopment/TypeInsertSetEqualTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.java b/test/plugindevelopment/TypeInsertSetEqualTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java b/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.jav b/test/plugindevelopment/TypeInsertTests/ImportTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.java b/test/plugindevelopment/TypeInsertTests/ImportTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.java b/test/plugindevelopment/TypeInsertTests/ImportTest2.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.jav b/test/plugindevelopment/TypeInsertTests/IntTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.java b/test/plugindevelopment/TypeInsertTests/IntTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest1.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.java b/test/plugindevelopment/TypeInsertTests/LambdaTest10.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.java b/test/plugindevelopment/TypeInsertTests/LambdaTest11.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest12.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest12.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest12.java b/test/plugindevelopment/TypeInsertTests/LambdaTest12.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest13.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest13.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest13.java b/test/plugindevelopment/TypeInsertTests/LambdaTest13.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest14.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest14.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest14.java b/test/plugindevelopment/TypeInsertTests/LambdaTest14.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest15.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest15.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest15.java b/test/plugindevelopment/TypeInsertTests/LambdaTest15.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.java b/test/plugindevelopment/TypeInsertTests/LambdaTest3.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.java b/test/plugindevelopment/TypeInsertTests/LambdaTest5.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest6.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest6.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest6.java b/test/plugindevelopment/TypeInsertTests/LambdaTest6.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest7.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest7.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest7.java b/test/plugindevelopment/TypeInsertTests/LambdaTest7.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest8.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest8.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest8.java b/test/plugindevelopment/TypeInsertTests/LambdaTest8.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest9.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest9.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest9.java b/test/plugindevelopment/TypeInsertTests/LambdaTest9.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java b/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/Recursive.jav b/test/plugindevelopment/TypeInsertTests/Recursive.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/Recursive2.jav b/test/plugindevelopment/TypeInsertTests/Recursive2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/Test1.jav b/test/plugindevelopment/TypeInsertTests/Test1.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/Test2.jav b/test/plugindevelopment/TypeInsertTests/Test2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/VariableTypeInsertTest.jav b/test/plugindevelopment/VariableTypeInsertTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/VariableTypeInsertTest.java b/test/plugindevelopment/VariableTypeInsertTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/VariableTypeInsertTestSolution.jav b/test/plugindevelopment/VariableTypeInsertTestSolution.jav old mode 100644 new mode 100755 diff --git a/test/syntaxTree/NodeEqualTest.jav b/test/syntaxTree/NodeEqualTest.jav old mode 100644 new mode 100755 diff --git a/test/syntaxTree/NodeEqualTest.java b/test/syntaxTree/NodeEqualTest.java old mode 100644 new mode 100755 diff --git a/tools/JLex_neu.jar b/tools/JLex_neu.jar deleted file mode 100755 index df8053ff7a66c08c287218533ee37706aa3de244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53587 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 Date: Thu, 20 Nov 2014 02:13:01 +0100 Subject: [PATCH 003/186] Fehler in Karthesischem Produkt behoben --- .../typeinference/KarthesischesProdukt.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 48db9ff3..09418a0e 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -5,7 +5,17 @@ import java.util.Vector; public class KarthesischesProdukt { public Vector> berechneKarthesischesProdukt(Vector> m1){ - if(m1.size()<2)return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + if(m1.size()==0)return m1; + if(m1.size()==1){ + Vector> ret = new Vector>(); + for(M o : m1.firstElement()){ + Vector v = new Vector(); + v.add(o); + ret.add(v); + } + return ret; + //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + } return berechneKarthesischesProdukt(m1, null); } From aca4ee05a0cb53b37a2e28930ba18c2cc91349e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 5 Dec 2014 16:38:32 +0100 Subject: [PATCH 004/186] Bytecode ergaenzt --- src/mycompiler/mybytecode/CodeAttribute.java | 12 ++++++------ src/mycompiler/mybytecode/SignatureInfo.java | 12 ++++++------ tools/jay.darwin | Bin 112574 -> 93044 bytes 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/mycompiler/mybytecode/CodeAttribute.java b/src/mycompiler/mybytecode/CodeAttribute.java index 86997fdc..69031ebf 100755 --- a/src/mycompiler/mybytecode/CodeAttribute.java +++ b/src/mycompiler/mybytecode/CodeAttribute.java @@ -252,7 +252,7 @@ public class CodeAttribute extends Attribute // ino.method.codegen.21757.definition - public void codegen(ClassFile classfile, FileOutputStream f) + public void codegen(ClassFile classfile, OutputStream f) throws JVMCodeException, IOException // ino.end // ino.method.codegen.21757.body @@ -1090,11 +1090,11 @@ public class CodeAttribute extends Attribute } // ino.end - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException { - throw new NotImplementedException(); - } +// @Override +// public void codegen(ClassFile classfile, OutputStream f) +// throws JVMCodeException, IOException { +// throw new NotImplementedException(); +// } } // ino.end diff --git a/src/mycompiler/mybytecode/SignatureInfo.java b/src/mycompiler/mybytecode/SignatureInfo.java index a7d2e6c1..1e4f9a30 100755 --- a/src/mycompiler/mybytecode/SignatureInfo.java +++ b/src/mycompiler/mybytecode/SignatureInfo.java @@ -183,7 +183,7 @@ public class SignatureInfo extends Attribute // ino.end // ino.method.codegen.22987.definition - public void codegen(ClassFile classfile, FileOutputStream f) + public void codegen(ClassFile classfile, OutputStream f) throws JVMCodeException, IOException // ino.end // ino.method.codegen.22987.body @@ -263,11 +263,11 @@ public class SignatureInfo extends Attribute } // ino.end - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException { - throw new NotImplementedException(); - } +// @Override +// public void codegen(ClassFile classfile, OutputStream f) +// throws JVMCodeException, IOException { +// throw new NotImplementedException(); +// } } // ino.end diff --git a/tools/jay.darwin b/tools/jay.darwin index 00114230723eee7959d663c02db8b9fe15f2dda7..79f44cb2ac01ee1970a22bfed8f786416a888de3 100755 GIT binary patch literal 93044 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 U{EOzy$)7)WUjDpGDRbxf-^usIO8@`> literal 112574 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 Date: Fri, 5 Dec 2014 17:11:22 +0100 Subject: [PATCH 005/186] =?UTF-8?q?Testf=C3=A4lle=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/.gitignore | 4 -- src/de/dhbwstuttgart/parser/JavaParser.java | 14 +++--- src/de/dhbwstuttgart/parser/JavaParser.jay | 16 +++---- .../dhbwstuttgart/syntaxtree/SourceFile.java | 4 +- .../statement/LambdaExpression.java | 6 ++- .../syntaxtree/type/ExtendsWildcardType.java | 2 + .../syntaxtree/type/RefType.java | 8 +++- .../dhbwstuttgart/syntaxtree/type/Type.java | 2 +- .../assumptions/TypeAssumptions.java | 3 ++ .../KarthesischesProduktTest.java | 43 +++++++++++++++++++ .../TypeInsertTests/WildcardTestForLambda.jav | 7 +++ .../WildcardTestForLambda.java | 19 ++++++++ 12 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 test/plugindevelopment/KarthesischesProduktTest.java create mode 100644 test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.jav create mode 100644 test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java diff --git a/bin/.gitignore b/bin/.gitignore index 56a30e6a..34ddca33 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,6 +1,2 @@ -/bytecode/ /de/ -/mycompiler/ -/parser/ /plugindevelopment/ -/syntaxTree/ diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 333bcb08..f915c2b2 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -1194,11 +1194,11 @@ case 64: // line 664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*PL 05-07-30 eingefuegt containedTypes ANFANG*/ - RefType RT = new RefType(null,-1); + RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); /*RT.set_UsedId($1);*/ /*RT.setName(RT.get_UsedId().get_Name_1Element());*/ RT.set_ParaList(((UsedId)yyVals[0+yyTop]).get_RealParaList()); - RT.setName(((UsedId)yyVals[0+yyTop]).get_Name_1Element()); + //RT.setName(); containedTypes.addElement(RT); /*PL 05-07-30 eingefuegt containedTypes ENDE*/ @@ -1868,9 +1868,9 @@ case 148: case 149: // line 1239 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - RefType RT = new RefType(null,-1); - RT.set_UsedId(((UsedId)yyVals[0+yyTop])); - RT.setName(RT.get_UsedId().get_Name_1Element()); + RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); + //RT.set_UsedId(((UsedId)yyVals[0+yyTop])); + //RT.setName(RT.get_UsedId().get_Name_1Element()); yyVal=RT; } break; @@ -1940,7 +1940,7 @@ case 155: /*((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() );*/ } UsedId uid = ((UsedId)yyVals[-1+yyTop]); - RefType RT = new RefType(null,uid.getOffset()); + RefType RT = new RefType(uid.getQualifiedName(),null,uid.getOffset()); RT.set_ParaList(uid.get_RealParaList()); RT.setName(uid.getQualifiedName()); @@ -1957,7 +1957,7 @@ case 156: // line 1317 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + ((UsedId)yyVals[0+yyTop]), Section.PARSER); - RefType RT = new RefType(null,((UsedId)yyVals[0+yyTop]).getOffset()); + RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).getQualifiedName().toString(),null,((UsedId)yyVals[0+yyTop]).getOffset()); /*ausgetauscht PL 05-07-30*/ /*RT.set_UsedId($1); */ diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index e9df4020..077e6004 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -663,11 +663,11 @@ modifier : PUBLIC classtype : classorinterfacetype { //PL 05-07-30 eingefuegt containedTypes ANFANG - RefType RT = new RefType(null,-1); + RefType RT = new RefType($1.get_Name_1Element(),null,-1); //RT.set_UsedId($1); //RT.setName(RT.get_UsedId().get_Name_1Element()); RT.set_ParaList($1.get_RealParaList()); - RT.setName($1.get_Name_1Element()); + //RT.setName($1.get_Name_1Element()); containedTypes.addElement(RT); //PL 05-07-30 eingefuegt containedTypes ENDE @@ -1237,9 +1237,9 @@ explicitconstructorinvocation : THIS '(' ')' ';' classtypelist : classtype { - RefType RT = new RefType(null,-1); + RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1); RT.set_UsedId($1); - RT.setName(RT.get_UsedId().get_Name_1Element()); + //RT.setName(RT.get_UsedId().get_Name_1Element()); $$=RT; } | classtypelist ',' classtype @@ -1300,10 +1300,10 @@ referencelongtype : typename parameter //((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() ); } UsedId uid = $1; - RefType RT = new RefType(null,uid.getOffset()); + RefType RT = new RefType(uid.getQualifiedName(),null,uid.getOffset()); RT.set_ParaList(uid.get_RealParaList()); - RT.setName(uid.getQualifiedName()); + //RT.setName(uid.getQualifiedName()); //PL 05-07-30 eingefuegt containedTypes ANFANG @@ -1316,13 +1316,13 @@ referencelongtype : typename parameter referencetype :classorinterfacetype { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + $1, Section.PARSER); - RefType RT = new RefType(null,$1.getOffset()); + RefType RT = new RefType($1.getQualifiedName(),null,$1.getOffset()); //ausgetauscht PL 05-07-30 //RT.set_UsedId($1); //RT.setName(RT.get_UsedId().get_Name_1Element()); RT.set_ParaList($1.get_RealParaList()); - RT.setName($1.getQualifiedName()); + //RT.setName($1.getQualifiedName()); //PL 05-07-30 eingefuegt containedTypes ANFANG diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index d3d35cde..a6e8a699 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -397,7 +397,7 @@ public class SourceFile // Parameter des rechten Typausdrucks des betrachteten Paars extrahieren Vector vPara = ((RefType)(PTypKonst.TA2)).get_ParaList(); - RefType Subst = null; // Substitution + Integer Subst = null; // Substitution int nSubstStelle = 0; inferencelog.debug("nSubstStelleStart" + nSubstStelle + " " + n, Section.FINITECLOSURE); @@ -412,7 +412,7 @@ public class SourceFile if( vPara.elementAt(nSubstStelle) instanceof RefType && ((RefType)vPara.elementAt(nSubstStelle)).get_ParaList() != null ) { // Typkonstruktor gefunden -> wird nun als Substitution verwendet - Subst = new RefType( (RefType)vPara.elementAt(nSubstStelle) ,-1); + Subst = 1;//new RefType( (RefType)vPara.elementAt(nSubstStelle) ,-1); inferencelog.debug( "Ausgangstyp:" + ((RefType)PTypKonst.TA2).getName() , Section.FINITECLOSURE); inferencelog.debug( "RefType = " + ((RefType)vPara.elementAt(nSubstStelle)).getName() , Section.FINITECLOSURE); break; // Einschraenkung - nur fuer ein RefType wird eine Substitution gesucht diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index f20a6161..20ffdba6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -15,6 +15,7 @@ import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.ParameterList; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.DoubleType; +import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -148,7 +149,10 @@ public class LambdaExpression extends Expr{ this.setType(TypePlaceholder.fresh(this)); //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression - ret.add(new SingleConstraint(new FunN(method_body.getType(), paramTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); + + Type retType = method_body.getType(); + ExtendsWildcardType extRetType = new ExtendsWildcardType(retType.getOffset(), retType); + ret.add(new SingleConstraint(new FunN(extRetType, paramTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index ed154e20..8531ee81 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -1,5 +1,6 @@ package de.dhbwstuttgart.syntaxtree.type; +import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -25,6 +26,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, { super(extendsType.getParent(), offset); this.extendsType = extendsType; + this.name = new JavaClassName(this.toString()); } /** diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 95be24c7..132f751b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -64,7 +64,7 @@ public class RefType extends Type implements IMatchable // ino.method.RefType.26634.definition - public RefType(SyntaxTreeNode parent, int offset) + protected RefType(SyntaxTreeNode parent, int offset) // ino.end // ino.method.RefType.26634.body { @@ -124,7 +124,11 @@ public class RefType extends Type implements IMatchable //this.parameter = null; } - // ino.method.Type2Key.26646.definition + public RefType(JavaClassName jName, SyntaxTreeNode parent, int offset) { + this(jName.toString(), parent, offset); + } + + // ino.method.Type2Key.26646.definition public String Type2Key() // ino.end // ino.method.Type2Key.26646.body diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index fb2240f2..eacb438a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -45,7 +45,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.end // ino.method.Type.26732.definition - public Type(SyntaxTreeNode parent,int offset) + protected Type(SyntaxTreeNode parent,int offset) // ino.end // ino.method.Type.26732.body { diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index ddfa44c7..a0d935fb 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -17,6 +17,7 @@ import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.FunNInterface; import de.dhbwstuttgart.typeinference.FunNMethod; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** @@ -325,6 +326,8 @@ public class TypeAssumptions { return new ConstraintType(ass.getAssumedType()); } } + + if(t.getName() == null)throw new DebugException(t.toString()); //Spezialfälle bei char, int, boolean, .... String name = t.getName().toString(); switch(name){ diff --git a/test/plugindevelopment/KarthesischesProduktTest.java b/test/plugindevelopment/KarthesischesProduktTest.java new file mode 100644 index 00000000..4665f29e --- /dev/null +++ b/test/plugindevelopment/KarthesischesProduktTest.java @@ -0,0 +1,43 @@ +package plugindevelopment; + +import java.util.Vector; + +import org.junit.Test; + +import de.dhbwstuttgart.typeinference.ConstraintPair; +import de.dhbwstuttgart.typeinference.ConstraintType; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.KarthesischesProdukt; +import de.dhbwstuttgart.typeinference.OderConstraint; +import de.dhbwstuttgart.typeinference.SingleConstraint; + +public class KarthesischesProduktTest { + + @Test + public void test(){ + Vector> testV = new Vector<>(); + Vector dummy = new Vector<>(); + dummy.add("1"); + dummy.add("2"); + dummy.add("3"); + testV.add(dummy); + testV.add(dummy); + + ConstraintsSet cs = new ConstraintsSet(); + OderConstraint oc = new OderConstraint(); + //oc.addConstraint(new SingleConstraint(new RefType(""))); + cs.add(oc); + + Vector out = new KarthesischesProdukt().berechneKarthesischesProdukt(testV); + System.out.println(out); + } + +} +class TestConstraintPair extends ConstraintPair{ + + public TestConstraintPair(ConstraintType t1, ConstraintType t2) { + super(t1, t2); + // TODO Auto-generated constructor stub + } + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.jav b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.jav new file mode 100644 index 00000000..c5e8292d --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.jav @@ -0,0 +1,7 @@ +class LambdaTest{ + +methode(){ + return (Integer i)-> i; +} + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java new file mode 100644 index 00000000..04d7872f --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class WildcardTestForLambda { + + private static final String TEST_FILE = "WildcardTestForLambda.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + //mustContain.add("Fun0>> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 4046066b7ccdef28fc615f5b176f2844d394ab5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 5 Dec 2014 17:25:46 +0100 Subject: [PATCH 006/186] Wildcards im Subst im Unify eingefuegt --- .classpath | 2 +- bin/.gitignore | 2 +- .../typeinference/unify/Unify.java | 30 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.classpath b/.classpath index 8031ed71..8ed57022 100755 --- a/.classpath +++ b/.classpath @@ -3,7 +3,7 @@ - + diff --git a/bin/.gitignore b/bin/.gitignore index 56a30e6a..ba369ba7 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,6 +1,6 @@ -/bytecode/ /de/ /mycompiler/ /parser/ /plugindevelopment/ /syntaxTree/ +/bytecode/ diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index d3408e02..3c281407 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2400,6 +2400,36 @@ throws MatchException return true; } } + //Wildcard ergänzt PL 12-12-05 + if ( T instanceof ExtendsWildcardType ) + { + Type Temp = ((ExtendsWildcardType) T).get_ExtendsType(); + if( Temp instanceof TypePlaceholder ) + { + + if( Temp.getName().equals(a.getName()) ) + { + // Typvariable ersetzen + ((ExtendsWildcardType) T).SetWildcardType(o); + return true; + } + } + } + + if ( T instanceof SuperWildcardType ) + { + Type Temp = ((SuperWildcardType) T).get_SuperType(); + if( Temp instanceof TypePlaceholder ) + { + + if( Temp.getName().equals(a.getName()) ) + { + // Typvariable ersetzen + ((SuperWildcardType) T).SetWildcardType(o); + return true; + } + } + } return false; } // ino.end From 5b9cabb3e16331b01071b6a8c97b6bc72f82937f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 5 Dec 2014 17:47:34 +0100 Subject: [PATCH 007/186] Wildcards im Subst im Unify eingefuegt Kommentare --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 3c281407..af749307 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2400,7 +2400,7 @@ throws MatchException return true; } } - //Wildcard ergänzt PL 12-12-05 + //Wildcard ergänzt PL 14-12-05 if ( T instanceof ExtendsWildcardType ) { Type Temp = ((ExtendsWildcardType) T).get_ExtendsType(); @@ -2415,7 +2415,7 @@ throws MatchException } } } - + //Wildcard ergänzt PL 14-12-05 if ( T instanceof SuperWildcardType ) { Type Temp = ((SuperWildcardType) T).get_SuperType(); From e8b03d5717c79ea996af15642b0f7c9ee4abc693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 2 Jan 2015 15:54:59 +0100 Subject: [PATCH 008/186] Pfad in Bytecode/Classfile angepasst --- bin/.gitignore | 4 +++- src/de/dhbwstuttgart/bytecode/ClassFile.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bin/.gitignore b/bin/.gitignore index ba369ba7..a3254800 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,6 +1,8 @@ +/bytecode/ /de/ +/log4j.xml +/log4jTesting.xml /mycompiler/ /parser/ /plugindevelopment/ /syntaxTree/ -/bytecode/ diff --git a/src/de/dhbwstuttgart/bytecode/ClassFile.java b/src/de/dhbwstuttgart/bytecode/ClassFile.java index d5165110..9fc2cd91 100755 --- a/src/de/dhbwstuttgart/bytecode/ClassFile.java +++ b/src/de/dhbwstuttgart/bytecode/ClassFile.java @@ -744,7 +744,8 @@ public class ClassFile // Datei vorbereiten //File file = new File(MyCompiler.getAPI().getOutputDir() - File file = new File ("/Users/pl/forschung/PIZZA+/JVM_Generics/Testfiles/" + File file = new File ("/Users/pl/ResearchPapers/PIZZA+/Intersection_Types/" + //File file = new File ("/Users/pl/ResearchPapers/PIZZA+/JVM_Generics/Testfiles/" + class_name + ".class"); FileOutputStream f = new FileOutputStream(file); From e49a8463b8369f43660bfad133ab8b58736e6cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 2 Jan 2015 16:13:03 +0100 Subject: [PATCH 009/186] merge conlict in bin/.gitignore behoben --- bin/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/.gitignore b/bin/.gitignore index 1431cd5f..fb7b1f33 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -2,3 +2,4 @@ /de/ /plugindevelopment/ /syntaxTree/ +/mycompiler/ From 18c9464a1e2ef4dfc2623b765771d80ff23f497f Mon Sep 17 00:00:00 2001 From: Pluemicke Martin Date: Fri, 2 Jan 2015 16:21:20 +0100 Subject: [PATCH 010/186] Pfad von forschung aus ResearchPapers angepasst --- src/de/dhbwstuttgart/bytecode/ClassFile.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/bytecode/ClassFile.java b/src/de/dhbwstuttgart/bytecode/ClassFile.java index d5165110..9fc2cd91 100755 --- a/src/de/dhbwstuttgart/bytecode/ClassFile.java +++ b/src/de/dhbwstuttgart/bytecode/ClassFile.java @@ -744,7 +744,8 @@ public class ClassFile // Datei vorbereiten //File file = new File(MyCompiler.getAPI().getOutputDir() - File file = new File ("/Users/pl/forschung/PIZZA+/JVM_Generics/Testfiles/" + File file = new File ("/Users/pl/ResearchPapers/PIZZA+/Intersection_Types/" + //File file = new File ("/Users/pl/ResearchPapers/PIZZA+/JVM_Generics/Testfiles/" + class_name + ".class"); FileOutputStream f = new FileOutputStream(file); From f20b978b14ece5815963b6852fe002aa90127b42 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Sun, 4 Jan 2015 19:30:37 +0100 Subject: [PATCH 011/186] Kleine Anpassungen --- bin/.gitignore | 3 -- .../dhbwstuttgart/syntaxtree/SourceFile.java | 2 +- .../statement/LambdaExpression.java | 9 ++++- .../syntaxtree/type/ExtendsWildcardType.java | 2 +- .../syntaxtree/type/SuperWildcardType.java | 33 ++++++++++--------- .../syntaxtree/type/WildcardType.java | 32 ++++++++---------- 6 files changed, 41 insertions(+), 40 deletions(-) diff --git a/bin/.gitignore b/bin/.gitignore index c682e79e..34ddca33 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,5 +1,2 @@ /de/ /plugindevelopment/ -======= -/syntaxTree/ -/bytecode/ diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index a6e8a699..32856c39 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -698,7 +698,7 @@ public class SourceFile retValue = Unify.unify(pairs, finiteClosure); return retValue;}; oderConstraints.filterWrongConstraints(unifier); - //oderConstraints.unifyUndConstraints(unifier); + oderConstraints.unifyUndConstraints(unifier); typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): Vector> xConstraints = new Vector>();// = oderConstraints.getConstraints(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 20ffdba6..eec84a10 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -18,6 +18,7 @@ import de.dhbwstuttgart.syntaxtree.type.DoubleType; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -150,9 +151,15 @@ public class LambdaExpression extends Expr{ //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression + //Die Typen innerhalb von FunN anpassen: + Vector superParamTypes = new Vector<>(); + for(Type pT : paramTypes){ + superParamTypes.add(new SuperWildcardType(pT.getOffset(), pT)); + } Type retType = method_body.getType(); ExtendsWildcardType extRetType = new ExtendsWildcardType(retType.getOffset(), retType); - ret.add(new SingleConstraint(new FunN(extRetType, paramTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); + + ret.add(new SingleConstraint(new FunN(extRetType, superParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 8531ee81..70677904 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -69,7 +69,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, { if(obj instanceof ExtendsWildcardType) { - return this.extendsType.equals(((ExtendsWildcardType)obj).get_ExtendsType()); + return super.equals(obj); } else { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 289154cc..fdeadd18 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -56,22 +56,6 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I return new SuperWildcardType(getOffset(), superType.clone()); } - /** - * Author: Arne Lüdtke
- * Vergleicht mit einem anderen Objekt. - * @param obj - Object to compare. - */ - public boolean equals(Object obj) - { - if(obj instanceof SuperWildcardType) - { - return this.superType.equals(((SuperWildcardType)obj).get_SuperType()); - } - else - { - return false; - } - } /** * Author: Arne Lüdtke
@@ -129,4 +113,21 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I return new JavaCodeResult("? super " + this.superType.printJavaCode(result)); } + /** + * Author: Arne Lüdtke
+ * Vergleicht mit einem anderen Objekt. + * @param obj - Object to compare. + */ + public boolean equals(Object obj) + { + if(obj instanceof SuperWildcardType) + { + return super.equals(obj); + } + else + { + return false; + } + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index 56312b90..f8d07f9a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -42,24 +42,6 @@ public class WildcardType extends Type{ return new WildcardType(this.getParent(), getOffset()); } - /** - * Author: Arne Lüdtke
- * Vergleicht mit einem anderen Objekt. - * @param obj - Object to compare. - */ - public boolean equals(Object obj) - { - //Luar 06-11-29 If Block erstellt, falls weitere Einschränkungen notwendig werden. - if(obj instanceof WildcardType && !(obj instanceof SuperWildcardType || obj instanceof ExtendsWildcardType)) - { - return true; - } - else - { - return false; - } - } - /** * Author: Arne Lüdtke
* Gibt die passende FreshWildcardType Klasse zurück. @@ -93,4 +75,18 @@ public class WildcardType extends Type{ public JavaCodeResult printJavaCode(ResultSet resultSet) { throw new NotImplementedException(); } + + public boolean equals(Object obj) + { + if(obj instanceof WildcardType) + { + return ((WildcardType)obj).GetWildcardType().equals(this.GetWildcardType()); + } + else + { + return false; + } + } + + } From b44584bc7e36128fc740b8300e900f5e416bd8a1 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Sun, 4 Jan 2015 19:34:23 +0100 Subject: [PATCH 012/186] =?UTF-8?q?Tests=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/plugindevelopment/TypeInsertTests/OL.jav | 16 ++++++++++++++++ .../plugindevelopment/TypeInsertTests/OL.java | 17 +++++++++++++++++ .../TypeInsertTests/OverloadingExample.jav | 13 +++++++++++++ .../TypeInsertTests/OverloadingExample.java | 16 ++++++++++++++++ .../TypeInsertTests/OverloadingRecursive.jav | 8 ++++++++ .../TypeInsertTests/OverloadingRecursive.java | 18 ++++++++++++++++++ .../WildcardTestForLambda2.jav | 5 +++++ .../WildcardTestForLambda2.java | 19 +++++++++++++++++++ 8 files changed, 112 insertions(+) create mode 100755 test/plugindevelopment/TypeInsertTests/OL.jav create mode 100644 test/plugindevelopment/TypeInsertTests/OL.java create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingExample.jav create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingExample.java create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingRecursive.jav create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java create mode 100644 test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java diff --git a/test/plugindevelopment/TypeInsertTests/OL.jav b/test/plugindevelopment/TypeInsertTests/OL.jav new file mode 100755 index 00000000..66e95aeb --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OL.jav @@ -0,0 +1,16 @@ +class OL { + + Integer m(Integer x) { return x + x; } + + Boolean m(Boolean x) {return x || x; } +} + +class Main { + + main(x) { + ol; + ol = new OL(); + return ol.m(x); + } + +} diff --git a/test/plugindevelopment/TypeInsertTests/OL.java b/test/plugindevelopment/TypeInsertTests/OL.java new file mode 100644 index 00000000..4e50e174 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OL.java @@ -0,0 +1,17 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class OL { + private static final String TEST_FILE = "OL.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + mustContain.add("Integer main"); + mustContain.add("Boolean main"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingExample.jav b/test/plugindevelopment/TypeInsertTests/OverloadingExample.jav new file mode 100644 index 00000000..5ac198d8 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingExample.jav @@ -0,0 +1,13 @@ +class Example { + test(){ + variable1; + variable2; + variable1 = this; + variable2 = variable1.intValue(); + return variable1.intValue(); + } + + int intValue(){ + return 1; + } +} diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingExample.java b/test/plugindevelopment/TypeInsertTests/OverloadingExample.java new file mode 100644 index 00000000..45088fd7 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingExample.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class OverloadingExample { + private static final String TEST_FILE = "OverloadingExample.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + mustContain.add("Example variable"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.jav b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.jav new file mode 100644 index 00000000..70829c74 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.jav @@ -0,0 +1,8 @@ +class OverloadingRecursive{ + + + m (f) { + f.apply(f); + } +} + diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java new file mode 100644 index 00000000..6c394ab4 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class OverloadingRecursive { + + private static final String TEST_FILE = "OverloadingRecursive.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + //mustContain.add("Fun0>> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.jav b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.jav new file mode 100644 index 00000000..adae1646 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.jav @@ -0,0 +1,5 @@ +class LambdaTest{ + +op = (f) -> f.apply(this); + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java new file mode 100644 index 00000000..c302fbdb --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class WildcardTestForLambda2 { + + private static final String TEST_FILE = "WildcardTestForLambda2.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + //mustContain.add("Fun0>> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 6057bc72a5589e925ba5d17c1a3bc77bb54ff9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 16 Jan 2015 14:03:29 +0100 Subject: [PATCH 013/186] jay.darwin aktualisiert --- tools/jay.darwin | Bin 93044 -> 97480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/jay.darwin b/tools/jay.darwin index 79f44cb2ac01ee1970a22bfed8f786416a888de3..9458450863be50f2a2427ebe132ab6481b48c478 100755 GIT binary patch literal 97480 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 SI7JSkZ(e1NIBLuVivI^bjS)To literal 93044 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 U{EOzy$)7)WUjDpGDRbxf-^usIO8@`> From 7d4009b6ae06f622b1241c07088886763dce5054 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 16 Jan 2015 14:48:20 +0100 Subject: [PATCH 014/186] parser.jay Fehler beheben --- .classpath | 2 +- src/de/dhbwstuttgart/parser/JavaParser.java | 1246 ++++++++--------- src/de/dhbwstuttgart/parser/JavaParser.jay | 27 +- .../syntaxtree/type/ExtendsWildcardType.java | 11 +- .../syntaxtree/type/RefType.java | 6 + .../syntaxtree/type/SuperWildcardType.java | 8 + .../dhbwstuttgart/syntaxtree/type/Type.java | 4 + .../syntaxtree/type/WildcardType.java | 3 +- src/de/dhbwstuttgart/typeinference/Pair.java | 10 + .../GenericTypeInsertPoint.java | 16 +- .../typedeployment/TypeInsertPoint.java | 2 +- .../typedeployment/TypeInsertSet.java | 39 +- 12 files changed, 708 insertions(+), 666 deletions(-) diff --git a/.classpath b/.classpath index 8ed57022..38eed00a 100755 --- a/.classpath +++ b/.classpath @@ -3,7 +3,7 @@ - + diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index f915c2b2..696165f7 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -126,7 +126,6 @@ public Vector testPair = new Vector(); public static final int EOF = 328; public static final int LAMBDAASSIGNMENT = 329; public static final int ENDOFGENERICVARDECLARATION = 330; - public static final int typename = 331; public static final int yyErrorCode = 256; /** thrown for irrecoverable syntax errors and stack overflow. @@ -347,7 +346,6 @@ public Vector testPair = new Vector(); //t "methoddeclarator : IDENTIFIER '(' formalparameterlist ')'", //t "primitivetype : BOOLEAN", //t "primitivetype : numerictype", -//t "referencelongtype : typename parameter", //t "referencetype : classorinterfacetype", //t "variabledeclarator : variabledeclaratorid", //t "blockstatement : localvariabledeclarationstatement", @@ -516,7 +514,7 @@ public Vector testPair = new Vector(); "DIVIDEEQUAL","ANDEQUAL","OREQUAL","XOREQUAL","MODULOEQUAL", "SHIFTLEFTEQUAL","SIGNEDSHIFTRIGHTEQUAL","UNSIGNEDSHIFTRIGHTEQUAL", "BRACE","RELOP","OP","EOF","LAMBDAASSIGNMENT", - "ENDOFGENERICVARDECLARATION","typename", + "ENDOFGENERICVARDECLARATION", }; /** index-checked interface to yyName[]. @@ -683,20 +681,20 @@ public Vector testPair = new Vector(); yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: - // line 248 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 2: - // line 252 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 251 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((SourceFile)yyVals[0+yyTop]).addImports(((ImportDeclarations)yyVals[-1+yyTop])); yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 3: - // line 257 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 256 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ ((SourceFile)yyVals[0+yyTop]).setPackageName(((UsedId)yyVals[-2+yyTop])); @@ -705,7 +703,7 @@ case 3: } break; case 4: - // line 264 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 263 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ ((SourceFile)yyVals[0+yyTop]).setPackageName(((UsedId)yyVals[-1+yyTop])); @@ -713,21 +711,21 @@ case 4: } break; case 5: - // line 270 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 269 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { this.testPair.add(new Pair(((Type)yyVals[-2+yyTop]),((Type)yyVals[-1+yyTop]))); yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 6: - // line 276 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 275 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ yyVal = ((UsedId)yyVals[-1+yyTop]); } break; case 7: - // line 282 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 281 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ImportDeclarations declarations=new ImportDeclarations(); declarations.addElement(((UsedId)yyVals[0+yyTop])); @@ -735,20 +733,20 @@ case 7: } break; case 8: - // line 288 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 287 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ImportDeclarations)yyVals[-1+yyTop]).addElement(((UsedId)yyVals[0+yyTop])); yyVal=((ImportDeclarations)yyVals[-1+yyTop]); } break; case 9: - // line 294 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 293 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[-1+yyTop]); } break; case 10: - // line 299 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 298 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SourceFile Scfile = new SourceFile(); Scfile.addElement(((AClassOrInterface)yyVals[0+yyTop])); @@ -756,39 +754,39 @@ case 10: } break; case 11: - // line 305 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 304 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((SourceFile)yyVals[-1+yyTop]).addElement(((AClassOrInterface)yyVals[0+yyTop])); yyVal=((SourceFile)yyVals[-1+yyTop]); } break; case 12: - // line 311 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 310 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; case 13: - // line 315 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 314 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; case 14: - // line 320 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 319 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Class)yyVals[0+yyTop]); } break; case 15: - // line 324 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 323 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal=((Interface)yyVals[0+yyTop]); } break; case 16: - // line 331 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 330 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name(((Token)yyVals[0+yyTop]).getLexem()); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -796,7 +794,7 @@ case 16: } break; case 17: - // line 338 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 337 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name(((Token)yyVals[0+yyTop]).getLexem()); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -804,7 +802,7 @@ case 17: } break; case 18: - // line 344 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 343 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name("*"); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -812,7 +810,7 @@ case 18: } break; case 19: - // line 352 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 351 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() ); @@ -821,7 +819,7 @@ case 19: } break; case 20: - // line 360 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 359 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Um das hier uebersichtlicher zu halten,*/ /* gibt es einen allumfassenden Konstruktor fuer Class*/ @@ -840,7 +838,7 @@ case 20: } break; case 21: - // line 377 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 376 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset()); this.initContainedTypes(); @@ -848,7 +846,7 @@ case 21: } break; case 22: - // line 383 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -856,7 +854,7 @@ case 22: } break; case 23: - // line 389 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 388 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -864,7 +862,7 @@ case 23: } break; case 24: - // line 396 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 395 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -872,7 +870,7 @@ case 24: } break; case 25: - // line 402 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -880,7 +878,7 @@ case 25: } break; case 26: - // line 408 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); @@ -888,7 +886,7 @@ case 26: } break; case 27: - // line 414 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); @@ -896,7 +894,7 @@ case 27: } break; case 28: - // line 421 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 420 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* HOTI*/ /* Verbindet den Namen eines Interfaces mit einer optionalen Parameterliste*/ @@ -904,13 +902,13 @@ case 28: } break; case 29: - // line 427 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 426 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new InterfaceAndParameter(((Token)yyVals[-3+yyTop]).getLexem(), ((ParaList)yyVals[-1+yyTop])); } break; case 30: - // line 432 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 431 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Hilfskonstrukt, um die Grammatik ueberschaubar zu halten*/ /* Verbindet den Namen einer Klasse mit einer optionalen Parameterliste*/ @@ -918,13 +916,13 @@ case 30: } break; case 31: - // line 438 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 437 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new ClassAndParameter(((Token)yyVals[-3+yyTop]).getLexem(), ((ParaList)yyVals[-1+yyTop])); } break; case 32: - // line 443 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 442 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Token)yyVals[-2+yyTop]).getOffset()); @@ -936,7 +934,7 @@ case 32: } break; case 33: - // line 453 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((Token)yyVals[-2+yyTop]).getOffset()); ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); @@ -947,7 +945,7 @@ case 33: } break; case 34: - // line 462 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 461 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Token)yyVals[-3+yyTop]).getOffset()); ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaVector()); @@ -959,7 +957,7 @@ case 34: } break; case 35: - // line 472 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 471 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((Token)yyVals[-3+yyTop]).getOffset()); ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaVector()); @@ -971,7 +969,7 @@ case 35: } break; case 36: - // line 483 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 482 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); /* #JB# 05.04.2005 */ @@ -984,7 +982,7 @@ case 36: } break; case 37: - // line 494 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 493 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() ); @@ -995,7 +993,7 @@ case 37: } break; case 38: - // line 503 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 502 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); pl.getParalist().addElement(((WildcardType)yyVals[0+yyTop])); @@ -1003,7 +1001,7 @@ case 38: } break; case 39: - // line 509 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 508 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* #JB# 05.04.2005 */ @@ -1017,7 +1015,7 @@ case 39: } break; case 40: - // line 522 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); @@ -1027,14 +1025,14 @@ case 40: } break; case 41: - // line 530 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 529 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParaList)yyVals[-2+yyTop]).getParalist().addElement(((WildcardType)yyVals[0+yyTop])); yyVal=((ParaList)yyVals[-2+yyTop]); } break; case 42: - // line 536 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 535 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Luar 29.11.06 Offset auf -1, da keine Angabe vorhanden*/ WildcardType wc = new WildcardType(null,-1); @@ -1042,34 +1040,34 @@ case 42: } break; case 43: - // line 542 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 541 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ExtendsWildcardType ewc = new ExtendsWildcardType(((Token)yyVals[-1+yyTop]).getOffset(),((RefType)yyVals[0+yyTop])); yyVal = ewc; } break; case 44: - // line 547 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 546 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SuperWildcardType swc = new SuperWildcardType(((Token)yyVals[-1+yyTop]).getOffset(),((RefType)yyVals[0+yyTop])); yyVal = swc; } break; case 45: - // line 553 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 552 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ClassBody CB = new ClassBody(); yyVal = CB; } break; case 46: - // line 559 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((ClassBody)yyVals[-1+yyTop]); } break; case 47: - // line 564 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 563 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Modifiers Mod = new Modifiers(); Mod.addModifier(((Modifier)yyVals[0+yyTop])); @@ -1077,20 +1075,20 @@ case 47: } break; case 48: - // line 570 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 569 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Modifiers)yyVals[-1+yyTop]).addModifier(((Modifier)yyVals[0+yyTop])); yyVal = ((Modifiers)yyVals[-1+yyTop]); } break; case 49: - // line 576 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 575 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((UsedId)yyVals[0+yyTop]); } break; case 50: - // line 581 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 580 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceList il = new InterfaceList(); @@ -1099,27 +1097,27 @@ case 50: } break; case 51: - // line 588 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 587 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceList)yyVals[-2+yyTop]).addInterface(((UsedId)yyVals[0+yyTop])); yyVal = ((InterfaceList)yyVals[-2+yyTop]); } break; case 52: - // line 594 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 593 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal = new InterfaceBody(); } break; case 53: - // line 599 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 598 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((InterfaceBody)yyVals[-1+yyTop]); } break; case 54: - // line 606 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 605 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceList il = new InterfaceList(); @@ -1128,14 +1126,14 @@ case 54: } break; case 55: - // line 613 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 612 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceList)yyVals[-2+yyTop]).addInterface(((UsedId)yyVals[0+yyTop])); yyVal = ((InterfaceList)yyVals[-2+yyTop]); } break; case 56: - // line 620 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 619 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ClassBody CB = new ClassBody(); CB.addField( ((Field)yyVals[0+yyTop]) ); @@ -1143,62 +1141,62 @@ case 56: } break; case 57: - // line 626 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 625 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ClassBody)yyVals[-1+yyTop]).addField(((Field)yyVals[0+yyTop])); yyVal = ((ClassBody)yyVals[-1+yyTop]); } break; case 58: - // line 633 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 632 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Public Pub = new Public(); yyVal=Pub; } break; case 59: - // line 638 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 637 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Protected Pro = new Protected(); yyVal=Pro; } break; case 60: - // line 643 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 642 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Private Pri = new Private(); yyVal=Pri; } break; case 61: - // line 648 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Static Sta = new Static(); yyVal=Sta; } break; case 62: - // line 653 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 652 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Abstract Abs = new Abstract(); yyVal=Abs; } break; case 63: - // line 658 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 657 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Final fin = new Final(); yyVal = fin; } break; case 64: - // line 664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 663 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*PL 05-07-30 eingefuegt containedTypes ANFANG*/ RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); /*RT.set_UsedId($1);*/ /*RT.setName(RT.get_UsedId().get_Name_1Element());*/ RT.set_ParaList(((UsedId)yyVals[0+yyTop]).get_RealParaList()); - //RT.setName(); + /*RT.setName($1.get_Name_1Element());*/ containedTypes.addElement(RT); /*PL 05-07-30 eingefuegt containedTypes ENDE*/ @@ -1206,7 +1204,7 @@ case 64: } break; case 65: - // line 679 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 678 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceBody ib = new InterfaceBody(); @@ -1215,39 +1213,39 @@ case 65: } break; case 66: - // line 686 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 685 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceBody)yyVals[-1+yyTop]).addElement(((Field)yyVals[0+yyTop])); yyVal = ((InterfaceBody)yyVals[-1+yyTop]); } break; case 67: - // line 692 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 691 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interfaces*/ yyVal = ((UsedId)yyVals[0+yyTop]); } break; case 68: - // line 698 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 697 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 69: - // line 703 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 702 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Method)yyVals[0+yyTop]); } break; case 70: - // line 707 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 706 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 71: - // line 713 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 712 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((Vector)yyVals[0+yyTop]) != null) { /*$1.set_ParaList($2.get_ParaList());*/ @@ -1259,7 +1257,7 @@ case 71: } break; case 72: - // line 724 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 723 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Vector tl = new Vector(); tl.add(((Type)yyVals[0+yyTop])); @@ -1267,21 +1265,21 @@ case 72: } break; case 73: - // line 730 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 729 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Vector)yyVals[-2+yyTop]).add(((Type)yyVals[0+yyTop])); yyVal=((Vector)yyVals[-2+yyTop]); } break; case 74: - // line 735 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 734 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Vector)yyVals[-2+yyTop]).add(((WildcardType)yyVals[0+yyTop])); yyVal=((Vector)yyVals[-2+yyTop]); } break; case 75: - // line 740 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 739 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Vector tl = new Vector(); tl.add(((WildcardType)yyVals[0+yyTop])); @@ -1289,42 +1287,42 @@ case 75: } break; case 76: - // line 748 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = null; } break; case 77: - // line 750 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 749 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((Vector)yyVals[-1+yyTop]); } break; case 78: - // line 755 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 754 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interfaces, Spezialform Konstantendef.*/ yyVal = ((Constant)yyVals[0+yyTop]); } break; case 79: - // line 760 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 759 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((Method)yyVals[0+yyTop]); } break; case 80: - // line 765 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 764 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 81: - // line 769 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 768 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Method)yyVals[0+yyTop]); } break; case 82: - // line 774 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 773 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method STAT = new Method(((Token)yyVals[-1+yyTop]).getOffset()); DeclId DST = new DeclId(); @@ -1339,14 +1337,14 @@ case 82: } break; case 83: - // line 788 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 787 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Constructor)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); yyVal = ((Constructor)yyVals[-1+yyTop]); } break; case 84: - // line 793 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 792 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Constructor)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); ((Constructor)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); @@ -1354,7 +1352,7 @@ case 84: } break; case 85: - // line 800 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 799 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ Constant c = new Constant(((Token)yyVals[-3+yyTop]).getLexem(), ((Modifiers)yyVals[-5+yyTop])); @@ -1364,14 +1362,14 @@ case 85: } break; case 86: - // line 809 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal = ((Method)yyVals[-1+yyTop]); } break; case 87: - // line 834 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 833 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration ret = new FieldDeclaration(((DeclId)yyVals[-2+yyTop]).getOffset()); ret.set_DeclId(((DeclId)yyVals[-2+yyTop])); @@ -1380,7 +1378,7 @@ case 87: } break; case 88: - // line 841 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 840 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration ret = new FieldDeclaration(((DeclId)yyVals[0+yyTop]).getOffset()); ret.set_DeclId(((DeclId)yyVals[0+yyTop])); @@ -1388,27 +1386,27 @@ case 88: } break; case 89: - // line 848 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 847 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { GenericDeclarationList ret = new GenericDeclarationList(((GenericVarDeclarationList)yyVals[-1+yyTop]).getElements(),((GenericVarDeclarationList)yyVals[-1+yyTop]).getEndOffset()); yyVal = ret; } break; case 90: - // line 855 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 854 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 91: - // line 860 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 859 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 92: - // line 864 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {/*angefügt von Andreas Stadelmeier*/ ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); @@ -1416,13 +1414,13 @@ case 92: } break; case 93: - // line 871 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 870 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 94: - // line 876 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 875 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->fielddeclaration ...: type " + ((Type)yyVals[-2+yyTop]), Section.PARSER); ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1430,7 +1428,7 @@ case 94: } break; case 95: - // line 883 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 882 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); for(int i=0;i<(((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdVector().size());i++) @@ -1441,27 +1439,27 @@ case 95: } break; case 96: - // line 893 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 892 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); yyVal=((Method)yyVals[-1+yyTop]); } break; case 97: - // line 900 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 899 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block Bl = new Block(); yyVal=Bl; } break; case 98: - // line 906 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 905 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[-1+yyTop]); } break; case 99: - // line 911 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 910 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Constructor CON = new Constructor(null); /*TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen...*/ DeclId DIDCon = new DeclId(); @@ -1471,7 +1469,7 @@ case 99: } break; case 100: - // line 919 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 918 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Constructor CONpara = new Constructor(null); DeclId DIconpara = new DeclId(); @@ -1482,14 +1480,14 @@ case 100: } break; case 101: - // line 929 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 928 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBL = new Block(); yyVal=CBL; } break; case 102: - // line 934 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 933 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBLexpl = new Block(); CBLexpl.set_Statement(((Statement)yyVals[-1+yyTop])); @@ -1497,13 +1495,13 @@ case 102: } break; case 103: - // line 940 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 939 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[-1+yyTop]); } break; case 104: - // line 944 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 943 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBes = new Block(); CBes.set_Statement(((Statement)yyVals[-2+yyTop])); @@ -1515,7 +1513,7 @@ case 104: } break; case 105: - // line 955 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 954 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ExceptionList EL = new ExceptionList(); EL.set_addElem(((RefType)yyVals[0+yyTop])); @@ -1523,13 +1521,13 @@ case 105: } break; case 106: - // line 962 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 961 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((GenericTypeVar)yyVals[0+yyTop]); } break; case 107: - // line 967 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 966 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList p = new ParaList(); p.add_ParaList(((GenericTypeVar)yyVals[0+yyTop])); @@ -1537,20 +1535,20 @@ case 107: } break; case 108: - // line 973 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 972 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParaList)yyVals[-2+yyTop]).add_ParaList(((GenericTypeVar)yyVals[0+yyTop])); yyVal=((ParaList)yyVals[-2+yyTop]); } break; case 109: - // line 980 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 979 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null,((Token)yyVals[0+yyTop]).getOffset()); } break; case 110: - // line 984 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 983 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { BoundedGenericTypeVar gtv=new BoundedGenericTypeVar(((Token)yyVals[-2+yyTop]).getLexem(), ((BoundedClassIdentifierList)yyVals[0+yyTop]),null, ((Token)yyVals[-2+yyTop]).getOffset() ,((BoundedClassIdentifierList)yyVals[0+yyTop]).getEndOffset()); /*gtv.setBounds($3);*/ @@ -1558,7 +1556,7 @@ case 110: } break; case 111: - // line 991 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 990 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Vector vec=new Vector(); vec.addElement(((RefType)yyVals[0+yyTop])); @@ -1567,7 +1565,7 @@ case 111: } break; case 112: - // line 998 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 997 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((BoundedClassIdentifierList)yyVals[-2+yyTop]).addElement(((RefType)yyVals[0+yyTop])); ((BoundedClassIdentifierList)yyVals[-2+yyTop]).addOffsetOff(((RefType)yyVals[0+yyTop])); @@ -1576,7 +1574,7 @@ case 112: } break; case 113: - // line 1006 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1005 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { GenericVarDeclarationList vec=new GenericVarDeclarationList(); vec.addElement(((GenericTypeVar)yyVals[0+yyTop])); @@ -1584,14 +1582,14 @@ case 113: } break; case 114: - // line 1012 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1011 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((GenericVarDeclarationList)yyVals[-2+yyTop]).addElement(((GenericTypeVar)yyVals[0+yyTop])); yyVal=((GenericVarDeclarationList)yyVals[-2+yyTop]); } break; case 115: - // line 1020 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1019 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-2+yyTop])); @@ -1599,14 +1597,14 @@ case 115: } break; case 116: - // line 1026 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1025 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); yyVal=((Method)yyVals[0+yyTop]); } break; case 117: - // line 1031 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1030 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); @@ -1614,7 +1612,7 @@ case 117: } break; case 118: - // line 1037 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1036 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-2+yyTop])); @@ -1623,7 +1621,7 @@ case 118: } break; case 119: - // line 1044 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1043 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((Method)yyVals[-1+yyTop]).set_ExceptionList(((ExceptionList)yyVals[0+yyTop])); @@ -1631,7 +1629,7 @@ case 119: } break; case 120: - // line 1050 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1049 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1640,7 +1638,7 @@ case 120: } break; case 121: - // line 1057 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1056 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1649,7 +1647,7 @@ case 121: } break; case 122: - // line 1064 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1063 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-4+yyTop])); ((Method)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); @@ -1659,7 +1657,7 @@ case 122: } break; case 123: - // line 1072 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1071 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void Voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).setType(Voit); @@ -1667,7 +1665,7 @@ case 123: } break; case 124: - // line 1078 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1077 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); @@ -1676,7 +1674,7 @@ case 124: } break; case 125: - // line 1085 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1084 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyt = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).setType(voyt); @@ -1685,7 +1683,7 @@ case 125: } break; case 126: - // line 1092 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1091 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyd = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); @@ -1695,7 +1693,7 @@ case 126: } break; case 127: - // line 1100 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1099 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void Voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).setType(Voit); @@ -1704,7 +1702,7 @@ case 127: } break; case 128: - // line 1107 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1106 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); @@ -1714,7 +1712,7 @@ case 128: } break; case 129: - // line 1115 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1114 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyt = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).setType(voyt); @@ -1724,7 +1722,7 @@ case 129: } break; case 130: - // line 1123 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1122 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyd = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-4+yyTop])); @@ -1735,14 +1733,14 @@ case 130: } break; case 131: - // line 1133 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1132 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $1.setType(TypePlaceholder.fresh()); */ yyVal=((Method)yyVals[0+yyTop]); } break; case 132: - // line 1138 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1137 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $4.setType(TypePlaceholder.fresh());*/ ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-1+yyTop])); @@ -1750,7 +1748,7 @@ case 132: } break; case 133: - // line 1145 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1144 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-1+yyTop])); /*auskommentiert von Andreas Stadelmeier (a10023) $2.setType(TypePlaceholder.fresh());*/ @@ -1758,7 +1756,7 @@ case 133: } break; case 134: - // line 1151 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1150 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $1.setType(TypePlaceholder.fresh());*/ ((Method)yyVals[-1+yyTop]).set_ExceptionList(((ExceptionList)yyVals[0+yyTop])); @@ -1766,7 +1764,7 @@ case 134: } break; case 135: - // line 1157 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1156 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); /*auskommentiert von Andreas Stadelmeier (a10023) $2.setType(TypePlaceholder.fresh());*/ @@ -1775,31 +1773,31 @@ case 135: } break; case 136: - // line 1166 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1165 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((BaseType)yyVals[0+yyTop]); } break; case 137: - // line 1170 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1169 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((BaseType)yyVals[-2+yyTop]).setArray(true); } break; case 138: - // line 1174 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1173 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((RefType)yyVals[0+yyTop]); } break; case 139: - // line 1178 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1177 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((RefType)yyVals[-2+yyTop]).setArray(true); } break; case 140: - // line 1182 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1181 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration IVD = new FieldDeclaration(((DeclId)yyVals[0+yyTop]).getOffset()); IVD.getDeclIdVector().addElement( ((DeclId)yyVals[0+yyTop]) ); @@ -1808,20 +1806,20 @@ case 140: } break; case 141: - // line 1189 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-2+yyTop]).getDeclIdVector().addElement(((DeclId)yyVals[0+yyTop])); yyVal=((FieldDeclaration)yyVals[-2+yyTop]); } break; case 142: - // line 1195 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1194 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; case 143: - // line 1200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1199 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block Blstat = new Block(); Blstat.set_Statement(((Statement)yyVals[0+yyTop])); @@ -1829,14 +1827,14 @@ case 143: } break; case 144: - // line 1207 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1206 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Block)yyVals[-1+yyTop]).set_Statement(((Statement)yyVals[0+yyTop])); yyVal=((Block)yyVals[-1+yyTop]); } break; case 145: - // line 1213 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1212 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParameterList PL = new ParameterList(); PL.set_AddParameter(((FormalParameter)yyVals[0+yyTop])); @@ -1844,21 +1842,21 @@ case 145: } break; case 146: - // line 1219 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1218 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParameterList)yyVals[-2+yyTop]).set_AddParameter(((FormalParameter)yyVals[0+yyTop])); yyVal = ((ParameterList)yyVals[-2+yyTop]); } break; case 147: - // line 1225 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1224 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This THCON = new This(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); yyVal=THCON; } break; case 148: - // line 1230 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1229 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This THCONargl = new This(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); THCONargl.set_ArgumentList(((ArgumentList)yyVals[-2+yyTop])); @@ -1866,11 +1864,12 @@ case 148: } break; case 149: - // line 1239 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1238 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); - //RT.set_UsedId(((UsedId)yyVals[0+yyTop])); - //RT.setName(RT.get_UsedId().get_Name_1Element()); + /*RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1);*/ + RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); + /*RT.set_UsedId($1);*/ + /*RT.setName(RT.get_UsedId().get_Name_1Element());*/ yyVal=RT; } break; @@ -1931,19 +1930,16 @@ case 154: } break; case 155: - // line 1295 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1296 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - if (((Vector)yyVals[0+yyTop]) != null) { - /*$1.set_ParaList($2.get_ParaList());*/ - ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Vector)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ - /* otth: originale (also diese) Parameterliste retten */ - /*((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() );*/ - } - UsedId uid = ((UsedId)yyVals[-1+yyTop]); - RefType RT = new RefType(uid.getQualifiedName(),null,uid.getOffset()); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + ((UsedId)yyVals[0+yyTop]), Section.PARSER); + RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).getQualifiedName(),null,((UsedId)yyVals[0+yyTop]).getOffset()); - RT.set_ParaList(uid.get_RealParaList()); - RT.setName(uid.getQualifiedName()); + /*ausgetauscht PL 05-07-30*/ + /*RT.set_UsedId($1); */ + /*RT.setName(RT.get_UsedId().get_Name_1Element());*/ + RT.set_ParaList(((UsedId)yyVals[0+yyTop]).get_RealParaList()); + /*RT.setName($1.getQualifiedName());*/ /*PL 05-07-30 eingefuegt containedTypes ANFANG*/ @@ -1954,45 +1950,25 @@ case 155: } break; case 156: - // line 1317 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1318 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + ((UsedId)yyVals[0+yyTop]), Section.PARSER); - RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).getQualifiedName().toString(),null,((UsedId)yyVals[0+yyTop]).getOffset()); - - /*ausgetauscht PL 05-07-30*/ - /*RT.set_UsedId($1); */ - /*RT.setName(RT.get_UsedId().get_Name_1Element());*/ - RT.set_ParaList(((UsedId)yyVals[0+yyTop]).get_RealParaList()); - RT.setName(((UsedId)yyVals[0+yyTop]).getQualifiedName()); - - - /*PL 05-07-30 eingefuegt containedTypes ANFANG*/ - containedTypes.addElement(RT); - /*PL 05-07-30 eingefuegt containedTypes ENDE*/ - - yyVal=RT; + yyVal=((DeclId)yyVals[0+yyTop]); } break; case 157: // line 1339 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((DeclId)yyVals[0+yyTop]); - } - break; -case 158: - // line 1360 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((LocalVarDecl)yyVals[0+yyTop]); } break; -case 159: - // line 1364 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 158: + // line 1343 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 160: - // line 1369 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 159: + // line 1348 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop])); FP.setType(((Type)yyVals[-1+yyTop])); @@ -2000,8 +1976,8 @@ case 160: yyVal=FP; } break; -case 161: - // line 1394 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 160: + // line 1373 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nFunktionsdeklaration mit typlosen Parametern: " + ((DeclId)yyVals[0+yyTop]).name, Section.PARSER); @@ -2020,29 +1996,29 @@ case 161: yyVal=FP; } break; -case 162: - // line 1413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 161: + // line 1392 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ArgumentList AL = new ArgumentList(); AL.expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=AL; } break; -case 163: - // line 1419 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 162: + // line 1398 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ArgumentList)yyVals[-2+yyTop]).expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=((ArgumentList)yyVals[-2+yyTop]); } break; -case 164: - // line 1425 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 163: + // line 1404 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((BaseType)yyVals[0+yyTop]); } break; -case 165: - // line 1430 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 164: + // line 1409 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DeclId DI = new DeclId(); /* #JB# 10.04.2005 */ @@ -2054,62 +2030,62 @@ case 165: yyVal=DI; } break; -case 166: - // line 1442 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 165: + // line 1421 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 167: - // line 1447 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 166: + // line 1426 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((LocalVarDecl)yyVals[-1+yyTop]); } break; -case 168: - // line 1452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 167: + // line 1431 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; +case 168: + // line 1435 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((IfStmt)yyVals[0+yyTop]); + } + break; case 169: - // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1439 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((IfStmt)yyVals[0+yyTop]); } break; case 170: - // line 1460 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((IfStmt)yyVals[0+yyTop]); - } - break; -case 171: - // line 1464 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1443 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((WhileStmt)yyVals[0+yyTop]); } break; -case 172: - // line 1468 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 171: + // line 1447 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ForStmt)yyVals[0+yyTop]); } break; -case 173: - // line 1473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 172: + // line 1452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 174: - // line 1477 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 173: + // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((NewClass)yyVals[0+yyTop]); } break; -case 175: - // line 1482 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 174: + // line 1461 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IntegerType IT = new IntegerType(null); /* #JB# 05.04.2005 */ @@ -2119,8 +2095,8 @@ case 175: yyVal=IT; } break; -case 176: - // line 1491 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 175: + // line 1470 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CharacterType CT = new CharacterType(null); /* #JB# 05.04.2005 */ @@ -2130,8 +2106,8 @@ case 176: yyVal=CT; } break; -case 177: - // line 1501 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 176: + // line 1480 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((Type)yyVals[-1+yyTop]).getOffset(),((Type)yyVals[-1+yyTop]).getVariableLength()); @@ -2140,8 +2116,8 @@ case 177: yyVal = LVD; } break; -case 178: - // line 1512 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 177: + // line 1491 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((FieldDeclaration)yyVals[0+yyTop]).getOffset(),((FieldDeclaration)yyVals[0+yyTop]).getVariableLength()); @@ -2150,32 +2126,32 @@ case 178: yyVal = LVD; } break; -case 179: - // line 1522 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 178: + // line 1501 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 180: - // line 1526 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 179: + // line 1505 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((EmptyStmt)yyVals[0+yyTop]); } break; -case 181: - // line 1530 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 180: + // line 1509 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ExprStmt)yyVals[0+yyTop]); } break; -case 182: - // line 1534 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 181: + // line 1513 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Return)yyVals[0+yyTop]); } break; -case 183: - // line 1539 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 182: + // line 1518 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt Ifst = new IfStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Ifst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2183,8 +2159,8 @@ case 183: yyVal=Ifst; } break; -case 184: - // line 1547 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 183: + // line 1526 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfstElst = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfstElst.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2193,8 +2169,8 @@ case 184: yyVal=IfstElst; } break; -case 185: - // line 1556 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 184: + // line 1535 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whlst = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whlst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2202,8 +2178,8 @@ case 185: yyVal=Whlst; } break; -case 186: - // line 1567 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 185: + // line 1546 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-6+yyTop]).getOffset(),((Expr)yyVals[-6+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-6+yyTop])); @@ -2215,8 +2191,8 @@ case 186: yyVal = Fst; } break; -case 187: - // line 1579 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 186: + // line 1558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2227,8 +2203,8 @@ case 187: yyVal = Fst; } break; -case 188: - // line 1590 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 187: + // line 1569 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2239,8 +2215,8 @@ case 188: yyVal = Fst; } break; -case 189: - // line 1601 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 188: + // line 1580 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-4+yyTop])); @@ -2251,8 +2227,8 @@ case 189: yyVal = Fst; } break; -case 190: - // line 1612 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 189: + // line 1591 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-4+yyTop])); @@ -2262,8 +2238,8 @@ case 190: yyVal = Fst; } break; -case 191: - // line 1622 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 190: + // line 1601 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-3+yyTop]).getOffset(),((Expr)yyVals[-3+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-3+yyTop])); @@ -2273,8 +2249,8 @@ case 191: yyVal = Fst; } break; -case 192: - // line 1632 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 191: + // line 1611 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Fst.set_head_Loop_expr(((Expr)yyVals[-2+yyTop])); @@ -2284,8 +2260,8 @@ case 192: yyVal = Fst; } break; -case 193: - // line 1642 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 192: + // line 1621 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Statement)yyVals[0+yyTop]).getOffset(),((Statement)yyVals[0+yyTop]).getVariableLength()); Fst.set_body_Loop_block(((Statement)yyVals[0+yyTop])); @@ -2294,73 +2270,73 @@ case 193: yyVal = Fst; } break; -case 194: - // line 1651 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 193: + // line 1630 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("conditionalexpression", Section.PARSER); yyVal=((Expr)yyVals[0+yyTop]); } break; -case 195: - // line 1656 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 194: + // line 1635 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 196: - // line 1662 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 195: + // line 1641 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { EmptyStmt Empst = new EmptyStmt(); yyVal=Empst; } break; -case 197: - // line 1668 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 196: + // line 1647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[-1+yyTop]); } break; -case 198: - // line 1673 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 197: + // line 1652 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return ret = new Return(-1,-1); yyVal= ret; } break; -case 199: - // line 1678 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 198: + // line 1657 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return retexp = new Return(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); retexp.set_ReturnExpr(((Expr)yyVals[-1+yyTop])); yyVal=retexp; } break; -case 200: - // line 1685 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 199: + // line 1664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 201: - // line 1689 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 200: + // line 1668 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((IfStmt)yyVals[0+yyTop]); } break; -case 202: - // line 1693 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 201: + // line 1672 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((WhileStmt)yyVals[0+yyTop]); } break; -case 203: - // line 1698 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 202: + // line 1677 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 204: - // line 1704 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 203: + // line 1683 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nParser --> Zuweisung1!\n", Section.PARSER); Assign Ass = new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2386,8 +2362,8 @@ case 204: yyVal=Ass; } break; -case 205: - // line 1729 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 204: + // line 1708 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Assign Ass =new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); LocalOrFieldVar LOFV = new LocalOrFieldVar(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2410,44 +2386,44 @@ case 205: yyVal=Ass; } break; -case 206: - // line 1752 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 205: + // line 1731 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; +case 206: + // line 1735 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; case 207: - // line 1756 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1739 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 208: - // line 1760 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1743 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 209: - // line 1764 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 210: - // line 1768 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 211: - // line 1772 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1751 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 212: - // line 1783 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 211: + // line 1762 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfElno = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfElno.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2456,8 +2432,8 @@ case 212: yyVal=IfElno; } break; -case 213: - // line 1792 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 212: + // line 1771 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whstno = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whstno.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2465,14 +2441,14 @@ case 213: yyVal=Whstno; } break; -case 214: - // line 1800 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 213: + // line 1779 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 215: - // line 1804 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 214: + // line 1783 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LogOr = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); OrOp OrO = new OrOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2483,20 +2459,20 @@ case 215: yyVal=LogOr; } break; -case 216: - // line 1817 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 215: + // line 1796 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 217: - // line 1822 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 216: + // line 1801 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 218: - // line 1826 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 217: + // line 1805 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Lambdabody kann auch nur aus einer Expression bestehen. In diesem Fall wird ein Block erstellt, welcher als einziges Statement ein return statment mit der expression hat.*/ /*Bsp.: Aus der Expression |var=="hallo"| wird: |{return var=="hallo";}|*/ @@ -2506,20 +2482,20 @@ case 218: yyVal=ret; } break; -case 219: - // line 1836 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 218: + // line 1815 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 220: - // line 1840 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 219: + // line 1819 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ParameterList)yyVals[-1+yyTop]); } break; -case 221: - // line 1845 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 220: + // line 1824 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LambdaExpression lambda = new LambdaExpression(/*((ParameSterList)$2).getOffset(),((ParameterList)$2).getVariableLength()*/0,0); if(((ParameterList)yyVals[-2+yyTop])!=null)lambda.setParameterList(((ParameterList)yyVals[-2+yyTop])); @@ -2527,87 +2503,87 @@ case 221: yyVal=lambda; } break; -case 222: - // line 1864 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 221: + // line 1843 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; -case 223: - // line 1869 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 222: + // line 1848 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 224: - // line 1873 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 223: + // line 1852 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { TimesOp TEO = new TimesOp(-1,-1); yyVal=TEO; } break; -case 225: - // line 1878 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 224: + // line 1857 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DivideOp DEO = new DivideOp(-1,-1); yyVal=DEO; } break; -case 226: - // line 1883 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 225: + // line 1862 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ModuloOp MEO = new ModuloOp(-1,-1); yyVal=MEO; } break; -case 227: - // line 1888 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 226: + // line 1867 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PlusOp PEO = new PlusOp(-1,-1); yyVal=PEO; } break; -case 228: - // line 1893 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 227: + // line 1872 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { MinusOp MEO = new MinusOp(-1,-1); yyVal=MEO; } break; -case 229: - // line 1905 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 228: + // line 1884 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreIncExpr PRINC = new PreIncExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRINC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRINC; } break; -case 230: - // line 1912 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 229: + // line 1891 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreDecExpr PRDEC = new PreDecExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRDEC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRDEC; } break; -case 231: - // line 1919 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 230: + // line 1898 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostIncExpr PIE = new PostIncExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PIE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PIE; } break; -case 232: - // line 1926 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 231: + // line 1905 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostDecExpr PDE = new PostDecExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PDE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PDE; } break; -case 233: - // line 1934 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 232: + // line 1913 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M1", Section.PARSER); MethodCall MC = new MethodCall(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2638,8 +2614,8 @@ case 233: yyVal=MC; } break; -case 234: - // line 1964 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 233: + // line 1943 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M2", Section.PARSER); MethodCall MCarg = new MethodCall(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); @@ -2671,8 +2647,8 @@ case 234: yyVal=MCarg; } break; -case 235: - // line 1995 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 234: + // line 1974 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M3", Section.PARSER); MethodCall MCpr = new MethodCall(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); @@ -2692,8 +2668,8 @@ case 235: yyVal=MCpr; } break; -case 236: - // line 2014 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 235: + // line 1993 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M4", Section.PARSER); MethodCall MCPA = new MethodCall(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); @@ -2714,8 +2690,8 @@ case 236: yyVal=MCPA; } break; -case 237: - // line 2037 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 236: + // line 2016 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NC = new NewClass(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); NC.set_UsedId(((UsedId)yyVals[-2+yyTop])); @@ -2724,8 +2700,8 @@ case 237: yyVal=NC; } break; -case 238: - // line 2045 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 237: + // line 2024 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NCarg = new NewClass(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); NCarg.set_UsedId(((UsedId)yyVals[-3+yyTop])); @@ -2735,14 +2711,14 @@ case 238: yyVal=NCarg; } break; -case 239: - // line 2055 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 238: + // line 2034 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 240: - // line 2059 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 239: + // line 2038 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary And = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); AndOp AndO = new AndOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2753,20 +2729,20 @@ case 240: yyVal=And; } break; +case 240: + // line 2054 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; case 241: - // line 2075 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2058 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 242: - // line 2079 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 243: - // line 2083 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2062 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PositivExpr POSEX=new PositivExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryPlus UP= new UnaryPlus(); @@ -2775,8 +2751,8 @@ case 243: yyVal=POSEX; } break; -case 244: - // line 2091 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 243: + // line 2070 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NegativeExpr NEGEX=new NegativeExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryMinus UM=new UnaryMinus(); @@ -2785,20 +2761,20 @@ case 244: yyVal=NEGEX; } break; +case 244: + // line 2078 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; case 245: - // line 2099 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2083 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 246: - // line 2104 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 247: - // line 2108 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2087 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((UsedId)yyVals[0+yyTop]).get_Name().size() > 1) { @@ -2817,38 +2793,38 @@ case 247: } } break; +case 247: + // line 2105 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; case 248: - // line 2126 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2109 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 249: - // line 2130 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2114 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 250: - // line 2135 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2119 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 251: - // line 2140 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 253: - // line 2146 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 252: + // line 2125 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Literal)yyVals[0+yyTop]); } break; -case 254: - // line 2150 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 253: + // line 2129 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This T = new This(((Token)yyVals[0+yyTop]).getOffset(),((Token)yyVals[0+yyTop]).getLexem().length()); UsedId UT = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); @@ -2857,24 +2833,24 @@ case 254: yyVal=T; } break; -case 255: - // line 2171 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 254: + // line 2150 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 256: - // line 2175 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 255: + // line 2154 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 257: - // line 2180 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 256: + // line 2159 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 258: - // line 2182 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 257: + // line 2161 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {NotExpr NE=new NotExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryNot UN=new UnaryNot(); NE.set_UnaryNot(UN); @@ -2882,75 +2858,75 @@ case 258: yyVal=NE; } break; -case 259: - // line 2188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 258: + // line 2167 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((CastExpr)yyVals[0+yyTop]);} break; -case 260: - // line 2190 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 259: + // line 2169 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 262: - // line 2195 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 261: + // line 2174 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {IntLiteral IL = new IntLiteral(); IL.set_Int(((Token)yyVals[0+yyTop]).String2Int()); yyVal = IL; } break; -case 263: - // line 2200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 262: + // line 2179 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {BoolLiteral BL = new BoolLiteral(); BL.set_Bool(((Token)yyVals[0+yyTop]).String2Bool()); yyVal = BL; } break; -case 264: - // line 2204 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 263: + // line 2183 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {CharLiteral CL = new CharLiteral(); CL.set_Char(((Token)yyVals[0+yyTop]).CharInString()); yyVal=CL; } break; -case 265: - // line 2209 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 264: + // line 2188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { StringLiteral ST = new StringLiteral(); ST.set_String(((Token)yyVals[0+yyTop]).get_String()); yyVal=ST; } break; -case 266: - // line 2214 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 265: + // line 2193 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LongLiteral LL = new LongLiteral(); LL.set_Long(((Token)yyVals[0+yyTop]).String2Long()); yyVal = LL; } break; -case 267: - // line 2218 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 266: + // line 2197 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FloatLiteral FL = new FloatLiteral(); FL.set_Float(((Token)yyVals[0+yyTop]).String2Float()); yyVal = FL; } break; -case 268: - // line 2223 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 267: + // line 2202 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DoubleLiteral DL = new DoubleLiteral(); DL.set_Double(((Token)yyVals[0+yyTop]).String2Double()); yyVal = DL; } break; -case 269: - // line 2229 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 268: + // line 2208 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Null NN = new Null(); yyVal=NN; } break; -case 270: - // line 2235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 269: + // line 2214 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CastExpr CaEx=new CastExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); CaEx.set_Type(((BaseType)yyVals[-2+yyTop])); @@ -2958,25 +2934,25 @@ case 270: yyVal=CaEx; } break; -case 271: - // line 2244 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 270: + // line 2223 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; +case 271: + // line 2227 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + } + break; case 272: - // line 2248 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - } - break; -case 273: - // line 2252 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2231 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 274: - // line 2256 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 273: + // line 2235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary EQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); EqualOp EO = new EqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2987,8 +2963,8 @@ case 274: yyVal=EQ; } break; -case 275: - // line 2266 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 274: + // line 2245 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary NEQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); NotEqualOp NEO = new NotEqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2999,14 +2975,14 @@ case 275: yyVal=NEQ; } break; -case 276: - // line 2277 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 275: + // line 2256 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 277: - // line 2281 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 276: + // line 2260 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessOp LOO = new LessOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3017,8 +2993,8 @@ case 277: yyVal=LO; } break; -case 278: - // line 2291 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 277: + // line 2270 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterOp GOO = new GreaterOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3029,8 +3005,8 @@ case 278: yyVal=GO; } break; -case 279: - // line 2301 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 278: + // line 2280 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessEquOp LEO = new LessEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3041,8 +3017,8 @@ case 279: yyVal=LE; } break; -case 280: - // line 2311 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 279: + // line 2290 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterEquOp GEO = new GreaterEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3053,8 +3029,8 @@ case 280: yyVal=GE; } break; -case 281: - // line 2321 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 280: + // line 2300 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { InstanceOf ISO=new InstanceOf(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ISO.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -3062,20 +3038,20 @@ case 281: yyVal=ISO; } break; +case 281: + // line 2308 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; case 282: - // line 2329 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2313 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 283: - // line 2334 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 284: - // line 2338 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2317 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary AD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); PlusOp PO = new PlusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3086,8 +3062,8 @@ case 284: yyVal=AD; } break; -case 285: - // line 2348 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 284: + // line 2327 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MI = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); MinusOp MO = new MinusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3098,14 +3074,14 @@ case 285: yyVal=MI; } break; -case 286: - // line 2359 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 285: + // line 2338 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 287: - // line 2363 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 286: + // line 2342 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary ML = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); TimesOp TO = new TimesOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3116,8 +3092,8 @@ case 287: yyVal=ML; } break; -case 288: - // line 2373 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 287: + // line 2352 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary DV = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); DivideOp DO = new DivideOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3128,8 +3104,8 @@ case 288: yyVal = DV; } break; -case 289: - // line 2383 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 288: + // line 2362 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ModuloOp MO = new ModuloOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3140,7 +3116,7 @@ case 289: yyVal =MD; } break; - // line 3144 "-" + // line 3120 "-" } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; @@ -3186,20 +3162,20 @@ case 289: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 40, 40, 19, 19, 44, 45, 45, 51, 51, 110, 110, 39, 39, - 15, 15, 37, 37, 117, 38, 21, 81, 81, 50, - 50, 104, 104, 36, 22, 79, 47, 82, 82, 82, - 82, 82, 72, 72, 35, 35, 48, 48, 80, 80, - 80, 80, 87, 88, 84, 85, 85, 85, 85, 85, - 85, 85, 85, 70, 70, 90, 78, 91, 91, 83, - 83, 83, 69, 100, 100, 73, 73, 73, 73, 73, - 73, 89, 86, 68, 68, 102, 46, 46, 52, 52, - 71, 103, 101, 101, 101, 101, 101, 101, 74, 75, - 76, 77, 105, 105, 105, 105, 92, 92, 67, 67, - 58, 58, 58, 58, 58, 56, 56, 56, 56, 55, - 66, 66, 54, 54, 54, 54, 57, 57, 57, 65, - 65, 53, 53, 53, 53, 53, 53, 53, 53, 112, - 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, - 62, 61, 60, 60, 60, 59, 59, 59, 59, + 15, 15, 37, 37, 38, 21, 81, 81, 50, 50, + 104, 104, 36, 22, 79, 47, 82, 82, 82, 82, + 82, 72, 72, 35, 35, 48, 48, 80, 80, 80, + 80, 87, 88, 84, 85, 85, 85, 85, 85, 85, + 85, 85, 70, 70, 90, 78, 91, 91, 83, 83, + 83, 69, 100, 100, 73, 73, 73, 73, 73, 73, + 89, 86, 68, 68, 102, 46, 46, 52, 52, 71, + 103, 101, 101, 101, 101, 101, 101, 74, 75, 76, + 77, 105, 105, 105, 105, 92, 92, 67, 67, 58, + 58, 58, 58, 58, 56, 56, 56, 56, 55, 66, + 66, 54, 54, 54, 54, 57, 57, 57, 65, 65, + 53, 53, 53, 53, 53, 53, 53, 53, 112, 64, + 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, + 61, 60, 60, 60, 59, 59, 59, 59, }; protected static final short yyLen [] = { 2, 1, 2, 3, 2, 3, 3, 1, 2, 3, 1, @@ -3217,25 +3193,25 @@ case 289: 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 2, 3, 1, 3, 1, 3, 1, 3, 1, 1, 2, 1, 3, 4, 5, 1, 3, - 3, 4, 1, 1, 2, 1, 1, 1, 1, 2, - 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 5, 7, 5, 9, 8, 8, 8, 7, - 7, 7, 6, 1, 1, 1, 2, 2, 3, 1, - 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, - 1, 7, 5, 1, 3, 1, 1, 1, 2, 3, - 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 3, 4, 5, 6, 4, 5, 1, 3, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 1, 1, 2, 1, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 1, 3, 1, 3, 3, 1, 3, 3, 3, 3, - 3, 1, 1, 3, 3, 1, 3, 3, 3, + 3, 4, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 5, 7, 5, 9, 8, 8, 8, 7, 7, + 7, 6, 1, 1, 1, 2, 2, 3, 1, 1, + 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, + 7, 5, 1, 3, 1, 1, 1, 2, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 3, 4, 5, 6, 4, 5, 1, 3, 1, + 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 2, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + 3, 1, 3, 3, 1, 3, 3, 3, 3, 3, + 1, 1, 3, 3, 1, 3, 3, 3, }; protected static final short yyDefRed [] = { 0, - 62, 153, 176, 0, 63, 175, 60, 59, 58, 0, + 62, 153, 175, 0, 63, 174, 60, 59, 58, 0, 0, 0, 61, 19, 0, 14, 15, 13, 12, 7, - 0, 0, 156, 164, 154, 0, 0, 0, 0, 47, + 0, 0, 155, 163, 154, 0, 0, 0, 0, 47, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 71, 0, 0, 0, 0, 0, 48, 11, 0, 0, 0, 0, 0, 0, 20, 0, @@ -3243,7 +3219,7 @@ case 289: 0, 72, 0, 75, 137, 139, 5, 0, 0, 0, 0, 106, 107, 0, 49, 64, 67, 50, 0, 0, 0, 0, 45, 0, 80, 0, 81, 0, 0, 56, - 68, 0, 0, 0, 157, 0, 0, 0, 70, 0, + 68, 0, 0, 0, 156, 0, 0, 0, 70, 0, 69, 22, 0, 0, 24, 0, 18, 0, 54, 0, 52, 0, 65, 79, 78, 0, 0, 0, 0, 0, 34, 0, 0, 0, 77, 21, 0, 0, 33, 0, @@ -3252,36 +3228,36 @@ case 289: 93, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 26, 51, 29, 53, 66, 0, 86, 0, 55, 43, 44, 73, 74, 23, 0, - 25, 35, 111, 0, 108, 0, 0, 0, 254, 0, - 262, 266, 268, 267, 263, 269, 264, 265, 0, 0, - 0, 196, 97, 0, 0, 140, 0, 0, 179, 0, - 158, 0, 0, 253, 250, 0, 0, 256, 0, 207, - 208, 0, 0, 181, 168, 143, 159, 171, 172, 169, - 170, 180, 182, 206, 0, 0, 125, 151, 161, 0, + 25, 35, 111, 0, 108, 0, 0, 0, 253, 0, + 261, 265, 267, 266, 262, 268, 263, 264, 0, 0, + 0, 195, 97, 0, 0, 140, 0, 0, 178, 0, + 157, 0, 0, 252, 249, 0, 0, 255, 0, 206, + 207, 0, 0, 180, 167, 143, 158, 170, 171, 168, + 169, 179, 181, 205, 0, 0, 125, 151, 160, 0, 145, 0, 0, 89, 0, 0, 0, 0, 149, 0, - 165, 141, 0, 0, 0, 0, 0, 0, 0, 245, - 286, 0, 0, 276, 0, 0, 0, 0, 0, 0, - 0, 194, 173, 87, 241, 242, 248, 249, 174, 195, - 255, 259, 99, 0, 119, 94, 90, 0, 0, 0, + 164, 141, 0, 0, 0, 0, 0, 0, 0, 244, + 285, 0, 0, 275, 0, 0, 0, 0, 0, 0, + 0, 193, 172, 87, 240, 241, 247, 248, 173, 194, + 254, 258, 99, 0, 119, 94, 90, 0, 0, 0, 135, 0, 0, 84, 0, 101, 0, 0, 0, 27, - 0, 0, 0, 198, 0, 0, 0, 229, 230, 219, - 0, 0, 0, 98, 144, 167, 216, 0, 0, 231, - 232, 197, 227, 228, 224, 225, 226, 223, 0, 160, - 0, 152, 114, 129, 120, 92, 0, 0, 0, 243, - 244, 258, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 0, 0, 228, 229, 218, + 0, 0, 0, 98, 144, 166, 215, 0, 0, 230, + 231, 196, 226, 227, 223, 224, 225, 222, 0, 159, + 0, 152, 114, 129, 120, 92, 0, 0, 0, 242, + 243, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 126, 0, 0, 121, 95, 0, 103, 102, 0, 0, - 112, 0, 0, 0, 199, 0, 220, 233, 162, 0, - 217, 221, 218, 0, 204, 205, 146, 150, 0, 0, - 287, 288, 289, 0, 0, 281, 279, 280, 277, 278, + 112, 0, 0, 0, 198, 0, 219, 232, 161, 0, + 216, 220, 217, 0, 203, 204, 146, 150, 0, 0, + 286, 287, 288, 0, 0, 280, 278, 279, 276, 277, 0, 0, 0, 0, 0, 0, 0, 130, 122, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 234, - 0, 237, 0, 270, 147, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 0, 202, 201, 185, - 163, 235, 0, 238, 148, 193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 236, 192, 191, 0, 190, - 0, 0, 0, 0, 0, 184, 189, 188, 187, 0, - 0, 0, 186, 0, 213, 0, 212, + 0, 104, 0, 0, 0, 0, 0, 0, 0, 233, + 0, 236, 0, 269, 147, 0, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 182, 0, 201, 200, 184, + 162, 234, 0, 237, 148, 192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 191, 190, 0, 189, + 0, 0, 0, 0, 0, 183, 188, 187, 186, 0, + 0, 0, 185, 0, 212, 0, 211, }; protected static final short yyDgoto [] = { 15, 16, 17, 68, 122, 123, 124, 59, 35, 40, 125, @@ -3295,7 +3271,7 @@ case 289: 236, 237, 447, 238, 239, 448, 240, 241, 449, 242, 243, 289, 31, 82, 83, 194, 150, 84, 32, 290, 339, 328, 245, 390, 291, 33, 109, 110, 175, 308, - 111, 292, 0, 73, 45, 74, 0, + 111, 292, 0, 73, 45, 74, }; protected static final short yySindex [] = { 2528, 0, 0, 0, -247, 0, 0, 0, 0, 0, -216, @@ -3411,21 +3387,21 @@ case 289: -193, 1843, 127, 0, 0, 0, 0, 0, 0, 0, 0, 361, 290, -71, 546, 0, 0, 625, 0, 114, 0, 0, 0, -139, 179, 353, 0, 594, 530, 0, - 0, 0, 0, 0, 0, 570, 0, + 0, 0, 0, 0, 0, 570, }; - protected static final short yyTable [] = { 254, - 22, 117, 227, 209, 71, 67, 255, 145, 28, 259, - 36, 38, 86, 87, 154, 185, 186, 248, 338, 211, + protected static final short yyTable [] = { 253, + 22, 117, 227, 208, 71, 67, 254, 145, 28, 259, + 36, 38, 86, 87, 154, 185, 186, 248, 338, 210, 149, 58, 87, 293, 193, 307, 325, 13, 22, 19, - 273, 273, 227, 58, 273, 273, 273, 273, 273, 273, - 273, 13, 108, 19, 22, 114, 30, 102, 22, 168, - 400, 129, 273, 34, 131, 127, 22, 22, 22, 320, - 165, 28, 19, 210, 139, 43, 22, 22, 51, 41, - 87, 131, 13, 130, 19, 165, 19, 165, 227, 44, - 113, 123, 116, 108, 14, 133, 87, 273, 102, 48, + 272, 272, 227, 58, 272, 272, 272, 272, 272, 272, + 272, 13, 108, 19, 22, 114, 30, 102, 22, 168, + 400, 129, 272, 34, 131, 127, 22, 22, 22, 320, + 164, 28, 19, 209, 139, 43, 22, 22, 51, 41, + 87, 131, 13, 130, 19, 164, 19, 164, 227, 44, + 113, 123, 116, 108, 14, 133, 87, 272, 102, 48, 119, 230, 330, 331, 22, 257, 167, 148, 138, 22, 46, 41, 104, 132, 39, 72, 129, 19, 22, 28, - 127, 249, 86, 325, 22, 127, 348, 273, 380, 107, + 127, 249, 86, 325, 22, 127, 348, 272, 380, 107, 133, 230, 22, 252, 58, 192, 22, 249, 128, 22, 22, 46, 22, 22, 22, 131, 47, 115, 177, 294, 55, 22, 231, 104, 217, 123, 116, 51, 22, 133, @@ -3436,16 +3412,16 @@ case 289: 183, 30, 57, 160, 381, 187, 322, 258, 64, 2, 398, 115, 43, 3, 262, 30, 118, 323, 161, 250, 317, 317, 232, 340, 22, 6, 44, 233, 231, 86, - 217, 363, 105, 322, 364, 250, 124, 249, 165, 43, + 217, 363, 105, 322, 364, 250, 124, 249, 164, 43, 65, 300, 70, 134, 2, 445, 421, 227, 3, 117, - 2, 406, 14, 165, 3, 165, 391, 233, 128, 81, - 6, 135, 248, 248, 230, 230, 6, 244, 232, 433, - 116, 254, 254, 22, 22, 317, 317, 317, 255, 255, + 2, 406, 14, 164, 3, 164, 391, 233, 128, 81, + 6, 135, 247, 247, 230, 230, 6, 244, 232, 433, + 116, 253, 253, 22, 22, 317, 317, 317, 254, 254, 118, 333, 334, 335, 336, 250, 2, 209, 337, 356, 3, 357, 13, 209, 19, 227, 227, 244, 75, 445, - 445, 453, 6, 233, 445, 273, 227, 284, 273, 273, - 273, 273, 273, 86, 249, 231, 231, 217, 217, 76, - 42, 22, 249, 249, 141, 227, 227, 19, 227, 209, + 445, 453, 6, 233, 445, 272, 227, 284, 272, 272, + 272, 272, 272, 86, 249, 231, 231, 217, 217, 76, + 42, 22, 248, 248, 141, 227, 227, 19, 227, 209, 160, 54, 246, 227, 144, 250, 230, 227, 160, 227, 227, 126, 315, 244, 140, 296, 146, 106, 227, 227, 227, 22, 80, 375, 227, 232, 232, 22, 370, 88, @@ -3459,9 +3435,9 @@ case 289: 244, 244, 404, 405, 182, 231, 231, 230, 230, 230, 267, 387, 52, 230, 341, 297, 231, 264, 388, 309, 265, 311, 266, 160, 2, 2, 383, 384, 3, 3, - 386, 312, 233, 19, 165, 231, 231, 165, 231, 19, + 386, 312, 233, 19, 164, 231, 231, 164, 231, 19, 6, 6, 393, 231, 313, 232, 232, 231, 430, 231, - 231, 429, 165, 19, 19, 316, 232, 151, 231, 231, + 231, 429, 164, 19, 19, 316, 232, 151, 231, 231, 231, 411, 412, 327, 231, 246, 246, 120, 14, 355, 436, 326, 244, 429, 353, 232, 232, 329, 232, 354, 233, 233, 332, 232, 19, 267, 346, 232, 347, 232, @@ -3475,16 +3451,16 @@ case 289: 437, 440, 244, 264, 244, 244, 265, 295, 266, 455, 457, 462, 301, 244, 244, 244, 473, 474, 475, 244, 463, 464, 382, 267, 465, 246, 246, 484, 485, 469, - 264, 486, 487, 265, 471, 266, 246, 247, 247, 480, - 481, 247, 247, 247, 247, 247, 482, 247, 1, 424, - 407, 408, 409, 410, 2, 246, 246, 4, 246, 247, - 247, 222, 247, 246, 3, 178, 88, 246, 177, 246, + 264, 486, 487, 265, 471, 266, 246, 246, 246, 480, + 481, 246, 246, 246, 246, 246, 482, 246, 1, 424, + 407, 408, 409, 410, 2, 246, 246, 4, 246, 246, + 246, 221, 246, 246, 3, 177, 88, 246, 176, 246, 246, 77, 79, 78, 136, 180, 267, 159, 246, 246, 246, 53, 137, 264, 246, 349, 265, 140, 266, 318, - 319, 397, 263, 267, 247, 414, 344, 345, 413, 415, + 319, 397, 263, 267, 246, 414, 344, 345, 413, 415, 264, 432, 416, 265, 199, 266, 417, 195, 395, 118, 201, 202, 203, 204, 205, 206, 207, 208, 14, 396, - 267, 173, 304, 188, 247, 210, 211, 264, 438, 0, + 267, 173, 304, 188, 246, 210, 211, 264, 438, 0, 265, 0, 266, 0, 19, 0, 0, 0, 0, 371, 0, 19, 19, 374, 350, 351, 352, 19, 19, 19, 19, 267, 0, 0, 19, 0, 0, 0, 264, 0, @@ -3499,12 +3475,12 @@ case 289: 0, 266, 0, 0, 0, 136, 0, 0, 112, 115, 199, 0, 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, 14, 263, 136, 0, 267, 0, - 0, 210, 211, 247, 0, 264, 472, 199, 265, 434, + 0, 210, 211, 246, 0, 264, 472, 199, 265, 434, 266, 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, - 0, 176, 247, 247, 247, 247, 247, 247, 247, 247, - 0, 0, 267, 0, 222, 222, 222, 222, 263, 264, - 0, 222, 265, 0, 266, 189, 191, 138, 0, 0, + 0, 176, 246, 246, 246, 246, 246, 246, 246, 246, + 0, 0, 267, 0, 221, 221, 221, 221, 263, 264, + 0, 221, 265, 0, 266, 189, 191, 138, 0, 0, 199, 0, 0, 0, 0, 263, 201, 202, 203, 204, 205, 206, 207, 208, 14, 138, 0, 199, 0, 0, 0, 210, 211, 201, 202, 203, 204, 205, 206, 207, @@ -3536,110 +3512,110 @@ case 289: 0, 76, 0, 0, 76, 0, 0, 199, 0, 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, - 0, 0, 0, 76, 246, 246, 76, 0, 246, 246, - 246, 246, 246, 0, 246, 260, 0, 0, 0, 260, - 260, 260, 260, 260, 260, 260, 246, 246, 0, 246, - 0, 0, 0, 0, 0, 76, 76, 260, 260, 0, - 260, 251, 251, 0, 0, 251, 251, 251, 251, 251, - 251, 251, 247, 247, 0, 0, 247, 247, 247, 247, - 247, 246, 247, 251, 251, 0, 251, 0, 0, 0, - 0, 0, 260, 0, 247, 247, 0, 247, 239, 239, - 0, 0, 239, 239, 239, 239, 239, 239, 239, 214, - 214, 246, 0, 214, 214, 214, 214, 214, 214, 214, - 239, 239, 260, 239, 0, 0, 0, 0, 0, 247, - 0, 214, 214, 0, 214, 203, 203, 0, 0, 203, - 203, 203, 203, 203, 203, 203, 0, 0, 251, 0, - 0, 0, 0, 0, 0, 239, 0, 203, 203, 247, - 203, 0, 0, 261, 0, 0, 214, 261, 261, 261, - 261, 261, 261, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 261, 261, 0, 261, 76, - 76, 0, 203, 0, 76, 76, 214, 0, 0, 0, + 0, 0, 0, 76, 245, 245, 76, 0, 245, 245, + 245, 245, 245, 0, 245, 259, 0, 0, 0, 259, + 259, 259, 259, 259, 259, 259, 245, 245, 0, 245, + 0, 0, 0, 0, 0, 76, 76, 259, 259, 0, + 259, 250, 250, 0, 0, 250, 250, 250, 250, 250, + 250, 250, 246, 246, 0, 0, 246, 246, 246, 246, + 246, 245, 246, 250, 250, 0, 250, 0, 0, 0, + 0, 0, 259, 0, 246, 246, 0, 246, 238, 238, + 0, 0, 238, 238, 238, 238, 238, 238, 238, 213, + 213, 245, 0, 213, 213, 213, 213, 213, 213, 213, + 238, 238, 259, 238, 0, 0, 0, 0, 0, 246, + 0, 213, 213, 0, 213, 202, 202, 0, 0, 202, + 202, 202, 202, 202, 202, 202, 0, 0, 250, 0, + 0, 0, 0, 0, 0, 238, 0, 202, 202, 246, + 202, 0, 0, 260, 0, 0, 213, 260, 260, 260, + 260, 260, 260, 260, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 260, 0, 260, 76, + 76, 0, 202, 0, 76, 76, 213, 0, 0, 0, 0, 76, 0, 0, 0, 76, 76, 0, 76, 76, 76, 76, 76, 76, 76, 0, 76, 0, 0, 0, - 261, 0, 203, 0, 0, 0, 0, 0, 0, 0, + 260, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, - 261, 0, 0, 0, 0, 0, 0, 240, 240, 0, - 246, 240, 240, 240, 240, 240, 240, 240, 0, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 240, - 240, 0, 240, 0, 0, 0, 0, 0, 0, 246, - 246, 246, 246, 246, 246, 246, 246, 251, 0, 0, - 260, 260, 260, 260, 260, 260, 260, 260, 247, 0, - 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 251, 251, 251, 251, - 251, 251, 251, 251, 239, 0, 0, 247, 247, 247, - 247, 247, 247, 247, 247, 214, 0, 0, 0, 0, + 260, 0, 0, 0, 0, 0, 0, 239, 239, 0, + 245, 239, 239, 239, 239, 239, 239, 239, 0, 0, + 0, 259, 0, 0, 0, 0, 0, 0, 0, 239, + 239, 0, 239, 0, 0, 0, 0, 0, 0, 245, + 245, 245, 245, 245, 245, 245, 245, 250, 0, 0, + 259, 259, 259, 259, 259, 259, 259, 259, 246, 0, + 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 250, 250, 250, 250, + 250, 250, 250, 250, 238, 0, 0, 246, 246, 246, + 246, 246, 246, 246, 246, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, - 239, 203, 0, 0, 214, 214, 214, 214, 214, 0, - 214, 214, 0, 0, 0, 0, 252, 252, 0, 0, - 252, 252, 252, 252, 252, 252, 252, 0, 0, 261, - 203, 203, 203, 203, 0, 203, 203, 203, 252, 252, - 0, 252, 0, 0, 215, 215, 0, 0, 215, 215, - 215, 215, 215, 215, 215, 0, 0, 0, 261, 261, - 261, 261, 261, 261, 261, 261, 215, 215, 0, 215, + 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, + 238, 202, 0, 0, 213, 213, 213, 213, 213, 0, + 213, 213, 0, 0, 0, 0, 251, 251, 0, 0, + 251, 251, 251, 251, 251, 251, 251, 0, 0, 260, + 202, 202, 202, 202, 0, 202, 202, 202, 251, 251, + 0, 251, 0, 0, 214, 214, 0, 0, 214, 214, + 214, 214, 214, 214, 214, 0, 0, 0, 260, 260, + 260, 260, 260, 260, 260, 260, 214, 214, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 282, 282, 0, 0, 282, 282, 0, 282, - 0, 282, 282, 0, 0, 0, 0, 0, 0, 0, - 0, 215, 0, 252, 282, 282, 0, 282, 0, 0, - 271, 271, 0, 0, 271, 271, 271, 271, 271, 271, - 271, 0, 1, 240, 0, 0, 0, 0, 49, 0, - 0, 215, 271, 271, 5, 271, 0, 0, 0, 282, + 0, 0, 281, 281, 0, 0, 281, 281, 0, 281, + 0, 281, 281, 0, 0, 0, 0, 0, 0, 0, + 0, 214, 0, 251, 281, 281, 0, 281, 0, 0, + 270, 270, 0, 0, 270, 270, 270, 270, 270, 270, + 270, 0, 1, 239, 0, 0, 0, 0, 49, 0, + 0, 214, 270, 270, 5, 270, 0, 0, 0, 281, 0, 7, 8, 9, 0, 0, 50, 0, 0, 13, - 0, 0, 240, 240, 240, 240, 240, 240, 240, 240, - 0, 0, 0, 0, 0, 0, 0, 271, 222, 282, - 272, 272, 0, 0, 272, 272, 272, 272, 272, 272, - 272, 274, 274, 0, 0, 274, 274, 274, 274, 274, - 274, 274, 272, 272, 0, 272, 0, 271, 76, 0, - 0, 0, 0, 274, 275, 275, 0, 0, 275, 275, - 275, 275, 275, 275, 275, 0, 1, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 275, 272, 5, 0, - 0, 0, 0, 0, 0, 7, 8, 9, 274, 0, - 12, 0, 283, 13, 0, 283, 0, 283, 283, 283, - 283, 0, 252, 0, 0, 0, 0, 272, 0, 0, - 0, 275, 0, 283, 283, 0, 283, 0, 274, 0, + 0, 0, 239, 239, 239, 239, 239, 239, 239, 239, + 0, 0, 0, 0, 0, 0, 0, 270, 221, 281, + 271, 271, 0, 0, 271, 271, 271, 271, 271, 271, + 271, 273, 273, 0, 0, 273, 273, 273, 273, 273, + 273, 273, 271, 271, 0, 271, 0, 270, 76, 0, + 0, 0, 0, 273, 274, 274, 0, 0, 274, 274, + 274, 274, 274, 274, 274, 0, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 274, 271, 5, 0, + 0, 0, 0, 0, 0, 7, 8, 9, 273, 0, + 12, 0, 282, 13, 0, 282, 0, 282, 282, 282, + 282, 0, 251, 0, 0, 0, 0, 271, 0, 0, + 0, 274, 0, 282, 282, 0, 282, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 252, 252, 252, 252, 252, 252, 252, 252, 0, - 0, 275, 0, 0, 0, 0, 0, 0, 283, 284, - 0, 0, 284, 0, 284, 284, 284, 284, 0, 215, - 215, 215, 215, 215, 0, 215, 215, 0, 282, 285, - 284, 284, 285, 284, 285, 285, 285, 285, 283, 0, + 214, 251, 251, 251, 251, 251, 251, 251, 251, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 282, 283, + 0, 0, 283, 0, 283, 283, 283, 283, 0, 214, + 214, 214, 214, 214, 0, 214, 214, 0, 281, 284, + 283, 283, 284, 283, 284, 284, 284, 284, 282, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 285, 0, 285, 0, 0, 271, 282, 282, 282, - 282, 282, 282, 282, 282, 284, 0, 0, 0, 0, - 0, 257, 257, 0, 0, 257, 257, 257, 257, 257, - 257, 257, 0, 0, 0, 285, 271, 271, 0, 271, - 271, 271, 271, 257, 257, 284, 257, 0, 0, 0, + 284, 284, 0, 284, 0, 0, 270, 281, 281, 281, + 281, 281, 281, 281, 281, 283, 0, 0, 0, 0, + 0, 256, 256, 0, 0, 256, 256, 256, 256, 256, + 256, 256, 0, 0, 0, 284, 270, 270, 0, 270, + 270, 270, 270, 256, 256, 283, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 0, 0, 285, 272, 0, 76, 0, - 0, 0, 0, 0, 168, 247, 247, 0, 257, 0, - 0, 222, 222, 222, 222, 0, 0, 0, 222, 0, - 0, 0, 0, 168, 0, 0, 272, 272, 0, 272, - 272, 272, 272, 0, 0, 0, 274, 0, 257, 274, - 274, 274, 274, 274, 0, 0, 0, 0, 0, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 0, 0, 275, 275, 275, 275, 275, 283, 212, 0, + 0, 0, 0, 0, 0, 284, 271, 0, 76, 0, + 0, 0, 0, 0, 167, 246, 246, 0, 256, 0, + 0, 221, 221, 221, 221, 0, 0, 0, 221, 0, + 0, 0, 0, 167, 0, 0, 271, 271, 0, 271, + 271, 271, 271, 0, 0, 0, 273, 0, 256, 273, + 273, 273, 273, 273, 0, 0, 0, 0, 0, 214, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 274, 274, 274, 274, 274, 282, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 0, 168, - 0, 0, 0, 0, 0, 0, 283, 283, 283, 283, - 283, 283, 283, 283, 0, 0, 214, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 167, 0, 167, + 0, 0, 0, 0, 0, 0, 282, 282, 282, 282, + 282, 282, 282, 282, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 3, 284, 212, 0, 0, 0, 0, + 0, 0, 0, 3, 283, 212, 0, 0, 0, 0, 5, 0, 144, 0, 213, 6, 0, 7, 8, 9, - 0, 0, 0, 0, 285, 89, 0, 0, 0, 0, - 0, 0, 90, 284, 284, 284, 284, 284, 284, 284, - 284, 0, 91, 214, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 285, 285, 285, 285, 285, 285, 285, - 285, 0, 212, 0, 0, 0, 0, 257, 0, 144, + 0, 0, 0, 0, 284, 89, 0, 0, 0, 0, + 0, 0, 90, 283, 283, 283, 283, 283, 283, 283, + 283, 0, 91, 214, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 284, 284, 284, 284, 284, 284, 284, + 284, 0, 212, 0, 0, 0, 0, 256, 0, 144, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 0, 0, 0, 0, 0, 257, 257, 257, 257, - 257, 257, 168, 0, 0, 0, 168, 212, 0, 0, - 0, 200, 0, 0, 0, 168, 168, 0, 168, 0, - 0, 0, 0, 0, 0, 0, 144, 168, 324, 0, - 0, 168, 0, 0, 0, 0, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 0, 2, 0, 214, - 0, 3, 168, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 167, 0, 0, 0, 167, 212, 0, 0, + 0, 199, 0, 0, 0, 167, 167, 0, 167, 0, + 0, 0, 0, 0, 0, 0, 144, 167, 324, 0, + 0, 167, 0, 0, 0, 0, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 0, 2, 0, 214, + 0, 3, 167, 167, 0, 0, 0, 0, 0, 0, 196, 197, 0, 6, 0, 0, 0, 0, 212, 446, 450, 144, 198, 377, 0, 0, 199, 0, 0, 0, 456, 200, 201, 202, 203, 204, 205, 206, 207, 208, diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 077e6004..b46ecd39 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -147,7 +147,6 @@ public Vector testPair = new Vector(); %type variabledeclarator %type variabledeclaratorid %type simplename -%type typename %type qualifiedname %type importqualifiedname %type importdeclaration @@ -1237,8 +1236,9 @@ explicitconstructorinvocation : THIS '(' ')' ';' classtypelist : classtype { - RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1); - RT.set_UsedId($1); + //RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1); + RefType RT = new RefType($1.get_Name_1Element(),null,-1); + //RT.set_UsedId($1); //RT.setName(RT.get_UsedId().get_Name_1Element()); $$=RT; } @@ -1291,27 +1291,6 @@ primitivetype :BOOLEAN $$=$1; } -referencelongtype : typename parameter - { - if ($2 != null) { - //$1.set_ParaList($2.get_ParaList()); - $1.set_ParaList($2);//Änderung von Andreas Stadelmeier. Type statt GenericVarType - /* otth: originale (also diese) Parameterliste retten */ - //((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() ); - } - UsedId uid = $1; - RefType RT = new RefType(uid.getQualifiedName(),null,uid.getOffset()); - - RT.set_ParaList(uid.get_RealParaList()); - //RT.setName(uid.getQualifiedName()); - - - //PL 05-07-30 eingefuegt containedTypes ANFANG - containedTypes.addElement(RT); - //PL 05-07-30 eingefuegt containedTypes ENDE - - $$=RT; - } referencetype :classorinterfacetype { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 70677904..5a66e308 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -1,5 +1,7 @@ package de.dhbwstuttgart.syntaxtree.type; +import java.util.Vector; + import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.JavaCodeResult; @@ -132,5 +134,12 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, public JavaCodeResult printJavaCode(ResultSet resultSet) { return new JavaCodeResult("? extends "+this.extendsType.printJavaCode(resultSet)); } - + + @Override + public Vector getInvolvedTypePlaceholder() { + Vector ret = super.getInvolvedTypePlaceholder(); + ret.addAll(this.extendsType.getInvolvedTypePlaceholder()); + return ret; + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 132f751b..85ea2d9d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -762,7 +762,13 @@ public class RefType extends Type implements IMatchable } return ret; } + + @Override + public Type applyResultSet(ResultSet result) { + return super.applyResultSet(result); + } + /** * Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind. * Dabei werden auch die parameter auf SuperWildcardTypes durchsucht. diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index fdeadd18..7a730da6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -1,5 +1,7 @@ package de.dhbwstuttgart.syntaxtree.type; +import java.util.Vector; + import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -130,4 +132,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } } + @Override + public Vector getInvolvedTypePlaceholder() { + Vector ret = super.getInvolvedTypePlaceholder(); + ret.addAll(this.superType.getInvolvedTypePlaceholder()); + return ret; + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index eacb438a..2e0cea92 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -262,6 +262,10 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return new JavaCodeResult(this.name.toString()); } + public Type applyResultSet(ResultSet result){ + return this.clone(); + } + /** * Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind. * @return diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index f8d07f9a..4679dc62 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -1,5 +1,7 @@ package de.dhbwstuttgart.syntaxtree.type; +import java.util.Vector; + import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -88,5 +90,4 @@ public class WildcardType extends Type{ } } - } diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 114bc97e..2973b24f 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -395,5 +395,15 @@ public class Pair if(this.TA2 instanceof TypePlaceholder)ret.add((TypePlaceholder)TA2); return ret; } + + /** + * @return Vector aus TA1 und TA2 + */ + public Vector getTypes(){ + Vector ret = new Vector<>(); + ret.add(this.TA1); + ret.add(this.TA2); + return ret; + } } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index 15db1692..082a8df0 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -103,6 +103,7 @@ class GenericVarPatch { } public String getInsertString(ResultSet rs){ + //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: String ret = ""; Iterator it1 = this.genericVarDeclarations.iterator(); while(it1.hasNext()){ @@ -124,6 +125,14 @@ class GenericVarPatch { GenericVarDeclarationPatch toAdd = new GenericVarDeclarationPatch(tph); if(!this.genericVarDeclarations.contains(toAdd))this.genericVarDeclarations.add(toAdd); } + + public void addTPHs(Vector TPHs) { + for(TypePlaceholder tph: TPHs)this.add(tph); + } + + public void addPairs(Vector pairs) { + for(Pair pair : pairs)this.add(pair); + } } @@ -156,6 +165,10 @@ class GenericVarExtendsDeclarationPatch { if(!(this.genericPair.equals(((GenericVarExtendsDeclarationPatch)o).genericPair)))return false; return true; } + + public String toString(){ + return this.genericPair.toString(); + } } /** @@ -174,7 +187,8 @@ class GenericVarDeclarationPatch { public String getInsertString(ResultSet resultSet){ String ret = ""; if(this.genericPair != null){ - ret += this.genericPair.printJavaCode(resultSet); + //ret += this.genericPair.printJavaCode(resultSet); + ret += this.genericPair.getName().toString(); } return ret; } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java index 33593014..6d870e1d 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java @@ -29,7 +29,7 @@ public class TypeInsertPoint extends SourcePatchPoint { * Dieser Konstruktor erstellt einen TypInsertPoint * @param insertPoint * @param insertNode - muss das gleiche sein wie "insertPoint" - * @param insertType + * @param insertType - der einzusetzende Typ * @param resultSet * @param generics - die generischen Parameter des einzusetzenden Typs */ diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index c80a1b22..1024442b 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -11,6 +11,7 @@ import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.Pair; @@ -64,12 +65,44 @@ public class TypeInsertSet { * @param tpj */ private void insertType(TypeInsertPoint tip, TypePatchJob tpj){ + /* + * Ablauf: + * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln + * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. + * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. + * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) + * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. + */ GenericVarPatch gPatch = new GenericVarPatch();//Set der Einzusetzenden generischen Variablendeklarationen + //Schritt 1: + Vector involvedTPHs = tip.getInsertType().getUnresolvedTPH(resultSet);//.getInvolvedTypePlaceholder(); + //Schritt 2: Vector pairs = new Vector<>(); - for(Pair pair : this.resultSet.getConstraintsFor(tip.getInsertType().getInvolvedTypePlaceholder())){ - gPatch.add(pair); + for(Pair pair : this.resultSet.getConstraintsFor(involvedTPHs)){ + //gPatch.add(pair); //Schritt 6 (Teil 2) pairs.add(pair); } + //Schritt 3: + Vector allTPHs = new Vector<>(); + for(TypePlaceholder tph : involvedTPHs){ + if(!allTPHs.contains(tph)){ + allTPHs.add(tph); + } + } + //TODO: Schritt 4 (Es wird nicht kontrolliert, ob der TPH in dem Kontext schon bekannt ist) + // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) + for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){ + if(!allTPHs.contains(tph)){ + allTPHs.add(tph); + } + } + + //gPatch.addPairs(pairs); + gPatch.addTPHs(allTPHs); + + /* + //TODO: Nur die TPH aus den Paaren entnehmen und Generische Variablen bilden //Kontrollieren ob alle in den Paaren vorhandenen Generischen Variablen in dem Bereich vorkommen: for(Pair pair : pairs){ if(! tip.getInsertNode().seesType(pair.TA2)){ @@ -80,6 +113,8 @@ public class TypeInsertSet { } } } + */ + GenericTypeInsertPoint gip = new GenericTypeInsertPoint(tip.getGenericTypeVarInsertNode(), gPatch, resultSet); typinferenzLog.debug("Erstellter GenericTypeInsertPoint: "+gip, Section.TYPEINFERENCE); tpj.add(tip); From 56c5ec7e182bb03a788e2be904e7e9c2c122e6be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 16 Jan 2015 22:02:05 +0100 Subject: [PATCH 015/186] Bug in subst in Unfify.java gepatched --- src/de/dhbwstuttgart/syntaxtree/SourceFile.java | 2 +- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 32856c39..06981250 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -800,7 +800,7 @@ public class SourceFile Stream> streamconstraintsclone = indexeset.stream().map(x -> x.stream() .map(i -> constraintsClone.elementAt(i)) .collect(Vector::new, Vector::add, Vector::addAll)); -// Vector> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); + //Vector> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); //Schritt 4: Unifikation Vector>> vecunifyResult = diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index af749307..130c4365 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2358,6 +2358,8 @@ throws MatchException { // Parameterliste durchgehen Vector vTemp = ((RefType)T).get_ParaList(); + Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs + //sonst werden nicht alle Elemente der Forschleife durchlaufen for( int i = 0; i < vTemp.size(); i++ ) { Type Temp = (Type)vTemp.elementAt(i); @@ -2374,16 +2376,17 @@ throws MatchException // Typvariable ersetzen Vector vParaListTemp = ((RefType)T).get_ParaList(); vParaListTemp.set( i, o ); // i. Element ersetzen - return true; + ret = true; //GEAENDERT PL 14-01-16 } } if( Temp instanceof RefType ) { Pair PTemp = new Pair( Temp, null); inferencelog.debug(" TV!!!" + PTemp.toString() ); - return Subst( PTemp, 1, a, o, bMitVorbedingung ); + ret = Subst( PTemp, 1, a, o, bMitVorbedingung ); //GEAENDERT PL 14-01-16 } } + return ret; //EINGEFUEGT PL 14-01-16 } // TV substituieren From 6c4090bc4b436b77ebdf9c4acc821f9385704a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sun, 18 Jan 2015 23:22:32 +0100 Subject: [PATCH 016/186] in Subst = in &= umgeaendert --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 130c4365..49f19222 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2376,14 +2376,14 @@ throws MatchException // Typvariable ersetzen Vector vParaListTemp = ((RefType)T).get_ParaList(); vParaListTemp.set( i, o ); // i. Element ersetzen - ret = true; //GEAENDERT PL 14-01-16 + ret &= true; //GEAENDERT PL 14-01-17 } } if( Temp instanceof RefType ) { Pair PTemp = new Pair( Temp, null); inferencelog.debug(" TV!!!" + PTemp.toString() ); - ret = Subst( PTemp, 1, a, o, bMitVorbedingung ); //GEAENDERT PL 14-01-16 + ret &= Subst( PTemp, 1, a, o, bMitVorbedingung ); //GEAENDERT PL 14-01-17 } } return ret; //EINGEFUEGT PL 14-01-16 From 3a58694a0220b9c41ea7194ee0b68d855f268e6f Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 20 Jan 2015 13:35:56 +0100 Subject: [PATCH 017/186] Einsetzen von Generischen Variablen angepasst --- .../typedeployment/GenericTypeInsertPoint.java | 2 +- .../typeinference/typedeployment/TypeInsertSet.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index 082a8df0..dadcb904 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -111,7 +111,7 @@ class GenericVarPatch { ret += p.getInsertString(rs); if(it1.hasNext())ret += ", "; } - if(this.genericVarDeclarations.size()>0)ret+=", "; + if(this.genericVarExtendDeclarations.size()>0)ret+=", "; Iterator it2 = this.genericVarExtendDeclarations.iterator(); while(it2.hasNext()){ GenericVarExtendsDeclarationPatch p = it2.next(); diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 1024442b..40f7211e 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -68,7 +68,7 @@ public class TypeInsertSet { /* * Ablauf: * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. - * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) @@ -76,13 +76,15 @@ public class TypeInsertSet { */ GenericVarPatch gPatch = new GenericVarPatch();//Set der Einzusetzenden generischen Variablendeklarationen //Schritt 1: - Vector involvedTPHs = tip.getInsertType().getUnresolvedTPH(resultSet);//.getInvolvedTypePlaceholder(); + Vector involvedTPHs = tip.getInsertType().getInvolvedTypePlaceholder();//.getInvolvedTypePlaceholder(); + /* //Schritt 2: Vector pairs = new Vector<>(); for(Pair pair : this.resultSet.getConstraintsFor(involvedTPHs)){ //gPatch.add(pair); //Schritt 6 (Teil 2) pairs.add(pair); } + */ //Schritt 3: Vector allTPHs = new Vector<>(); for(TypePlaceholder tph : involvedTPHs){ @@ -91,12 +93,14 @@ public class TypeInsertSet { } } //TODO: Schritt 4 (Es wird nicht kontrolliert, ob der TPH in dem Kontext schon bekannt ist) + /* // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){ if(!allTPHs.contains(tph)){ allTPHs.add(tph); } } + */ //gPatch.addPairs(pairs); gPatch.addTPHs(allTPHs); From e9b2564484f345aa0e86c844821cc220d3813984 Mon Sep 17 00:00:00 2001 From: "Dr. Martin Pluemicke" Date: Tue, 20 Jan 2015 14:40:05 +0100 Subject: [PATCH 018/186] Unify.java: in subst rekursiver Aufruf fuer Wildcardargumente eingefuegt --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 49f19222..7274ac9d 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2379,7 +2379,8 @@ throws MatchException ret &= true; //GEAENDERT PL 14-01-17 } } - if( Temp instanceof RefType ) + if( (Temp instanceof RefType ) || (Temp instanceof ExtendsWildcardType ) || (Temp instanceof SuperWildcardType ) ) + //PL 2015-01-20 eingefuegt: || (Temp instanceof ExtendsWildcardType ) || (Temp instanceof SuperWildcardType ) { Pair PTemp = new Pair( Temp, null); inferencelog.debug(" TV!!!" + PTemp.toString() ); From d7bb282d0fb38cd0d5b29ea8716df2d489522122 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 20 Jan 2015 16:56:53 +0100 Subject: [PATCH 019/186] Fehler behoben --- src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java | 4 ++++ .../typeinference/assumptions/TypeAssumptions.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 09418a0e..88aba4e2 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -54,6 +54,10 @@ public class KarthesischesProdukt { private Vector> karthesischesProdukt(Vector m1, Vector m2){ Vector> ret = new Vector>(); + if(m2.size() == 0){//Sonderfall, m2 ist leer: + ret.add(m1); + return ret; //Die restliche Berechnungen können übersprungen werden. + } //for(M o1 : m1){ for(M o2 : m2){ Vector v1 = new Vector(); diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 9787b5b4..162b6ac8 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,7 +327,7 @@ public class TypeAssumptions { for(GenericVarAssumption ass : this.genericVarAssumptions){ //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ - if(! ass.getAssumedType().getParentClass().getName().equals(this.thisClassName)){ + if(! ass.getAssumedType().getParentClass().equals(t.getParentClass())){ //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); } From cbafe352c96857af3ff0f8918ddfe445c0b9c546 Mon Sep 17 00:00:00 2001 From: "Dr. Martin Pluemicke" Date: Tue, 20 Jan 2015 18:24:58 +0100 Subject: [PATCH 020/186] Kommentar in Unify fuer weitere Arbeiten eingefuegt --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 7274ac9d..318f46b8 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1371,6 +1371,8 @@ throws MatchException } } //REDUCE2 + //PL 15-01-20: HIER MUESSEN NOCH ALLE FAELLE MIT EXTENDS UND SUPER GEMISCHT ERGAENZT WERDEN + //BEACHTEN: WAS PASSIERT WENN HINTER ? extends/super EINE TYPVAR/KEIN REFTYPE STEHT if(P.OperatorEqual()) { RefType TA1 = null; From f1171210bcf8d099e9e5d0e8d4de083d561d8d0c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 20 Jan 2015 18:32:51 +0100 Subject: [PATCH 021/186] =?UTF-8?q?Kleine=20=C3=84nderungen,=20Fehlerbeheb?= =?UTF-8?q?ung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Method.java | 1 + src/de/dhbwstuttgart/syntaxtree/statement/Null.java | 4 ++-- src/de/dhbwstuttgart/syntaxtree/type/Type.java | 2 ++ .../typeinference/assumptions/TypeAssumptions.java | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 38f3bca5..6c0b07f5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -693,6 +693,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // Methode und Block teilen sich einen ReturnType: //this.block.setType(t); this.returntype = t; + this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) } /** diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 89a37dbb..441da860 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -88,8 +88,8 @@ public class Null extends Literal @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - // TODO Auto-generated method stub - return null; + this.setType(TypePlaceholder.fresh(this)); + return new ConstraintsSet(); } @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index 2e0cea92..d2e5522e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -14,6 +14,7 @@ import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; @@ -50,6 +51,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.Type.26732.body { //if(parent == null)throw new NullPointerException(); + //if(parent == null)throw new DebugException("Parent darf nicht null sein"); this.parent = parent; this.offset=offset; } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 162b6ac8..564fd472 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,10 +327,12 @@ public class TypeAssumptions { for(GenericVarAssumption ass : this.genericVarAssumptions){ //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ - if(! ass.getAssumedType().getParentClass().equals(t.getParentClass())){ + if(! ass.getAssumedType().getParentClass().equals(inNode.getParentClass())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) + TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.TYPEINFERENCE); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); } + TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.TYPEINFERENCE); return new ConstraintType(ass.getAssumedType()); } } From 615d2c633e89d561035f2c6502a60b491f115aa6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 23 Jan 2015 13:31:52 +0100 Subject: [PATCH 022/186] Fehler beheben --- src/de/dhbwstuttgart/typeinference/FunNMethod.java | 3 +++ .../typeinference/typedeployment/TypeInsertSet.java | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index cf056020..7d1d7d51 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -3,6 +3,7 @@ package de.dhbwstuttgart.typeinference; import java.util.Vector; import de.dhbwstuttgart.syntaxtree.FormalParameter; +import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.ParameterList; import de.dhbwstuttgart.syntaxtree.misc.DeclId; @@ -32,6 +33,7 @@ public class FunNMethod extends Method{ } pl.formalparameter = fpList; this.parameterlist = pl; + this.parent = new Class("Fun"+paralist.size(), 0); } public FunNMethod(int N){ @@ -49,6 +51,7 @@ public class FunNMethod extends Method{ } pl.formalparameter = fpList; this.parameterlist = pl; + this.parent = new Class("Fun"+N, 0); } @Override diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 40f7211e..4c33c7ad 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -77,14 +77,14 @@ public class TypeInsertSet { GenericVarPatch gPatch = new GenericVarPatch();//Set der Einzusetzenden generischen Variablendeklarationen //Schritt 1: Vector involvedTPHs = tip.getInsertType().getInvolvedTypePlaceholder();//.getInvolvedTypePlaceholder(); - /* + //Schritt 2: Vector pairs = new Vector<>(); for(Pair pair : this.resultSet.getConstraintsFor(involvedTPHs)){ //gPatch.add(pair); //Schritt 6 (Teil 2) pairs.add(pair); } - */ + //Schritt 3: Vector allTPHs = new Vector<>(); for(TypePlaceholder tph : involvedTPHs){ @@ -102,7 +102,7 @@ public class TypeInsertSet { } */ - //gPatch.addPairs(pairs); + gPatch.addPairs(pairs); gPatch.addTPHs(allTPHs); /* From 99d3ecf0306889b7f05a165c64c0517aca7e70a6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 23 Jan 2015 15:28:15 +0100 Subject: [PATCH 023/186] Fehler behoben, Fehler behoben, Fehler behoben. --- .../GenericTypeInsertPoint.java | 46 +++++++++++++++---- .../TypeInsertTests/OverloadingInMethod.jav | 9 ++++ 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index dadcb904..a6644887 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -99,19 +99,37 @@ class GenericVarPatch { */ public void add(Pair p){ GenericVarExtendsDeclarationPatch toAdd = new GenericVarExtendsDeclarationPatch(p); + boolean mussDeklariertWerden = true; + for(GenericVarDeclarationPatch patch : genericVarDeclarations){ + if(patch.genericVar.equals(p.TA2)){ + mussDeklariertWerden = false; + break; + } + } if(!this.genericVarExtendDeclarations.contains(toAdd))this.genericVarExtendDeclarations.add(toAdd); + if(mussDeklariertWerden && p.TA2 instanceof TypePlaceholder)this.add((TypePlaceholder)p.TA2); } public String getInsertString(ResultSet rs){ //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: String ret = ""; Iterator it1 = this.genericVarDeclarations.iterator(); + boolean bereitsVorhanden = false; while(it1.hasNext()){ + bereitsVorhanden = false; GenericVarDeclarationPatch p = it1.next(); - ret += p.getInsertString(rs); - if(it1.hasNext())ret += ", "; + //Kontrollieren, ob GenericVar bereits von den Extends Declarations definiert wird: + for(GenericVarExtendsDeclarationPatch pe : this.genericVarExtendDeclarations){ + if(pe.definesGenericVar(p.genericVar)){ + bereitsVorhanden = true; + } + } + if(bereitsVorhanden == false){ + ret += p.getInsertString(rs); + if(it1.hasNext())ret += ", "; + } } - if(this.genericVarExtendDeclarations.size()>0)ret+=", "; + if(this.genericVarExtendDeclarations.size()>0 && bereitsVorhanden == false)ret+=", "; Iterator it2 = this.genericVarExtendDeclarations.iterator(); while(it2.hasNext()){ GenericVarExtendsDeclarationPatch p = it2.next(); @@ -120,7 +138,7 @@ class GenericVarPatch { } return ret; } - + public void add(TypePlaceholder tph) { GenericVarDeclarationPatch toAdd = new GenericVarDeclarationPatch(tph); if(!this.genericVarDeclarations.contains(toAdd))this.genericVarDeclarations.add(toAdd); @@ -145,6 +163,11 @@ class GenericVarExtendsDeclarationPatch { private Pair genericPair; + public boolean definesGenericVar(TypePlaceholder tph){ + if(genericPair.TA1.equals(tph))return true; + return false; + } + public GenericVarExtendsDeclarationPatch(Pair p) { this.genericPair = p; } @@ -178,17 +201,17 @@ class GenericVarExtendsDeclarationPatch { */ class GenericVarDeclarationPatch { - private TypePlaceholder genericPair; + TypePlaceholder genericVar; public GenericVarDeclarationPatch(TypePlaceholder p) { - this.genericPair = p; + this.genericVar = p; } public String getInsertString(ResultSet resultSet){ String ret = ""; - if(this.genericPair != null){ + if(this.genericVar != null){ //ret += this.genericPair.printJavaCode(resultSet); - ret += this.genericPair.getName().toString(); + ret += this.genericVar.getName().toString(); } return ret; } @@ -196,7 +219,12 @@ class GenericVarDeclarationPatch { @Override public boolean equals(Object o){ if(!(o instanceof GenericVarDeclarationPatch))return false; - if(!(this.genericPair.equals(((GenericVarDeclarationPatch)o).genericPair)))return false; + if(!(this.genericVar.equals(((GenericVarDeclarationPatch)o).genericVar)))return false; return true; } + + @Override + public String toString(){ + return genericVar.toString(); + } } diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav index e66e1a7c..4c014c9a 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav @@ -8,3 +8,12 @@ class OverloadingInMethod{ } +class OverloadingInMethod2{ + + Fun1>, ? super C> m () { + Fun1>, ? super C> op; + op = (m) -> (f) -> f.apply(m); + return op; + } + +} \ No newline at end of file From 6e6908d4606c82ef1dafad4ff965f04276d7b189 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 23 Jan 2015 16:49:09 +0100 Subject: [PATCH 024/186] Fehler in parserPostProcessing behoben --- src/de/dhbwstuttgart/syntaxtree/Method.java | 9 +++++++++ .../syntaxtree/type/ExtendsWildcardType.java | 6 ++++++ src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java | 2 +- src/de/dhbwstuttgart/syntaxtree/type/RefType.java | 8 ++++++++ .../dhbwstuttgart/syntaxtree/type/SuperWildcardType.java | 6 ++++++ src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java | 2 ++ src/de/dhbwstuttgart/typeinference/FunNMethod.java | 4 ++-- 7 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 6c0b07f5..abe7a104 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -675,6 +675,15 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: Class parentClass = (Class)parent; if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); + this.returntype.parserPostProcessing(this); + if(this.parameterlist != null){ + for(FormalParameter fp : this.parameterlist){ + fp.parserPostProcessing(this); + } + } + for(GenericTypeVar gtv : this.getGenericParameter()){ + gtv.parserPostProcessing(this); + } } @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 5a66e308..dfe0fdd1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -142,4 +142,10 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, return ret; } + @Override + public void parserPostProcessing(SyntaxTreeNode parent) { + super.parserPostProcessing(parent); + this.extendsType.parserPostProcessing(this); + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 229bfaeb..19664a0f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -170,7 +170,7 @@ public class GenericTypeVar extends Type */ return new JavaCodeResult(this.name.toString()); } - + public TypePlaceholder getTypePlaceHolder(SyntaxTreeNode environment) { String hashValue = this.getName().toString()+environment.hashCode(); if(!GenericTypeVar.tph.containsKey(hashValue)){ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 85ea2d9d..2c5d0e59 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -830,6 +830,14 @@ public class RefType extends Type implements IMatchable throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); return t; } + + @Override + public void parserPostProcessing(SyntaxTreeNode parent) { + super.parserPostProcessing(parent); + if(this.parameter != null)for(Type param : this.parameter){ + param.parserPostProcessing(this); + } + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 7a730da6..3dea9599 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -138,4 +138,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I ret.addAll(this.superType.getInvolvedTypePlaceholder()); return ret; } + + @Override + public void parserPostProcessing(SyntaxTreeNode parent) { + super.parserPostProcessing(parent); + this.superType.parserPostProcessing(this); + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index 4679dc62..aa32de77 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -89,5 +89,7 @@ public class WildcardType extends Type{ return false; } } + + } diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index 7d1d7d51..9ea83dc0 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -33,7 +33,7 @@ public class FunNMethod extends Method{ } pl.formalparameter = fpList; this.parameterlist = pl; - this.parent = new Class("Fun"+paralist.size(), 0); + this.parserPostProcessing(new Class("Fun"+paralist.size(), 0)); } public FunNMethod(int N){ @@ -51,7 +51,7 @@ public class FunNMethod extends Method{ } pl.formalparameter = fpList; this.parameterlist = pl; - this.parent = new Class("Fun"+N, 0); + this.parserPostProcessing(new Class("Fun"+N, 0)); } @Override From a579bb964f084436b49ec9b5aad4836e7b3bb452 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 27 Jan 2015 11:10:16 +0100 Subject: [PATCH 025/186] =?UTF-8?q?Testf=C3=A4lle=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TypeInsertTests/GenericVarTest.jav | 5 +++++ .../TypeInsertTests/GenericVarTest.java | 16 ++++++++++++++++ .../TypeInsertTests/GenericVarTest2.jav | 15 +++++++++++++++ .../TypeInsertTests/GenericVarTest2.java | 16 ++++++++++++++++ test/plugindevelopment/TypeInsertTests/Id.jav | 4 ++++ test/plugindevelopment/TypeInsertTests/Id.java | 16 ++++++++++++++++ 6 files changed, 72 insertions(+) create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest.java create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest2.java create mode 100644 test/plugindevelopment/TypeInsertTests/Id.jav create mode 100644 test/plugindevelopment/TypeInsertTests/Id.java diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav new file mode 100644 index 00000000..7345b977 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav @@ -0,0 +1,5 @@ +import java.util.Vector; + +class WildcardTest extends Vector{ + Fun1> op = (f) -> f.apply(this); +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest.java new file mode 100644 index 00000000..ef787454 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenericVarTest { + private static final String TEST_FILE = "GenericVarTest.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("Fun1, Object2>, Object1> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest2.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.jav new file mode 100644 index 00000000..2aef0758 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.jav @@ -0,0 +1,15 @@ +class GenericTest{ + A method(){ + return null; + } +} + +class GenericTest2{ + + GenericTest var = new GenericTest(); + + method2(){ + return var.method(); + } + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java new file mode 100644 index 00000000..9195de50 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenericVarTest2 { + private static final String TEST_FILE = "GenericVarTest2.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("Fun1, Object2>, Object1> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/Id.jav b/test/plugindevelopment/TypeInsertTests/Id.jav new file mode 100644 index 00000000..54a930cf --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/Id.jav @@ -0,0 +1,4 @@ + +class Id{ + op = (x)->x; +} diff --git a/test/plugindevelopment/TypeInsertTests/Id.java b/test/plugindevelopment/TypeInsertTests/Id.java new file mode 100644 index 00000000..0bc010ba --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/Id.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class Id { + private static final String TEST_FILE = "Id.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("TestIfStmt var"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + } +} From 03d1727cbfe88445f93c13bd62fc6aed914ec72a Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 28 Jan 2015 01:26:42 +0100 Subject: [PATCH 026/186] =?UTF-8?q?Unn=C3=B6tige=20GenericVariables=20nich?= =?UTF-8?q?t=20mehr=20einf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/logger/Section.java | 2 +- .../assumptions/TypeAssumptions.java | 4 +-- .../GenericTypeInsertPoint.java | 33 +++++++++++++++++++ .../typedeployment/TypeInsertSet.java | 3 ++ .../TypeInsertTests/OverloadingInMethod.jav | 10 ------ .../TypeInsertTests/OverloadingInMethod2.jav | 10 ++++++ .../TypeInsertTests/OverloadingInMethod2.java | 19 +++++++++++ 7 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java diff --git a/src/de/dhbwstuttgart/logger/Section.java b/src/de/dhbwstuttgart/logger/Section.java index d99907d1..0ea53b92 100644 --- a/src/de/dhbwstuttgart/logger/Section.java +++ b/src/de/dhbwstuttgart/logger/Section.java @@ -4,5 +4,5 @@ public enum Section { TYPEINFERENCE, PARSER, CODEGEN, - UNIFY, FINITECLOSURE; + UNIFY, FINITECLOSURE, ASSUMPTIONS; } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 564fd472..14b2ab48 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -328,11 +328,11 @@ public class TypeAssumptions { //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ if(! ass.getAssumedType().getParentClass().equals(inNode.getParentClass())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) - TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.TYPEINFERENCE); + TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); } - TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.TYPEINFERENCE); + TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); return new ConstraintType(ass.getAssumedType()); } } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index a6644887..bd16e90b 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -92,6 +92,7 @@ class GenericVarPatch { private Vector genericVarExtendDeclarations = new Vector(); private Vector genericVarDeclarations = new Vector(); + private Vector usedTPHs; /** * Fügt eine generische Variable in Form eines Pairs an. @@ -111,6 +112,20 @@ class GenericVarPatch { } public String getInsertString(ResultSet rs){ + //Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden: + /* + * Dies geht mit der momentanen Variante nur für die genericVarDeclarations. + * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, + * welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind. + */ + Vector tmpGenVars = new Vector<>(); + for(GenericVarDeclarationPatch gv : this.genericVarDeclarations){ + if(this.usedTPHs.contains(gv.genericVar)){ + tmpGenVars.add(gv); + } + } + this.genericVarDeclarations = tmpGenVars; + //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: String ret = ""; Iterator it1 = this.genericVarDeclarations.iterator(); @@ -151,6 +166,19 @@ class GenericVarPatch { public void addPairs(Vector pairs) { for(Pair pair : pairs)this.add(pair); } + + public void removeUnusedTPHs(Vector usedTPHs) { + this.usedTPHs = usedTPHs; + return; + /* + for(TypePlaceholder tph : usedTPHs){ + //Zuerst alle extends Typen kontrollieren und entfernen: + for(GenericVarExtendsDeclarationPatch p : this.genericVarExtendDeclarations){ + if(p.definesGenericVar(tph))return; + } + } + */ + } } @@ -163,6 +191,11 @@ class GenericVarExtendsDeclarationPatch { private Pair genericPair; + /** + * Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2 + * @param tph + * @return + */ public boolean definesGenericVar(TypePlaceholder tph){ if(genericPair.TA1.equals(tph))return true; return false; diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 4c33c7ad..c588aaea 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -119,6 +119,9 @@ public class TypeInsertSet { } */ + //Nur Generische Variablen einsetzen, welche auch verwendet werden: + gPatch.removeUnusedTPHs(tip.getInsertType().getInvolvedTypePlaceholder()); + GenericTypeInsertPoint gip = new GenericTypeInsertPoint(tip.getGenericTypeVarInsertNode(), gPatch, resultSet); typinferenzLog.debug("Erstellter GenericTypeInsertPoint: "+gip, Section.TYPEINFERENCE); tpj.add(tip); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav index 4c014c9a..fb1da409 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.jav @@ -7,13 +7,3 @@ class OverloadingInMethod{ } } - -class OverloadingInMethod2{ - - Fun1>, ? super C> m () { - Fun1>, ? super C> op; - op = (m) -> (f) -> f.apply(m); - return op; - } - -} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav new file mode 100644 index 00000000..e3ef8328 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav @@ -0,0 +1,10 @@ + +class OverloadingInMethod2{ + + Fun1>, ? super C> m () { + Fun1>, ? super C> op; + op = (m) -> (f) -> f.apply(m); + return op; + } + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java new file mode 100644 index 00000000..af53fcdb --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class OverloadingInMethod2 { + + private static final String TEST_FILE = "OverloadingInMethod2.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + //mustContain.add("Fun0>> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 91b4ff4c2fe77011395b4a37db2442aa18b6dd47 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 30 Jan 2015 13:23:29 +0100 Subject: [PATCH 027/186] Fehler in GenericVarTest beheben --- test/plugindevelopment/TypeInsertTests/GenericVarTest.jav | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav index 7345b977..1f3d9f46 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav @@ -1,5 +1,5 @@ import java.util.Vector; class WildcardTest extends Vector{ - Fun1> op = (f) -> f.apply(this); + Fun1> op = (f) -> f.apply(this); } \ No newline at end of file From 1369161f12ea2bb51c89118d653ea1622be6ac9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 30 Jan 2015 13:52:17 +0100 Subject: [PATCH 028/186] Wildcard Unifikation --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 318f46b8..96feeaf3 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1387,7 +1387,7 @@ throws MatchException { ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; - if(exT1.get_ExtendsType() instanceof RefType && exT2.get_ExtendsType() instanceof RefType) + //if(exT1.get_ExtendsType() instanceof RefType && exT2.get_ExtendsType() instanceof RefType) PL 15-01-30 { TA1 = (RefType)exT1.get_ExtendsType(); TA2 = (RefType)exT2.get_ExtendsType(); @@ -1397,7 +1397,7 @@ throws MatchException { SuperWildcardType suT1 = (SuperWildcardType)P.TA1; SuperWildcardType suT2 = (SuperWildcardType)P.TA2; - if(suT1.get_SuperType() instanceof RefType && suT2.get_SuperType() instanceof RefType) + //if(suT1.get_SuperType() instanceof RefType && suT2.get_SuperType() instanceof RefType) PL 15-01-30 { TA1 = (RefType)suT1.get_SuperType(); TA2 = (RefType)suT2.get_SuperType(); From a549843f0523050abd9382dabe06442abc89cdc9 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 30 Jan 2015 15:37:27 +0100 Subject: [PATCH 029/186] =?UTF-8?q?GenTypeTest=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TypeInsertTests/GenTypeTest.jav | 4 ++++ .../TypeInsertTests/GenTypeTest.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 test/plugindevelopment/TypeInsertTests/GenTypeTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/GenTypeTest.java diff --git a/test/plugindevelopment/TypeInsertTests/GenTypeTest.jav b/test/plugindevelopment/TypeInsertTests/GenTypeTest.jav new file mode 100644 index 00000000..36b7de8d --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenTypeTest.jav @@ -0,0 +1,4 @@ +class Test{ + A a; + b = a; +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/GenTypeTest.java b/test/plugindevelopment/TypeInsertTests/GenTypeTest.java new file mode 100644 index 00000000..e150b2dd --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenTypeTest.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenTypeTest { + + private static final String TEST_FILE = "GenTypeTest.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + mustContain.add("A b"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 1b1a690212605cd30a6b2be2783f4bd7596e3701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 30 Jan 2015 16:12:25 +0100 Subject: [PATCH 030/186] Unify.subunify wildcards werden entfernt, wenn sie auf beiden Seiten identisch sind --- .../typeinference/unify/Unify.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 96feeaf3..496422ad 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1178,7 +1178,33 @@ throws MatchException inferencelog.debug(""); inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + ""); inferencelog.debug( "--------------------------------------------------"); - + + //wenn noetig extends-wildcards entfernen PL 15-01-30 + if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) + { + ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; + ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; + + H.addElement(new Pair(exT1.get_ExtendsType(), exT2.get_ExtendsType())); + + bRegel = true; + continue; + + } + + //wenn noetig super-wildcards entfernen PL 15-01-30 + if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) + { + SuperWildcardType suT1 = (SuperWildcardType)P.TA1; + SuperWildcardType suT2 = (SuperWildcardType)P.TA2; + + H.addElement(new Pair(suT1.get_SuperType(), suT2.get_SuperType())); + + bRegel = true; + continue; + + } + // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. //ERASE3 if( P.isEqual() && P.OperatorEqual() ) @@ -1383,21 +1409,21 @@ throws MatchException TA1 = (RefType)P.TA1; TA2 = (RefType)P.TA2; } - else if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) + else if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) //nicht mehr noetig, wird bereits am Anfang der Schleife entfernt { ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; - //if(exT1.get_ExtendsType() instanceof RefType && exT2.get_ExtendsType() instanceof RefType) PL 15-01-30 + if(exT1.get_ExtendsType() instanceof RefType && exT2.get_ExtendsType() instanceof RefType) { TA1 = (RefType)exT1.get_ExtendsType(); TA2 = (RefType)exT2.get_ExtendsType(); } } - else if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) + else if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) //nicht mehr noetig, wird bereits am Anfang der Schleife entfernt { SuperWildcardType suT1 = (SuperWildcardType)P.TA1; SuperWildcardType suT2 = (SuperWildcardType)P.TA2; - //if(suT1.get_SuperType() instanceof RefType && suT2.get_SuperType() instanceof RefType) PL 15-01-30 + if(suT1.get_SuperType() instanceof RefType && suT2.get_SuperType() instanceof RefType) { TA1 = (RefType)suT1.get_SuperType(); TA2 = (RefType)suT2.get_SuperType(); From 69bd1510ec12a95248d3ed3cb2426a0c2d215f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sat, 31 Jan 2015 14:21:02 +0100 Subject: [PATCH 031/186] Unify.subunify Kommentare eingefuegt --- .../typeinference/unify/Unify.java | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 496422ad..bd2b38e6 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1179,32 +1179,6 @@ throws MatchException inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + ""); inferencelog.debug( "--------------------------------------------------"); - //wenn noetig extends-wildcards entfernen PL 15-01-30 - if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) - { - ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; - ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; - - H.addElement(new Pair(exT1.get_ExtendsType(), exT2.get_ExtendsType())); - - bRegel = true; - continue; - - } - - //wenn noetig super-wildcards entfernen PL 15-01-30 - if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) - { - SuperWildcardType suT1 = (SuperWildcardType)P.TA1; - SuperWildcardType suT2 = (SuperWildcardType)P.TA2; - - H.addElement(new Pair(suT1.get_SuperType(), suT2.get_SuperType())); - - bRegel = true; - continue; - - } - // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. //ERASE3 if( P.isEqual() && P.OperatorEqual() ) @@ -1401,6 +1375,33 @@ throws MatchException //BEACHTEN: WAS PASSIERT WENN HINTER ? extends/super EINE TYPVAR/KEIN REFTYPE STEHT if(P.OperatorEqual()) { + //wenn noetig extends-wildcards entfernen PL 15-01-30 + //korrekt da P.OperatorEqual() + if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) + { + ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; + ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; + + H.addElement(new Pair(exT1.get_ExtendsType(), exT2.get_ExtendsType())); + + bRegel = true; + continue; + + } + + //wenn noetig super-wildcards entfernen PL 15-01-30 + //korrekt da P.OperatorEqual() + if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) + { + SuperWildcardType suT1 = (SuperWildcardType)P.TA1; + SuperWildcardType suT2 = (SuperWildcardType)P.TA2; + + H.addElement(new Pair(suT1.get_SuperType(), suT2.get_SuperType())); + + bRegel = true; + continue; + + } RefType TA1 = null; RefType TA2 = null; //Hier werden die RefTypes gefüllt. @@ -1409,6 +1410,8 @@ throws MatchException TA1 = (RefType)P.TA1; TA2 = (RefType)P.TA2; } + /* auskommentiert 15-01-30, da dies nict nur für RefTypes sonder für alle Typen gilt, am Anfang eingefügt. + //FALSCH else if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) //nicht mehr noetig, wird bereits am Anfang der Schleife entfernt { ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; @@ -1429,7 +1432,7 @@ throws MatchException TA2 = (RefType)suT2.get_SuperType(); } } - + */ if(TA1 != null && TA2 != null && TA1.getTypeName().equals(TA2.getTypeName())) { inferencelog.debug(" REDUCE2"); From de4cfa26569661fda03e9ae275ed4f2bfaedfa4c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Feb 2015 11:20:05 +0100 Subject: [PATCH 032/186] =?UTF-8?q?BoGTV=20f=C3=BCgt=20keine=20Constraints?= =?UTF-8?q?=20mehr=20hinzu.=20Test=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/type/BoundedGenericTypeVar.java | 5 +++-- .../TypeInsertTests/GenericVarTest3.jav | 8 ++++++++ .../TypeInsertTests/GenericVarTest3.java | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav create mode 100644 test/plugindevelopment/TypeInsertTests/GenericVarTest3.java diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index ebe21b0d..516abdbe 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -91,8 +91,9 @@ public class BoundedGenericTypeVar extends GenericTypeVar if(this.bounds != null){ for(Type ev : this.bounds){ ConstraintType extendsType = ass.getTypeFor(ev, this); - //if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); - ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); + if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); + + //ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); } } return ret; diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav new file mode 100644 index 00000000..06b4a32d --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav @@ -0,0 +1,8 @@ +class GenericTest{ + A method(){ + A x; + Integer integer; + x = integer; + return x; + } +} diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java new file mode 100644 index 00000000..431fafa3 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenericVarTest3 { + private static final String TEST_FILE = "GenericVarTest3.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("Fun1, Object2>, Object1> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } +} From 8aa106b38af8eeb88fbe78885542627b8e195a34 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Feb 2015 12:24:40 +0100 Subject: [PATCH 033/186] =?UTF-8?q?Falsche=20=C3=9Cbernahme=20von=20BoGTV?= =?UTF-8?q?=20im=20Konstruktor=20von=20Class=20beheben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 9 +++++++-- .../TypeInsertTests/GenericVarTest3.jav | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 27c19a94..7c620b65 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -234,7 +234,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit // ino.end // ino.method.Class.23047.definition public Class(String name, Modifiers mod, ClassBody cb, Vector ct, - Type superclass, Vector vector, Vector paralist, int offset) + Type superclass, Vector vector, Vector paralist, int offset) // ino.end // ino.method.Class.23047.body { @@ -246,7 +246,11 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit this.superClass = superclass; } if (vector != null) setSuperInterfaces(vector); - if (paralist != null){ + if (paralist != null && !paralist.isEmpty()){ + Type lastPara = paralist.lastElement(); + Integer lastItemOffset = lastPara.getOffset() + lastPara.get_Name().length(); + this.setGenericParameter(new GenericDeclarationList((Vector)paralist, lastItemOffset)); + /* //this.set_ParaList(paralist); Vector gtvList = new Vector<>(); int lastItemOffset = 0; @@ -256,6 +260,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit lastItemOffset = paraT.getOffset() + paraT.get_Name().length(); } this.genericClassParameters = new GenericDeclarationList(gtvList, lastItemOffset); + */ } if(usedIdsToCheck!=null) this.usedIdsToCheck=usedIdsToCheck; diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav index 06b4a32d..45dc1167 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav @@ -1,5 +1,5 @@ -class GenericTest{ - A method(){ +class GenericTest{ + A method(){ A x; Integer integer; x = integer; From 56f69727ebde6b34f4db35a69a31787ffd10be8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 3 Feb 2015 12:25:45 +0100 Subject: [PATCH 034/186] In Unify.greater1 alle Bounds einer BGTV als groesserer Typ hinzugefuegt --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 6 ++++++ test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index bd2b38e6..92dd8e56 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -3014,6 +3014,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } } } + else if(T instanceof BoundedGenericTypeVar) //PL 15-02-03 angefuegt da BGTV Kleiner als alle seine Bounds ist + { + BoundedGenericTypeVar bgtv = (BoundedGenericTypeVar)T; + Vector types = bgtv.getBounds(); + retVec = types.stream().map(ty -> greater(ty, fc_tto)).reduce(new Vector(), (a,b) -> { a.addAll(b); return a;}); + } return retVec; } diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav index 06b4a32d..fef13c40 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav @@ -2,7 +2,7 @@ class GenericTest{ A method(){ A x; Integer integer; - x = integer; + integer = x; return x; } } From 57f35605f6fd160e266a2db548ccc791d0575513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 3 Feb 2015 14:01:04 +0100 Subject: [PATCH 035/186] In Unify.subunify bei P.OperatorEqual() Wildcards loeschen --- .../typeinference/unify/Unify.java | 56 ++++--------------- .../TypeInsertTests/LambdaTest5.jav | 2 +- 2 files changed, 11 insertions(+), 47 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 92dd8e56..9a990f4c 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1373,35 +1373,21 @@ throws MatchException //REDUCE2 //PL 15-01-20: HIER MUESSEN NOCH ALLE FAELLE MIT EXTENDS UND SUPER GEMISCHT ERGAENZT WERDEN //BEACHTEN: WAS PASSIERT WENN HINTER ? extends/super EINE TYPVAR/KEIN REFTYPE STEHT + //erledigt 15-02-03 if(P.OperatorEqual()) { - //wenn noetig extends-wildcards entfernen PL 15-01-30 + //wenn noetig extends-wildcards entfernen PL 15-02-03 //korrekt da P.OperatorEqual() - if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) + + if(P.TA1 instanceof WildcardType) { - ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; - ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; - - H.addElement(new Pair(exT1.get_ExtendsType(), exT2.get_ExtendsType())); - - bRegel = true; - continue; - + P.TA1 = ((WildcardType)P.TA1).GetWildcardType(); } - - //wenn noetig super-wildcards entfernen PL 15-01-30 - //korrekt da P.OperatorEqual() - if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) - { - SuperWildcardType suT1 = (SuperWildcardType)P.TA1; - SuperWildcardType suT2 = (SuperWildcardType)P.TA2; - - H.addElement(new Pair(suT1.get_SuperType(), suT2.get_SuperType())); - - bRegel = true; - continue; - + if(P.TA2 instanceof WildcardType) { + P.TA2 = ((WildcardType)P.TA2).GetWildcardType(); } + + RefType TA1 = null; RefType TA2 = null; //Hier werden die RefTypes gefüllt. @@ -1410,29 +1396,7 @@ throws MatchException TA1 = (RefType)P.TA1; TA2 = (RefType)P.TA2; } - /* auskommentiert 15-01-30, da dies nict nur für RefTypes sonder für alle Typen gilt, am Anfang eingefügt. - //FALSCH - else if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) //nicht mehr noetig, wird bereits am Anfang der Schleife entfernt - { - ExtendsWildcardType exT1 = (ExtendsWildcardType)P.TA1; - ExtendsWildcardType exT2 = (ExtendsWildcardType)P.TA2; - if(exT1.get_ExtendsType() instanceof RefType && exT2.get_ExtendsType() instanceof RefType) - { - TA1 = (RefType)exT1.get_ExtendsType(); - TA2 = (RefType)exT2.get_ExtendsType(); - } - } - else if(P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType) //nicht mehr noetig, wird bereits am Anfang der Schleife entfernt - { - SuperWildcardType suT1 = (SuperWildcardType)P.TA1; - SuperWildcardType suT2 = (SuperWildcardType)P.TA2; - if(suT1.get_SuperType() instanceof RefType && suT2.get_SuperType() instanceof RefType) - { - TA1 = (RefType)suT1.get_SuperType(); - TA2 = (RefType)suT2.get_SuperType(); - } - } - */ + if(TA1 != null && TA2 != null && TA1.getTypeName().equals(TA2.getTypeName())) { inferencelog.debug(" REDUCE2"); diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav index 5476e7b3..4c00bc85 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav @@ -1,5 +1,5 @@ class LambdaTest{ -Fun1 op = (var) -> {return var;}; +Fun1 op = (var) -> {return var;}; } \ No newline at end of file From f9bfe6fb442d91de2cadbcaec249c6fce304bbc6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Feb 2015 15:58:04 +0100 Subject: [PATCH 036/186] =?UTF-8?q?Test=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 2 +- test/plugindevelopment/TypeInsertTests/ImportTest.jav | 4 ++-- test/plugindevelopment/TypeInsertTests/LambdaTest4.jav | 6 +++++- test/plugindevelopment/TypeInsertTests/LambdaTest4.java | 2 +- .../TypeInsertTests/OverloadingInMethod2.jav | 4 ++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 7c620b65..8e05b2d3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -179,7 +179,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit GenericTypeVar newGTV=new GenericTypeVar(gname,this,0); gtvs.add(newGTV); } - this.genericClassParameters = new GenericDeclarationList(gtvs,0); + this.setGenericParameter(new GenericDeclarationList(gtvs,0)); } public Class(String name, RefType superClass, Modifiers mod, int offset){ diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.jav b/test/plugindevelopment/TypeInsertTests/ImportTest.jav index cf9cf8ba..7e761863 100644 --- a/test/plugindevelopment/TypeInsertTests/ImportTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest.jav @@ -2,8 +2,8 @@ import java.util.Vector; class ImportTest{ Vector var; -var2; -methode(){ + +methode(var2){ var.add(var2); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav index 34c32b1d..93ad27b5 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav @@ -1,5 +1,9 @@ class LambdaTest{ -Fun1 op = (var) -> {return var;}; +Fun1 op = (var) -> { + var2; + var2 = var; + return var; + }; } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java index 047d4c92..a2cabe22 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java @@ -11,7 +11,7 @@ public class LambdaTest4 { @Test public void run(){ Vector mustContain = new Vector(); - //mustContain.add("String var"); + mustContain.add("String var2;"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav index e3ef8328..4dc93178 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav @@ -1,8 +1,8 @@ class OverloadingInMethod2{ - Fun1>, ? super C> m () { - Fun1>, ? super C> op; + Fun1>, ? super C> m () { + Fun1>, ? super C> op; op = (m) -> (f) -> f.apply(m); return op; } From 0922b9e8993b00dafc1da7644948424d5e7ff6b5 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 6 Feb 2015 15:41:01 +0100 Subject: [PATCH 037/186] =?UTF-8?q?=C3=84nderungen=20an=20Testfiles=20und?= =?UTF-8?q?=20Logger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/logger/Logger.java | 4 ++++ src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java | 9 +++++++++ src/de/dhbwstuttgart/typeinference/FunNMethod.java | 3 ++- test/plugindevelopment/TypeInsertTester.java | 2 +- .../TypeInsertTests/BoundedGenericTest.jav | 2 +- test/plugindevelopment/TypeInsertTests/ImportTest2.jav | 2 +- test/plugindevelopment/TypeInsertTests/IntTest.jav | 2 +- test/plugindevelopment/TypeInsertTests/LambdaTest10.jav | 4 +--- test/plugindevelopment/TypeInsertTests/LambdaTest11.jav | 4 +--- test/plugindevelopment/TypeInsertTests/LambdaTest2.jav | 4 ++-- test/plugindevelopment/TypeInsertTests/LambdaTest2.java | 5 +++++ .../{ => LargeSourceCodeTests}/LambdaTest22.java | 4 +++- .../{ => LargeSourceCodeTests}/Matrix.java | 3 ++- .../TypedMatrixSimpleTest.java | 4 +++- .../{ => LargeSourceCodeTests}/TypedMatrixTest.java | 4 +++- .../TypeInsertTests/MultipleTypesInsertTester.java | 2 +- .../TypeInsertTests/OverloadingInsertTest.jav | 5 +---- 17 files changed, 41 insertions(+), 22 deletions(-) rename test/plugindevelopment/TypeInsertTests/{ => LargeSourceCodeTests}/LambdaTest22.java (71%) rename test/plugindevelopment/TypeInsertTests/{ => LargeSourceCodeTests}/Matrix.java (77%) rename test/plugindevelopment/TypeInsertTests/{ => LargeSourceCodeTests}/TypedMatrixSimpleTest.java (72%) rename test/plugindevelopment/TypeInsertTests/{ => LargeSourceCodeTests}/TypedMatrixTest.java (72%) diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java index 4ce36bd7..1af96f70 100644 --- a/src/de/dhbwstuttgart/logger/Logger.java +++ b/src/de/dhbwstuttgart/logger/Logger.java @@ -25,6 +25,10 @@ public class Logger { }); } + public static LoggerConfiguration getConfiguration(){ + return Logger.standardConfiguration; + } + /** * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. * Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten. diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 19664a0f..93516ef6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -218,6 +218,15 @@ public class GenericTypeVar extends Type public int getEndOffset() { return this.getOffset() + this.name.toString().length(); } + + @Override + public void parserPostProcessing(SyntaxTreeNode parent) { + //SyntaxTreeNode parentTemp = this.parent; + super.parserPostProcessing(parent); + //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. + } + + } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index 9ea83dc0..aab0731e 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -36,6 +36,7 @@ public class FunNMethod extends Method{ this.parserPostProcessing(new Class("Fun"+paralist.size(), 0)); } + /* public FunNMethod(int N){ super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode this.setType(TypePlaceholder.fresh(this)); @@ -53,7 +54,7 @@ public class FunNMethod extends Method{ this.parameterlist = pl; this.parserPostProcessing(new Class("Fun"+N, 0)); } - + */ @Override public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet) { diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java index 27d29c27..c4f48cd7 100644 --- a/test/plugindevelopment/TypeInsertTester.java +++ b/test/plugindevelopment/TypeInsertTester.java @@ -27,7 +27,7 @@ public class TypeInsertTester{ private static Logger inferencelog = Logger.getLogger(TypeInsertTester.class.getName()); static{ { - Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); + Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); /* // Ausgabeoptionen fuer die Logger ConsoleAppender logAppender = new ConsoleAppender(new SimpleLayout()); diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav index a3991d78..68703a12 100644 --- a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav +++ b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav @@ -1,5 +1,5 @@ class BoundedGenericTest{ - var; + var = "test"; B methode(){ return var; } diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav index 1e112c52..10075ef9 100644 --- a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav @@ -1,9 +1,9 @@ import java.util.Vector; class ImportTest{ -var; void methode(a){ + var; var.add(a); } diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.jav b/test/plugindevelopment/TypeInsertTests/IntTest.jav index 30577294..7a2471f2 100644 --- a/test/plugindevelopment/TypeInsertTests/IntTest.jav +++ b/test/plugindevelopment/TypeInsertTests/IntTest.jav @@ -1,6 +1,6 @@ class IntTest{ - var; int methode(){ + var; return var; } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav index a1e40a2d..a056762d 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav @@ -1,8 +1,6 @@ class Test{ -m; - - CT methode(){ + CT methode(m){ return m; } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav index f1787ac4..a2cd9357 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav @@ -1,8 +1,6 @@ class Test{ -m; - - CT methode(){ + CT methode(m){ return m; } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav index ca670b4d..206a10b5 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav @@ -1,5 +1,5 @@ -class LambdaTest{ +class LambdaTest{ -Fun1, S>>, S> op = (m) -> (f) -> f.apply(this,m); +Fun1, B>>, B> op = (m) -> (f) -> f.apply(this,m); } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java index 9cd8ef03..223d0108 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java @@ -4,12 +4,17 @@ import java.util.Vector; import org.junit.Test; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; + public class LambdaTest2 { private static final String TEST_FILE = "LambdaTest2.jav"; @Test public void run(){ + Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); Vector mustContain = new Vector(); //mustContain.add("S m"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest22.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java similarity index 71% rename from test/plugindevelopment/TypeInsertTests/LambdaTest22.java rename to test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java index bf97eeeb..fc17951e 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest22.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java @@ -1,9 +1,11 @@ -package plugindevelopment.TypeInsertTests; +package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; import java.util.Vector; import org.junit.Test; +import plugindevelopment.TypeInsertTests.MultipleTypesInsertTester; + public class LambdaTest22 { private static final String TEST_FILE = "LambdaTest22.jav"; diff --git a/test/plugindevelopment/TypeInsertTests/Matrix.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java similarity index 77% rename from test/plugindevelopment/TypeInsertTests/Matrix.java rename to test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java index cea6d9d5..7884d9d3 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java @@ -1,9 +1,10 @@ -package plugindevelopment.TypeInsertTests; +package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; import java.util.Vector; import org.junit.Test; +import plugindevelopment.TypeInsertTests.MultipleTypesInsertTester; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.LoggerConfiguration; import de.dhbwstuttgart.logger.Section; diff --git a/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java similarity index 72% rename from test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.java rename to test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java index 3c874195..ae298b5c 100644 --- a/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java @@ -1,9 +1,11 @@ -package plugindevelopment.TypeInsertTests; +package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; import java.util.Vector; import org.junit.Test; +import plugindevelopment.TypeInsertTests.MultipleTypesInsertTester; + public class TypedMatrixSimpleTest { private static final String TEST_FILE = "TypedMatrixSimpleTest.jav"; diff --git a/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java similarity index 72% rename from test/plugindevelopment/TypeInsertTests/TypedMatrixTest.java rename to test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java index 810af999..08a5a74a 100644 --- a/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java @@ -1,9 +1,11 @@ -package plugindevelopment.TypeInsertTests; +package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; import java.util.Vector; import org.junit.Test; +import plugindevelopment.TypeInsertTests.MultipleTypesInsertTester; + public class TypedMatrixTest { private static final String TEST_FILE = "TypedMatrixTest.jav"; diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index d54cb9cd..f550ebcc 100644 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -22,7 +22,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ public MultipleTypesInsertTester(){ //Output von TYPEINFERENCE auf die Console setzen: - Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); + Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); } public static void test(String sourceFileToInfere, Vector mustContain){ diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav index 5952fe38..aa0aaf42 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav @@ -1,16 +1,13 @@ class OverloadingInsertTest{ - var; - overload(){ return this; } } class Overloading2{ - var2; - methode(){ + methode(var2){ return var2.overload(); } From fed7519f84cd0924cbc3f87581ca5452c72702f3 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 6 Feb 2015 15:41:24 +0100 Subject: [PATCH 038/186] =?UTF-8?q?Tests=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OverloadingInMethod2Simple.jav | 10 ++++++++++ .../OverloadingInMethod2Simple.java | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav create mode 100644 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav new file mode 100644 index 00000000..36ec2c05 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav @@ -0,0 +1,10 @@ +class OverloadingInMethod2{ + + + Integer m () { + Fun1 op; + op = (m) -> (f) -> f.apply(m); + return 1; + } + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java new file mode 100644 index 00000000..6a8057fc --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class OverloadingInMethod2Simple { + + private static final String TEST_FILE = "OverloadingInMethod2Simple.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + //mustContain.add("Fun0>> op"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 267083fbb41edab3ac683e0fb26b316d8828c140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sat, 7 Feb 2015 15:19:10 +0100 Subject: [PATCH 039/186] debug Ausgabe korriegiert! --- .../typeinference/unify/Unify.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 9a990f4c..4cfc0fbe 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1499,6 +1499,42 @@ throws MatchException bRegel = true; continue; } + + if (P.OperatorSmallerExtends()) //PL 15-02-03 Es muessen noch + { + if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) + { + + inferencelog.debug(" Extends noch zu pr�fen if( P.TA1 instanceof TypePlaceholder && P.OperatorEqual() && useSubst) //&& P.TA2 instanceof RefType ) @@ -1539,7 +1575,7 @@ throws MatchException if( !P.bSubst ) { inferencelog.debug(" ================================"); - inferencelog.debug(" SUBSTITUTE: in " + E.elementAt(q).toString() + " alle " + P.TA1.getName() + " durch " + P.TA2.getName()); + inferencelog.debug(" SUBSTITUTE: in " + H.elementAt(q).toString() + " alle " + P.TA1.getName() + " durch " + P.TA2.getName()); inferencelog.debug(" ================================"); bRegel = true; bTempSubst = true; From 7a61324c9fa6a8051f29f8672f0f5e75e927b4f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sun, 8 Feb 2015 19:19:30 +0100 Subject: [PATCH 040/186] ? ext/super TPH noch zu pr�fen From 621f1c860ff5d0b308982b221deeab85b06a5ca4 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 11 Feb 2015 14:35:37 +0100 Subject: [PATCH 041/186] Karthesisches Produkt wird leer, falls einer der Teilmengen leer ist --- src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 88aba4e2..e3fa5545 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -54,10 +54,12 @@ public class KarthesischesProdukt { private Vector> karthesischesProdukt(Vector m1, Vector m2){ Vector> ret = new Vector>(); + /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden if(m2.size() == 0){//Sonderfall, m2 ist leer: ret.add(m1); return ret; //Die restliche Berechnungen können übersprungen werden. } + */ //for(M o1 : m1){ for(M o2 : m2){ Vector v1 = new Vector(); From 6664b819d9cd5028e2efd50614d0daee25229a1b Mon Sep 17 00:00:00 2001 From: Pluemicke Date: Wed, 11 Feb 2015 14:41:27 +0100 Subject: [PATCH 042/186] Zugrifssberechtigung --- src/de/dhbwstuttgart/logger/Logger.java | 0 src/de/dhbwstuttgart/typeinference/FunNMethod.java | 0 test/plugindevelopment/TypeInsertTester.java | 0 test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav | 0 test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav | 0 test/plugindevelopment/TypeInsertTests/ImportTest.jav | 0 test/plugindevelopment/TypeInsertTests/ImportTest2.jav | 0 test/plugindevelopment/TypeInsertTests/IntTest.jav | 0 test/plugindevelopment/TypeInsertTests/LambdaTest10.jav | 0 test/plugindevelopment/TypeInsertTests/LambdaTest11.jav | 0 test/plugindevelopment/TypeInsertTests/LambdaTest2.jav | 0 test/plugindevelopment/TypeInsertTests/LambdaTest2.java | 0 test/plugindevelopment/TypeInsertTests/LambdaTest4.jav | 0 test/plugindevelopment/TypeInsertTests/LambdaTest4.java | 0 test/plugindevelopment/TypeInsertTests/LambdaTest5.jav | 0 .../TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java | 0 .../TypeInsertTests/LargeSourceCodeTests/Matrix.java | 0 .../LargeSourceCodeTests/TypedMatrixSimpleTest.java | 0 .../TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java | 0 .../TypeInsertTests/MultipleTypesInsertTester.java | 0 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav | 0 .../TypeInsertTests/OverloadingInMethod2Simple.jav | 0 .../TypeInsertTests/OverloadingInMethod2Simple.java | 0 test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav | 0 24 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 src/de/dhbwstuttgart/logger/Logger.java mode change 100644 => 100755 src/de/dhbwstuttgart/typeinference/FunNMethod.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTester.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/ImportTest2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/IntTest.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest10.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest11.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest2.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest4.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest4.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LambdaTest5.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java mode change 100644 => 100755 test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java old mode 100644 new mode 100755 diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.jav b/test/plugindevelopment/TypeInsertTests/ImportTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.jav b/test/plugindevelopment/TypeInsertTests/IntTest.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest10.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest11.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.jav old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java old mode 100644 new mode 100755 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.jav old mode 100644 new mode 100755 From acd20842e29584b1a59bcc40fa3a720d36e31b0f Mon Sep 17 00:00:00 2001 From: Pluemicke Martin Date: Tue, 17 Feb 2015 22:12:31 +0100 Subject: [PATCH 043/186] oderConstraints.filterWrongConstraints(unifier); oderConstraints.unifyUndConstraints(unifier); auskommentiert --- src/de/dhbwstuttgart/syntaxtree/SourceFile.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 06981250..429371e5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -697,8 +697,8 @@ public class SourceFile Vector> retValue = new Vector<>(); retValue = Unify.unify(pairs, finiteClosure); return retValue;}; - oderConstraints.filterWrongConstraints(unifier); - oderConstraints.unifyUndConstraints(unifier); + //oderConstraints.filterWrongConstraints(unifier); + //oderConstraints.unifyUndConstraints(unifier); typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): Vector> xConstraints = new Vector>();// = oderConstraints.getConstraints(); From 4e61ba736d5203b9ed31ea038c1585e7994e7be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 17 Feb 2015 23:23:02 +0100 Subject: [PATCH 044/186] alle Faelle P.OperatorSmallerExtends eingefuegt --- .../typeinference/unify/Unify.java | 54 +++++++++++++------ 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 234314eb..5e36d313 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1519,14 +1519,25 @@ throws MatchException continue; } - if (P.OperatorSmallerExtends()) //PL 15-02-03 Es muessen noch alle Fälle betrachtet werden. + if (P.OperatorSmallerExtends()) //PL 15-02-17 alle eingefuegt { if(P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) { inferencelog.debug(" Extends noch zu pr�fen From dc6cd6cdd0d0bb61ae815808ec48f6106a5144cf Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 24 Feb 2015 15:25:56 +0100 Subject: [PATCH 045/186] FieldDeclaration wurde der Typ in der TYPE methode nicht angepasst. Fehler behoben --- .classpath | 2 +- README.me | 15 ------- Readme.md | 42 ------------------- .../syntaxtree/FieldDeclaration.java | 1 + .../syntaxtree/statement/LocalOrFieldVar.java | 1 - .../assumptions/FieldAssumption.java | 2 +- .../assumptions/TypeAssumptions.java | 2 + 7 files changed, 5 insertions(+), 60 deletions(-) delete mode 100644 README.me delete mode 100644 Readme.md diff --git a/.classpath b/.classpath index 38eed00a..4f24f94b 100755 --- a/.classpath +++ b/.classpath @@ -4,6 +4,6 @@ - + diff --git a/README.me b/README.me deleted file mode 100644 index dfe0d318..00000000 --- a/README.me +++ /dev/null @@ -1,15 +0,0 @@ -# Typinferenz für Java 8 - -## Programmablauf - -1. SourceFile parst die Java-Dateien -2. SourceFile erstellt die Basic/Global Assumptions -3. Das Globale AssumptionSet wird anschließend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben -4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenübergreifend und jede AssumptionType darf darin nur einmalig gesetzt werden. -5. Haben alle Klassen ihrer Constraints erstellt können diese Unifiziert werden. - -## Overloading - -* Die Overloading Klasse generiert Constraints aus einem Methodenaufruf. - - diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 641d10f1..00000000 --- a/Readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# Typinferenz - -## ResultSet - -* Spezifisch für jedes SourceFile (nicht für jede Klasse) -* mehrere ResultSets pro Klasse -* - -* Enthält: - * constraintPairs - * unifiedConstraints - -## TypeInsertSet -* Stellt die Typeinsetzung für eine der generierten Lösungen dar -* Setzt alle Typen und generischen Variablen ein, welche zu dieser Lösung gehören - -## Ablauf Typinferenz: - -1. Parsen - * (Parser postProcessing) -2. Typinferenz - * Anfangspunkt SourceFile - * löst geparste Typen zu richtigen Typen auf (RefTypes, GenericVar) - * setzt TPHs ein - * bildet Constraints, welche in ResultSet gesammelt werden. ResultSet wird durch Syntaxbaum gereicht. - * Assumptions generieren - * Wird im Syntaxbaum für jeden Knoten ausgeführt und die Assumptions für darunterliegende Knoten gebildet - * -3. Unifizierung - * wird im SourceFile aufgerufen - * unifiziert Constraints aller im SourceFile vorkommenden Klassen - -4. Erstellen von TypeInsertSet - * Durchlaufen des Syntaxbaumes - * Jeder Knoten erstellt TypeInsertSets anhand des ResultSets. - * Bei Knoten, welche Generische Variablen beinhalten können werden GenericTypeInsertPoints erstellt - -5. Einsetzen eines TypeInsertSet (optional) - 1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen - 2. Alle Abhängigkeiten dieser - - \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 3fb4cf61..0ddb10b1 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -137,6 +137,7 @@ public class FieldDeclaration extends Field{ //TypeCheck, falls es sich um einen RefType handelt: ConstraintType thisType = this.getType().TYPE(localAssumptions, this); + this.setType(thisType.getType()); /* if(this.getType()!=null && (this.getType() instanceof RefType)){ Type replaceType = null; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 3266d67a..85a636a6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -185,7 +185,6 @@ public class LocalOrFieldVar extends Expr public String getTypeInformation(){ return this.getType()+" "+this.get_Name(); - } @Override diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java index 11f7caa1..fd226de3 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java @@ -4,6 +4,7 @@ import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.Field; import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; public class FieldAssumption extends Assumption { @@ -38,5 +39,4 @@ public class FieldAssumption extends Assumption { return true; } - } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 14b2ab48..48830f1f 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,6 +327,8 @@ public class TypeAssumptions { for(GenericVarAssumption ass : this.genericVarAssumptions){ //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ + //Generische Variable gefunden! + if(! ass.getAssumedType().getParentClass().equals(inNode.getParentClass())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: From d72a8030273dd9aa2b38978cc41575d4f904ce2b Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 24 Feb 2015 15:26:19 +0100 Subject: [PATCH 046/186] Dokumentation angefangen --- doc/documentation.md | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 doc/documentation.md diff --git a/doc/documentation.md b/doc/documentation.md new file mode 100644 index 00000000..958f6405 --- /dev/null +++ b/doc/documentation.md @@ -0,0 +1,69 @@ + +# Typinferenz + +## Generische Variablen +### GTVs in Constraints +* GTVs können in Constraints auf 2 Arten auftauchen. + * Als GTZ und als TPH +* In folgenden Fällen als TPH: + * Die Generische Variable ist nicht in dem Bereich definiert, in dem sie benutzt wird. + * Es kann auch vorkommen, dass die Generische Variable in der gleichen Klasse definiert wurde, aber für eine andere Methode gilt. +* In folgenden Fällen als GTV: + * Die Generische Variable ist für den Bereich definiert, in dem der Constraint generiert wird. + * In der selben Methode oder der selben Klasse. Dies lässt sich überprüfen, indem man die Klasse in welcher die GTV deklariert wurde mit der Klasse in welcher deren Typ benutzt wird vergleicht. + + +## ResultSet + +* Spezifisch für jedes SourceFile (nicht für jede Klasse) +* mehrere ResultSets pro Klasse +* + +* Enthält: + * constraintPairs + * unifiedConstraints + +## TypeInsertSet +* Stellt die Typeinsetzung für eine der generierten Lösungen dar +* Setzt alle Typen und generischen Variablen ein, welche zu dieser Lösung gehören + +## Ablauf Typinferenz: + +1. Parsen + * (Parser postProcessing) +2. Typinferenz + * Anfangspunkt SourceFile + * löst geparste Typen zu richtigen Typen auf (RefTypes, GenericVar) + * setzt TPHs ein + * bildet Constraints, welche in ResultSet gesammelt werden. ResultSet wird durch Syntaxbaum gereicht. + * Assumptions generieren + * Wird im Syntaxbaum für jeden Knoten ausgeführt und die Assumptions für darunterliegende Knoten gebildet + * +3. Unifizierung + * wird im SourceFile aufgerufen + * unifiziert Constraints aller im SourceFile vorkommenden Klassen + +4. Erstellen von TypeInsertSet + * Durchlaufen des Syntaxbaumes + * Jeder Knoten erstellt TypeInsertSets anhand des ResultSets. + * Bei Knoten, welche Generische Variablen beinhalten können werden GenericTypeInsertPoints erstellt + +5. Einsetzen eines TypeInsertSet (optional) + 1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen + 2. Alle Abhängigkeiten dieser + +# Typinferenz für Java 8 + +## Programmablauf + +1. SourceFile parst die Java-Dateien +2. SourceFile erstellt die Basic/Global Assumptions +3. Das Globale AssumptionSet wird anschließend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben +4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenübergreifend und jede AssumptionType darf darin nur einmalig gesetzt werden. +5. Haben alle Klassen ihrer Constraints erstellt können diese Unifiziert werden. + +## Overloading + +* Die Overloading Klasse generiert Constraints aus einem Methodenaufruf. + + From dc7d23d699739b635636cf46eaff1754aa77679f Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 24 Feb 2015 15:26:36 +0100 Subject: [PATCH 047/186] =?UTF-8?q?Testf=C3=A4lle=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TypeInsertTests/LambdaTest26.jav | 12 ++++++++++ .../TypeInsertTests/LambdaTest26.java | 18 +++++++++++++++ .../TypeInsertTests/LambdaTest2_2.jav | 5 ++++ .../TypeInsertTests/LambdaTest2_2.java | 23 +++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest26.jav create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest26.java create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest2_2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest26.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest26.jav new file mode 100644 index 00000000..a59e9ef3 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest26.jav @@ -0,0 +1,12 @@ +class Test { + + String var; + + A m (A x) { + return x; + } + + m2(){ + return m(var); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest26.java b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java new file mode 100644 index 00000000..9b0c2e67 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class LambdaTest26 { + + private static final String TEST_FILE = "LambdaTest26.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("A a"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.jav new file mode 100644 index 00000000..898bc03d --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.jav @@ -0,0 +1,5 @@ +class LambdaTest{ + +op = (m) -> (f) -> f.apply(this,m); + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java new file mode 100644 index 00000000..8625a71e --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java @@ -0,0 +1,23 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; + +public class LambdaTest2_2 { + + private static final String TEST_FILE = "LambdaTest2_2.jav"; + + @Test + public void run(){ + Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); + Vector mustContain = new Vector(); + //mustContain.add("S m"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 16dd89376c341e606c9d5bfa24fd146f8ab77383 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 24 Feb 2015 17:06:14 +0100 Subject: [PATCH 048/186] =?UTF-8?q?GTVDeclarationContext=20angef=C3=BCgt.?= =?UTF-8?q?=20Dadurch=20Fehler=20beim=20Umwandeln=20von=20GTZ=20in=20TPH?= =?UTF-8?q?=20behoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/documentation.md | 4 +++- src/de/dhbwstuttgart/syntaxtree/Class.java | 6 +++++- src/de/dhbwstuttgart/syntaxtree/Field.java | 6 +++++- .../syntaxtree/GTVDeclarationContext.java | 15 +++++++++++++++ .../dhbwstuttgart/syntaxtree/SyntaxTreeNode.java | 16 ++++++++++++++++ .../syntaxtree/type/GenericTypeVar.java | 5 +++++ .../assumptions/GenericVarAssumption.java | 5 +++++ .../assumptions/TypeAssumptions.java | 7 ++++--- 8 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java diff --git a/doc/documentation.md b/doc/documentation.md index 958f6405..0b88a6bc 100644 --- a/doc/documentation.md +++ b/doc/documentation.md @@ -8,10 +8,12 @@ * In folgenden Fällen als TPH: * Die Generische Variable ist nicht in dem Bereich definiert, in dem sie benutzt wird. * Es kann auch vorkommen, dass die Generische Variable in der gleichen Klasse definiert wurde, aber für eine andere Methode gilt. + * In folgenden Fällen als GTV: * Die Generische Variable ist für den Bereich definiert, in dem der Constraint generiert wird. * In der selben Methode oder der selben Klasse. Dies lässt sich überprüfen, indem man die Klasse in welcher die GTV deklariert wurde mit der Klasse in welcher deren Typ benutzt wird vergleicht. - + * Ist die GTV als Klassenparameter definiert und aus der selben Klasse wird darauf zugegriffen. + * Die GTV ist in einer Methode oder FieldDeclaration definiert, aber nicht dem selben wie darauf zugegriffen wird. ## ResultSet diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 8e05b2d3..d0e0b24a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -36,7 +36,7 @@ import de.dhbwstuttgart.typeinference.unify.Unify; // ino.class.Class.23010.declaration -public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable +public class Class extends GTVDeclarationContext implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable // ino.end // ino.class.Class.23010.body { @@ -1298,5 +1298,9 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit public Type getSuperClass(){ return this.superClass; } + @Override + public boolean isClass() { + return true; + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 2ba3ce6b..9b5a375c 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -18,7 +18,7 @@ import de.dhbwstuttgart.typeinference.Typeable; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; -public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{ +public abstract class Field extends GTVDeclarationContext implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{ protected Vector declid = new Vector(); // Vector, da 'int a, b, c, ...' auch eingeparst werden muss @@ -166,4 +166,8 @@ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Ty public void setGenericParameter(GenericDeclarationList params) { this.genericParameters = params; } + @Override + public boolean isClass() { + return false; + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java b/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java new file mode 100644 index 00000000..e2ff91a7 --- /dev/null +++ b/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java @@ -0,0 +1,15 @@ +package de.dhbwstuttgart.syntaxtree; + +import java.util.Vector; + +/** + * Beischreibt eine SyntaxTreeNode, welcher die Eigenschaft besitzt, + * dass bei seiner Deklaration auch Generische Typvariablen deklariert wurden. + */ +public abstract class GTVDeclarationContext extends SyntaxTreeNode { + @Override + public GTVDeclarationContext getGTVDeclarationContext(){ + return this; + } + public abstract boolean isClass(); +} diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index 3eed701b..d5e21063 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -110,4 +110,20 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ //TODO: Implementieren. Hier sollte ein Lookup in die Assumptions dieses Knotens erfolgen return false; } + + public SyntaxTreeNode getMatchingParentNode(SyntaxTreeNode inNode) { + SyntaxTreeNode node = inNode; + while(node!=null){ + if(node.equals(this))return this; + node = inNode.getParent(); + } + if(this.getParent()!=null)return this.getParent().getMatchingParentNode(inNode); + return null; + } + + public GTVDeclarationContext getGTVDeclarationContext(){ + if(this.getParent()==null)return null; + return this.getParent().getGTVDeclarationContext(); + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 93516ef6..658e7536 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -20,6 +20,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; // ino.class.GenericTypeVar.26505.description type=javadoc /** @@ -225,6 +226,10 @@ public class GenericTypeVar extends Type super.parserPostProcessing(parent); //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. } + + public GTVDeclarationContext getDeclarationContext() { + return this.getGTVDeclarationContext(); + } } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java index 3460bed9..02bcd8c0 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java @@ -1,10 +1,15 @@ package de.dhbwstuttgart.typeinference.assumptions; import de.dhbwstuttgart.parser.JavaClassName; +import de.dhbwstuttgart.syntaxtree.FieldDeclaration; +import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext; +import de.dhbwstuttgart.syntaxtree.Method; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.Class; public class GenericVarAssumption extends Assumption{ diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 48830f1f..0d980459 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -8,6 +8,7 @@ import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -328,8 +329,9 @@ public class TypeAssumptions { //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ //Generische Variable gefunden! - - if(! ass.getAssumedType().getParentClass().equals(inNode.getParentClass())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) + GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext(); + if(gtvDeclNode == null || gtvDeclNode.isClass() + || !gtvDeclNode.equals(inNode.getGTVDeclarationContext())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); @@ -391,7 +393,6 @@ public class TypeAssumptions { */ public void addGenericVarAssumption( GenericTypeVar genericTypeVar) { - //TODO: Hier müssen alle Bounds einzeln geaddet werden. Die Bounds müssen hierbei nicht gespeichert werden, deren Constraints generiert die TYPE-Methode der GenericVarDeclarations this.genericVarAssumptions.add(new GenericVarAssumption(genericTypeVar)); } From 20b16323195f17f3455d0ccd5704c3494708fa97 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 25 Feb 2015 11:33:06 +0100 Subject: [PATCH 049/186] =?UTF-8?q?Testf=C3=A4lle=20ausgebessert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/plugindevelopment/TypeInsertTests/LambdaTest1.java | 3 ++- test/plugindevelopment/TypeInsertTests/LambdaTest17.jav | 3 ++- test/plugindevelopment/TypeInsertTests/LambdaTest23.java | 2 +- test/plugindevelopment/TypeInsertTests/LambdaTest3.jav | 8 +++++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java index f9d3f0c2..740c8df4 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java @@ -12,7 +12,8 @@ public class LambdaTest1 { public void run(){ Vector mustContain = new Vector(); - mustContain.add("Fun0>> op"); + mustContain.add("Fun0<"); + mustContain.add("java.lang.String>>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest17.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest17.jav index 7a42eb93..a211b625 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest17.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest17.jav @@ -1,8 +1,9 @@ class ConstructorTest1{} class ConstructorTest2{ -var; + void method(){ + var; var = new ConstructorTest1(); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest23.java b/test/plugindevelopment/TypeInsertTests/LambdaTest23.java index e406551f..f97260c9 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest23.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest23.java @@ -10,7 +10,7 @@ public class LambdaTest23 { @Test public void run(){ Vector mustContain = new Vector(); - mustContain.add("Matrix ret"); + mustContain.add("java.util.Vector v1;"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav index 64a50f56..1e47f863 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav @@ -1,5 +1,7 @@ class LambdaTest{ -var; -Fun0 op = () -> {return var;}; - + void methode(){ + var; + Fun0 op; + op = () -> {return var;}; + } } \ No newline at end of file From 748a38833dc0cc418aa8aa3d6c44b821588eeb9d Mon Sep 17 00:00:00 2001 From: "Dr. Martin Pluemicke" Date: Wed, 25 Feb 2015 12:04:13 +0100 Subject: [PATCH 050/186] Bug fix in Unify Zeile 1339 Typecast vom 1. aufs 2. Argument verschoben. --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 5e36d313..3ac54308 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -1390,7 +1390,7 @@ throws MatchException if((P.TA1 instanceof GenericTypeVar || P.TA1 instanceof RefType) && (P.TA2 instanceof WildcardType && ((WildcardType)P.TA2).GetWildcardType() instanceof TypePlaceholder)) { - H.add(new Pair(((WildcardType)P.TA1).GetWildcardType(),P.TA2, PairOperator.Equal)); + H.add(new Pair(P.TA1, ((WildcardType)P.TA2).GetWildcardType(), PairOperator.Equal)); bRegel = true; continue; } From 9e99a5b20ba578d0266af7c807372e93ebe427cd Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 25 Feb 2015 16:34:29 +0100 Subject: [PATCH 051/186] =?UTF-8?q?This()-Aufruf=20anf=C3=BCgen.=20=C3=84n?= =?UTF-8?q?derungen=20an=20Constructor=20vornehmen.=20Keine=20lauff=C3=A4h?= =?UTF-8?q?ige=20Version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/parser/JavaParser.java | 1939 +++++++++-------- src/de/dhbwstuttgart/parser/JavaParser.jay | 3 + src/de/dhbwstuttgart/syntaxtree/Class.java | 16 +- .../dhbwstuttgart/syntaxtree/Constructor.java | 69 +- src/de/dhbwstuttgart/syntaxtree/Field.java | 4 + src/de/dhbwstuttgart/syntaxtree/Method.java | 28 +- .../syntaxtree/ParameterList.java | 19 +- .../syntaxtree/SyntaxTreeNode.java | 2 +- .../syntaxtree/statement/MethodCall.java | 7 + .../syntaxtree/statement/This.java | 24 +- 10 files changed, 1130 insertions(+), 981 deletions(-) diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 696165f7..8d69c14d 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -363,6 +363,7 @@ public Vector testPair = new Vector(); //t "statement : ifthenelsestatement", //t "statement : whilestatement", //t "statement : forstatement", +//t "statement : explicitconstructorinvocation", //t "expression : assignmentexpression", //t "expression : classinstancecreationexpression", //t "integraltype : INT", @@ -2073,19 +2074,25 @@ case 171: } break; case 172: - // line 1452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1450 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Statement)yyVals[0+yyTop]); + } + break; +case 173: + // line 1455 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 173: - // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 174: + // line 1459 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((NewClass)yyVals[0+yyTop]); } break; -case 174: - // line 1461 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 175: + // line 1464 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IntegerType IT = new IntegerType(null); /* #JB# 05.04.2005 */ @@ -2095,8 +2102,8 @@ case 174: yyVal=IT; } break; -case 175: - // line 1470 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 176: + // line 1473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CharacterType CT = new CharacterType(null); /* #JB# 05.04.2005 */ @@ -2106,8 +2113,8 @@ case 175: yyVal=CT; } break; -case 176: - // line 1480 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 177: + // line 1483 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((Type)yyVals[-1+yyTop]).getOffset(),((Type)yyVals[-1+yyTop]).getVariableLength()); @@ -2116,8 +2123,8 @@ case 176: yyVal = LVD; } break; -case 177: - // line 1491 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 178: + // line 1494 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((FieldDeclaration)yyVals[0+yyTop]).getOffset(),((FieldDeclaration)yyVals[0+yyTop]).getVariableLength()); @@ -2126,32 +2133,32 @@ case 177: yyVal = LVD; } break; -case 178: - // line 1501 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 179: + // line 1504 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 179: - // line 1505 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 180: + // line 1508 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((EmptyStmt)yyVals[0+yyTop]); } break; -case 180: - // line 1509 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 181: + // line 1512 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ExprStmt)yyVals[0+yyTop]); } break; -case 181: - // line 1513 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 182: + // line 1516 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Return)yyVals[0+yyTop]); } break; -case 182: - // line 1518 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 183: + // line 1521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt Ifst = new IfStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Ifst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2159,8 +2166,8 @@ case 182: yyVal=Ifst; } break; -case 183: - // line 1526 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 184: + // line 1529 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfstElst = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfstElst.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2169,8 +2176,8 @@ case 183: yyVal=IfstElst; } break; -case 184: - // line 1535 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 185: + // line 1538 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whlst = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whlst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2178,8 +2185,8 @@ case 184: yyVal=Whlst; } break; -case 185: - // line 1546 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 186: + // line 1549 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-6+yyTop]).getOffset(),((Expr)yyVals[-6+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-6+yyTop])); @@ -2191,8 +2198,8 @@ case 185: yyVal = Fst; } break; -case 186: - // line 1558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 187: + // line 1561 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2203,8 +2210,8 @@ case 186: yyVal = Fst; } break; -case 187: - // line 1569 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 188: + // line 1572 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2215,8 +2222,8 @@ case 187: yyVal = Fst; } break; -case 188: - // line 1580 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 189: + // line 1583 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-4+yyTop])); @@ -2227,8 +2234,8 @@ case 188: yyVal = Fst; } break; -case 189: - // line 1591 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 190: + // line 1594 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-4+yyTop])); @@ -2238,8 +2245,8 @@ case 189: yyVal = Fst; } break; -case 190: - // line 1601 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 191: + // line 1604 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-3+yyTop]).getOffset(),((Expr)yyVals[-3+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-3+yyTop])); @@ -2249,8 +2256,8 @@ case 190: yyVal = Fst; } break; -case 191: - // line 1611 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 192: + // line 1614 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Fst.set_head_Loop_expr(((Expr)yyVals[-2+yyTop])); @@ -2260,8 +2267,8 @@ case 191: yyVal = Fst; } break; -case 192: - // line 1621 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 193: + // line 1624 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Statement)yyVals[0+yyTop]).getOffset(),((Statement)yyVals[0+yyTop]).getVariableLength()); Fst.set_body_Loop_block(((Statement)yyVals[0+yyTop])); @@ -2270,73 +2277,73 @@ case 192: yyVal = Fst; } break; -case 193: - // line 1630 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 194: + // line 1633 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("conditionalexpression", Section.PARSER); yyVal=((Expr)yyVals[0+yyTop]); } break; -case 194: - // line 1635 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 195: + // line 1638 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 195: - // line 1641 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 196: + // line 1644 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { EmptyStmt Empst = new EmptyStmt(); yyVal=Empst; } break; -case 196: - // line 1647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 197: + // line 1650 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[-1+yyTop]); } break; -case 197: - // line 1652 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 198: + // line 1655 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return ret = new Return(-1,-1); yyVal= ret; } break; -case 198: - // line 1657 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 199: + // line 1660 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return retexp = new Return(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); retexp.set_ReturnExpr(((Expr)yyVals[-1+yyTop])); yyVal=retexp; } break; -case 199: - // line 1664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 200: + // line 1667 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 200: - // line 1668 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 201: + // line 1671 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((IfStmt)yyVals[0+yyTop]); } break; -case 201: - // line 1672 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 202: + // line 1675 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((WhileStmt)yyVals[0+yyTop]); } break; -case 202: - // line 1677 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 203: + // line 1680 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 203: - // line 1683 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 204: + // line 1686 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nParser --> Zuweisung1!\n", Section.PARSER); Assign Ass = new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2362,8 +2369,8 @@ case 203: yyVal=Ass; } break; -case 204: - // line 1708 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 205: + // line 1711 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Assign Ass =new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); LocalOrFieldVar LOFV = new LocalOrFieldVar(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2386,44 +2393,44 @@ case 204: yyVal=Ass; } break; -case 205: - // line 1731 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 206: + // line 1734 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 206: - // line 1735 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 207: - // line 1739 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1738 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 208: - // line 1743 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1742 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 209: - // line 1747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1746 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 210: - // line 1751 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1750 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 211: + // line 1754 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 211: - // line 1762 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 212: + // line 1765 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfElno = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfElno.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2432,8 +2439,8 @@ case 211: yyVal=IfElno; } break; -case 212: - // line 1771 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 213: + // line 1774 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whstno = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whstno.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2441,14 +2448,14 @@ case 212: yyVal=Whstno; } break; -case 213: - // line 1779 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 214: + // line 1782 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 214: - // line 1783 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 215: + // line 1786 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LogOr = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); OrOp OrO = new OrOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2459,20 +2466,20 @@ case 214: yyVal=LogOr; } break; -case 215: - // line 1796 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 216: + // line 1799 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 216: - // line 1801 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 217: + // line 1804 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 217: - // line 1805 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 218: + // line 1808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Lambdabody kann auch nur aus einer Expression bestehen. In diesem Fall wird ein Block erstellt, welcher als einziges Statement ein return statment mit der expression hat.*/ /*Bsp.: Aus der Expression |var=="hallo"| wird: |{return var=="hallo";}|*/ @@ -2482,20 +2489,20 @@ case 217: yyVal=ret; } break; -case 218: - // line 1815 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 219: + // line 1818 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 219: - // line 1819 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 220: + // line 1822 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ParameterList)yyVals[-1+yyTop]); } break; -case 220: - // line 1824 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 221: + // line 1827 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LambdaExpression lambda = new LambdaExpression(/*((ParameSterList)$2).getOffset(),((ParameterList)$2).getVariableLength()*/0,0); if(((ParameterList)yyVals[-2+yyTop])!=null)lambda.setParameterList(((ParameterList)yyVals[-2+yyTop])); @@ -2503,87 +2510,87 @@ case 220: yyVal=lambda; } break; -case 221: - // line 1843 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 222: + // line 1846 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; -case 222: - // line 1848 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 223: + // line 1851 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 223: - // line 1852 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 224: + // line 1855 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { TimesOp TEO = new TimesOp(-1,-1); yyVal=TEO; } break; -case 224: - // line 1857 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 225: + // line 1860 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DivideOp DEO = new DivideOp(-1,-1); yyVal=DEO; } break; -case 225: - // line 1862 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 226: + // line 1865 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ModuloOp MEO = new ModuloOp(-1,-1); yyVal=MEO; } break; -case 226: - // line 1867 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 227: + // line 1870 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PlusOp PEO = new PlusOp(-1,-1); yyVal=PEO; } break; -case 227: - // line 1872 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 228: + // line 1875 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { MinusOp MEO = new MinusOp(-1,-1); yyVal=MEO; } break; -case 228: - // line 1884 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 229: + // line 1887 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreIncExpr PRINC = new PreIncExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRINC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRINC; } break; -case 229: - // line 1891 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 230: + // line 1894 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreDecExpr PRDEC = new PreDecExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRDEC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRDEC; } break; -case 230: - // line 1898 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 231: + // line 1901 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostIncExpr PIE = new PostIncExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PIE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PIE; } break; -case 231: - // line 1905 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 232: + // line 1908 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostDecExpr PDE = new PostDecExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PDE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PDE; } break; -case 232: - // line 1913 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 233: + // line 1916 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M1", Section.PARSER); MethodCall MC = new MethodCall(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2614,8 +2621,8 @@ case 232: yyVal=MC; } break; -case 233: - // line 1943 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 234: + // line 1946 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M2", Section.PARSER); MethodCall MCarg = new MethodCall(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); @@ -2647,8 +2654,8 @@ case 233: yyVal=MCarg; } break; -case 234: - // line 1974 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 235: + // line 1977 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M3", Section.PARSER); MethodCall MCpr = new MethodCall(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); @@ -2668,8 +2675,8 @@ case 234: yyVal=MCpr; } break; -case 235: - // line 1993 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 236: + // line 1996 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M4", Section.PARSER); MethodCall MCPA = new MethodCall(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); @@ -2690,8 +2697,8 @@ case 235: yyVal=MCPA; } break; -case 236: - // line 2016 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 237: + // line 2019 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NC = new NewClass(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); NC.set_UsedId(((UsedId)yyVals[-2+yyTop])); @@ -2700,8 +2707,8 @@ case 236: yyVal=NC; } break; -case 237: - // line 2024 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 238: + // line 2027 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NCarg = new NewClass(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); NCarg.set_UsedId(((UsedId)yyVals[-3+yyTop])); @@ -2711,14 +2718,14 @@ case 237: yyVal=NCarg; } break; -case 238: - // line 2034 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 239: + // line 2037 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 239: - // line 2038 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 240: + // line 2041 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary And = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); AndOp AndO = new AndOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2729,20 +2736,20 @@ case 239: yyVal=And; } break; -case 240: - // line 2054 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 241: - // line 2058 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2057 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 242: - // line 2062 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2061 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 243: + // line 2065 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PositivExpr POSEX=new PositivExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryPlus UP= new UnaryPlus(); @@ -2751,8 +2758,8 @@ case 242: yyVal=POSEX; } break; -case 243: - // line 2070 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 244: + // line 2073 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NegativeExpr NEGEX=new NegativeExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryMinus UM=new UnaryMinus(); @@ -2761,20 +2768,20 @@ case 243: yyVal=NEGEX; } break; -case 244: - // line 2078 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 245: - // line 2083 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2081 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 246: - // line 2087 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2086 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 247: + // line 2090 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((UsedId)yyVals[0+yyTop]).get_Name().size() > 1) { @@ -2793,38 +2800,38 @@ case 246: } } break; -case 247: - // line 2105 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 248: - // line 2109 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2108 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 249: - // line 2114 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2112 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 250: - // line 2119 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2117 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 252: - // line 2125 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 251: + // line 2122 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 253: + // line 2128 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Literal)yyVals[0+yyTop]); } break; -case 253: - // line 2129 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 254: + // line 2132 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This T = new This(((Token)yyVals[0+yyTop]).getOffset(),((Token)yyVals[0+yyTop]).getLexem().length()); UsedId UT = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); @@ -2833,24 +2840,24 @@ case 253: yyVal=T; } break; -case 254: - // line 2150 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 255: + // line 2153 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 255: - // line 2154 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 256: + // line 2157 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 256: - // line 2159 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 257: + // line 2162 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 257: - // line 2161 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 258: + // line 2164 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {NotExpr NE=new NotExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryNot UN=new UnaryNot(); NE.set_UnaryNot(UN); @@ -2858,75 +2865,75 @@ case 257: yyVal=NE; } break; -case 258: - // line 2167 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 259: + // line 2170 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((CastExpr)yyVals[0+yyTop]);} break; -case 259: - // line 2169 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 260: + // line 2172 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 261: - // line 2174 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 262: + // line 2177 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {IntLiteral IL = new IntLiteral(); IL.set_Int(((Token)yyVals[0+yyTop]).String2Int()); yyVal = IL; } break; -case 262: - // line 2179 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 263: + // line 2182 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {BoolLiteral BL = new BoolLiteral(); BL.set_Bool(((Token)yyVals[0+yyTop]).String2Bool()); yyVal = BL; } break; -case 263: - // line 2183 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 264: + // line 2186 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {CharLiteral CL = new CharLiteral(); CL.set_Char(((Token)yyVals[0+yyTop]).CharInString()); yyVal=CL; } break; -case 264: - // line 2188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 265: + // line 2191 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { StringLiteral ST = new StringLiteral(); ST.set_String(((Token)yyVals[0+yyTop]).get_String()); yyVal=ST; } break; -case 265: - // line 2193 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 266: + // line 2196 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LongLiteral LL = new LongLiteral(); LL.set_Long(((Token)yyVals[0+yyTop]).String2Long()); yyVal = LL; } break; -case 266: - // line 2197 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 267: + // line 2200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FloatLiteral FL = new FloatLiteral(); FL.set_Float(((Token)yyVals[0+yyTop]).String2Float()); yyVal = FL; } break; -case 267: - // line 2202 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 268: + // line 2205 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DoubleLiteral DL = new DoubleLiteral(); DL.set_Double(((Token)yyVals[0+yyTop]).String2Double()); yyVal = DL; } break; -case 268: - // line 2208 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 269: + // line 2211 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Null NN = new Null(); yyVal=NN; } break; -case 269: - // line 2214 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 270: + // line 2217 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CastExpr CaEx=new CastExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); CaEx.set_Type(((BaseType)yyVals[-2+yyTop])); @@ -2934,25 +2941,25 @@ case 269: yyVal=CaEx; } break; -case 270: - // line 2223 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 271: + // line 2226 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 271: - // line 2227 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - } - break; case 272: - // line 2231 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2230 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + } + break; +case 273: + // line 2234 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 273: - // line 2235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 274: + // line 2238 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary EQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); EqualOp EO = new EqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2963,8 +2970,8 @@ case 273: yyVal=EQ; } break; -case 274: - // line 2245 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 275: + // line 2248 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary NEQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); NotEqualOp NEO = new NotEqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2975,14 +2982,14 @@ case 274: yyVal=NEQ; } break; -case 275: - // line 2256 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 276: + // line 2259 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 276: - // line 2260 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 277: + // line 2263 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessOp LOO = new LessOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2993,8 +3000,8 @@ case 276: yyVal=LO; } break; -case 277: - // line 2270 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 278: + // line 2273 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterOp GOO = new GreaterOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3005,8 +3012,8 @@ case 277: yyVal=GO; } break; -case 278: - // line 2280 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 279: + // line 2283 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessEquOp LEO = new LessEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3017,8 +3024,8 @@ case 278: yyVal=LE; } break; -case 279: - // line 2290 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 280: + // line 2293 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterEquOp GEO = new GreaterEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3029,8 +3036,8 @@ case 279: yyVal=GE; } break; -case 280: - // line 2300 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 281: + // line 2303 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { InstanceOf ISO=new InstanceOf(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ISO.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -3038,20 +3045,20 @@ case 280: yyVal=ISO; } break; -case 281: - // line 2308 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 282: - // line 2313 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2311 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 283: - // line 2317 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2316 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 284: + // line 2320 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary AD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); PlusOp PO = new PlusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3062,8 +3069,8 @@ case 283: yyVal=AD; } break; -case 284: - // line 2327 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 285: + // line 2330 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MI = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); MinusOp MO = new MinusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3074,14 +3081,14 @@ case 284: yyVal=MI; } break; -case 285: - // line 2338 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 286: + // line 2341 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 286: - // line 2342 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 287: + // line 2345 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary ML = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); TimesOp TO = new TimesOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3092,8 +3099,8 @@ case 286: yyVal=ML; } break; -case 287: - // line 2352 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 288: + // line 2355 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary DV = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); DivideOp DO = new DivideOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3104,8 +3111,8 @@ case 287: yyVal = DV; } break; -case 288: - // line 2362 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 289: + // line 2365 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ModuloOp MO = new ModuloOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3116,7 +3123,7 @@ case 288: yyVal =MD; } break; - // line 3120 "-" + // line 3127 "-" } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; @@ -3164,18 +3171,18 @@ case 288: 19, 44, 45, 45, 51, 51, 110, 110, 39, 39, 15, 15, 37, 37, 38, 21, 81, 81, 50, 50, 104, 104, 36, 22, 79, 47, 82, 82, 82, 82, - 82, 72, 72, 35, 35, 48, 48, 80, 80, 80, - 80, 87, 88, 84, 85, 85, 85, 85, 85, 85, - 85, 85, 70, 70, 90, 78, 91, 91, 83, 83, - 83, 69, 100, 100, 73, 73, 73, 73, 73, 73, - 89, 86, 68, 68, 102, 46, 46, 52, 52, 71, - 103, 101, 101, 101, 101, 101, 101, 74, 75, 76, - 77, 105, 105, 105, 105, 92, 92, 67, 67, 58, - 58, 58, 58, 58, 56, 56, 56, 56, 55, 66, - 66, 54, 54, 54, 54, 57, 57, 57, 65, 65, - 53, 53, 53, 53, 53, 53, 53, 53, 112, 64, - 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, - 61, 60, 60, 60, 59, 59, 59, 59, + 82, 82, 72, 72, 35, 35, 48, 48, 80, 80, + 80, 80, 87, 88, 84, 85, 85, 85, 85, 85, + 85, 85, 85, 70, 70, 90, 78, 91, 91, 83, + 83, 83, 69, 100, 100, 73, 73, 73, 73, 73, + 73, 89, 86, 68, 68, 102, 46, 46, 52, 52, + 71, 103, 101, 101, 101, 101, 101, 101, 74, 75, + 76, 77, 105, 105, 105, 105, 92, 92, 67, 67, + 58, 58, 58, 58, 58, 56, 56, 56, 56, 55, + 66, 66, 54, 54, 54, 54, 57, 57, 57, 65, + 65, 53, 53, 53, 53, 53, 53, 53, 53, 112, + 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, + 62, 61, 60, 60, 60, 59, 59, 59, 59, }; protected static final short yyLen [] = { 2, 1, 2, 3, 2, 3, 3, 1, 2, 3, 1, @@ -3195,21 +3202,21 @@ case 288: 3, 1, 1, 2, 1, 3, 4, 5, 1, 3, 3, 4, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 5, 7, 5, 9, 8, 8, 8, 7, 7, - 7, 6, 1, 1, 1, 2, 2, 3, 1, 1, - 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, - 7, 5, 1, 3, 1, 1, 1, 2, 3, 3, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 3, 4, 5, 6, 4, 5, 1, 3, 1, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 1, 1, 1, 1, 2, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - 3, 1, 3, 3, 1, 3, 3, 3, 3, 3, - 1, 1, 3, 3, 1, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 5, 7, 5, 9, 8, 8, 8, 7, + 7, 7, 6, 1, 1, 1, 2, 2, 3, 1, + 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, + 1, 7, 5, 1, 3, 1, 1, 1, 2, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 3, 4, 5, 6, 4, 5, 1, 3, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 2, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 1, 3, 1, 3, 3, 1, 3, 3, 3, 3, + 3, 1, 1, 3, 3, 1, 3, 3, 3, }; protected static final short yyDefRed [] = { 0, - 62, 153, 175, 0, 63, 174, 60, 59, 58, 0, + 62, 153, 176, 0, 63, 175, 60, 59, 58, 0, 0, 0, 61, 19, 0, 14, 15, 13, 12, 7, 0, 0, 155, 163, 154, 0, 0, 0, 0, 47, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, @@ -3228,768 +3235,796 @@ case 288: 93, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 26, 51, 29, 53, 66, 0, 86, 0, 55, 43, 44, 73, 74, 23, 0, - 25, 35, 111, 0, 108, 0, 0, 0, 253, 0, - 261, 265, 267, 266, 262, 268, 263, 264, 0, 0, - 0, 195, 97, 0, 0, 140, 0, 0, 178, 0, - 157, 0, 0, 252, 249, 0, 0, 255, 0, 206, - 207, 0, 0, 180, 167, 143, 158, 170, 171, 168, - 169, 179, 181, 205, 0, 0, 125, 151, 160, 0, - 145, 0, 0, 89, 0, 0, 0, 0, 149, 0, - 164, 141, 0, 0, 0, 0, 0, 0, 0, 244, - 285, 0, 0, 275, 0, 0, 0, 0, 0, 0, - 0, 193, 172, 87, 240, 241, 247, 248, 173, 194, - 254, 258, 99, 0, 119, 94, 90, 0, 0, 0, - 135, 0, 0, 84, 0, 101, 0, 0, 0, 27, - 0, 0, 0, 197, 0, 0, 0, 228, 229, 218, - 0, 0, 0, 98, 144, 166, 215, 0, 0, 230, - 231, 196, 226, 227, 223, 224, 225, 222, 0, 159, - 0, 152, 114, 129, 120, 92, 0, 0, 0, 242, - 243, 257, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, - 126, 0, 0, 121, 95, 0, 103, 102, 0, 0, - 112, 0, 0, 0, 198, 0, 219, 232, 161, 0, - 216, 220, 217, 0, 203, 204, 146, 150, 0, 0, - 286, 287, 288, 0, 0, 280, 278, 279, 276, 277, - 0, 0, 0, 0, 0, 0, 0, 130, 122, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 233, - 0, 236, 0, 269, 147, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 182, 0, 201, 200, 184, - 162, 234, 0, 237, 148, 192, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 191, 190, 0, 189, - 0, 0, 0, 0, 0, 183, 188, 187, 186, 0, - 0, 0, 185, 0, 212, 0, 211, + 25, 35, 111, 0, 108, 0, 0, 0, 0, 0, + 262, 266, 268, 267, 263, 269, 264, 265, 0, 0, + 0, 196, 97, 0, 0, 140, 0, 0, 179, 0, + 157, 0, 0, 253, 250, 0, 0, 256, 0, 207, + 208, 0, 0, 181, 167, 143, 158, 170, 171, 168, + 169, 180, 182, 206, 0, 0, 172, 125, 151, 160, + 0, 145, 0, 0, 89, 0, 0, 0, 0, 149, + 0, 164, 141, 0, 254, 0, 0, 0, 0, 0, + 0, 245, 286, 0, 0, 276, 0, 0, 0, 0, + 0, 0, 0, 194, 173, 87, 241, 242, 248, 249, + 174, 195, 255, 259, 99, 0, 119, 94, 90, 0, + 0, 0, 135, 0, 0, 84, 101, 0, 0, 0, + 27, 0, 0, 0, 198, 0, 0, 0, 0, 229, + 230, 219, 0, 0, 0, 98, 144, 166, 216, 0, + 0, 231, 232, 197, 227, 228, 224, 225, 226, 223, + 0, 159, 0, 152, 114, 129, 120, 92, 0, 0, + 0, 243, 244, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 126, 0, 0, 121, 95, 103, 102, 0, + 0, 112, 0, 0, 0, 199, 0, 161, 0, 0, + 220, 233, 0, 217, 221, 218, 0, 204, 205, 146, + 150, 0, 0, 287, 288, 289, 0, 0, 281, 279, + 280, 277, 278, 0, 0, 0, 0, 0, 0, 0, + 130, 122, 104, 0, 0, 0, 0, 0, 147, 0, + 0, 0, 234, 0, 237, 0, 270, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 183, 0, 202, 201, + 162, 148, 185, 235, 0, 238, 193, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 192, 191, 0, + 190, 0, 0, 0, 0, 0, 184, 189, 188, 187, + 0, 0, 0, 186, 0, 213, 0, 212, }; protected static final short yyDgoto [] = { 15, 16, 17, 68, 122, 123, 124, 59, 35, 40, 125, 94, 95, 96, 97, 98, 99, 100, 101, 215, 103, - 216, 105, 18, 19, 37, 20, 21, 268, 60, 85, - 23, 88, 61, 69, 24, 25, 26, 27, 260, 218, - 29, 30, 219, 155, 220, 392, 221, 222, 157, 251, - 321, 223, 224, 225, 226, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 228, 389, 229, 285, 286, 287, 288, 234, 0, 235, - 236, 237, 447, 238, 239, 448, 240, 241, 449, 242, - 243, 289, 31, 82, 83, 194, 150, 84, 32, 290, - 339, 328, 245, 390, 291, 33, 109, 110, 175, 308, - 111, 292, 0, 73, 45, 74, + 216, 105, 18, 19, 37, 20, 21, 270, 60, 85, + 23, 88, 61, 69, 24, 25, 26, 27, 261, 218, + 29, 30, 219, 155, 220, 395, 221, 222, 157, 252, + 323, 223, 224, 225, 226, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 228, 388, 229, 287, 288, 289, 290, 234, 0, 235, + 236, 237, 448, 238, 239, 449, 240, 241, 450, 242, + 243, 291, 31, 82, 83, 194, 150, 84, 32, 292, + 341, 330, 245, 389, 293, 33, 109, 110, 175, 247, + 111, 294, 0, 73, 45, 74, }; - protected static final short yySindex [] = { 2528, - 0, 0, 0, -247, 0, 0, 0, 0, 0, -216, - -216, -196, 0, 0, 0, 0, 0, 0, 0, 0, - 824, 20, 0, 0, 0, 41, 46, 188, 1436, 0, - 1530, 824, 0, 81, -89, 118, 130, 153, 171, -117, - 0, 1530, -68, -58, 0, 196, 217, 2528, -247, -196, - 0, 0, 824, 1530, -51, -216, -216, 1842, 0, -101, - 2, 0, 0, -40, -51, -216, 2299, 0, 30, 0, - -164, 0, 190, 0, 0, 0, 0, -89, -117, 1530, - 47, 0, 0, 327, 0, 0, 0, 0, 202, 36, - 311, -51, 0, 187, 0, 202, 0, 88, 2395, 0, - 0, 150, 324, 337, 0, 360, 101, 2463, 0, 281, - 0, 0, 2, -216, 0, 0, 0, 328, 0, 311, - 0, 2435, 0, 0, 0, 187, 366, 36, 2463, -216, - 0, -216, -216, -58, 0, 0, -101, 2, 0, 30, - -216, -51, 0, 1990, 0, 311, 88, -23, 0, 330, - 36, 0, 101, 0, 0, -216, 0, 0, 0, 111, - 0, 0, 860, -17, 311, 88, 277, 377, 36, 266, - 88, 101, 281, 2047, 0, 0, 0, 0, 0, 0, - 36, 0, 139, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 404, 0, 412, 425, 490, 0, 436, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 911, - 911, 0, 0, 19, 400, 0, 157, 111, 0, 2104, - 0, 433, 155, 0, 0, 452, -215, 0, 444, 0, + protected static final short yySindex [] = { 2662, + 0, 0, 0, -274, 0, 0, 0, 0, 0, -187, + -187, -145, 0, 0, 0, 0, 0, 0, 0, 0, + 581, 366, 0, 0, 0, 104, 116, -60, 898, 0, + 1166, 581, 0, 170, -106, 15, 177, 194, 204, -80, + 0, 1166, -24, 53, 0, 195, 208, 2662, -274, -145, + 0, 0, 581, 1166, 11, -187, -187, 1982, 0, -97, + -13, 0, 0, -12, 11, -187, 2544, 0, 36, 0, + -221, 0, 165, 0, 0, 0, 0, -106, -80, 1166, + 81, 0, 0, 173, 0, 0, 0, 0, 232, 95, + 282, 11, 0, 262, 0, 232, 0, 159, 2574, 0, + 0, 190, 315, 400, 0, 423, 167, 1219, 0, 347, + 0, 0, -13, -187, 0, 0, 0, 222, 0, 282, + 0, 2604, 0, 0, 0, 262, 414, 95, 1219, -187, + 0, -187, -187, 53, 0, 0, -97, -13, 0, 36, + -187, 11, 0, 2159, 0, 282, 159, -19, 0, 258, + 95, 0, 167, 0, 0, -187, 0, 0, 0, 187, + 0, 0, 976, -16, 282, 159, 355, 433, 95, 320, + 159, 167, 347, 2203, 0, 0, 0, 0, 0, 0, + 95, 0, 193, 0, 0, 0, 0, 0, 0, -13, + 0, 0, 0, 457, 0, 456, 461, 434, 463, 465, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 768, 0, 0, 13, 453, 0, 29, 187, 0, 2247, + 0, 452, 189, 0, 0, 470, -85, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -42, 0, 0, 0, 0, 111, - 0, 146, -51, 0, 88, 88, 448, 337, 0, 465, - 0, 0, -216, 19, 911, 911, 911, 184, -215, 0, - 0, 453, 237, 0, 112, -80, 489, 435, 413, 229, - 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 88, 36, 36, - 0, 88, 285, 0, 513, 0, 2149, 2210, 58, 0, - -216, 544, 860, 0, 504, 860, 184, 0, 0, 0, - 391, 398, 400, 0, 0, 0, 0, 624, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 860, 0, - 264, 0, 0, 0, 0, 0, -216, 526, 10, 0, - 0, 0, 911, 911, 911, 911, 911, -216, 911, 911, - 911, 911, 911, 911, 911, 911, 911, 911, 911, 0, - 0, 88, 88, 0, 0, 473, 0, 0, 2254, 860, - 0, 571, 509, 529, 0, 532, 0, 0, 0, 428, - 0, 0, 0, 538, 0, 0, 0, 0, 641, 911, - 0, 0, 0, 453, 453, 0, 0, 0, 0, 0, - 112, 112, -80, 489, 435, 413, 229, 0, 0, 521, - 450, 0, 522, 668, 523, 699, 2310, 2350, 860, 0, - 716, 0, 503, 0, 0, 531, 0, 2350, 550, 760, - 777, 533, 561, 562, 0, 0, 338, 0, 0, 0, - 0, 0, 507, 0, 0, 0, 2350, 2350, 569, 2350, - 574, 816, 860, 860, 2350, 0, 0, 0, 2350, 0, - 2350, 2350, 579, 580, 586, 0, 0, 0, 0, 2350, - 2310, 2310, 0, 345, 0, 2310, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 187, 0, 67, 11, 0, 159, 159, 460, 400, 0, + 479, 0, 0, -187, 0, 13, 768, 768, 768, 61, + -85, 0, 0, 395, 421, 0, -53, -102, 487, 432, + 407, 230, 236, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 0, 0, 0, 159, + 95, 95, 0, 159, 364, 0, 0, 2291, 2353, 64, + 0, -187, 525, 976, 0, 484, 577, 976, 61, 0, + 0, 0, 277, 621, 453, 0, 0, 0, 0, 705, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 976, 0, 143, 0, 0, 0, 0, 0, -187, 505, + -6, 0, 0, 0, 768, 768, 768, 768, 768, -187, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 0, 0, 159, 159, 0, 0, 0, 0, 2410, + 976, 0, 733, 489, 508, 0, 491, 0, 402, 510, + 0, 0, 409, 0, 0, 0, 512, 0, 0, 0, + 0, 750, 768, 0, 0, 0, 395, 395, 0, 0, + 0, 0, 0, -53, -53, -102, 487, 432, 407, 230, + 0, 0, 0, 495, 796, 500, 823, 2449, 0, 976, + 503, 2491, 0, 850, 0, 411, 0, 0, 2491, 526, + 891, 908, 507, 532, 533, 0, 0, 307, 0, 0, + 0, 0, 0, 0, 418, 0, 0, 2491, 2491, 534, + 2491, 535, 938, 976, 976, 2491, 0, 0, 0, 2491, + 0, 2491, 2491, 536, 539, 540, 0, 0, 0, 0, + 2491, 2449, 2449, 0, 316, 0, 2449, 0, }; protected static final short yyRindex [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1133, 0, 0, 0, 764, 864, 0, 0, 0, - 629, 0, 0, -76, 0, 0, 0, 0, -114, 0, - 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, + 0, 1249, 0, 0, 0, 1068, 1708, 0, 0, 0, + 586, 0, 0, -100, 0, 0, 0, 0, -79, 0, + 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 645, - 349, 0, 0, 0, 0, 0, 0, 0, 2498, 0, - 17, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 291, 0, -18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 0, 0, 0, -16, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 592, + 285, 0, 0, 0, 0, 0, 0, 0, 2632, 0, + -8, 0, 0, 0, 0, 0, 0, -20, 0, 0, + 0, 0, 0, 392, 0, -5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 24, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 341, 60, 0, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, - 0, 0, 0, 0, 587, 0, 1678, 0, 0, 0, - 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, - 0, -55, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 79, 0, 588, 0, 100, - 0, 0, 0, 0, 0, 0, 0, 581, 1895, 0, - 0, 1775, 1616, 0, -6, 1644, 1199, 1225, 1262, 1273, - 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 0, 117, 0, 0, -46, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, - 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, + 0, 0, 0, 289, 0, 0, 0, 0, -28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, + 0, 0, 0, 0, 537, 0, 448, 0, 0, 0, + 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, + 0, -17, -9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 82, 0, 538, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 653, + 2122, 0, 0, 1972, 1778, 0, 1807, 1844, 1273, 1316, + 1357, 1368, 1423, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1554, 0, + 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 148, 0, 0, 0, 0, 0, 0, 0, + 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1832, 1852, 0, 0, 0, 0, 0, - 1715, 1738, 1704, 1327, 1550, 1421, 1578, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1995, 2032, 0, 0, + 0, 0, 0, 1833, 1899, 1870, 1591, 1645, 1696, 1741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1945, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, }; - protected static final short yyGindex [] = { 604, - 0, 0, -14, 0, 534, 0, 769, 605, 603, 0, - 265, 0, -11, 0, 2362, 0, 559, 0, -10, -57, - 45, -36, 280, 0, 0, 49, 630, 1, 585, -146, - -43, 25, 21, 589, 0, 0, 402, -116, 0, 62, - -15, 40, -81, 0, -148, 0, 0, 0, 422, 331, - -24, 0, 0, 0, 0, -141, 0, 460, 67, 0, - 272, 119, 314, 310, 313, 315, 318, 0, 0, 350, - 0, 135, 0, -52, -1, 39, 74, 0, 0, -191, - -193, 1843, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 361, 290, -71, 546, 0, 0, 625, 0, 114, - 0, 0, 0, -139, 179, 353, 0, 594, 530, 0, - 0, 0, 0, 0, 0, 570, + protected static final short yyGindex [] = { 558, + 0, 0, -23, 0, 485, 0, 16, 560, 562, 0, + 123, 0, 30, 0, 2225, 0, 517, 0, -34, -47, + 41, -127, 295, 0, 0, 45, 591, 1, 546, -152, + -51, 6, 10, 547, 0, 0, 359, -113, 0, 541, + 88, 52, -86, 0, -158, 0, 0, 0, 344, 286, + -27, 0, 0, 0, 0, -142, 0, -177, 28, 0, + 14, 119, 263, 260, 264, 266, 268, 0, 0, 291, + 0, -35, 0, -48, -1, 17, 74, 0, 0, -94, + -206, 2136, -67, 0, 0, 0, 0, 0, 0, 0, + 0, 293, 172, -84, 499, 0, 0, 572, 0, 132, + 0, 0, 0, -284, 199, 367, 0, 542, 469, 471, + 0, 0, 0, 0, 0, 509, }; - protected static final short yyTable [] = { 253, - 22, 117, 227, 208, 71, 67, 254, 145, 28, 259, - 36, 38, 86, 87, 154, 185, 186, 248, 338, 210, - 149, 58, 87, 293, 193, 307, 325, 13, 22, 19, - 272, 272, 227, 58, 272, 272, 272, 272, 272, 272, - 272, 13, 108, 19, 22, 114, 30, 102, 22, 168, - 400, 129, 272, 34, 131, 127, 22, 22, 22, 320, - 164, 28, 19, 209, 139, 43, 22, 22, 51, 41, - 87, 131, 13, 130, 19, 164, 19, 164, 227, 44, - 113, 123, 116, 108, 14, 133, 87, 272, 102, 48, - 119, 230, 330, 331, 22, 257, 167, 148, 138, 22, - 46, 41, 104, 132, 39, 72, 129, 19, 22, 28, - 127, 249, 86, 325, 22, 127, 348, 272, 380, 107, - 133, 230, 22, 252, 58, 192, 22, 249, 128, 22, - 22, 46, 22, 22, 22, 131, 47, 115, 177, 294, - 55, 22, 231, 104, 217, 123, 116, 51, 22, 133, - 66, 104, 67, 28, 184, 153, 22, 190, 105, 379, - 107, 303, 124, 43, 22, 227, 227, 230, 51, 172, - 22, 361, 231, 362, 217, 117, 62, 249, 56, 127, - 57, 343, 232, 128, 128, 325, 342, 181, 63, 341, - 183, 30, 57, 160, 381, 187, 322, 258, 64, 2, - 398, 115, 43, 3, 262, 30, 118, 323, 161, 250, - 317, 317, 232, 340, 22, 6, 44, 233, 231, 86, - 217, 363, 105, 322, 364, 250, 124, 249, 164, 43, - 65, 300, 70, 134, 2, 445, 421, 227, 3, 117, - 2, 406, 14, 164, 3, 164, 391, 233, 128, 81, - 6, 135, 247, 247, 230, 230, 6, 244, 232, 433, - 116, 253, 253, 22, 22, 317, 317, 317, 254, 254, - 118, 333, 334, 335, 336, 250, 2, 209, 337, 356, - 3, 357, 13, 209, 19, 227, 227, 244, 75, 445, - 445, 453, 6, 233, 445, 272, 227, 284, 272, 272, - 272, 272, 272, 86, 249, 231, 231, 217, 217, 76, - 42, 22, 248, 248, 141, 227, 227, 19, 227, 209, - 160, 54, 246, 227, 144, 250, 230, 227, 160, 227, - 227, 126, 315, 244, 140, 296, 146, 106, 227, 227, - 227, 22, 80, 375, 227, 232, 232, 22, 370, 88, - 148, 341, 246, 317, 317, 317, 317, 317, 22, 317, - 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, - 142, 142, 170, 253, 230, 230, 156, 231, 106, 217, - 233, 233, 162, 52, 358, 230, 126, 106, 143, 178, - 42, 254, 109, 170, 52, 110, 16, 163, 246, 164, - 317, 165, 250, 174, 230, 230, 52, 230, 42, 17, - 109, 261, 230, 110, 359, 360, 230, 232, 230, 230, - 244, 244, 404, 405, 182, 231, 231, 230, 230, 230, - 267, 387, 52, 230, 341, 297, 231, 264, 388, 309, - 265, 311, 266, 160, 2, 2, 383, 384, 3, 3, - 386, 312, 233, 19, 164, 231, 231, 164, 231, 19, - 6, 6, 393, 231, 313, 232, 232, 231, 430, 231, - 231, 429, 164, 19, 19, 316, 232, 151, 231, 231, - 231, 411, 412, 327, 231, 246, 246, 120, 14, 355, - 436, 326, 244, 429, 353, 232, 232, 329, 232, 354, - 233, 233, 332, 232, 19, 267, 346, 232, 347, 232, - 232, 233, 264, 420, 423, 265, 425, 266, 232, 232, - 232, 2, 267, 2, 232, 3, 365, 3, 366, 264, - 233, 233, 265, 233, 266, 368, 367, 6, 233, 6, - 244, 244, 233, 454, 233, 233, 429, 466, 314, 369, - 429, 244, 376, 233, 233, 233, 299, 246, 439, 233, - 442, 394, 385, 451, 209, 399, 14, 426, 247, 427, - 244, 244, 428, 244, 459, 461, 267, 431, 244, 435, - 437, 440, 244, 264, 244, 244, 265, 295, 266, 455, - 457, 462, 301, 244, 244, 244, 473, 474, 475, 244, - 463, 464, 382, 267, 465, 246, 246, 484, 485, 469, - 264, 486, 487, 265, 471, 266, 246, 246, 246, 480, - 481, 246, 246, 246, 246, 246, 482, 246, 1, 424, - 407, 408, 409, 410, 2, 246, 246, 4, 246, 246, - 246, 221, 246, 246, 3, 177, 88, 246, 176, 246, - 246, 77, 79, 78, 136, 180, 267, 159, 246, 246, - 246, 53, 137, 264, 246, 349, 265, 140, 266, 318, - 319, 397, 263, 267, 246, 414, 344, 345, 413, 415, - 264, 432, 416, 265, 199, 266, 417, 195, 395, 118, - 201, 202, 203, 204, 205, 206, 207, 208, 14, 396, - 267, 173, 304, 188, 246, 210, 211, 264, 438, 0, - 265, 0, 266, 0, 19, 0, 0, 0, 0, 371, - 0, 19, 19, 374, 350, 351, 352, 19, 19, 19, - 19, 267, 0, 0, 19, 0, 0, 0, 264, 0, - 0, 265, 0, 266, 0, 0, 144, 263, 267, 0, - 0, 0, 0, 0, 0, 264, 452, 441, 265, 199, - 266, 0, 0, 0, 263, 201, 202, 203, 204, 205, - 206, 207, 208, 14, 0, 0, 199, 0, 0, 0, - 210, 211, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 267, 418, 419, 0, 0, 210, 211, 264, - 458, 0, 265, 0, 266, 0, 0, 136, 0, 267, - 0, 0, 401, 402, 403, 0, 264, 460, 263, 265, - 0, 266, 0, 0, 0, 136, 0, 0, 112, 115, - 199, 0, 0, 0, 0, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 14, 263, 136, 0, 267, 0, - 0, 210, 211, 246, 0, 264, 472, 199, 265, 434, - 266, 0, 0, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, - 0, 176, 246, 246, 246, 246, 246, 246, 246, 246, - 0, 0, 267, 0, 221, 221, 221, 221, 263, 264, - 0, 221, 265, 0, 266, 189, 191, 138, 0, 0, - 199, 0, 0, 0, 0, 263, 201, 202, 203, 204, - 205, 206, 207, 208, 14, 138, 0, 199, 0, 0, - 0, 210, 211, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 263, 267, 0, 0, 0, 0, 210, 211, - 264, 0, 0, 265, 199, 266, 0, 0, 310, 0, - 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, - 0, 0, 0, 263, 0, 210, 211, 0, 0, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 263, 201, 202, 203, 204, 205, 206, 207, 208, 14, - 0, 0, 199, 0, 0, 0, 210, 211, 201, 202, - 203, 204, 205, 206, 207, 208, 14, 0, 0, 0, - 136, 136, 0, 210, 211, 136, 136, 0, 0, 0, - 0, 0, 136, 0, 263, 0, 0, 136, 0, 136, - 136, 136, 136, 136, 136, 0, 199, 136, 0, 0, - 0, 263, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 0, 199, 136, 0, 0, 210, 211, 201, + protected static final short yyTable [] = { 255, + 22, 227, 145, 260, 86, 87, 363, 149, 364, 154, + 36, 38, 211, 327, 87, 308, 58, 254, 185, 186, + 250, 249, 30, 102, 295, 58, 34, 193, 22, 117, + 114, 227, 320, 321, 403, 164, 250, 19, 131, 393, + 13, 209, 67, 28, 22, 131, 132, 19, 22, 210, + 164, 19, 164, 322, 13, 139, 22, 22, 22, 168, + 43, 19, 87, 133, 102, 41, 22, 22, 324, 113, + 16, 119, 167, 62, 43, 112, 115, 227, 87, 130, + 51, 340, 19, 17, 46, 13, 250, 138, 44, 352, + 353, 354, 19, 136, 22, 230, 127, 41, 104, 22, + 324, 327, 131, 148, 86, 258, 43, 344, 22, 58, + 343, 350, 123, 14, 22, 71, 192, 436, 116, 177, + 253, 133, 22, 342, 381, 230, 22, 286, 176, 22, + 22, 127, 22, 22, 22, 184, 296, 305, 250, 104, + 115, 22, 231, 105, 217, 108, 190, 104, 22, 455, + 380, 127, 189, 191, 129, 39, 22, 124, 67, 51, + 232, 56, 316, 117, 22, 227, 227, 30, 128, 345, + 22, 230, 231, 327, 217, 57, 123, 404, 405, 406, + 51, 30, 116, 325, 57, 133, 108, 66, 28, 126, + 232, 118, 42, 259, 46, 127, 401, 2, 382, 365, + 263, 3, 366, 54, 115, 311, 47, 105, 134, 129, + 319, 319, 86, 6, 22, 250, 142, 233, 231, 360, + 217, 124, 332, 333, 80, 437, 135, 117, 372, 55, + 170, 343, 128, 160, 143, 63, 232, 227, 2, 64, + 14, 2, 3, 394, 126, 3, 409, 233, 161, 361, + 362, 170, 19, 164, 6, 118, 164, 6, 19, 230, + 230, 255, 255, 65, 22, 142, 22, 319, 319, 319, + 2, 164, 19, 19, 3, 244, 70, 384, 385, 254, + 254, 209, 390, 178, 209, 227, 6, 75, 116, 227, + 248, 248, 19, 233, 396, 13, 227, 86, 249, 249, + 76, 254, 19, 19, 42, 244, 231, 231, 217, 217, + 2, 81, 22, 209, 3, 227, 227, 391, 227, 255, + 343, 148, 42, 227, 232, 232, 6, 227, 109, 227, + 227, 230, 110, 446, 335, 336, 337, 338, 227, 227, + 227, 339, 246, 22, 227, 424, 109, 426, 141, 22, + 110, 244, 106, 14, 144, 319, 319, 319, 319, 319, + 22, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 319, 319, 246, 162, 410, 411, 412, 413, 231, 230, + 217, 233, 233, 230, 164, 407, 408, 446, 446, 440, + 230, 443, 446, 106, 451, 146, 232, 52, 160, 164, + 2, 164, 106, 319, 3, 460, 462, 160, 52, 230, + 230, 43, 230, 298, 485, 486, 6, 230, 246, 488, + 52, 230, 377, 230, 230, 44, 231, 474, 475, 476, + 231, 357, 230, 230, 230, 140, 355, 231, 230, 244, + 244, 356, 431, 209, 232, 430, 52, 156, 232, 433, + 88, 456, 430, 233, 430, 232, 231, 231, 467, 231, + 163, 430, 164, 358, 231, 359, 269, 165, 231, 174, + 231, 231, 182, 266, 232, 232, 267, 232, 268, 231, + 231, 231, 232, 414, 415, 231, 232, 262, 232, 232, + 248, 299, 315, 310, 312, 313, 160, 232, 232, 232, + 314, 233, 317, 232, 318, 233, 246, 246, 222, 297, + 328, 244, 233, 19, 303, 331, 334, 329, 348, 2, + 19, 19, 349, 3, 367, 368, 19, 19, 19, 19, + 369, 233, 233, 19, 233, 6, 370, 397, 76, 233, + 28, 371, 386, 233, 402, 233, 233, 427, 428, 429, + 432, 434, 151, 438, 233, 233, 233, 269, 441, 244, + 233, 452, 120, 244, 266, 463, 458, 267, 48, 268, + 244, 464, 465, 466, 470, 472, 481, 2, 246, 482, + 483, 3, 487, 383, 72, 1, 2, 4, 28, 244, + 244, 3, 244, 6, 136, 178, 88, 244, 107, 346, + 347, 244, 177, 244, 244, 77, 180, 128, 78, 269, + 301, 79, 244, 244, 244, 159, 266, 387, 244, 267, + 14, 268, 53, 137, 351, 140, 246, 417, 400, 416, + 246, 398, 418, 399, 153, 419, 118, 246, 420, 107, + 195, 306, 188, 373, 309, 0, 0, 376, 172, 173, + 0, 0, 0, 269, 0, 0, 246, 246, 0, 246, + 266, 392, 128, 267, 246, 268, 181, 0, 246, 183, + 246, 246, 0, 0, 187, 0, 0, 0, 0, 246, + 246, 246, 0, 0, 0, 246, 0, 0, 251, 247, + 247, 0, 0, 247, 247, 247, 247, 247, 0, 247, + 0, 0, 0, 0, 251, 0, 0, 0, 264, 0, + 302, 247, 247, 222, 247, 0, 0, 421, 422, 0, + 265, 0, 0, 0, 0, 0, 201, 202, 203, 204, + 205, 206, 207, 208, 14, 0, 0, 269, 0, 0, + 0, 210, 211, 0, 266, 0, 247, 267, 76, 268, + 0, 0, 0, 0, 251, 247, 247, 0, 0, 0, + 0, 222, 222, 222, 222, 269, 0, 0, 222, 0, + 0, 0, 266, 0, 0, 267, 247, 268, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 0, 0, 266, + 435, 425, 267, 0, 268, 0, 0, 0, 0, 264, + 269, 0, 0, 0, 0, 0, 251, 266, 0, 0, + 267, 265, 268, 0, 0, 0, 0, 201, 202, 203, + 204, 205, 206, 207, 208, 14, 0, 144, 269, 0, + 0, 0, 210, 211, 0, 266, 439, 1, 267, 0, + 268, 0, 0, 4, 0, 0, 0, 0, 0, 5, + 0, 264, 0, 0, 0, 269, 7, 8, 9, 0, + 11, 12, 266, 265, 13, 267, 0, 268, 0, 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, 0, - 1, 0, 0, 0, 210, 211, 4, 0, 0, 0, - 263, 0, 5, 0, 0, 0, 0, 0, 0, 7, - 8, 9, 199, 11, 12, 0, 0, 13, 201, 202, - 203, 204, 205, 206, 207, 208, 14, 0, 0, 0, - 138, 138, 0, 210, 211, 138, 138, 0, 0, 0, - 0, 0, 138, 0, 263, 0, 0, 138, 0, 138, - 138, 138, 138, 138, 138, 0, 199, 138, 0, 0, - 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 0, 0, 138, 0, 0, 210, 211, 76, - 76, 0, 76, 76, 76, 76, 76, 76, 0, 76, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 76, 0, 0, 76, 0, 0, 199, 0, 0, + 0, 442, 269, 251, 210, 211, 0, 0, 0, 266, + 454, 0, 267, 0, 268, 264, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, - 0, 0, 0, 76, 245, 245, 76, 0, 245, 245, - 245, 245, 245, 0, 245, 259, 0, 0, 0, 259, - 259, 259, 259, 259, 259, 259, 245, 245, 0, 245, - 0, 0, 0, 0, 0, 76, 76, 259, 259, 0, - 259, 250, 250, 0, 0, 250, 250, 250, 250, 250, - 250, 250, 246, 246, 0, 0, 246, 246, 246, 246, - 246, 245, 246, 250, 250, 0, 250, 0, 0, 0, - 0, 0, 259, 0, 246, 246, 0, 246, 238, 238, - 0, 0, 238, 238, 238, 238, 238, 238, 238, 213, - 213, 245, 0, 213, 213, 213, 213, 213, 213, 213, - 238, 238, 259, 238, 0, 0, 0, 0, 0, 246, - 0, 213, 213, 0, 213, 202, 202, 0, 0, 202, - 202, 202, 202, 202, 202, 202, 0, 0, 250, 0, - 0, 0, 0, 0, 0, 238, 0, 202, 202, 246, - 202, 0, 0, 260, 0, 0, 213, 260, 260, 260, - 260, 260, 260, 260, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 260, 0, 260, 76, - 76, 0, 202, 0, 76, 76, 213, 0, 0, 0, - 0, 76, 0, 0, 0, 76, 76, 0, 76, 76, - 76, 76, 76, 76, 76, 0, 76, 0, 0, 0, - 260, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 0, 0, 0, 0, 0, 0, 239, 239, 0, - 245, 239, 239, 239, 239, 239, 239, 239, 0, 0, - 0, 259, 0, 0, 0, 0, 0, 0, 0, 239, - 239, 0, 239, 0, 0, 0, 0, 0, 0, 245, - 245, 245, 245, 245, 245, 245, 245, 250, 0, 0, - 259, 259, 259, 259, 259, 259, 259, 259, 246, 0, - 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 250, 250, 250, 250, - 250, 250, 250, 250, 238, 0, 0, 246, 246, 246, - 246, 246, 246, 246, 246, 213, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, - 238, 202, 0, 0, 213, 213, 213, 213, 213, 0, - 213, 213, 0, 0, 0, 0, 251, 251, 0, 0, - 251, 251, 251, 251, 251, 251, 251, 0, 0, 260, - 202, 202, 202, 202, 0, 202, 202, 202, 251, 251, - 0, 251, 0, 0, 214, 214, 0, 0, 214, 214, - 214, 214, 214, 214, 214, 0, 0, 0, 260, 260, - 260, 260, 260, 260, 260, 260, 214, 214, 0, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 281, 0, 0, 281, 281, 0, 281, - 0, 281, 281, 0, 0, 0, 0, 0, 0, 0, - 0, 214, 0, 251, 281, 281, 0, 281, 0, 0, - 270, 270, 0, 0, 270, 270, 270, 270, 270, 270, - 270, 0, 1, 239, 0, 0, 0, 0, 49, 0, - 0, 214, 270, 270, 5, 270, 0, 0, 0, 281, - 0, 7, 8, 9, 0, 0, 50, 0, 0, 13, - 0, 0, 239, 239, 239, 239, 239, 239, 239, 239, - 0, 0, 0, 0, 0, 0, 0, 270, 221, 281, + 208, 14, 0, 269, 0, 247, 0, 0, 210, 211, + 266, 459, 0, 267, 0, 268, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 0, 0, 266, 461, 0, + 267, 0, 268, 0, 247, 247, 247, 247, 247, 247, + 247, 247, 0, 0, 0, 0, 222, 222, 222, 222, + 269, 0, 0, 222, 0, 0, 0, 266, 473, 264, + 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 0, 0, 0, 0, 0, 201, 202, 203, + 204, 205, 206, 207, 208, 14, 0, 264, 269, 0, + 0, 0, 210, 211, 0, 266, 0, 0, 267, 265, + 268, 0, 0, 0, 264, 201, 202, 203, 204, 205, + 206, 207, 208, 14, 0, 0, 265, 0, 0, 0, + 210, 211, 201, 202, 203, 204, 205, 206, 207, 208, + 14, 0, 0, 0, 265, 0, 0, 210, 211, 0, + 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, + 264, 0, 0, 0, 0, 210, 211, 0, 0, 0, + 0, 0, 265, 0, 0, 0, 0, 0, 201, 202, + 203, 204, 205, 206, 207, 208, 14, 264, 0, 0, + 0, 0, 0, 210, 211, 0, 0, 0, 0, 265, + 0, 136, 0, 0, 0, 201, 202, 203, 204, 205, + 206, 207, 208, 14, 264, 0, 0, 0, 0, 136, + 210, 211, 0, 0, 0, 0, 265, 0, 0, 0, + 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, + 14, 0, 0, 0, 1, 0, 0, 210, 211, 0, + 49, 0, 0, 0, 0, 264, 5, 0, 0, 0, + 0, 0, 0, 7, 8, 9, 0, 265, 50, 0, + 0, 13, 264, 201, 202, 203, 204, 205, 206, 207, + 208, 14, 0, 0, 265, 0, 0, 0, 210, 211, + 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, + 0, 0, 264, 0, 0, 210, 211, 0, 0, 0, + 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, + 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, + 0, 0, 0, 0, 0, 210, 211, 0, 0, 0, + 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 265, 0, 0, 0, 0, 0, 201, 202, + 203, 204, 205, 206, 207, 208, 14, 0, 92, 0, + 0, 0, 0, 210, 211, 76, 76, 0, 76, 76, + 76, 76, 76, 76, 0, 76, 0, 0, 246, 246, + 0, 0, 246, 246, 246, 246, 246, 76, 246, 260, + 76, 0, 0, 260, 260, 260, 260, 260, 260, 260, + 246, 246, 0, 246, 136, 136, 0, 0, 0, 136, + 136, 260, 260, 0, 260, 0, 136, 0, 0, 76, + 0, 136, 76, 136, 136, 136, 136, 136, 136, 0, + 0, 136, 251, 251, 0, 246, 251, 251, 251, 251, + 251, 251, 251, 0, 0, 0, 260, 0, 136, 0, + 0, 76, 76, 0, 251, 251, 0, 251, 0, 0, + 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, + 0, 0, 0, 239, 239, 0, 260, 239, 239, 239, + 239, 239, 239, 239, 214, 214, 0, 0, 214, 214, + 214, 214, 214, 214, 214, 239, 239, 0, 239, 0, + 0, 0, 1, 0, 0, 0, 214, 214, 4, 214, + 0, 0, 0, 0, 5, 0, 0, 0, 0, 251, + 0, 7, 8, 9, 0, 0, 12, 0, 0, 13, + 239, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 203, 214, 0, 203, 203, 203, 203, 203, 203, 203, + 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 3, 203, 203, 0, 203, 0, 0, 5, 0, 0, + 0, 214, 6, 0, 7, 8, 9, 0, 0, 0, + 0, 0, 13, 0, 0, 76, 76, 0, 0, 169, + 76, 76, 0, 0, 0, 0, 203, 76, 0, 120, + 0, 76, 76, 0, 76, 76, 76, 76, 76, 76, + 76, 0, 76, 0, 246, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 203, 0, 0, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, + 0, 0, 0, 246, 246, 246, 246, 246, 246, 246, + 246, 0, 0, 0, 260, 260, 260, 260, 260, 260, + 260, 260, 0, 0, 0, 0, 0, 0, 251, 0, + 247, 247, 0, 0, 247, 247, 247, 247, 247, 0, + 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 247, 247, 0, 247, 0, 251, 251, 251, + 251, 251, 251, 251, 251, 0, 0, 261, 0, 239, + 0, 261, 261, 261, 261, 261, 261, 261, 0, 0, + 214, 0, 0, 0, 0, 0, 0, 247, 0, 261, + 261, 0, 261, 0, 0, 0, 0, 0, 239, 239, + 239, 239, 239, 239, 239, 239, 0, 0, 0, 214, + 214, 214, 214, 214, 0, 214, 214, 247, 0, 0, + 0, 252, 252, 0, 261, 252, 252, 252, 252, 252, + 252, 252, 0, 0, 0, 203, 0, 0, 0, 0, + 0, 0, 0, 252, 252, 0, 252, 0, 0, 0, + 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 203, 203, 203, 0, 203, + 203, 203, 240, 240, 0, 0, 240, 240, 240, 240, + 240, 240, 240, 0, 0, 0, 0, 0, 0, 0, + 0, 138, 0, 0, 240, 240, 0, 240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 138, + 0, 0, 0, 0, 0, 0, 0, 215, 215, 0, + 0, 215, 215, 215, 215, 215, 215, 215, 0, 240, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, + 215, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 282, 282, 0, 0, 282, 282, + 0, 282, 0, 282, 282, 0, 247, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 282, 282, 0, 282, + 0, 0, 0, 273, 273, 0, 0, 273, 273, 273, + 273, 273, 273, 273, 0, 247, 247, 247, 247, 247, + 247, 247, 247, 261, 215, 273, 0, 0, 0, 274, + 274, 282, 0, 274, 274, 274, 274, 274, 274, 274, 271, 271, 0, 0, 271, 271, 271, 271, 271, 271, - 271, 273, 273, 0, 0, 273, 273, 273, 273, 273, - 273, 273, 271, 271, 0, 271, 0, 270, 76, 0, - 0, 0, 0, 273, 274, 274, 0, 0, 274, 274, - 274, 274, 274, 274, 274, 0, 1, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 274, 271, 5, 0, - 0, 0, 0, 0, 0, 7, 8, 9, 273, 0, - 12, 0, 282, 13, 0, 282, 0, 282, 282, 282, - 282, 0, 251, 0, 0, 0, 0, 271, 0, 0, - 0, 274, 0, 282, 282, 0, 282, 0, 273, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 214, 251, 251, 251, 251, 251, 251, 251, 251, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 282, 283, - 0, 0, 283, 0, 283, 283, 283, 283, 0, 214, - 214, 214, 214, 214, 0, 214, 214, 0, 281, 284, - 283, 283, 284, 283, 284, 284, 284, 284, 282, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 284, 0, 284, 0, 0, 270, 281, 281, 281, - 281, 281, 281, 281, 281, 283, 0, 0, 0, 0, - 0, 256, 256, 0, 0, 256, 256, 256, 256, 256, - 256, 256, 0, 0, 0, 284, 270, 270, 0, 270, - 270, 270, 270, 256, 256, 283, 256, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 0, 0, 284, 271, 0, 76, 0, - 0, 0, 0, 0, 167, 246, 246, 0, 256, 0, - 0, 221, 221, 221, 221, 0, 0, 0, 221, 0, - 0, 0, 0, 167, 0, 0, 271, 271, 0, 271, - 271, 271, 271, 0, 0, 0, 273, 0, 256, 273, - 273, 273, 273, 273, 0, 0, 0, 0, 0, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 274, 274, 274, 274, 274, 282, 212, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 167, 0, 167, - 0, 0, 0, 0, 0, 0, 282, 282, 282, 282, - 282, 282, 282, 282, 0, 0, 214, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 3, 283, 212, 0, 0, 0, 0, - 5, 0, 144, 0, 213, 6, 0, 7, 8, 9, - 0, 0, 0, 0, 284, 89, 0, 0, 0, 0, - 0, 0, 90, 283, 283, 283, 283, 283, 283, 283, - 283, 0, 91, 214, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 284, 284, 284, 284, 284, 284, - 284, 0, 212, 0, 0, 0, 0, 256, 0, 144, - 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, + 271, 274, 261, 261, 261, 261, 261, 261, 261, 261, + 273, 282, 271, 271, 0, 271, 272, 272, 0, 0, + 272, 272, 272, 272, 272, 272, 272, 252, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 272, 272, + 273, 272, 0, 0, 0, 275, 275, 271, 0, 275, + 275, 275, 275, 275, 275, 275, 252, 252, 252, 252, + 252, 252, 252, 252, 0, 0, 274, 275, 0, 0, + 0, 0, 0, 272, 138, 138, 0, 271, 240, 138, + 138, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 0, 138, 0, 138, 138, 138, 138, 138, 138, 0, + 0, 138, 275, 272, 0, 0, 0, 240, 240, 240, + 240, 240, 240, 240, 240, 0, 0, 0, 138, 283, + 0, 0, 283, 215, 283, 283, 283, 283, 0, 0, + 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, + 283, 283, 284, 283, 0, 284, 0, 284, 284, 284, + 284, 92, 215, 215, 215, 215, 215, 0, 215, 215, + 282, 0, 0, 284, 284, 0, 284, 0, 0, 0, + 0, 0, 0, 0, 0, 283, 0, 0, 0, 285, + 0, 0, 285, 0, 285, 285, 285, 285, 0, 282, + 282, 282, 282, 282, 282, 282, 282, 0, 284, 0, + 285, 285, 0, 285, 0, 283, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 93, 0, 273, 0, + 0, 273, 273, 273, 273, 273, 271, 0, 284, 0, + 0, 0, 0, 0, 0, 285, 0, 0, 0, 167, + 0, 0, 0, 0, 274, 0, 0, 274, 274, 274, + 274, 274, 272, 0, 0, 0, 271, 271, 167, 271, + 271, 271, 271, 0, 0, 285, 0, 0, 257, 257, + 0, 0, 257, 257, 257, 257, 257, 257, 257, 0, + 0, 0, 272, 272, 0, 272, 272, 272, 272, 0, + 257, 257, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 0, 0, 0, 0, 0, 256, 256, 256, 256, - 256, 256, 167, 0, 0, 0, 167, 212, 0, 0, - 0, 199, 0, 0, 0, 167, 167, 0, 167, 0, - 0, 0, 0, 0, 0, 0, 144, 167, 324, 0, - 0, 167, 0, 0, 0, 0, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 0, 2, 0, 214, - 0, 3, 167, 167, 0, 0, 0, 0, 0, 0, - 196, 197, 0, 6, 0, 0, 0, 0, 212, 446, - 450, 144, 198, 377, 0, 0, 199, 0, 0, 0, - 456, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 0, 0, 214, 0, 0, 0, 210, 211, 467, - 468, 0, 470, 0, 2, 0, 0, 476, 3, 0, - 0, 477, 212, 478, 479, 0, 0, 196, 197, 0, - 6, 0, 483, 446, 450, 0, 0, 0, 476, 198, - 0, 0, 144, 305, 378, 0, 0, 0, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 0, 214, - 0, 0, 0, 0, 210, 211, 0, 0, 92, 0, - 0, 2, 0, 0, 0, 3, 0, 0, 212, 0, - 0, 0, 0, 0, 196, 197, 144, 6, 422, 0, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 214, - 199, 0, 0, 0, 0, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 0, 2, 0, 212, 0, - 3, 210, 211, 0, 0, 0, 0, 0, 0, 196, - 197, 0, 6, 121, 0, 0, 0, 0, 0, 0, - 0, 198, 144, 0, 0, 199, 0, 0, 0, 0, + 275, 0, 0, 275, 275, 275, 275, 275, 0, 0, + 0, 0, 167, 0, 167, 257, 0, 212, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 0, 0, 214, 3, 283, 257, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 6, 0, 7, 8, 9, + 0, 212, 0, 0, 0, 89, 0, 284, 0, 0, + 0, 0, 90, 283, 283, 283, 283, 283, 283, 283, + 283, 144, 91, 213, 0, 0, 214, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 284, 284, 284, 284, + 284, 284, 284, 284, 285, 212, 0, 0, 0, 0, + 0, 0, 0, 0, 147, 0, 0, 0, 152, 0, + 0, 0, 0, 0, 0, 144, 0, 307, 0, 0, + 214, 166, 171, 285, 285, 285, 285, 285, 285, 285, + 285, 0, 0, 0, 0, 0, 0, 167, 0, 212, + 152, 167, 166, 171, 0, 0, 200, 0, 0, 0, + 167, 167, 0, 167, 0, 0, 0, 0, 0, 144, + 0, 326, 167, 0, 0, 256, 167, 257, 0, 0, + 0, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 0, 214, 300, 257, 0, 304, 167, 167, 0, + 0, 0, 0, 0, 0, 257, 0, 304, 0, 0, + 0, 212, 0, 144, 0, 378, 2, 0, 0, 0, + 3, 0, 0, 257, 257, 257, 257, 257, 257, 196, + 197, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 214, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 0, 147, 0, 0, 92, 152, 210, 211, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 166, 171, - 0, 3, 144, 0, 0, 0, 0, 0, 0, 0, - 196, 197, 0, 6, 0, 0, 0, 152, 0, 166, - 171, 0, 198, 0, 92, 0, 199, 0, 0, 0, + 2, 0, 0, 0, 3, 0, 210, 211, 212, 0, + 0, 0, 0, 196, 197, 144, 6, 379, 0, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 214, 199, + 0, 0, 0, 0, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 2, 0, 0, 212, 3, 0, + 210, 211, 0, 0, 0, 0, 0, 196, 197, 0, + 6, 0, 0, 0, 0, 374, 375, 0, 0, 198, + 214, 0, 144, 199, 423, 0, 0, 0, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 2, 212, + 0, 0, 3, 0, 210, 211, 0, 0, 0, 0, + 0, 196, 197, 447, 6, 0, 0, 453, 0, 0, + 0, 144, 0, 198, 457, 0, 0, 199, 0, 0, + 0, 0, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 0, 468, 469, 0, 471, 0, 210, 211, + 0, 477, 0, 92, 0, 478, 0, 479, 480, 0, + 2, 0, 0, 144, 3, 0, 484, 447, 453, 0, + 0, 0, 477, 196, 197, 0, 6, 0, 0, 0, + 0, 0, 0, 92, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, + 210, 211, 0, 92, 0, 0, 0, 2, 121, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 196, 197, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 61, 198, 0, 0, 0, 199, 0, 158, 0, 0, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 2, 255, 0, 256, 3, 0, 210, 211, 158, - 0, 0, 92, 0, 196, 197, 0, 6, 0, 0, - 298, 0, 0, 302, 0, 0, 198, 0, 0, 0, - 199, 0, 256, 0, 302, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 1, 2, 61, 0, 179, - 3, 210, 211, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 6, 0, 7, 8, 9, 0, 0, 0, - 196, 443, 13, 0, 0, 0, 0, 0, 0, 90, - 0, 0, 198, 0, 0, 0, 199, 0, 0, 120, - 0, 444, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 0, 0, 0, 0, 0, 210, 211, 0, - 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, - 0, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 1, 2, 0, 0, 0, 3, 210, 211, 0, - 372, 373, 0, 5, 0, 0, 0, 0, 6, 0, - 7, 8, 9, 0, 0, 0, 0, 0, 89, 0, - 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, - 0, 1, 2, 0, 0, 91, 3, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, - 7, 8, 9, 0, 0, 0, 0, 0, 13, 1, - 2, 0, 0, 0, 3, 90, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 120, 6, 0, 7, 8, - 9, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 169, 61, 61, 0, 0, 0, 61, - 0, 0, 0, 120, 0, 0, 61, 0, 0, 0, - 0, 61, 0, 61, 61, 61, 0, 0, 0, 0, - 0, 61, 0, 0, 1, 2, 0, 0, 61, 3, - 4, 0, 0, 0, 0, 0, 5, 0, 61, 0, - 0, 6, 0, 7, 8, 9, 10, 11, 12, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, + 209, 0, 0, 0, 0, 0, 0, 210, 211, 196, + 444, 0, 0, 0, 0, 0, 0, 0, 179, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, + 445, 201, 202, 203, 204, 205, 206, 207, 208, 14, + 0, 0, 0, 0, 0, 0, 210, 211, 0, 0, + 0, 196, 197, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, + 1, 2, 0, 0, 0, 3, 0, 0, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 6, 0, 7, + 8, 9, 0, 0, 0, 0, 0, 13, 0, 0, + 1, 2, 0, 0, 90, 3, 0, 0, 0, 0, + 0, 0, 5, 0, 120, 0, 0, 6, 0, 7, + 8, 9, 0, 0, 0, 0, 0, 89, 0, 0, + 1, 2, 0, 0, 90, 3, 0, 0, 0, 0, + 0, 0, 5, 0, 91, 0, 0, 6, 0, 7, + 8, 9, 0, 0, 0, 0, 0, 13, 61, 61, + 0, 0, 0, 61, 90, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 120, 61, 0, 61, 61, 61, + 0, 0, 0, 0, 0, 61, 0, 0, 1, 2, + 0, 0, 61, 3, 4, 0, 0, 0, 0, 0, + 5, 0, 61, 0, 0, 6, 0, 7, 8, 9, + 10, 11, 12, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, }; - protected short yyCheck[] = new short[2830]; + protected short yyCheck[] = new short[2964]; } class yyCheck0 { protected static final short yyCheck0 [] = { 46, - 0, 42, 144, 59, 63, 123, 46, 89, 123, 156, - 10, 11, 56, 57, 96, 132, 133, 41, 61, 59, - 92, 123, 66, 41, 141, 174, 220, 46, 28, 46, - 37, 38, 174, 123, 41, 42, 43, 44, 45, 46, - 47, 60, 58, 60, 44, 44, 123, 58, 48, 107, - 41, 67, 59, 301, 69, 67, 56, 57, 58, 41, - 44, 0, 46, 59, 79, 46, 66, 67, 29, 21, - 114, 59, 91, 44, 91, 59, 60, 61, 220, 60, - 60, 59, 59, 99, 301, 59, 130, 94, 99, 28, - 66, 144, 308, 309, 94, 153, 107, 40, 78, 99, - 91, 53, 58, 268, 301, 44, 122, 91, 108, 48, - 122, 148, 156, 307, 114, 59, 263, 124, 61, 58, - 285, 174, 122, 148, 123, 140, 126, 164, 67, 129, - 130, 91, 132, 133, 134, 123, 91, 59, 114, 164, - 60, 141, 144, 99, 144, 123, 123, 108, 148, 123, - 268, 107, 123, 268, 130, 94, 156, 137, 59, 308, - 99, 172, 59, 46, 164, 307, 308, 220, 129, 108, - 170, 60, 174, 62, 174, 59, 59, 214, 268, 123, - 282, 253, 144, 122, 59, 379, 41, 126, 59, 44, - 129, 268, 282, 44, 311, 134, 40, 153, 46, 258, - 347, 123, 46, 262, 160, 282, 59, 218, 59, 148, - 210, 211, 174, 250, 214, 274, 60, 144, 220, 263, - 220, 302, 123, 40, 305, 164, 123, 264, 44, 46, - 60, 170, 301, 44, 258, 427, 376, 379, 262, 123, - 258, 358, 301, 59, 262, 61, 328, 174, 123, 301, - 274, 62, 308, 309, 307, 308, 274, 144, 220, 399, - 301, 308, 309, 263, 264, 265, 266, 267, 308, 309, - 123, 314, 315, 316, 317, 214, 258, 301, 321, 43, - 262, 45, 301, 301, 301, 427, 428, 174, 93, 481, - 482, 431, 274, 220, 486, 302, 438, 163, 305, 306, - 307, 308, 309, 347, 341, 307, 308, 307, 308, 93, - 21, 311, 308, 309, 268, 457, 458, 301, 460, 301, - 44, 32, 144, 465, 123, 264, 379, 469, 44, 471, - 472, 67, 198, 220, 44, 59, 301, 58, 480, 481, - 482, 341, 53, 59, 486, 307, 308, 347, 41, 59, - 40, 44, 174, 353, 354, 355, 356, 357, 358, 359, + 0, 144, 89, 156, 56, 57, 60, 92, 62, 96, + 10, 11, 59, 220, 66, 174, 123, 46, 132, 133, + 148, 41, 123, 58, 41, 123, 301, 141, 28, 42, + 44, 174, 210, 211, 41, 44, 164, 46, 59, 324, + 46, 59, 123, 123, 44, 69, 268, 46, 48, 59, + 59, 60, 61, 41, 60, 79, 56, 57, 58, 107, + 46, 60, 114, 285, 99, 21, 66, 67, 40, 60, + 46, 66, 107, 59, 46, 60, 61, 220, 130, 44, + 29, 61, 91, 59, 91, 91, 214, 78, 60, 267, + 268, 269, 91, 78, 94, 144, 67, 53, 58, 99, + 40, 308, 123, 40, 156, 153, 46, 41, 108, 123, + 44, 264, 59, 301, 114, 63, 140, 402, 59, 114, + 148, 59, 122, 251, 61, 174, 126, 163, 113, 129, + 130, 59, 132, 133, 134, 130, 164, 172, 266, 99, + 59, 141, 144, 59, 144, 58, 137, 107, 148, 434, + 309, 122, 137, 138, 67, 301, 156, 59, 123, 108, + 144, 268, 198, 59, 164, 308, 309, 268, 59, 254, + 170, 220, 174, 380, 174, 282, 123, 355, 356, 357, + 129, 282, 123, 218, 282, 123, 99, 268, 268, 67, + 174, 59, 21, 153, 91, 123, 349, 258, 312, 302, + 160, 262, 305, 32, 123, 190, 91, 123, 44, 122, + 210, 211, 264, 274, 214, 343, 44, 144, 220, 273, + 220, 123, 308, 309, 53, 403, 62, 123, 41, 60, + 108, 44, 123, 44, 62, 59, 220, 380, 258, 46, + 301, 258, 262, 330, 122, 262, 360, 174, 59, 303, + 304, 129, 40, 41, 274, 123, 44, 274, 46, 308, + 309, 308, 309, 60, 264, 44, 266, 267, 268, 269, + 258, 59, 60, 61, 262, 144, 301, 313, 314, 308, + 309, 301, 318, 62, 301, 428, 274, 93, 301, 432, + 308, 309, 301, 220, 330, 301, 439, 349, 308, 309, + 93, 44, 301, 91, 44, 174, 308, 309, 308, 309, + 258, 301, 312, 301, 262, 458, 459, 41, 461, 62, + 44, 40, 62, 466, 308, 309, 274, 470, 44, 472, + 473, 380, 44, 428, 314, 315, 316, 317, 481, 482, + 483, 321, 144, 343, 487, 381, 62, 383, 268, 349, + 62, 220, 58, 301, 123, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 44, 44, 108, 44, 427, 428, 289, 379, 99, 379, - 307, 308, 59, 31, 273, 438, 122, 108, 62, 62, - 44, 62, 44, 129, 42, 44, 46, 61, 220, 40, - 400, 301, 341, 123, 457, 458, 54, 460, 62, 59, - 62, 301, 465, 62, 303, 304, 469, 379, 471, 472, - 307, 308, 356, 357, 59, 427, 428, 480, 481, 482, - 33, 41, 80, 486, 44, 59, 438, 40, 41, 301, - 43, 38, 45, 44, 258, 258, 312, 313, 262, 262, - 316, 40, 379, 40, 41, 457, 458, 44, 460, 46, - 274, 274, 328, 465, 40, 427, 428, 469, 41, 471, - 472, 44, 59, 60, 61, 40, 438, 291, 480, 481, - 482, 363, 364, 329, 486, 307, 308, 301, 301, 37, - 41, 59, 379, 44, 42, 457, 458, 46, 460, 47, - 427, 428, 59, 465, 91, 33, 59, 469, 44, 471, - 472, 438, 40, 41, 380, 43, 382, 45, 480, 481, - 482, 258, 33, 258, 486, 262, 38, 262, 94, 40, - 457, 458, 43, 460, 45, 307, 124, 274, 465, 274, - 427, 428, 469, 41, 471, 472, 44, 41, 59, 306, - 44, 438, 40, 480, 481, 482, 291, 379, 424, 486, - 426, 301, 59, 429, 301, 40, 301, 59, 147, 41, - 457, 458, 41, 460, 440, 441, 33, 40, 465, 59, - 59, 59, 469, 40, 471, 472, 43, 166, 45, 59, - 41, 59, 171, 480, 481, 482, 462, 463, 464, 486, - 40, 40, 59, 33, 267, 427, 428, 481, 482, 41, - 40, 267, 486, 43, 41, 45, 438, 37, 38, 41, - 41, 41, 42, 43, 44, 45, 41, 47, 0, 59, - 359, 360, 361, 362, 0, 457, 458, 0, 460, 59, - 60, 61, 62, 465, 0, 59, 59, 469, 59, 471, - 472, 48, 50, 49, 301, 122, 33, 99, 480, 481, - 482, 32, 78, 40, 486, 264, 43, 79, 45, 210, - 211, 341, 275, 33, 94, 366, 255, 256, 365, 367, - 40, 41, 368, 43, 287, 45, 369, 142, 339, 65, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 339, - 33, 108, 173, 134, 124, 308, 309, 40, 41, -1, - 43, -1, 45, -1, 301, -1, -1, -1, -1, 298, - -1, 308, 309, 302, 265, 266, 267, 314, 315, 316, - 317, 33, -1, -1, 321, -1, -1, -1, 40, -1, - -1, 43, -1, 45, -1, -1, 123, 275, 33, -1, - -1, -1, -1, -1, -1, 40, 41, 59, 43, 287, - 45, -1, -1, -1, 275, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, 287, -1, -1, -1, - 308, 309, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, 33, 372, 373, -1, -1, 308, 309, 40, - 41, -1, 43, -1, 45, -1, -1, 44, -1, 33, - -1, -1, 353, 354, 355, -1, 40, 41, 275, 43, - -1, 45, -1, -1, -1, 62, -1, -1, 60, 61, + 370, 371, 174, 59, 361, 362, 363, 364, 380, 428, + 380, 308, 309, 432, 44, 358, 359, 482, 483, 425, + 439, 427, 487, 99, 430, 301, 380, 31, 44, 59, + 258, 61, 108, 403, 262, 441, 442, 44, 42, 458, + 459, 46, 461, 59, 482, 483, 274, 466, 220, 487, + 54, 470, 59, 472, 473, 60, 428, 463, 464, 465, + 432, 37, 481, 482, 483, 44, 42, 439, 487, 308, + 309, 47, 41, 301, 428, 44, 80, 289, 432, 41, + 59, 41, 44, 380, 44, 439, 458, 459, 41, 461, + 61, 44, 40, 43, 466, 45, 33, 301, 470, 123, + 472, 473, 59, 40, 458, 459, 43, 461, 45, 481, + 482, 483, 466, 365, 366, 487, 470, 301, 472, 473, + 147, 59, 59, 301, 38, 40, 44, 481, 482, 483, + 40, 428, 40, 487, 40, 432, 308, 309, 61, 166, + 59, 380, 439, 301, 171, 46, 59, 329, 59, 258, + 308, 309, 44, 262, 38, 94, 314, 315, 316, 317, + 124, 458, 459, 321, 461, 274, 307, 301, 91, 466, + 0, 306, 59, 470, 40, 472, 473, 59, 41, 59, + 41, 40, 291, 59, 481, 482, 483, 33, 59, 428, + 487, 59, 301, 432, 40, 59, 41, 43, 28, 45, + 439, 40, 40, 267, 41, 41, 41, 258, 380, 41, + 41, 262, 267, 59, 44, 0, 0, 0, 48, 458, + 459, 0, 461, 274, 301, 59, 59, 466, 58, 256, + 257, 470, 59, 472, 473, 48, 122, 67, 49, 33, + 291, 50, 481, 482, 483, 99, 40, 41, 487, 43, + 301, 45, 32, 78, 266, 79, 428, 368, 343, 367, + 432, 341, 369, 341, 94, 370, 65, 439, 371, 99, + 142, 173, 134, 300, 174, -1, -1, 304, 108, 108, + -1, -1, -1, 33, -1, -1, 458, 459, -1, 461, + 40, 41, 122, 43, 466, 45, 126, -1, 470, 129, + 472, 473, -1, -1, 134, -1, -1, -1, -1, 481, + 482, 483, -1, -1, -1, 487, -1, -1, 148, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, 164, -1, -1, -1, 275, -1, + 170, 59, 60, 61, 62, -1, -1, 374, 375, -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 275, 78, -1, 33, -1, - -1, 308, 309, 273, -1, 40, 41, 287, 43, 400, - 45, -1, -1, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, -1, 308, 309, - -1, 113, 302, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 33, -1, 314, 315, 316, 317, 275, 40, - -1, 321, 43, -1, 45, 137, 138, 44, -1, -1, - 287, -1, -1, -1, -1, 275, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 62, -1, 287, -1, -1, - -1, 308, 309, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 275, 33, -1, -1, -1, -1, 308, 309, - 40, -1, -1, 43, 287, 45, -1, -1, 190, -1, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, 275, -1, 308, 309, -1, -1, -1, - -1, -1, -1, -1, -1, 287, -1, -1, -1, -1, - 275, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 297, 298, 299, 300, 301, -1, -1, 33, -1, -1, + -1, 308, 309, -1, 40, -1, 94, 43, 301, 45, + -1, -1, -1, -1, 214, 308, 309, -1, -1, -1, + -1, 314, 315, 316, 317, 33, -1, -1, 321, -1, + -1, -1, 40, -1, -1, 43, 124, 45, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, 59, 43, -1, 45, -1, -1, -1, -1, 275, + 33, -1, -1, -1, -1, -1, 266, 40, -1, -1, + 43, 287, 45, -1, -1, -1, -1, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, 123, 33, -1, + -1, -1, 308, 309, -1, 40, 41, 257, 43, -1, + 45, -1, -1, 263, -1, -1, -1, -1, -1, 269, + -1, 275, -1, -1, -1, 33, 276, 277, 278, -1, + 280, 281, 40, 287, 284, 43, -1, 45, -1, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, 59, 33, 343, 308, 309, -1, -1, -1, 40, + 41, -1, 43, -1, 45, 275, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 287, -1, -1, + -1, -1, -1, 293, 294, 295, 296, 297, 298, 299, + 300, 301, -1, 33, -1, 273, -1, -1, 308, 309, + 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, + 43, -1, 45, -1, 302, 303, 304, 305, 306, 307, + 308, 309, -1, -1, -1, -1, 314, 315, 316, 317, + 33, -1, -1, 321, -1, -1, -1, 40, 41, 275, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, }; } class yyCheck1 { - protected static final short yyCheck1 [] = { -1, - -1, 287, -1, -1, -1, 308, 309, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, 257, - 258, -1, 308, 309, 262, 263, -1, -1, -1, -1, - -1, 269, -1, 275, -1, -1, 274, -1, 276, 277, - 278, 279, 280, 281, -1, 287, 284, -1, -1, -1, - 275, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, 287, 301, -1, -1, 308, 309, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, 257, - -1, -1, -1, 308, 309, 263, -1, -1, -1, 275, - -1, 269, -1, -1, -1, -1, -1, -1, 276, 277, - 278, 287, 280, 281, -1, -1, 284, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, 257, - 258, -1, 308, 309, 262, 263, -1, -1, -1, -1, - -1, 269, -1, 275, -1, -1, 274, -1, 276, 277, - 278, 279, 280, 281, -1, 287, 284, -1, -1, -1, + protected static final short yyCheck1 [] = { 296, + 297, 298, 299, 300, 301, -1, 275, 33, -1, -1, + -1, 308, 309, -1, 40, -1, -1, 43, 287, 45, + -1, -1, -1, 275, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, 287, -1, -1, -1, 308, + 309, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, 287, -1, -1, 308, 309, -1, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, 275, + -1, -1, -1, -1, 308, 309, -1, -1, -1, -1, + -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 275, -1, -1, -1, + -1, -1, 308, 309, -1, -1, -1, -1, 287, -1, + 44, -1, -1, -1, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 275, -1, -1, -1, -1, 62, 308, + 309, -1, -1, -1, -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, 301, -1, -1, 308, 309, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, 62, -1, -1, 287, -1, -1, -1, - -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, -1, 308, 309, -1, - -1, -1, 91, 37, 38, 94, -1, 41, 42, 43, - 44, 45, -1, 47, 37, -1, -1, -1, 41, 42, - 43, 44, 45, 46, 47, 59, 60, -1, 62, -1, - -1, -1, -1, -1, 123, 124, 59, 60, -1, 62, - 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, 37, 38, -1, -1, 41, 42, 43, 44, 45, - 94, 47, 59, 60, -1, 62, -1, -1, -1, -1, - -1, 94, -1, 59, 60, -1, 62, 37, 38, -1, - -1, 41, 42, 43, 44, 45, 46, 47, 37, 38, - 124, -1, 41, 42, 43, 44, 45, 46, 47, 59, - 60, 124, 62, -1, -1, -1, -1, -1, 94, -1, - 59, 60, -1, 62, 37, 38, -1, -1, 41, 42, - 43, 44, 45, 46, 47, -1, -1, 124, -1, -1, - -1, -1, -1, -1, 94, -1, 59, 60, 124, 62, - -1, -1, 37, -1, -1, 94, 41, 42, 43, 44, - 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 60, -1, 62, 257, 258, - -1, 94, -1, 262, 263, 124, -1, -1, -1, -1, - 269, -1, -1, -1, 273, 274, -1, 276, 277, 278, - 279, 280, 281, 282, -1, 284, -1, -1, -1, 94, - -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, -1, -1, -1, -1, -1, -1, -1, -1, 124, - -1, -1, -1, -1, -1, -1, 37, 38, -1, 273, - 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, - 273, -1, -1, -1, -1, -1, -1, -1, 59, 60, - -1, 62, -1, -1, -1, -1, -1, -1, 302, 303, - 304, 305, 306, 307, 308, 309, 273, -1, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 273, -1, -1, - -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 273, -1, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 273, -1, -1, -1, -1, -1, + -1, -1, -1, 257, -1, -1, 308, 309, -1, 263, + -1, -1, -1, -1, 275, 269, -1, -1, -1, -1, + -1, -1, 276, 277, 278, -1, 287, 281, -1, -1, + 284, 275, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, -1, 287, -1, -1, -1, 308, 309, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, 275, -1, -1, 308, 309, -1, -1, -1, -1, + -1, -1, -1, 287, -1, -1, -1, -1, -1, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, -1, -1, -1, 308, 309, -1, -1, -1, 275, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, 60, -1, -1, + -1, -1, 308, 309, 37, 38, -1, 40, 41, 42, + 43, 44, 45, -1, 47, -1, -1, 37, 38, -1, + -1, 41, 42, 43, 44, 45, 59, 47, 37, 62, + -1, -1, 41, 42, 43, 44, 45, 46, 47, 59, + 60, -1, 62, 257, 258, -1, -1, -1, 262, 263, + 59, 60, -1, 62, -1, 269, -1, -1, 91, -1, + 274, 94, 276, 277, 278, 279, 280, 281, -1, -1, + 284, 37, 38, -1, 94, 41, 42, 43, 44, 45, + 46, 47, -1, -1, -1, 94, -1, 301, -1, -1, + 123, 124, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, + -1, -1, 37, 38, -1, 124, 41, 42, 43, 44, + 45, 46, 47, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, 59, 60, -1, 62, -1, -1, + -1, 257, -1, -1, -1, 59, 60, 263, 62, -1, + -1, -1, -1, 269, -1, -1, -1, -1, 124, -1, + 276, 277, 278, -1, -1, 281, -1, -1, 284, 94, + -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, + 94, -1, 41, 42, 43, 44, 45, 46, 47, -1, + -1, -1, -1, -1, 257, 258, -1, -1, -1, 262, + 59, 60, -1, 62, -1, -1, 269, -1, -1, -1, + 124, 274, -1, 276, 277, 278, -1, -1, -1, -1, + -1, 284, -1, -1, 257, 258, -1, -1, 291, 262, + 263, -1, -1, -1, -1, 94, 269, -1, 301, -1, + 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, + -1, 284, -1, 273, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 273, 124, -1, -1, 301, 302, + 303, 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, 308, 309, - 273, -1, -1, 302, 303, 304, 305, 306, -1, 308, - 309, -1, -1, -1, -1, 37, 38, -1, -1, 41, - 42, 43, 44, 45, 46, 47, -1, -1, 273, 302, - 303, 304, 305, -1, 307, 308, 309, 59, 60, -1, - 62, -1, -1, 37, 38, -1, -1, 41, 42, 43, - 44, 45, 46, 47, -1, -1, -1, 302, 303, 304, - 305, 306, 307, 308, 309, 59, 60, -1, 62, -1, + -1, -1, -1, 302, 303, 304, 305, 306, 307, 308, + 309, -1, -1, -1, -1, -1, -1, 273, -1, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, -1, 41, 42, -1, 44, -1, + -1, 59, 60, -1, 62, -1, 302, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 37, -1, 273, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, 273, + -1, -1, -1, -1, -1, -1, 94, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, 302, 303, 304, + 305, 306, 307, 308, 309, -1, -1, -1, 302, 303, + 304, 305, 306, -1, 308, 309, 124, -1, -1, -1, + 37, 38, -1, 94, 41, 42, 43, 44, 45, 46, + 47, -1, -1, -1, 273, -1, -1, -1, -1, -1, + -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, + -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 302, 303, 304, 305, -1, 307, 308, + 309, 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, - 94, -1, 124, 59, 60, -1, 62, -1, -1, 37, + 44, -1, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 124, 62, -1, + -1, -1, -1, -1, -1, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, 94, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37, 38, -1, -1, 41, 42, -1, + 44, -1, 46, 47, -1, 273, -1, -1, -1, -1, + -1, -1, -1, 94, -1, 59, 60, -1, 62, -1, + -1, -1, 37, 38, -1, -1, 41, 42, 43, 44, + 45, 46, 47, -1, 302, 303, 304, 305, 306, 307, + 308, 309, 273, 124, 59, -1, -1, -1, 37, 38, + 94, -1, 41, 42, 43, 44, 45, 46, 47, 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, 47, - -1, 257, 273, -1, -1, -1, -1, 263, -1, -1, - 124, 59, 60, 269, 62, -1, -1, -1, 94, -1, - 276, 277, 278, -1, -1, 281, -1, -1, 284, -1, - -1, 302, 303, 304, 305, 306, 307, 308, 309, -1, - -1, -1, -1, -1, -1, -1, 94, 61, 124, 37, - 38, -1, -1, 41, 42, 43, 44, 45, 46, 47, - 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, 59, 60, -1, 62, -1, 124, 91, -1, -1, - -1, -1, 59, 37, 38, -1, -1, 41, 42, 43, - 44, 45, 46, 47, -1, 257, -1, -1, -1, -1, - -1, 263, -1, -1, -1, 59, 94, 269, -1, -1, - -1, -1, -1, -1, 276, 277, 278, 94, -1, 281, - -1, 38, 284, -1, 41, -1, 43, 44, 45, 46, - -1, 273, -1, -1, -1, -1, 124, -1, -1, -1, - 94, -1, 59, 60, -1, 62, -1, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 273, - 302, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 124, -1, -1, -1, -1, -1, -1, 94, 38, -1, - -1, 41, -1, 43, 44, 45, 46, -1, 302, 303, - 304, 305, 306, -1, 308, 309, -1, 273, 38, 59, - 60, 41, 62, 43, 44, 45, 46, 124, -1, -1, - 60, -1, -1, -1, -1, -1, -1, -1, -1, 59, - 60, -1, 62, -1, -1, 273, 302, 303, 304, 305, - 306, 307, 308, 309, 94, -1, -1, -1, -1, -1, - 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, -1, -1, -1, 94, 303, 304, -1, 306, 307, - 308, 309, 59, 60, 124, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - -1, -1, -1, -1, 124, 273, -1, 301, -1, -1, - -1, -1, -1, 40, 308, 309, -1, 94, -1, -1, - 314, 315, 316, 317, -1, -1, -1, 321, -1, -1, + 59, 302, 303, 304, 305, 306, 307, 308, 309, 94, + 124, 59, 60, -1, 62, 37, 38, -1, -1, 41, + 42, 43, 44, 45, 46, 47, 273, -1, -1, -1, + -1, -1, -1, -1, -1, 94, -1, 59, 60, 124, + 62, -1, -1, -1, 37, 38, 94, -1, 41, 42, + 43, 44, 45, 46, 47, 302, 303, 304, 305, 306, + 307, 308, 309, -1, -1, 124, 59, -1, -1, -1, + -1, -1, 94, 257, 258, -1, 124, 273, 262, 263, + -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, + 274, -1, 276, 277, 278, 279, 280, 281, -1, -1, + 284, 94, 124, -1, -1, -1, 302, 303, 304, 305, }; } class yyCheck2 { - protected static final short yyCheck2 [] = { -1, - -1, 59, -1, -1, 303, 304, -1, 306, 307, 308, - 309, -1, -1, -1, 302, -1, 124, 305, 306, 307, - 308, 309, -1, -1, -1, -1, -1, 40, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 302, -1, -1, - 305, 306, 307, 308, 309, 273, 59, -1, -1, -1, + protected static final short yyCheck2 [] = { 306, + 307, 308, 309, -1, -1, -1, 301, 38, -1, -1, + 41, 273, 43, 44, 45, 46, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, 59, 60, + 38, 62, -1, 41, -1, 43, 44, 45, 46, 60, + 302, 303, 304, 305, 306, -1, 308, 309, 273, -1, + -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, + -1, -1, -1, 94, -1, -1, -1, 38, -1, -1, + 41, -1, 43, 44, 45, 46, -1, 302, 303, 304, + 305, 306, 307, 308, 309, -1, 94, -1, 59, 60, + -1, 62, -1, 124, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, 302, -1, -1, 305, + 306, 307, 308, 309, 273, -1, 124, -1, -1, -1, + -1, -1, -1, 94, -1, -1, -1, 40, -1, -1, + -1, -1, 302, -1, -1, 305, 306, 307, 308, 309, + 273, -1, -1, -1, 303, 304, 59, 306, 307, 308, + 309, -1, -1, 124, -1, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, + 303, 304, -1, 306, 307, 308, 309, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 40, -1, 302, -1, + -1, 305, 306, 307, 308, 309, -1, -1, -1, -1, + 123, -1, 125, 94, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, -1, - -1, 262, 273, 59, -1, -1, -1, -1, 269, -1, - 123, -1, 125, 274, -1, 276, 277, 278, -1, -1, - -1, -1, 273, 284, -1, -1, -1, -1, -1, -1, - 291, 302, 303, 304, 305, 306, 307, 308, 309, -1, - 301, 40, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 302, 303, 304, 305, 306, 307, 308, 309, -1, - 59, -1, -1, -1, -1, 273, -1, 123, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + 40, 262, 273, 124, -1, -1, -1, -1, 269, -1, + -1, -1, -1, 274, -1, 276, 277, 278, -1, 59, + -1, -1, -1, 284, -1, 273, -1, -1, -1, -1, + 291, 302, 303, 304, 305, 306, 307, 308, 309, 123, + 301, 125, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, - 258, -1, -1, -1, 262, 59, -1, -1, -1, 267, - -1, -1, -1, 271, 272, -1, 274, -1, -1, -1, - -1, -1, -1, -1, 123, 283, 125, -1, -1, 287, - -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, 258, -1, 40, -1, 262, - 308, 309, -1, -1, -1, -1, -1, -1, 271, 272, - -1, 274, -1, -1, -1, -1, 59, 427, 428, 123, - 283, 125, -1, -1, 287, -1, -1, -1, 438, 292, + 308, 309, 273, 59, -1, -1, -1, -1, -1, -1, + -1, -1, 90, -1, -1, -1, 94, -1, -1, -1, + -1, -1, -1, 123, -1, 125, -1, -1, 40, 107, + 108, 302, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, -1, -1, 258, -1, 59, 126, 262, + 128, 129, -1, -1, 267, -1, -1, -1, 271, 272, + -1, 274, -1, -1, -1, -1, -1, 123, -1, 125, + 283, -1, -1, 151, 287, 153, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, 40, -1, -1, -1, 308, 309, 457, 458, -1, - 460, -1, 258, -1, -1, 465, 262, -1, -1, 469, - 59, 471, 472, -1, -1, 271, 272, -1, 274, -1, - 480, 481, 482, -1, -1, -1, 486, 283, -1, -1, + 40, 169, 273, -1, 172, 308, 309, -1, -1, -1, + -1, -1, -1, 181, -1, 183, -1, -1, -1, 59, + -1, 123, -1, 125, 258, -1, -1, -1, 262, -1, + -1, 302, 303, 304, 305, 306, 307, 271, 272, -1, + 274, -1, -1, -1, -1, -1, -1, -1, -1, 283, + -1, -1, -1, 287, -1, -1, -1, 40, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 258, -1, + -1, -1, 262, -1, 308, 309, 59, -1, -1, -1, + -1, 271, 272, 123, 274, 125, -1, -1, -1, -1, + -1, -1, -1, 283, -1, -1, 40, 287, -1, -1, + -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 258, -1, -1, 59, 262, -1, 308, 309, + -1, -1, -1, -1, -1, 271, 272, -1, 274, -1, + -1, -1, -1, 301, 302, -1, -1, 283, 40, -1, 123, 287, 125, -1, -1, -1, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, 40, -1, -1, - -1, -1, 308, 309, -1, -1, 60, -1, -1, 258, - -1, -1, -1, 262, -1, -1, 59, -1, -1, -1, - -1, -1, 271, 272, 123, 274, 125, -1, -1, -1, - -1, -1, -1, -1, 283, -1, -1, 40, 287, -1, - -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, 258, -1, 59, -1, 262, 308, - 309, -1, -1, -1, -1, -1, -1, 271, 272, -1, - 274, 125, -1, -1, -1, -1, -1, -1, -1, 283, - 123, -1, -1, 287, -1, -1, -1, -1, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, 90, - -1, -1, 60, 94, 308, 309, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 258, 107, 108, -1, 262, - 123, -1, -1, -1, -1, -1, -1, -1, 271, 272, - -1, 274, -1, -1, -1, 126, -1, 128, 129, -1, - 283, -1, 60, -1, 287, -1, -1, -1, -1, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 258, - 151, -1, 153, 262, -1, 308, 309, 125, -1, -1, - 60, -1, 271, 272, -1, 274, -1, -1, 169, -1, - -1, 172, -1, -1, 283, -1, -1, -1, 287, -1, - 181, -1, 183, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 257, 258, 60, -1, 125, 262, 308, - 309, -1, -1, -1, -1, 269, -1, -1, -1, -1, - 274, -1, 276, 277, 278, -1, -1, -1, 271, 272, - 284, -1, -1, -1, -1, -1, -1, 291, -1, -1, - 283, -1, -1, -1, 287, -1, -1, 301, -1, 292, + 296, 297, 298, 299, 300, 301, 258, 59, -1, -1, + 262, -1, 308, 309, -1, -1, -1, -1, -1, 271, + 272, 428, 274, -1, -1, 432, -1, -1, -1, 123, + -1, 283, 439, -1, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, 458, 459, -1, 461, -1, 308, 309, -1, 466, + -1, 60, -1, 470, -1, 472, 473, -1, 258, -1, + -1, 123, 262, -1, 481, 482, 483, -1, -1, -1, + 487, 271, 272, -1, 274, -1, -1, -1, -1, -1, + -1, 60, -1, 283, -1, -1, -1, 287, -1, -1, + -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, -1, -1, -1, -1, -1, -1, 308, 309, + -1, 60, -1, -1, -1, 258, 125, -1, -1, 262, + -1, -1, -1, -1, -1, -1, -1, -1, 271, 272, + -1, 274, -1, -1, -1, -1, -1, -1, -1, 60, + 283, -1, -1, -1, 287, -1, 125, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, -1, 308, 309, -1, 271, 272, + -1, -1, -1, -1, -1, 308, 309, 271, 272, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, 283, + -1, -1, -1, 287, -1, -1, -1, -1, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, -1, -1, -1, 308, 309, -1, -1, -1, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 283, -1, -1, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, -1, -1, 308, 309, 257, 258, + -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, + 269, -1, -1, -1, -1, 274, -1, 276, 277, 278, + -1, -1, -1, -1, -1, 284, -1, -1, 257, 258, + -1, -1, 291, 262, -1, -1, -1, -1, -1, -1, + 269, -1, 301, -1, -1, 274, -1, 276, 277, 278, + -1, -1, -1, -1, -1, 284, -1, -1, 257, 258, + -1, -1, 291, 262, -1, -1, -1, -1, -1, -1, + 269, -1, 301, -1, -1, 274, -1, 276, 277, 278, + -1, -1, -1, -1, -1, 284, 257, 258, -1, -1, + -1, 262, 291, -1, -1, -1, -1, -1, 269, -1, + -1, -1, 301, 274, -1, 276, 277, 278, -1, -1, + -1, -1, -1, 284, -1, -1, 257, 258, -1, -1, + 291, 262, 263, -1, -1, -1, -1, -1, 269, -1, + 301, -1, -1, 274, -1, 276, 277, 278, 279, 280, + 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 283, -1, -1, -1, 287, -1, -1, -1, -1, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 257, - 258, -1, -1, -1, 262, 308, 309, -1, 299, 300, - -1, 269, -1, -1, -1, -1, 274, -1, 276, 277, - 278, -1, -1, -1, -1, -1, 284, -1, -1, -1, - -1, -1, -1, 291, -1, -1, -1, -1, -1, 257, - 258, -1, -1, 301, 262, -1, -1, -1, -1, -1, - -1, 269, -1, -1, -1, -1, 274, -1, 276, 277, - 278, -1, -1, -1, -1, -1, 284, 257, 258, -1, - -1, -1, 262, 291, -1, -1, -1, -1, -1, 269, - -1, -1, -1, 301, 274, -1, 276, 277, 278, -1, - -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, - -1, 291, 257, 258, -1, -1, -1, 262, -1, -1, - -1, 301, -1, -1, 269, -1, -1, -1, -1, 274, - -1, 276, 277, 278, -1, -1, -1, -1, -1, 284, - -1, -1, 257, 258, -1, -1, 291, 262, 263, -1, - -1, -1, -1, -1, 269, -1, 301, -1, -1, 274, - -1, 276, 277, 278, 279, 280, 281, -1, -1, 284, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 301, + 301, }; } class yyCheckInit { - static short[] yyCheck = new short[2830]; + static short[] yyCheck = new short[2964]; protected static void yyCheckInit () { int numyycheck; int yyCheckerun = 0; for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2830) { + if (yyCheckerun < 2964) { yyCheck[yyCheckerun] = yyCheck0.yyCheck0[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2830) { + if (yyCheckerun < 2964) { yyCheck[yyCheckerun] = yyCheck1.yyCheck1[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2830) { + if (yyCheckerun < 2964) { yyCheck[yyCheckerun] = yyCheck2.yyCheck2[numyycheck]; yyCheckerun++; } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index b46ecd39..4e3c77c6 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -1444,6 +1444,9 @@ statement :statementwithouttrailingsubstatement $$=$1; } |forstatement + { + $$=$1; + }| explicitconstructorinvocation { $$=$1; } diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index d0e0b24a..bad91cbc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -1170,7 +1170,6 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I @Override public void parserPostProcessing(SyntaxTreeNode parent) { - super.parserPostProcessing(parent); //Wenn keine Superklasse, dann erbt die Klasse zwangsweise von Object: if(superclassid == null || superclassid.get_Name().size()<1){ @@ -1183,7 +1182,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I for(Field f : this.getFields()){ if(f instanceof Method && !(f instanceof Constructor)){ Method method = (Method)f; - if(method.get_Method_Name().equals(this.getName()) ){ + if(method.get_Method_Name().equals(this.getName().toString()) ){ tempFields.add(new Constructor(method)); }else{ tempFields.add(f); @@ -1214,9 +1213,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I else this.genericClassParameters.add(new GenericTypeVar(t.get_Name(),this,-1)); } */ + /* for(Type t : this.get_ParaList()){ t.parserPostProcessing(this); } + */ /* for(GenericTypeVar gtv : this.getGenericParameter()){ gtv.setParentClass(this);; @@ -1225,6 +1226,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //TODO: Umwandlung zu RefTypes funktioniert noch nicht richtig. (siehe LambdaTest2) //Als RefType geparste Generische Variablen umwandeln: this.wandleRefTypeAttributes2GenericAttributes(); + + //Erst am Schluss, nachdem Methoden zu Konstruktoren umgewandelt wurden: + super.parserPostProcessing(parent); } @Override @@ -1235,9 +1239,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I @Override public Vector getChildren() { Vector ret = new Vector(); - for(Field f : this.getFields()){ - ret.add(f); - } + //for(Field f : this.getFields()){ + // ret.add(f); + //} + ret.addAll(this.getFields()); + ret.addAll(this.get_ParaList()); ret.addAll(this.getGenericParameter()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 01425890..fbc7893f 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -11,6 +11,7 @@ import de.dhbwstuttgart.syntaxtree.statement.Block; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; 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; @@ -19,6 +20,8 @@ import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; public class Constructor extends Method { private Method methode; @@ -27,6 +30,11 @@ public class Constructor extends Method { * Parser kann nicht zwischen einem Konstruktor und einer Methode unterscheiden. * Diese Klasse beherbegt den als Methode geparsten Konstruktor und wandelt sein verhalten zu dem eines Konstruktors ab. */ + public Constructor(Method methode){ + super(methode.get_Method_Name(), methode.getParameterList(),methode.get_Block(), methode.getGenericDeclarationList(), methode.getOffset()); + } + + /* public Constructor(Method methode){ super(methode.getOffset()); this.methode = methode; @@ -34,21 +42,60 @@ public class Constructor extends Method { this.methode.setType(this.methode.getParentClass().getType()); } - - /* @Override - public void setGenericMethodParameters( - Vector genericMethodParameters) { - - this.methode.setGenericMethodParameters(genericMethodParameters); + public Vector getGenericParameter() { + return this.methode.getGenericParameter(); } + @Override - public Vector getGenericMethodParameters() { - - return this.methode.getGenericMethodParameters(); + public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, + ResultSet resultSet) { + return this.methode.createTypeInsertPoint(tph, resultSet); } - */ + + + @Override + public boolean isPublic() { + return this.methode.isPublic(); + } + + + @Override + public String getGenericVarDeclarationString(String genericVarDeclaration) { + return this.methode.getGenericVarDeclarationString(genericVarDeclaration); + } + + + @Override + public int getGenericVarDeclarationOffset() { + return this.methode.getGenericVarDeclarationOffset(); + } + + + @Override + public void setGenericParameter(GenericDeclarationList params) { + this.methode.setGenericParameter(params); + } + + + @Override + public GTVDeclarationContext getGTVDeclarationContext() { + return this; + } + + + @Override + public void addTypeInsertPoints(TypeInsertSet insertSet, ResultSet result) { + this.methode.addTypeInsertPoints(insertSet, result); + } + + + @Override + public boolean seesType(Type tA2) { + return this.methode.seesType(tA2); + } + @Override public JavaClassName getTypeName() { @@ -310,7 +357,7 @@ public class Constructor extends Method { public Class getParentClass() { return this.methode.getParentClass(); } - + */ } diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 9b5a375c..feb028f8 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -61,6 +61,10 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta return ret; } + GenericDeclarationList getGenericDeclarationList(){ + return this.genericParameters; + } + public void set_DeclId(DeclId did) { this.declid.addElement(did); diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index abe7a104..819490c1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -98,6 +98,19 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable super(offset); } + public Method(String name, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, int offset){ + this(offset); + /* + if(parameterList != null)parameterList.parserPostProcessing(this); + if(block != null)block.parserPostProcessing(this); + if(gtvDeclarations != null)gtvDeclarations.parserPostProcessing(this); + */ + this.set_Method_Name(name); + this.setParameterList(parameterList); + this.set_Block(block); + this.setGenericParameter(gtvDeclarations); + } + /* // ino.method.setGenericMethodParameters.23521.definition public void setGenericMethodParameters(Vector genericMethodParameters) @@ -503,15 +516,12 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } */ } - // ino.end - // ino.method.set_Method_Name.23617.definition + public void set_Method_Name(String string) - // ino.end - // ino.method.set_Method_Name.23617.body { + if(declid.size()==0)declid.add(0, new DeclId(string)); declid.set(0,new DeclId(string)); } - // ino.end @@ -584,7 +594,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable */ @Override public TypeAssumptions createTypeAssumptions(Class classmember) { - Class parentClass = this.getParentClass(); + Class parentClass = classmember;//this.getParentClass(); TypeAssumptions ret = new TypeAssumptions(); ret.addAssumption(new MethodAssumption(this, parentClass)); return ret; @@ -673,7 +683,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable super.parserPostProcessing(parent); if(this.getType()==null)this.setType(TypePlaceholder.fresh(this)); //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: - Class parentClass = (Class)parent; + //Class parentClass = (Class)parent; if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); this.returntype.parserPostProcessing(this); if(this.parameterlist != null){ @@ -690,9 +700,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable public Vector getChildren() { Vector ret = new Vector(); ret.add(this.block); - for(FormalParameter param : this.parameterlist){ - ret.add(param); - } + ret.add(this.parameterlist); ret.addAll(this.getGenericParameter()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index 7db364cd..76d8ed59 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -20,7 +20,7 @@ import de.dhbwstuttgart.typeinference.ResultSet; // ino.class.ParameterList.23620.declaration -public class ParameterList implements Iterable +public class ParameterList extends SyntaxTreeNode implements Iterable // ino.end // ino.class.ParameterList.23620.body { @@ -168,5 +168,22 @@ public class ParameterList implements Iterable if(this.formalparameter!=null)return this.formalparameter.equals(equals.formalparameter); return true; } + + @Override + public int getOffset() { + if(formalparameter == null || formalparameter.size()==0)return 0; + return formalparameter.firstElement().getOffset(); + } + + @Override + public int getVariableLength() { + return 0; + } + + @Override + public Vector getChildren() { + return formalparameter; + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index d5e21063..0adf889f 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -38,7 +38,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ return this.parent; } - public abstract Vector getChildren(); + public abstract Vector getChildren(); public Class getParentClass(){ SyntaxTreeNode parent = this.getParent(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index d6e596c1..ce314c62 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -31,6 +31,13 @@ public class MethodCall extends Expr // ino.end // ino.class.MethodCall.25623.body { + public MethodCall(Receiver receiver, String methodName, ArgumentList argumentList, int offset){ + this(offset, 0); + this.set_Receiver(receiver); + this.set_Name(methodName); + this.set_ArgumentList(argumentList); + } + // ino.method.MethodCall.25627.definition public MethodCall(int offset, int variableLength) // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 9cbe6f71..8cec1aaa 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -13,6 +13,7 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.Constructor; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.misc.UsedId; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -22,6 +23,7 @@ import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; @@ -125,7 +127,27 @@ public class This extends Expr return ret; } - public String toString() + /** + * This kann auch als Konstruktoraufruf in einem Konstruktor-Block vorkommen. + */ + @Override + public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { + ConstraintsSet ret = new ConstraintsSet(); + //Kontrollieren, dass sich this(...) in einem Konstruktor und dort als erstes Statement befindet: + SyntaxTreeNode p = this.getGTVDeclarationContext(); + if(p instanceof Constructor && + ((Constructor)p).get_Block().statements.firstElement().equals(this)){ + //Constraints generieren: + MethodCall constructorCall = new MethodCall(new Receiver(this), this.getParentClass().getName().toString(), arglist, this.getOffset()); + ret.add(constructorCall.TYPEStmt(assumptions)); + return ret; + }else{ + //Ansonsten Fehler ausgeben: + throw new TypeinferenceException("This()-Aufruf hier nicht möglich", this); + } + } + + public String toString() // ino.end // ino.method.toString.25738.body { From da70abf954a9e502c3549c3b33c98535fc70cac1 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 25 Feb 2015 18:29:44 +0100 Subject: [PATCH 052/186] =?UTF-8?q?Tests=20anf=C3=BCgen.=20Probleme=20mit?= =?UTF-8?q?=20Constructor=20beheben.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 1 - .../dhbwstuttgart/syntaxtree/Constructor.java | 33 +++++++++++++++++-- src/de/dhbwstuttgart/syntaxtree/Method.java | 8 +++-- .../dhbwstuttgart/syntaxtree/SourceFile.java | 5 ++- .../assumptions/ConstructorAssumption.java | 16 ++++++++- .../assumptions/MethodAssumption.java | 4 +++ .../TypeInsertTests/ConstructorTest.jav | 9 +++++ .../TypeInsertTests/ConstructorTest.java | 22 +++++++++++++ .../TypeInsertTests/ThisTest.jav | 12 +++++++ .../TypeInsertTests/ThisTest.java | 18 ++++++++++ 10 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 test/plugindevelopment/TypeInsertTests/ConstructorTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/ConstructorTest.java create mode 100644 test/plugindevelopment/TypeInsertTests/ThisTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/ThisTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index bad91cbc..9bf64ff5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -1170,7 +1170,6 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I @Override public void parserPostProcessing(SyntaxTreeNode parent) { - //Wenn keine Superklasse, dann erbt die Klasse zwangsweise von Object: if(superclassid == null || superclassid.get_Name().size()<1){ int superclassidOffset = superclassid == null ? 0 : superclassid.getOffset(); diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index fbc7893f..e0e6b3f5 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -18,6 +18,7 @@ import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.SingleConstraint; import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; +import de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; @@ -31,9 +32,37 @@ public class Constructor extends Method { * Diese Klasse beherbegt den als Methode geparsten Konstruktor und wandelt sein verhalten zu dem eines Konstruktors ab. */ public Constructor(Method methode){ - super(methode.get_Method_Name(), methode.getParameterList(),methode.get_Block(), methode.getGenericDeclarationList(), methode.getOffset()); + super(methode.get_Method_Name(), methode.getType(), methode.getParameterList(),methode.get_Block(), methode.getGenericDeclarationList(), methode.getOffset()); + } + @Override + public TypeAssumptions createTypeAssumptions(Class classmember) { + this.parent = classmember; + Class parentClass = this.getParentClass(); + TypeAssumptions ret = new TypeAssumptions(); + ret.addAssumption(new ConstructorAssumption(this, parentClass)); + return ret; + } + @Override + public void parserPostProcessing(SyntaxTreeNode parent){ + if(this.parameterlist != null){ + for(FormalParameter fp : this.parameterlist){ + fp.parserPostProcessing(this); + } + } + for(GenericTypeVar gtv : this.getGenericParameter()){ + gtv.parserPostProcessing(this); + } + } + @Override + public ConstraintsSet TYPE(TypeAssumptions ass) { + super.setType(new RefType(this.getParentClass().getName().toString(), this, this.getOffset())); + return super.TYPE(ass); + } + @Override + public void setType(Type t) { + throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); + //this.methode.setType(t); } - /* public Constructor(Method methode){ super(methode.getOffset()); diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 819490c1..aa45cb3e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -98,7 +98,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable super(offset); } - public Method(String name, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, int offset){ + public Method(String name, Type returnType, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, int offset){ this(offset); /* if(parameterList != null)parameterList.parserPostProcessing(this); @@ -109,6 +109,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable this.setParameterList(parameterList); this.set_Block(block); this.setGenericParameter(gtvDeclarations); + this.setReturnType(returnType); } /* @@ -680,11 +681,12 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void parserPostProcessing(SyntaxTreeNode parent){ - super.parserPostProcessing(parent); if(this.getType()==null)this.setType(TypePlaceholder.fresh(this)); //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: //Class parentClass = (Class)parent; if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); + super.parserPostProcessing(parent); + /* this.returntype.parserPostProcessing(this); if(this.parameterlist != null){ for(FormalParameter fp : this.parameterlist){ @@ -694,6 +696,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable for(GenericTypeVar gtv : this.getGenericParameter()){ gtv.parserPostProcessing(this); } + */ } @Override @@ -702,6 +705,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable ret.add(this.block); ret.add(this.parameterlist); ret.addAll(this.getGenericParameter()); + ret.add(this.returntype); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 429371e5..46ab3220 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -1327,6 +1327,7 @@ public class SourceFile } method.setParameterList(parameterList); //basicAssumptions.addMethodIntersectionType(new CIntersectionType(method)); + parentClass.addField(method); //} @@ -1349,7 +1350,9 @@ public class SourceFile } //basicAssumptions.addMethodIntersectionType(new CIntersectionType(constructor)); constructorMethod.parameterlist = paraList; - parentClass.addField(new Constructor(constructorMethod)); + Constructor constructor = new Constructor(constructorMethod); + constructor.parserPostProcessing(parentClass); + parentClass.addField(constructor); } } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java index 8bc393bb..68f6112f 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java @@ -1,7 +1,10 @@ package de.dhbwstuttgart.typeinference.assumptions; +import java.util.Iterator; + import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.Field; +import de.dhbwstuttgart.syntaxtree.FormalParameter; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.statement.ArgumentList; @@ -17,5 +20,16 @@ public class ConstructorAssumption extends MethodAssumption{ return super.equals(obj); } - + public String toString(){ + String ret = "ConstructorAssumption: "; + ret += this.getMethodName()+"("; + Iterator it = this.getMethod().parameterlist.formalparameter.iterator(); + while(it.hasNext()){ + FormalParameter fp = it.next(); + ret+=fp.toString(); + if(it.hasNext())ret += ","; + } + ret+=")"; + return ret; + } } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java index 30645adb..4d1d3f69 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java @@ -26,6 +26,10 @@ public class MethodAssumption extends FieldAssumption { return this.method.getParameterCount(); } + protected Method getMethod(){ + return method; + } + /** * Liefert den Typ des i-ten Parameters dieser Method-Assumption * @param i diff --git a/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav new file mode 100644 index 00000000..b92a7a3b --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav @@ -0,0 +1,9 @@ +import java.util.Vector; + +class Matrix{ + + Matrix(){ + var; + var = "test"; + } +} diff --git a/test/plugindevelopment/TypeInsertTests/ConstructorTest.java b/test/plugindevelopment/TypeInsertTests/ConstructorTest.java new file mode 100644 index 00000000..d8f9e9ab --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ConstructorTest.java @@ -0,0 +1,22 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; + +public class ConstructorTest { + + private static final String TEST_FILE = "ConstructorTest.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} diff --git a/test/plugindevelopment/TypeInsertTests/ThisTest.jav b/test/plugindevelopment/TypeInsertTests/ThisTest.jav new file mode 100644 index 00000000..c0316b9f --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ThisTest.jav @@ -0,0 +1,12 @@ +import java.util.Vector; + +class Matrix{ + + Matrix(){ + this("test"); + } + + Matrix(var){ + + } +} diff --git a/test/plugindevelopment/TypeInsertTests/ThisTest.java b/test/plugindevelopment/TypeInsertTests/ThisTest.java new file mode 100644 index 00000000..5412e721 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ThisTest.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class ThisTest { + + private static final String TEST_FILE = "ThisTest.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 5455ba803e6644409917db6db7b52f7ee3d2b892 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 25 Feb 2015 18:51:48 +0100 Subject: [PATCH 053/186] Fehler in TYPE-Methode von Constructor beheben --- src/de/dhbwstuttgart/syntaxtree/Constructor.java | 4 +++- .../typeinference/assumptions/ConstructorAssumption.java | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index e0e6b3f5..1269e6b7 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -23,6 +23,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; +import de.dhbwstuttgart.syntaxtree.type.Void; public class Constructor extends Method { private Method methode; @@ -55,7 +56,8 @@ public class Constructor extends Method { } @Override public ConstraintsSet TYPE(TypeAssumptions ass) { - super.setType(new RefType(this.getParentClass().getName().toString(), this, this.getOffset())); + //super.setType(this.getParentClass().getType()); + super.setType(new Void(this, 0)); return super.TYPE(ass); } @Override diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java index 68f6112f..ad3eb54f 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java @@ -7,6 +7,8 @@ import de.dhbwstuttgart.syntaxtree.Field; import de.dhbwstuttgart.syntaxtree.FormalParameter; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.statement.ArgumentList; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; public class ConstructorAssumption extends MethodAssumption{ @@ -20,6 +22,13 @@ public class ConstructorAssumption extends MethodAssumption{ return super.equals(obj); } + @Override + public Type getAssumedType() { + throw new DebugException("Eine ConstructorAssumption hat keinen Typ bzw. er ist nicht relevant"); + //return this.getMethod().getParentClass().getType(); + } + + @Override public String toString(){ String ret = "ConstructorAssumption: "; ret += this.getMethodName()+"("; From 1941fa5d64ad6c467fcb5b29c32d58f1d84f4e41 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 26 Feb 2015 15:50:23 +0100 Subject: [PATCH 054/186] =?UTF-8?q?this()-Aufruf=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/parser/JavaParser.java | 4 +- src/de/dhbwstuttgart/parser/JavaParser.jay | 4 +- .../dhbwstuttgart/syntaxtree/Constructor.java | 5 +- .../syntaxtree/statement/MethodCall.java | 64 ++++++++++++++++++- .../syntaxtree/statement/This.java | 21 ++---- .../typeinference/Overloading.java | 24 ++----- .../assumptions/ConstructorAssumption.java | 7 +- .../assumptions/MethodAssumption.java | 2 +- .../assumptions/TypeAssumptions.java | 12 ++-- 9 files changed, 90 insertions(+), 53 deletions(-) diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 8d69c14d..6728d76b 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -1852,14 +1852,14 @@ case 146: case 147: // line 1224 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - This THCON = new This(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); + ThisCall THCON = new ThisCall(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); yyVal=THCON; } break; case 148: // line 1229 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - This THCONargl = new This(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); + ThisCall THCONargl = new ThisCall(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); THCONargl.set_ArgumentList(((ArgumentList)yyVals[-2+yyTop])); yyVal=THCONargl; } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 4e3c77c6..75980805 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -1222,12 +1222,12 @@ formalparameterlist :formalparameter explicitconstructorinvocation : THIS '(' ')' ';' { - This THCON = new This($1.getOffset(),$1.getLexem().length()); + ThisCall THCON = new ThisCall($1.getOffset(),$1.getLexem().length()); $$=THCON; } |THIS '(' argumentlist ')' ';' { - This THCONargl = new This($1.getOffset(),$1.getLexem().length()); + ThisCall THCONargl = new ThisCall($1.getOffset(),$1.getLexem().length()); THCONargl.set_ArgumentList($3); $$=THCONargl; } diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 1269e6b7..515364c4 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -43,6 +43,7 @@ public class Constructor extends Method { ret.addAssumption(new ConstructorAssumption(this, parentClass)); return ret; } + /* @Override public void parserPostProcessing(SyntaxTreeNode parent){ if(this.parameterlist != null){ @@ -54,6 +55,7 @@ public class Constructor extends Method { gtv.parserPostProcessing(this); } } + */ @Override public ConstraintsSet TYPE(TypeAssumptions ass) { //super.setType(this.getParentClass().getType()); @@ -62,7 +64,8 @@ public class Constructor extends Method { } @Override public void setType(Type t) { - throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); + super.setType(new Void(this, this.getOffset())); + //throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); //this.methode.setType(t); } /* diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index ce314c62..fd7526bd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -6,7 +6,6 @@ import java.util.Hashtable; import java.util.Vector; import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -17,11 +16,16 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.Void; +import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.UndConstraint; +import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; @@ -202,11 +206,67 @@ public class MethodCall extends Expr } //Noch das Overloading-Constraint anhängen: - ret.add(new Overloading(assumptions, this, this.getType()).generateConsstraints()); + ret.add(overloading(assumptions)); return ret; } + /** + * Erstellt die Constraints für den eigentlichen Methodenaufruf. + * Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet. + * @param assumptions + * @return + */ + ConstraintsSet overloading(TypeAssumptions assumptions){ + ConstraintsSet ret = new ConstraintsSet(); + //ret.add(new Overloading(assumptions, this, this.getType()).generateConsstraints()); + OderConstraint oCons = new OderConstraint(); + Vector methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size()); + if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+this.get_Name()+" ist in den Assumptions nicht vorhanden", this); + //Alle möglichen Methoden durchgehen: + for(MethodAssumption methodAssumption : methodAssumptions){ + //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: + if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; + oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions)); + } + return ret; + } + + /** + * Spezifikation: + * overloading determines for all possible overloadings and overridings + * of a method the constraints, where constraints itself forms + * the constraints from the receiver type, the argument types, the return + * type and a given type assumption for the method. If it is a + * method from a class, which is not the actual class (this), all type + * variables are replaced by fresh type variables (fresh), as different + * instances can occur. sargs determines all type assumptions of a + * method, where the argument types are supertypes of a minimal type + * assumption. + * + * @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden. + * + * @return + */ + UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ + UndConstraint methodConstraint = new UndConstraint(); + //Ein Constraint für den ReturnType der Methode... + methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), type.TYPE(assumptions, this)); + //Ein Constraint für die Parameter der Methode... + for(int i=0; i parameterList = new Vector(); for(Expr argument : methodCall.getArgumentList().expr){ @@ -64,25 +64,13 @@ public class Overloading{ if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+methodCall.get_Name()+" ist in den Assumptions nicht vorhanden", methodCall); //Alle möglichen Methoden durchgehen: for(MethodAssumption methodAssumption : methodAssumptions){ + //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; - UndConstraint methodConstraint = new UndConstraint(); - //Ein Constraint für den ReturnType der Methode... - methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, methodCall), type.TYPE(assumptions, methodCall)); - //Ein Constraint für die Parameter der Methode... - for(int i=0; i getMethodAssumptions(String methodName, Vector parameter){ - int parameterCount = parameter.size(); + public Vector getMethodAssumptions(String methodName, int parameterCount){ Vector ret = new Vector(); for(MethodAssumption ass : this.methodAssumptions){ if(ass.getMethodName().equals(methodName) && ass.getParaCount() == parameterCount){ - ret.add(ass); } } @@ -375,14 +373,12 @@ public class TypeAssumptions { /** * - * @param name - * @param size * @return Null, falls kein Konstruktor vorhanden. */ - public ConstructorAssumption getConstructorAssumption(String name, int size) { + public ConstructorAssumption getConstructorAssumption(String className, int paramCount) { for(ConstructorAssumption ca : this.constructorAssumptions){ log.debug("Durchsuche Assumptions: "+ca.getIdentifier().toString() +" -Anzahl Parameter: "+ ca.getParaCount(), Section.TYPEINFERENCE); - if(ca.getParaCount()==size && ca.getIdentifier().equals(name))return ca; + if(ca.getParaCount()==paramCount && ca.getIdentifier().equals(className))return ca; } return null; } From 37e55490e1c715fbc5bedf6a0b18341b84f9389a Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 26 Feb 2015 16:57:43 +0100 Subject: [PATCH 055/186] =?UTF-8?q?Fehler=20beheben.=20Hat=20FunN=20den=20?= =?UTF-8?q?R=C3=BCckgabetyp=20void,=20so=20wird=20kein=20=3F=20extends=20v?= =?UTF-8?q?oid=20generiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dhbwstuttgart/syntaxtree/statement/LambdaExpression.java | 5 ++++- test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav | 3 --- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index eec84a10..8e21bd7c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -157,7 +157,10 @@ public class LambdaExpression extends Expr{ superParamTypes.add(new SuperWildcardType(pT.getOffset(), pT)); } Type retType = method_body.getType(); - ExtendsWildcardType extRetType = new ExtendsWildcardType(retType.getOffset(), retType); + Type extRetType = retType; + if(!(retType instanceof de.dhbwstuttgart.syntaxtree.type.Void)){ + extRetType = new ExtendsWildcardType(retType.getOffset(), retType); + } ret.add(new SingleConstraint(new FunN(extRetType, superParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav index ba2dbbd9..fe76739d 100644 --- a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav +++ b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav @@ -8,9 +8,6 @@ class FunNInsertTest{ var2 = b; var3 = c; }; - - - } class Object1{} From 4fd30850b54585ba31dac89fc7af24d947004409 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 26 Feb 2015 17:41:29 +0100 Subject: [PATCH 056/186] =?UTF-8?q?ThisCall=20und=20SuperCall=20anf=C3=BCg?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/parser/JavaParser.java | 2220 +++++++++-------- src/de/dhbwstuttgart/parser/JavaParser.jay | 15 +- .../syntaxtree/misc/ConstructorCall.java | 41 + .../syntaxtree/statement/ArgumentList.java | 24 +- .../syntaxtree/statement/MethodCall.java | 4 +- .../syntaxtree/statement/SuperCall.java | 108 + .../syntaxtree/statement/ThisCall.java | 115 + 7 files changed, 1431 insertions(+), 1096 deletions(-) create mode 100644 src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java create mode 100644 src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java create mode 100644 src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 6728d76b..69f95ed5 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -340,6 +340,8 @@ public Vector testPair = new Vector(); //t "formalparameterlist : formalparameterlist ',' formalparameter", //t "explicitconstructorinvocation : THIS '(' ')' ';'", //t "explicitconstructorinvocation : THIS '(' argumentlist ')' ';'", +//t "explicitconstructorinvocation : SUPER '(' ')' ';'", +//t "explicitconstructorinvocation : SUPER '(' argumentlist ')' ';'", //t "classtypelist : classtype", //t "classtypelist : classtypelist ',' classtype", //t "methoddeclarator : IDENTIFIER '(' ')'", @@ -1865,7 +1867,22 @@ case 148: } break; case 149: - // line 1238 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + SuperCall sCall = new SuperCall(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); + yyVal=sCall; + } + break; +case 150: + // line 1240 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + SuperCall sCall = new SuperCall(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); + sCall.set_ArgumentList(((ArgumentList)yyVals[-2+yyTop])); + yyVal=sCall; + } + break; +case 151: + // line 1247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1);*/ RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); @@ -1874,16 +1891,16 @@ case 149: yyVal=RT; } break; -case 150: - // line 1246 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 152: + // line 1255 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((RefType)yyVals[-2+yyTop]).set_UsedId(((UsedId)yyVals[0+yyTop])); ((RefType)yyVals[-2+yyTop]).setName(((RefType)yyVals[-2+yyTop]).get_UsedId().get_Name_1Element()); yyVal=((RefType)yyVals[-2+yyTop]); } break; -case 151: - // line 1253 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 153: + // line 1262 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method met = new Method(((Token)yyVals[-2+yyTop]).getOffset()); /* #JB# 10.04.2005 */ @@ -1897,8 +1914,8 @@ case 151: yyVal = met; } break; -case 152: - // line 1266 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 154: + // line 1275 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method met_para = new Method(((Token)yyVals[-3+yyTop]).getOffset()); /* #JB# 10.04.2005 */ @@ -1913,8 +1930,8 @@ case 152: yyVal = met_para; } break; -case 153: - // line 1281 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 155: + // line 1290 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { BooleanType BT = new BooleanType(null); /* #JB# 05.04.2005 */ @@ -1924,14 +1941,14 @@ case 153: yyVal=BT; } break; -case 154: - // line 1290 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 156: + // line 1299 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((BaseType)yyVals[0+yyTop]); } break; -case 155: - // line 1296 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 157: + // line 1305 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + ((UsedId)yyVals[0+yyTop]), Section.PARSER); RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).getQualifiedName(),null,((UsedId)yyVals[0+yyTop]).getOffset()); @@ -1950,26 +1967,26 @@ case 155: yyVal=RT; } break; -case 156: - // line 1318 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 158: + // line 1327 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((DeclId)yyVals[0+yyTop]); } break; -case 157: - // line 1339 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 159: + // line 1348 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((LocalVarDecl)yyVals[0+yyTop]); } break; -case 158: - // line 1343 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 160: + // line 1352 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 159: - // line 1348 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 161: + // line 1357 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop])); FP.setType(((Type)yyVals[-1+yyTop])); @@ -1977,8 +1994,8 @@ case 159: yyVal=FP; } break; -case 160: - // line 1373 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 162: + // line 1382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nFunktionsdeklaration mit typlosen Parametern: " + ((DeclId)yyVals[0+yyTop]).name, Section.PARSER); @@ -1997,29 +2014,29 @@ case 160: yyVal=FP; } break; -case 161: - // line 1392 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 163: + // line 1401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ArgumentList AL = new ArgumentList(); AL.expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=AL; } break; -case 162: - // line 1398 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 164: + // line 1407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ArgumentList)yyVals[-2+yyTop]).expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=((ArgumentList)yyVals[-2+yyTop]); } break; -case 163: - // line 1404 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 165: + // line 1413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((BaseType)yyVals[0+yyTop]); } break; -case 164: - // line 1409 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 166: + // line 1418 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DeclId DI = new DeclId(); /* #JB# 10.04.2005 */ @@ -2031,68 +2048,68 @@ case 164: yyVal=DI; } break; -case 165: - // line 1421 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 167: + // line 1430 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 166: - // line 1426 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((LocalVarDecl)yyVals[-1+yyTop]); - } - break; -case 167: - // line 1431 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Statement)yyVals[0+yyTop]); - } - break; case 168: // line 1435 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal=((IfStmt)yyVals[0+yyTop]); + yyVal=((LocalVarDecl)yyVals[-1+yyTop]); } break; case 169: - // line 1439 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((IfStmt)yyVals[0+yyTop]); - } - break; -case 170: - // line 1443 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((WhileStmt)yyVals[0+yyTop]); - } - break; -case 171: - // line 1447 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((ForStmt)yyVals[0+yyTop]); - } - break; -case 172: - // line 1450 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1440 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 173: - // line 1455 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 170: + // line 1444 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal=((Expr)yyVals[0+yyTop]); + yyVal=((IfStmt)yyVals[0+yyTop]); + } + break; +case 171: + // line 1448 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((IfStmt)yyVals[0+yyTop]); + } + break; +case 172: + // line 1452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((WhileStmt)yyVals[0+yyTop]); + } + break; +case 173: + // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((ForStmt)yyVals[0+yyTop]); } break; case 174: // line 1459 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal=((NewClass)yyVals[0+yyTop]); + yyVal=((Statement)yyVals[0+yyTop]); } break; case 175: // line 1464 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 176: + // line 1468 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((NewClass)yyVals[0+yyTop]); + } + break; +case 177: + // line 1473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IntegerType IT = new IntegerType(null); /* #JB# 05.04.2005 */ @@ -2102,8 +2119,8 @@ case 175: yyVal=IT; } break; -case 176: - // line 1473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 178: + // line 1482 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CharacterType CT = new CharacterType(null); /* #JB# 05.04.2005 */ @@ -2113,8 +2130,8 @@ case 176: yyVal=CT; } break; -case 177: - // line 1483 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 179: + // line 1492 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((Type)yyVals[-1+yyTop]).getOffset(),((Type)yyVals[-1+yyTop]).getVariableLength()); @@ -2123,8 +2140,8 @@ case 177: yyVal = LVD; } break; -case 178: - // line 1494 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 180: + // line 1503 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((FieldDeclaration)yyVals[0+yyTop]).getOffset(),((FieldDeclaration)yyVals[0+yyTop]).getVariableLength()); @@ -2133,32 +2150,32 @@ case 178: yyVal = LVD; } break; -case 179: - // line 1504 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 181: + // line 1513 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 180: - // line 1508 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 182: + // line 1517 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((EmptyStmt)yyVals[0+yyTop]); } break; -case 181: - // line 1512 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 183: + // line 1521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ExprStmt)yyVals[0+yyTop]); } break; -case 182: - // line 1516 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 184: + // line 1525 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Return)yyVals[0+yyTop]); } break; -case 183: - // line 1521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 185: + // line 1530 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt Ifst = new IfStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Ifst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2166,8 +2183,8 @@ case 183: yyVal=Ifst; } break; -case 184: - // line 1529 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 186: + // line 1538 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfstElst = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfstElst.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2176,8 +2193,8 @@ case 184: yyVal=IfstElst; } break; -case 185: - // line 1538 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 187: + // line 1547 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whlst = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whlst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2185,8 +2202,8 @@ case 185: yyVal=Whlst; } break; -case 186: - // line 1549 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 188: + // line 1558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-6+yyTop]).getOffset(),((Expr)yyVals[-6+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-6+yyTop])); @@ -2198,8 +2215,8 @@ case 186: yyVal = Fst; } break; -case 187: - // line 1561 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 189: + // line 1570 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2210,8 +2227,8 @@ case 187: yyVal = Fst; } break; -case 188: - // line 1572 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 190: + // line 1581 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2222,8 +2239,8 @@ case 188: yyVal = Fst; } break; -case 189: - // line 1583 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 191: + // line 1592 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-4+yyTop])); @@ -2234,8 +2251,8 @@ case 189: yyVal = Fst; } break; -case 190: - // line 1594 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 192: + // line 1603 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-4+yyTop])); @@ -2245,8 +2262,8 @@ case 190: yyVal = Fst; } break; -case 191: - // line 1604 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 193: + // line 1613 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-3+yyTop]).getOffset(),((Expr)yyVals[-3+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-3+yyTop])); @@ -2256,8 +2273,8 @@ case 191: yyVal = Fst; } break; -case 192: - // line 1614 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 194: + // line 1623 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Fst.set_head_Loop_expr(((Expr)yyVals[-2+yyTop])); @@ -2267,8 +2284,8 @@ case 192: yyVal = Fst; } break; -case 193: - // line 1624 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 195: + // line 1633 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Statement)yyVals[0+yyTop]).getOffset(),((Statement)yyVals[0+yyTop]).getVariableLength()); Fst.set_body_Loop_block(((Statement)yyVals[0+yyTop])); @@ -2277,73 +2294,73 @@ case 193: yyVal = Fst; } break; -case 194: - // line 1633 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 196: + // line 1642 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("conditionalexpression", Section.PARSER); yyVal=((Expr)yyVals[0+yyTop]); } break; -case 195: - // line 1638 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 197: + // line 1647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 196: - // line 1644 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 198: + // line 1653 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { EmptyStmt Empst = new EmptyStmt(); yyVal=Empst; } break; -case 197: - // line 1650 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 199: + // line 1659 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[-1+yyTop]); } break; -case 198: - // line 1655 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 200: + // line 1664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return ret = new Return(-1,-1); yyVal= ret; } break; -case 199: - // line 1660 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 201: + // line 1669 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return retexp = new Return(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); retexp.set_ReturnExpr(((Expr)yyVals[-1+yyTop])); yyVal=retexp; } break; -case 200: - // line 1667 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 202: + // line 1676 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 201: - // line 1671 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((IfStmt)yyVals[0+yyTop]); - } - break; -case 202: - // line 1675 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((WhileStmt)yyVals[0+yyTop]); - } - break; case 203: // line 1680 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal=((Expr)yyVals[0+yyTop]); + yyVal=((IfStmt)yyVals[0+yyTop]); } break; case 204: - // line 1686 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1684 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((WhileStmt)yyVals[0+yyTop]); + } + break; +case 205: + // line 1689 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 206: + // line 1695 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nParser --> Zuweisung1!\n", Section.PARSER); Assign Ass = new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2369,8 +2386,8 @@ case 204: yyVal=Ass; } break; -case 205: - // line 1711 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 207: + // line 1720 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Assign Ass =new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); LocalOrFieldVar LOFV = new LocalOrFieldVar(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2393,44 +2410,44 @@ case 205: yyVal=Ass; } break; -case 206: - // line 1734 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 208: + // line 1743 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 207: - // line 1738 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 208: - // line 1742 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 209: - // line 1746 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 210: - // line 1750 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1751 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 211: - // line 1754 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1755 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 212: + // line 1759 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 213: + // line 1763 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 212: - // line 1765 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 214: + // line 1774 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfElno = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfElno.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2439,8 +2456,8 @@ case 212: yyVal=IfElno; } break; -case 213: - // line 1774 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 215: + // line 1783 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whstno = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whstno.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2448,14 +2465,14 @@ case 213: yyVal=Whstno; } break; -case 214: - // line 1782 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 216: + // line 1791 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 215: - // line 1786 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 217: + // line 1795 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LogOr = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); OrOp OrO = new OrOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2466,20 +2483,20 @@ case 215: yyVal=LogOr; } break; -case 216: - // line 1799 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 218: + // line 1808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 217: - // line 1804 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 219: + // line 1813 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 218: - // line 1808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 220: + // line 1817 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Lambdabody kann auch nur aus einer Expression bestehen. In diesem Fall wird ein Block erstellt, welcher als einziges Statement ein return statment mit der expression hat.*/ /*Bsp.: Aus der Expression |var=="hallo"| wird: |{return var=="hallo";}|*/ @@ -2489,20 +2506,20 @@ case 218: yyVal=ret; } break; -case 219: - // line 1818 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 221: + // line 1827 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 220: - // line 1822 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 222: + // line 1831 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ParameterList)yyVals[-1+yyTop]); } break; -case 221: - // line 1827 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 223: + // line 1836 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LambdaExpression lambda = new LambdaExpression(/*((ParameSterList)$2).getOffset(),((ParameterList)$2).getVariableLength()*/0,0); if(((ParameterList)yyVals[-2+yyTop])!=null)lambda.setParameterList(((ParameterList)yyVals[-2+yyTop])); @@ -2510,87 +2527,87 @@ case 221: yyVal=lambda; } break; -case 222: - // line 1846 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((UsedId)yyVals[0+yyTop]); - } - break; -case 223: - // line 1851 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=null; - } - break; case 224: // line 1855 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - TimesOp TEO = new TimesOp(-1,-1); - yyVal=TEO; + yyVal=((UsedId)yyVals[0+yyTop]); } break; case 225: // line 1860 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=null; + } + break; +case 226: + // line 1864 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + TimesOp TEO = new TimesOp(-1,-1); + yyVal=TEO; + } + break; +case 227: + // line 1869 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DivideOp DEO = new DivideOp(-1,-1); yyVal=DEO; } break; -case 226: - // line 1865 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 228: + // line 1874 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ModuloOp MEO = new ModuloOp(-1,-1); yyVal=MEO; } break; -case 227: - // line 1870 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 229: + // line 1879 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PlusOp PEO = new PlusOp(-1,-1); yyVal=PEO; } break; -case 228: - // line 1875 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 230: + // line 1884 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { MinusOp MEO = new MinusOp(-1,-1); yyVal=MEO; } break; -case 229: - // line 1887 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 231: + // line 1896 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreIncExpr PRINC = new PreIncExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRINC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRINC; } break; -case 230: - // line 1894 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 232: + // line 1903 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreDecExpr PRDEC = new PreDecExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRDEC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRDEC; } break; -case 231: - // line 1901 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 233: + // line 1910 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostIncExpr PIE = new PostIncExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PIE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PIE; } break; -case 232: - // line 1908 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 234: + // line 1917 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostDecExpr PDE = new PostDecExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PDE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PDE; } break; -case 233: - // line 1916 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 235: + // line 1925 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M1", Section.PARSER); MethodCall MC = new MethodCall(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2621,8 +2638,8 @@ case 233: yyVal=MC; } break; -case 234: - // line 1946 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 236: + // line 1955 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M2", Section.PARSER); MethodCall MCarg = new MethodCall(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); @@ -2654,8 +2671,8 @@ case 234: yyVal=MCarg; } break; -case 235: - // line 1977 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 237: + // line 1986 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M3", Section.PARSER); MethodCall MCpr = new MethodCall(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); @@ -2675,8 +2692,8 @@ case 235: yyVal=MCpr; } break; -case 236: - // line 1996 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 238: + // line 2005 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M4", Section.PARSER); MethodCall MCPA = new MethodCall(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); @@ -2697,8 +2714,8 @@ case 236: yyVal=MCPA; } break; -case 237: - // line 2019 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 239: + // line 2028 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NC = new NewClass(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); NC.set_UsedId(((UsedId)yyVals[-2+yyTop])); @@ -2707,8 +2724,8 @@ case 237: yyVal=NC; } break; -case 238: - // line 2027 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 240: + // line 2036 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NCarg = new NewClass(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); NCarg.set_UsedId(((UsedId)yyVals[-3+yyTop])); @@ -2718,14 +2735,14 @@ case 238: yyVal=NCarg; } break; -case 239: - // line 2037 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 241: + // line 2046 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 240: - // line 2041 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 242: + // line 2050 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary And = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); AndOp AndO = new AndOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2736,20 +2753,20 @@ case 240: yyVal=And; } break; -case 241: - // line 2057 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 242: - // line 2061 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 243: - // line 2065 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2066 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 244: + // line 2070 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 245: + // line 2074 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PositivExpr POSEX=new PositivExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryPlus UP= new UnaryPlus(); @@ -2758,8 +2775,8 @@ case 243: yyVal=POSEX; } break; -case 244: - // line 2073 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 246: + // line 2082 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NegativeExpr NEGEX=new NegativeExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryMinus UM=new UnaryMinus(); @@ -2768,20 +2785,20 @@ case 244: yyVal=NEGEX; } break; -case 245: - // line 2081 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 246: - // line 2086 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 247: // line 2090 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 248: + // line 2095 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 249: + // line 2099 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((UsedId)yyVals[0+yyTop]).get_Name().size() > 1) { @@ -2800,18 +2817,6 @@ case 247: } } break; -case 248: - // line 2108 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 249: - // line 2112 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 250: // line 2117 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { @@ -2819,19 +2824,31 @@ case 250: } break; case 251: - // line 2122 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2121 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 252: + // line 2126 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 253: - // line 2128 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2131 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 255: + // line 2137 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Literal)yyVals[0+yyTop]); } break; -case 254: - // line 2132 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 256: + // line 2141 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This T = new This(((Token)yyVals[0+yyTop]).getOffset(),((Token)yyVals[0+yyTop]).getLexem().length()); UsedId UT = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); @@ -2840,24 +2857,24 @@ case 254: yyVal=T; } break; -case 255: - // line 2153 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 257: + // line 2162 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 256: - // line 2157 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 258: + // line 2166 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 257: - // line 2162 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 259: + // line 2171 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 258: - // line 2164 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 260: + // line 2173 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {NotExpr NE=new NotExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryNot UN=new UnaryNot(); NE.set_UnaryNot(UN); @@ -2865,75 +2882,75 @@ case 258: yyVal=NE; } break; -case 259: - // line 2170 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 261: + // line 2179 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((CastExpr)yyVals[0+yyTop]);} break; -case 260: - // line 2172 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 262: + // line 2181 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 262: - // line 2177 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 264: + // line 2186 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {IntLiteral IL = new IntLiteral(); IL.set_Int(((Token)yyVals[0+yyTop]).String2Int()); yyVal = IL; } break; -case 263: - // line 2182 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 265: + // line 2191 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {BoolLiteral BL = new BoolLiteral(); BL.set_Bool(((Token)yyVals[0+yyTop]).String2Bool()); yyVal = BL; } break; -case 264: - // line 2186 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 266: + // line 2195 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {CharLiteral CL = new CharLiteral(); CL.set_Char(((Token)yyVals[0+yyTop]).CharInString()); yyVal=CL; } break; -case 265: - // line 2191 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 267: + // line 2200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { StringLiteral ST = new StringLiteral(); ST.set_String(((Token)yyVals[0+yyTop]).get_String()); yyVal=ST; } break; -case 266: - // line 2196 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 268: + // line 2205 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LongLiteral LL = new LongLiteral(); LL.set_Long(((Token)yyVals[0+yyTop]).String2Long()); yyVal = LL; } break; -case 267: - // line 2200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 269: + // line 2209 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FloatLiteral FL = new FloatLiteral(); FL.set_Float(((Token)yyVals[0+yyTop]).String2Float()); yyVal = FL; } break; -case 268: - // line 2205 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 270: + // line 2214 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DoubleLiteral DL = new DoubleLiteral(); DL.set_Double(((Token)yyVals[0+yyTop]).String2Double()); yyVal = DL; } break; -case 269: - // line 2211 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 271: + // line 2220 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Null NN = new Null(); yyVal=NN; } break; -case 270: - // line 2217 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 272: + // line 2226 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { CastExpr CaEx=new CastExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); CaEx.set_Type(((BaseType)yyVals[-2+yyTop])); @@ -2941,25 +2958,25 @@ case 270: yyVal=CaEx; } break; -case 271: - // line 2226 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 272: - // line 2230 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - } - break; case 273: - // line 2234 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; case 274: - // line 2238 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 2239 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + } + break; +case 275: + // line 2243 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 276: + // line 2247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary EQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); EqualOp EO = new EqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2970,8 +2987,8 @@ case 274: yyVal=EQ; } break; -case 275: - // line 2248 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 277: + // line 2257 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary NEQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); NotEqualOp NEO = new NotEqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2982,14 +2999,14 @@ case 275: yyVal=NEQ; } break; -case 276: - // line 2259 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 278: + // line 2268 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 277: - // line 2263 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 279: + // line 2272 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessOp LOO = new LessOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3000,8 +3017,8 @@ case 277: yyVal=LO; } break; -case 278: - // line 2273 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 280: + // line 2282 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterOp GOO = new GreaterOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3012,8 +3029,8 @@ case 278: yyVal=GO; } break; -case 279: - // line 2283 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 281: + // line 2292 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessEquOp LEO = new LessEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3024,8 +3041,8 @@ case 279: yyVal=LE; } break; -case 280: - // line 2293 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 282: + // line 2302 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterEquOp GEO = new GreaterEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3036,8 +3053,8 @@ case 280: yyVal=GE; } break; -case 281: - // line 2303 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 283: + // line 2312 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { InstanceOf ISO=new InstanceOf(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ISO.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -3045,20 +3062,20 @@ case 281: yyVal=ISO; } break; -case 282: - // line 2311 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 283: - // line 2316 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; case 284: // line 2320 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 285: + // line 2325 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 286: + // line 2329 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary AD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); PlusOp PO = new PlusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3069,8 +3086,8 @@ case 284: yyVal=AD; } break; -case 285: - // line 2330 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 287: + // line 2339 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MI = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); MinusOp MO = new MinusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3081,14 +3098,14 @@ case 285: yyVal=MI; } break; -case 286: - // line 2341 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 288: + // line 2350 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 287: - // line 2345 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 289: + // line 2354 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary ML = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); TimesOp TO = new TimesOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3099,8 +3116,8 @@ case 287: yyVal=ML; } break; -case 288: - // line 2355 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 290: + // line 2364 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary DV = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); DivideOp DO = new DivideOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3111,8 +3128,8 @@ case 288: yyVal = DV; } break; -case 289: - // line 2365 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 291: + // line 2374 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ModuloOp MO = new ModuloOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3123,7 +3140,7 @@ case 289: yyVal =MD; } break; - // line 3127 "-" + // line 3144 "-" } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; @@ -3168,21 +3185,22 @@ case 289: 96, 96, 97, 97, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 40, 40, 19, - 19, 44, 45, 45, 51, 51, 110, 110, 39, 39, - 15, 15, 37, 37, 38, 21, 81, 81, 50, 50, - 104, 104, 36, 22, 79, 47, 82, 82, 82, 82, - 82, 82, 72, 72, 35, 35, 48, 48, 80, 80, - 80, 80, 87, 88, 84, 85, 85, 85, 85, 85, - 85, 85, 85, 70, 70, 90, 78, 91, 91, 83, - 83, 83, 69, 100, 100, 73, 73, 73, 73, 73, - 73, 89, 86, 68, 68, 102, 46, 46, 52, 52, - 71, 103, 101, 101, 101, 101, 101, 101, 74, 75, - 76, 77, 105, 105, 105, 105, 92, 92, 67, 67, - 58, 58, 58, 58, 58, 56, 56, 56, 56, 55, - 66, 66, 54, 54, 54, 54, 57, 57, 57, 65, - 65, 53, 53, 53, 53, 53, 53, 53, 53, 112, - 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, - 62, 61, 60, 60, 60, 59, 59, 59, 59, + 19, 44, 45, 45, 51, 51, 110, 110, 110, 110, + 39, 39, 15, 15, 37, 37, 38, 21, 81, 81, + 50, 50, 104, 104, 36, 22, 79, 47, 82, 82, + 82, 82, 82, 82, 72, 72, 35, 35, 48, 48, + 80, 80, 80, 80, 87, 88, 84, 85, 85, 85, + 85, 85, 85, 85, 85, 70, 70, 90, 78, 91, + 91, 83, 83, 83, 69, 100, 100, 73, 73, 73, + 73, 73, 73, 89, 86, 68, 68, 102, 46, 46, + 52, 52, 71, 103, 101, 101, 101, 101, 101, 101, + 74, 75, 76, 77, 105, 105, 105, 105, 92, 92, + 67, 67, 58, 58, 58, 58, 58, 56, 56, 56, + 56, 55, 66, 66, 54, 54, 54, 54, 57, 57, + 57, 65, 65, 53, 53, 53, 53, 53, 53, 53, + 53, 112, 64, 64, 63, 63, 63, 62, 62, 62, + 62, 62, 62, 61, 60, 60, 60, 59, 59, 59, + 59, }; protected static final short yyLen [] = { 2, 1, 2, 3, 2, 3, 3, 1, 2, 3, 1, @@ -3199,26 +3217,27 @@ case 289: 1, 3, 1, 3, 3, 2, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 2, 3, 1, 3, 1, 3, 1, - 3, 1, 1, 2, 1, 3, 4, 5, 1, 3, - 3, 4, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 5, 7, 5, 9, 8, 8, 8, 7, - 7, 7, 6, 1, 1, 1, 2, 2, 3, 1, - 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, - 1, 7, 5, 1, 3, 1, 1, 1, 2, 3, - 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 3, 4, 5, 6, 4, 5, 1, 3, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 1, 1, 2, 1, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 1, 3, 1, 3, 3, 1, 3, 3, 3, 3, - 3, 1, 1, 3, 3, 1, 3, 3, 3, + 3, 1, 1, 2, 1, 3, 4, 5, 4, 5, + 1, 3, 3, 4, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 3, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 5, 7, 5, 9, 8, 8, + 8, 7, 7, 7, 6, 1, 1, 1, 2, 2, + 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 7, 5, 1, 3, 1, 1, 1, + 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 4, 5, 6, 4, 5, + 1, 3, 1, 1, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 1, 1, 1, 2, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 1, 3, 1, 3, 3, 1, 3, 3, + 3, 3, 3, 1, 1, 3, 3, 1, 3, 3, + 3, }; protected static final short yyDefRed [] = { 0, - 62, 153, 176, 0, 63, 175, 60, 59, 58, 0, + 62, 155, 178, 0, 63, 177, 60, 59, 58, 0, 0, 0, 61, 19, 0, 14, 15, 13, 12, 7, - 0, 0, 155, 163, 154, 0, 0, 0, 0, 47, + 0, 0, 157, 165, 156, 0, 0, 0, 0, 47, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 71, 0, 0, 0, 0, 0, 48, 11, 0, 0, 0, 0, 0, 0, 20, 0, @@ -3226,7 +3245,7 @@ case 289: 0, 72, 0, 75, 137, 139, 5, 0, 0, 0, 0, 106, 107, 0, 49, 64, 67, 50, 0, 0, 0, 0, 45, 0, 80, 0, 81, 0, 0, 56, - 68, 0, 0, 0, 156, 0, 0, 0, 70, 0, + 68, 0, 0, 0, 158, 0, 0, 0, 70, 0, 69, 22, 0, 0, 24, 0, 18, 0, 54, 0, 52, 0, 65, 79, 78, 0, 0, 0, 0, 0, 34, 0, 0, 0, 77, 21, 0, 0, 33, 0, @@ -3236,799 +3255,820 @@ case 289: 0, 0, 0, 0, 83, 26, 51, 29, 53, 66, 0, 86, 0, 55, 43, 44, 73, 74, 23, 0, 25, 35, 111, 0, 108, 0, 0, 0, 0, 0, - 262, 266, 268, 267, 263, 269, 264, 265, 0, 0, - 0, 196, 97, 0, 0, 140, 0, 0, 179, 0, - 157, 0, 0, 253, 250, 0, 0, 256, 0, 207, - 208, 0, 0, 181, 167, 143, 158, 170, 171, 168, - 169, 180, 182, 206, 0, 0, 172, 125, 151, 160, - 0, 145, 0, 0, 89, 0, 0, 0, 0, 149, - 0, 164, 141, 0, 254, 0, 0, 0, 0, 0, - 0, 245, 286, 0, 0, 276, 0, 0, 0, 0, - 0, 0, 0, 194, 173, 87, 241, 242, 248, 249, - 174, 195, 255, 259, 99, 0, 119, 94, 90, 0, - 0, 0, 135, 0, 0, 84, 101, 0, 0, 0, - 27, 0, 0, 0, 198, 0, 0, 0, 0, 229, - 230, 219, 0, 0, 0, 98, 144, 166, 216, 0, - 0, 231, 232, 197, 227, 228, 224, 225, 226, 223, - 0, 159, 0, 152, 114, 129, 120, 92, 0, 0, - 0, 243, 244, 258, 0, 0, 0, 0, 0, 0, + 0, 264, 268, 270, 269, 265, 271, 266, 267, 0, + 0, 0, 198, 97, 0, 0, 140, 0, 0, 181, + 0, 159, 0, 0, 255, 252, 0, 0, 258, 0, + 209, 210, 0, 0, 183, 169, 143, 160, 172, 173, + 170, 171, 182, 184, 208, 0, 0, 174, 125, 153, + 162, 0, 145, 0, 0, 89, 0, 0, 0, 0, + 151, 0, 166, 141, 0, 256, 0, 0, 0, 0, + 0, 0, 247, 288, 0, 0, 278, 0, 0, 0, + 0, 0, 0, 0, 196, 175, 87, 243, 244, 250, + 251, 176, 197, 257, 261, 99, 0, 119, 94, 90, + 0, 0, 0, 135, 0, 0, 84, 101, 0, 0, + 0, 27, 0, 0, 0, 200, 0, 0, 0, 0, + 0, 231, 232, 221, 0, 0, 0, 98, 144, 168, + 218, 0, 0, 233, 234, 199, 229, 230, 226, 227, + 228, 225, 0, 161, 0, 154, 114, 129, 120, 92, + 0, 0, 0, 245, 246, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 126, 0, 0, 121, 95, 103, 102, 0, - 0, 112, 0, 0, 0, 199, 0, 161, 0, 0, - 220, 233, 0, 217, 221, 218, 0, 204, 205, 146, - 150, 0, 0, 287, 288, 289, 0, 0, 281, 279, - 280, 277, 278, 0, 0, 0, 0, 0, 0, 0, - 130, 122, 104, 0, 0, 0, 0, 0, 147, 0, - 0, 0, 234, 0, 237, 0, 270, 85, 0, 0, - 0, 0, 0, 0, 0, 0, 183, 0, 202, 201, - 162, 148, 185, 235, 0, 238, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 236, 192, 191, 0, - 190, 0, 0, 0, 0, 0, 184, 189, 188, 187, - 0, 0, 0, 186, 0, 213, 0, 212, + 0, 0, 0, 100, 126, 0, 0, 121, 95, 103, + 102, 0, 0, 112, 0, 0, 0, 201, 0, 163, + 0, 0, 0, 0, 222, 235, 0, 219, 223, 220, + 0, 206, 207, 146, 152, 0, 0, 289, 290, 291, + 0, 0, 283, 281, 282, 279, 280, 0, 0, 0, + 0, 0, 0, 0, 130, 122, 104, 0, 0, 0, + 0, 0, 149, 0, 0, 147, 0, 0, 236, 0, + 239, 0, 272, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 0, 204, 203, 164, 150, 148, 187, + 237, 0, 240, 195, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 238, 194, 193, 0, 192, 0, 0, + 0, 0, 0, 186, 191, 190, 189, 0, 0, 0, + 188, 0, 215, 0, 214, }; protected static final short yyDgoto [] = { 15, 16, 17, 68, 122, 123, 124, 59, 35, 40, 125, - 94, 95, 96, 97, 98, 99, 100, 101, 215, 103, - 216, 105, 18, 19, 37, 20, 21, 270, 60, 85, - 23, 88, 61, 69, 24, 25, 26, 27, 261, 218, - 29, 30, 219, 155, 220, 395, 221, 222, 157, 252, - 323, 223, 224, 225, 226, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 228, 388, 229, 287, 288, 289, 290, 234, 0, 235, - 236, 237, 448, 238, 239, 449, 240, 241, 450, 242, - 243, 291, 31, 82, 83, 194, 150, 84, 32, 292, - 341, 330, 245, 389, 293, 33, 109, 110, 175, 247, - 111, 294, 0, 73, 45, 74, + 94, 95, 96, 97, 98, 99, 100, 101, 216, 103, + 217, 105, 18, 19, 37, 20, 21, 271, 60, 85, + 23, 88, 61, 69, 24, 25, 26, 27, 262, 219, + 29, 30, 220, 155, 221, 399, 222, 223, 157, 253, + 325, 224, 225, 226, 227, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 229, 390, 230, 288, 289, 290, 291, 235, 0, 236, + 237, 238, 454, 239, 240, 455, 241, 242, 456, 243, + 244, 292, 31, 82, 83, 194, 150, 84, 32, 293, + 343, 332, 246, 391, 294, 33, 109, 110, 175, 248, + 111, 295, 0, 73, 45, 74, }; - protected static final short yySindex [] = { 2662, - 0, 0, 0, -274, 0, 0, 0, 0, 0, -187, - -187, -145, 0, 0, 0, 0, 0, 0, 0, 0, - 581, 366, 0, 0, 0, 104, 116, -60, 898, 0, - 1166, 581, 0, 170, -106, 15, 177, 194, 204, -80, - 0, 1166, -24, 53, 0, 195, 208, 2662, -274, -145, - 0, 0, 581, 1166, 11, -187, -187, 1982, 0, -97, - -13, 0, 0, -12, 11, -187, 2544, 0, 36, 0, - -221, 0, 165, 0, 0, 0, 0, -106, -80, 1166, - 81, 0, 0, 173, 0, 0, 0, 0, 232, 95, - 282, 11, 0, 262, 0, 232, 0, 159, 2574, 0, - 0, 190, 315, 400, 0, 423, 167, 1219, 0, 347, - 0, 0, -13, -187, 0, 0, 0, 222, 0, 282, - 0, 2604, 0, 0, 0, 262, 414, 95, 1219, -187, - 0, -187, -187, 53, 0, 0, -97, -13, 0, 36, - -187, 11, 0, 2159, 0, 282, 159, -19, 0, 258, - 95, 0, 167, 0, 0, -187, 0, 0, 0, 187, - 0, 0, 976, -16, 282, 159, 355, 433, 95, 320, - 159, 167, 347, 2203, 0, 0, 0, 0, 0, 0, - 95, 0, 193, 0, 0, 0, 0, 0, 0, -13, - 0, 0, 0, 457, 0, 456, 461, 434, 463, 465, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, - 768, 0, 0, 13, 453, 0, 29, 187, 0, 2247, - 0, 452, 189, 0, 0, 470, -85, 0, 458, 0, + protected static final short yySindex [] = { 1370, + 0, 0, 0, -232, 0, 0, 0, 0, 0, -228, + -228, -198, 0, 0, 0, 0, 0, 0, 0, 0, + 1095, 104, 0, 0, 0, 60, 103, -23, 1210, 0, + 1557, 1095, 0, 99, -92, 256, 215, 233, 247, -80, + 0, 1557, 11, -59, 0, 208, 236, 1370, -232, -198, + 0, 0, 1095, 1557, 33, -228, -228, 2576, 0, -93, + -12, 0, 0, -34, 33, -228, 2606, 0, 18, 0, + -47, 0, 162, 0, 0, 0, 0, -92, -80, 1557, + 72, 0, 0, 192, 0, 0, 0, 0, 222, 56, + 356, 33, 0, 234, 0, 222, 0, 150, 2642, 0, + 0, 40, 404, 409, 0, 431, 172, 1875, 0, 351, + 0, 0, -12, -228, 0, 0, 0, 228, 0, 356, + 0, 2679, 0, 0, 0, 234, 416, 56, 1875, -228, + 0, -228, -228, -59, 0, 0, -93, -12, 0, 18, + -228, 33, 0, 2133, 0, 356, 150, -25, 0, 237, + 56, 0, 172, 0, 0, -228, 0, 0, 0, 176, + 0, 0, 967, 185, 356, 150, 49, 432, 56, 343, + 150, 172, 351, 2177, 0, 0, 0, 0, 0, 0, + 56, 0, 194, 0, 0, 0, 0, 0, 0, -12, + 0, 0, 0, 462, 0, 461, 465, 481, 467, 469, + 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 994, 994, 0, 0, 232, 458, 0, 52, 176, 0, + 2221, 0, 459, 188, 0, 0, 473, 137, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 187, 0, 67, 11, 0, 159, 159, 460, 400, 0, - 479, 0, 0, -187, 0, 13, 768, 768, 768, 61, - -85, 0, 0, 395, 421, 0, -53, -102, 487, 432, - 407, 230, 236, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 0, 0, 0, 159, - 95, 95, 0, 159, 364, 0, 0, 2291, 2353, 64, - 0, -187, 525, 976, 0, 484, 577, 976, 61, 0, - 0, 0, 277, 621, 453, 0, 0, 0, 0, 705, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 976, 0, 143, 0, 0, 0, 0, 0, -187, 505, - -6, 0, 0, 0, 768, 768, 768, 768, 768, -187, - 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, - 768, 0, 0, 159, 159, 0, 0, 0, 0, 2410, - 976, 0, 733, 489, 508, 0, 491, 0, 402, 510, - 0, 0, 409, 0, 0, 0, 512, 0, 0, 0, - 0, 750, 768, 0, 0, 0, 395, 395, 0, 0, - 0, 0, 0, -53, -53, -102, 487, 432, 407, 230, - 0, 0, 0, 495, 796, 500, 823, 2449, 0, 976, - 503, 2491, 0, 850, 0, 411, 0, 0, 2491, 526, - 891, 908, 507, 532, 533, 0, 0, 307, 0, 0, - 0, 0, 0, 0, 418, 0, 0, 2491, 2491, 534, - 2491, 535, 938, 976, 976, 2491, 0, 0, 0, 2491, - 0, 2491, 2491, 536, 539, 540, 0, 0, 0, 0, - 2491, 2449, 2449, 0, 316, 0, 2449, 0, + 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, + 0, 176, 0, 203, 33, 0, 150, 150, 468, 409, + 0, 476, 0, 0, -228, 0, 232, 994, 994, 994, + 206, 137, 0, 0, 358, 334, 0, 117, 96, 490, + 442, 413, 231, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, + 150, 56, 56, 0, 150, 291, 0, 0, 2277, 2333, + 164, 0, -228, 537, 967, 0, 488, 624, 641, 967, + 206, 0, 0, 0, 345, 668, 458, 0, 0, 0, + 0, 697, 252, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 967, 0, 241, 0, 0, 0, 0, 0, + -228, 518, 55, 0, 0, 0, 994, 994, 994, 994, + 994, -228, 994, 994, 994, 994, 994, 994, 994, 994, + 994, 994, 994, 0, 0, 150, 150, 0, 0, 0, + 0, 2377, 967, 0, 724, 500, 521, 0, 507, 0, + 363, 508, 383, 530, 0, 0, 388, 0, 0, 0, + 535, 0, 0, 0, 0, 751, 994, 0, 0, 0, + 358, 358, 0, 0, 0, 0, 0, 117, 117, 96, + 490, 442, 413, 231, 0, 0, 0, 517, 768, 522, + 807, 2421, 0, 967, 524, 0, 525, 2465, 0, 824, + 0, 397, 0, 0, 2465, 545, 860, 911, 528, 548, + 552, 0, 0, 326, 0, 0, 0, 0, 0, 0, + 0, 410, 0, 0, 2465, 2465, 553, 2465, 557, 938, + 967, 967, 2465, 0, 0, 0, 2465, 0, 2465, 2465, + 561, 562, 567, 0, 0, 0, 0, 2465, 2421, 2421, + 0, 348, 0, 2421, 0, }; protected static final short yyRindex [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1249, 0, 0, 0, 1068, 1708, 0, 0, 0, - 586, 0, 0, -100, 0, 0, 0, 0, -79, 0, - 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, + 0, 1133, 0, 0, 0, 2519, 2548, 0, 0, 0, + 619, 0, 0, -77, 0, 0, 0, 0, -75, 0, + 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 0, 592, - 285, 0, 0, 0, 0, 0, 0, 0, 2632, 0, - -8, 0, 0, 0, 0, 0, 0, -20, 0, 0, - 0, 0, 0, 392, 0, -5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 2, + 251, 0, 0, 0, 0, 0, 0, 0, 0, 622, + 279, 0, 0, 0, 0, 0, 0, 0, 2709, 0, + -9, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 338, 0, -5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 297, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 341, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 369, 47, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 289, 0, 0, 0, 0, -28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 0, 0, 0, 0, 537, 0, 448, 0, 0, 0, - 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, - 0, -17, -9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 82, 0, 538, 0, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 653, - 2122, 0, 0, 1972, 1778, 0, 1807, 1844, 1273, 1316, - 1357, 1368, 1423, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1554, 0, - 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, + 0, 0, 0, 293, 0, 0, 0, 0, 0, -44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, + 0, 0, 0, 0, 0, 564, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, + 0, 0, -49, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 88, 0, 574, + 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, + 569, 2064, 0, 0, 1969, 1694, 0, 1855, 1738, 1274, + 1300, 1384, -20, 1410, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1421, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 133, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1995, 2032, 0, 0, - 0, 0, 0, 1833, 1899, 1870, 1591, 1645, 1696, 1741, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2090, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 138, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, + 1989, 2026, 0, 0, 0, 0, 0, 1895, 1914, 1749, + 1464, 1552, 1578, 1622, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2089, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; - protected static final short yyGindex [] = { 558, - 0, 0, -23, 0, 485, 0, 16, 560, 562, 0, - 123, 0, 30, 0, 2225, 0, 517, 0, -34, -47, - 41, -127, 295, 0, 0, 45, 591, 1, 546, -152, - -51, 6, 10, 547, 0, 0, 359, -113, 0, 541, - 88, 52, -86, 0, -158, 0, 0, 0, 344, 286, - -27, 0, 0, 0, 0, -142, 0, -177, 28, 0, - 14, 119, 263, 260, 264, 266, 268, 0, 0, 291, - 0, -35, 0, -48, -1, 17, 74, 0, 0, -94, - -206, 2136, -67, 0, 0, 0, 0, 0, 0, 0, - 0, 293, 172, -84, 499, 0, 0, 572, 0, 132, - 0, 0, 0, -284, 199, 367, 0, 542, 469, 471, - 0, 0, 0, 0, 0, 509, + protected static final short yyGindex [] = { 589, + 0, 0, -15, 0, 529, 0, 452, 591, 593, 0, + 277, 0, 4, 0, 1737, 0, 547, 0, -24, -37, + 3, 333, 20, 0, 0, 68, 623, 1, 578, -128, + -51, 25, -13, 575, 0, 0, 391, -56, 0, 551, + 30, 9, -82, 0, -138, 0, 0, 0, 505, 315, + 79, 0, 0, 0, 0, -141, 0, 734, 92, 0, + 119, 93, 292, 296, 299, 290, 295, 0, 0, 329, + 0, -154, 0, -54, -1, 66, 84, 0, 0, -376, + -202, 1052, -102, 0, 0, 0, 0, 0, 0, 0, + 0, 332, 177, -72, 541, 0, 0, 614, 0, 159, + 0, 0, 0, -266, 259, 165, 0, 579, 515, 516, + 0, 0, 0, 0, 0, 555, }; - protected static final short yyTable [] = { 255, - 22, 227, 145, 260, 86, 87, 363, 149, 364, 154, - 36, 38, 211, 327, 87, 308, 58, 254, 185, 186, - 250, 249, 30, 102, 295, 58, 34, 193, 22, 117, - 114, 227, 320, 321, 403, 164, 250, 19, 131, 393, - 13, 209, 67, 28, 22, 131, 132, 19, 22, 210, - 164, 19, 164, 322, 13, 139, 22, 22, 22, 168, - 43, 19, 87, 133, 102, 41, 22, 22, 324, 113, - 16, 119, 167, 62, 43, 112, 115, 227, 87, 130, - 51, 340, 19, 17, 46, 13, 250, 138, 44, 352, - 353, 354, 19, 136, 22, 230, 127, 41, 104, 22, - 324, 327, 131, 148, 86, 258, 43, 344, 22, 58, - 343, 350, 123, 14, 22, 71, 192, 436, 116, 177, - 253, 133, 22, 342, 381, 230, 22, 286, 176, 22, - 22, 127, 22, 22, 22, 184, 296, 305, 250, 104, - 115, 22, 231, 105, 217, 108, 190, 104, 22, 455, - 380, 127, 189, 191, 129, 39, 22, 124, 67, 51, - 232, 56, 316, 117, 22, 227, 227, 30, 128, 345, - 22, 230, 231, 327, 217, 57, 123, 404, 405, 406, - 51, 30, 116, 325, 57, 133, 108, 66, 28, 126, - 232, 118, 42, 259, 46, 127, 401, 2, 382, 365, - 263, 3, 366, 54, 115, 311, 47, 105, 134, 129, - 319, 319, 86, 6, 22, 250, 142, 233, 231, 360, - 217, 124, 332, 333, 80, 437, 135, 117, 372, 55, - 170, 343, 128, 160, 143, 63, 232, 227, 2, 64, - 14, 2, 3, 394, 126, 3, 409, 233, 161, 361, - 362, 170, 19, 164, 6, 118, 164, 6, 19, 230, - 230, 255, 255, 65, 22, 142, 22, 319, 319, 319, - 2, 164, 19, 19, 3, 244, 70, 384, 385, 254, - 254, 209, 390, 178, 209, 227, 6, 75, 116, 227, - 248, 248, 19, 233, 396, 13, 227, 86, 249, 249, - 76, 254, 19, 19, 42, 244, 231, 231, 217, 217, - 2, 81, 22, 209, 3, 227, 227, 391, 227, 255, - 343, 148, 42, 227, 232, 232, 6, 227, 109, 227, - 227, 230, 110, 446, 335, 336, 337, 338, 227, 227, - 227, 339, 246, 22, 227, 424, 109, 426, 141, 22, - 110, 244, 106, 14, 144, 319, 319, 319, 319, 319, - 22, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 246, 162, 410, 411, 412, 413, 231, 230, - 217, 233, 233, 230, 164, 407, 408, 446, 446, 440, - 230, 443, 446, 106, 451, 146, 232, 52, 160, 164, - 2, 164, 106, 319, 3, 460, 462, 160, 52, 230, - 230, 43, 230, 298, 485, 486, 6, 230, 246, 488, - 52, 230, 377, 230, 230, 44, 231, 474, 475, 476, - 231, 357, 230, 230, 230, 140, 355, 231, 230, 244, - 244, 356, 431, 209, 232, 430, 52, 156, 232, 433, - 88, 456, 430, 233, 430, 232, 231, 231, 467, 231, - 163, 430, 164, 358, 231, 359, 269, 165, 231, 174, - 231, 231, 182, 266, 232, 232, 267, 232, 268, 231, - 231, 231, 232, 414, 415, 231, 232, 262, 232, 232, - 248, 299, 315, 310, 312, 313, 160, 232, 232, 232, - 314, 233, 317, 232, 318, 233, 246, 246, 222, 297, - 328, 244, 233, 19, 303, 331, 334, 329, 348, 2, - 19, 19, 349, 3, 367, 368, 19, 19, 19, 19, - 369, 233, 233, 19, 233, 6, 370, 397, 76, 233, - 28, 371, 386, 233, 402, 233, 233, 427, 428, 429, - 432, 434, 151, 438, 233, 233, 233, 269, 441, 244, - 233, 452, 120, 244, 266, 463, 458, 267, 48, 268, - 244, 464, 465, 466, 470, 472, 481, 2, 246, 482, - 483, 3, 487, 383, 72, 1, 2, 4, 28, 244, - 244, 3, 244, 6, 136, 178, 88, 244, 107, 346, - 347, 244, 177, 244, 244, 77, 180, 128, 78, 269, - 301, 79, 244, 244, 244, 159, 266, 387, 244, 267, - 14, 268, 53, 137, 351, 140, 246, 417, 400, 416, - 246, 398, 418, 399, 153, 419, 118, 246, 420, 107, - 195, 306, 188, 373, 309, 0, 0, 376, 172, 173, - 0, 0, 0, 269, 0, 0, 246, 246, 0, 246, - 266, 392, 128, 267, 246, 268, 181, 0, 246, 183, - 246, 246, 0, 0, 187, 0, 0, 0, 0, 246, - 246, 246, 0, 0, 0, 246, 0, 0, 251, 247, - 247, 0, 0, 247, 247, 247, 247, 247, 0, 247, - 0, 0, 0, 0, 251, 0, 0, 0, 264, 0, - 302, 247, 247, 222, 247, 0, 0, 421, 422, 0, - 265, 0, 0, 0, 0, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 14, 0, 0, 269, 0, 0, - 0, 210, 211, 0, 266, 0, 247, 267, 76, 268, - 0, 0, 0, 0, 251, 247, 247, 0, 0, 0, - 0, 222, 222, 222, 222, 269, 0, 0, 222, 0, - 0, 0, 266, 0, 0, 267, 247, 268, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 0, 0, 266, - 435, 425, 267, 0, 268, 0, 0, 0, 0, 264, - 269, 0, 0, 0, 0, 0, 251, 266, 0, 0, - 267, 265, 268, 0, 0, 0, 0, 201, 202, 203, - 204, 205, 206, 207, 208, 14, 0, 144, 269, 0, - 0, 0, 210, 211, 0, 266, 439, 1, 267, 0, - 268, 0, 0, 4, 0, 0, 0, 0, 0, 5, - 0, 264, 0, 0, 0, 269, 7, 8, 9, 0, - 11, 12, 266, 265, 13, 267, 0, 268, 0, 201, - 202, 203, 204, 205, 206, 207, 208, 14, 0, 0, - 0, 442, 269, 251, 210, 211, 0, 0, 0, 266, - 454, 0, 267, 0, 268, 264, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, - 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 0, 269, 0, 247, 0, 0, 210, 211, - 266, 459, 0, 267, 0, 268, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 266, 461, 0, - 267, 0, 268, 0, 247, 247, 247, 247, 247, 247, - 247, 247, 0, 0, 0, 0, 222, 222, 222, 222, - 269, 0, 0, 222, 0, 0, 0, 266, 473, 264, - 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, - 0, 265, 0, 0, 0, 0, 0, 201, 202, 203, - 204, 205, 206, 207, 208, 14, 0, 264, 269, 0, - 0, 0, 210, 211, 0, 266, 0, 0, 267, 265, - 268, 0, 0, 0, 264, 201, 202, 203, 204, 205, - 206, 207, 208, 14, 0, 0, 265, 0, 0, 0, - 210, 211, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 0, 0, 265, 0, 0, 210, 211, 0, - 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, - 264, 0, 0, 0, 0, 210, 211, 0, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 0, 201, 202, - 203, 204, 205, 206, 207, 208, 14, 264, 0, 0, - 0, 0, 0, 210, 211, 0, 0, 0, 0, 265, - 0, 136, 0, 0, 0, 201, 202, 203, 204, 205, - 206, 207, 208, 14, 264, 0, 0, 0, 0, 136, - 210, 211, 0, 0, 0, 0, 265, 0, 0, 0, + protected static final short yyTable [] = { 257, + 22, 256, 228, 71, 86, 87, 145, 117, 287, 211, + 36, 38, 213, 154, 87, 250, 216, 216, 329, 149, + 216, 216, 216, 216, 216, 216, 216, 261, 22, 58, + 58, 114, 228, 102, 166, 309, 19, 51, 216, 216, + 13, 216, 67, 317, 22, 30, 113, 28, 22, 166, + 19, 166, 393, 131, 13, 452, 22, 22, 22, 397, + 104, 130, 87, 139, 138, 342, 22, 22, 34, 168, + 127, 131, 14, 216, 102, 185, 186, 106, 87, 228, + 212, 19, 167, 160, 193, 13, 19, 108, 41, 231, + 119, 326, 160, 123, 22, 407, 129, 43, 161, 22, + 19, 104, 39, 216, 86, 116, 329, 299, 22, 104, + 58, 44, 452, 452, 22, 259, 51, 452, 106, 231, + 41, 133, 22, 190, 192, 127, 22, 106, 108, 22, + 22, 19, 22, 22, 22, 131, 352, 51, 177, 442, + 67, 22, 232, 127, 218, 46, 115, 306, 22, 43, + 46, 129, 105, 124, 184, 260, 22, 123, 55, 386, + 387, 224, 264, 44, 22, 394, 231, 228, 228, 116, + 22, 382, 232, 462, 218, 56, 365, 400, 366, 329, + 19, 166, 347, 117, 166, 133, 19, 66, 57, 57, + 30, 76, 28, 47, 327, 52, 128, 42, 2, 166, + 19, 19, 3, 148, 30, 134, 52, 127, 54, 233, + 115, 321, 321, 86, 6, 22, 105, 124, 52, 232, + 132, 218, 405, 135, 383, 296, 254, 234, 428, 80, + 430, 19, 2, 118, 2, 142, 3, 133, 3, 233, + 228, 14, 297, 346, 52, 326, 345, 117, 6, 398, + 6, 43, 216, 143, 231, 231, 384, 234, 250, 250, + 128, 257, 257, 256, 256, 22, 116, 22, 321, 321, + 321, 142, 324, 63, 446, 210, 449, 14, 64, 457, + 255, 216, 216, 216, 216, 216, 233, 216, 216, 178, + 228, 19, 467, 469, 42, 13, 228, 118, 256, 86, + 75, 43, 245, 228, 234, 413, 65, 232, 232, 218, + 218, 70, 42, 22, 62, 481, 482, 483, 337, 338, + 339, 340, 109, 228, 228, 341, 228, 231, 76, 251, + 251, 228, 245, 81, 160, 228, 110, 228, 228, 141, + 109, 19, 16, 126, 144, 22, 228, 228, 228, 379, + 374, 22, 228, 345, 110, 17, 146, 321, 321, 321, + 321, 321, 22, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 233, 233, 360, 231, 361, 245, + 232, 140, 218, 231, 170, 395, 492, 493, 345, 362, + 231, 495, 234, 234, 359, 148, 88, 367, 126, 357, + 368, 76, 247, 435, 358, 170, 434, 321, 249, 249, + 231, 231, 166, 231, 224, 224, 224, 224, 231, 363, + 364, 224, 231, 437, 231, 231, 434, 166, 439, 166, + 232, 434, 247, 231, 231, 231, 232, 463, 156, 231, + 434, 19, 2, 232, 334, 335, 3, 233, 19, 19, + 474, 411, 412, 434, 19, 19, 19, 19, 6, 418, + 419, 19, 162, 232, 232, 234, 232, 245, 245, 163, + 164, 232, 165, 174, 182, 232, 263, 232, 232, 247, + 251, 414, 415, 416, 417, 210, 232, 232, 232, 2, + 300, 2, 232, 3, 311, 3, 251, 233, 2, 313, + 314, 160, 3, 233, 315, 6, 318, 6, 319, 320, + 233, 112, 115, 270, 6, 234, 331, 330, 333, 351, + 267, 234, 336, 268, 151, 269, 350, 369, 234, 136, + 233, 233, 210, 233, 120, 370, 371, 372, 233, 316, + 245, 210, 233, 373, 233, 233, 388, 251, 234, 234, + 28, 234, 401, 233, 233, 233, 234, 406, 431, 233, + 234, 432, 234, 234, 176, 433, 436, 247, 247, 270, + 438, 234, 234, 234, 440, 444, 267, 234, 48, 268, + 447, 269, 458, 459, 344, 465, 470, 471, 189, 191, + 245, 472, 473, 477, 72, 385, 245, 479, 28, 251, + 2, 488, 489, 245, 3, 249, 249, 490, 107, 249, + 249, 249, 249, 249, 494, 249, 6, 128, 1, 2, + 4, 3, 180, 245, 245, 136, 245, 249, 249, 224, + 249, 245, 88, 302, 179, 245, 77, 245, 245, 78, + 247, 312, 79, 14, 153, 159, 245, 245, 245, 107, + 180, 249, 245, 140, 53, 137, 270, 353, 172, 404, + 420, 423, 249, 267, 389, 421, 268, 424, 269, 422, + 298, 402, 128, 270, 403, 304, 181, 251, 118, 183, + 267, 392, 195, 268, 187, 269, 173, 307, 188, 310, + 247, 0, 249, 0, 0, 0, 247, 0, 252, 0, + 270, 0, 0, 247, 0, 0, 0, 267, 396, 0, + 268, 0, 269, 0, 252, 0, 0, 0, 0, 0, + 303, 0, 0, 247, 247, 0, 247, 0, 0, 270, + 0, 247, 0, 0, 0, 247, 267, 247, 247, 268, + 0, 269, 0, 0, 0, 0, 247, 247, 247, 0, + 0, 0, 247, 0, 0, 265, 270, 0, 0, 0, + 0, 348, 349, 267, 0, 252, 268, 266, 269, 0, + 0, 0, 0, 202, 203, 204, 205, 206, 207, 208, + 209, 14, 429, 270, 0, 0, 0, 0, 211, 212, + 267, 441, 0, 268, 0, 269, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 375, 0, 267, 445, 378, + 268, 265, 269, 0, 0, 0, 0, 252, 0, 144, + 0, 0, 0, 266, 0, 0, 0, 0, 0, 202, + 203, 204, 205, 206, 207, 208, 209, 14, 0, 270, + 0, 249, 0, 0, 211, 212, 267, 0, 0, 268, + 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, + 0, 0, 0, 267, 461, 448, 268, 0, 269, 0, + 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, + 425, 426, 224, 224, 224, 224, 0, 0, 0, 224, + 0, 0, 270, 0, 0, 252, 0, 0, 265, 267, + 466, 0, 268, 0, 269, 0, 0, 0, 0, 0, + 266, 0, 0, 0, 0, 265, 202, 203, 204, 205, + 206, 207, 208, 209, 14, 0, 0, 266, 0, 0, + 0, 211, 212, 202, 203, 204, 205, 206, 207, 208, + 209, 14, 265, 270, 322, 323, 0, 0, 211, 212, + 267, 468, 0, 268, 266, 269, 0, 0, 0, 0, + 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, + 270, 265, 0, 0, 0, 211, 212, 267, 480, 0, + 268, 0, 269, 266, 0, 0, 0, 0, 0, 202, + 203, 204, 205, 206, 207, 208, 209, 14, 265, 270, + 0, 354, 355, 356, 211, 212, 267, 0, 0, 268, + 266, 269, 0, 0, 0, 0, 202, 203, 204, 205, + 206, 207, 208, 209, 14, 265, 270, 0, 0, 0, + 0, 211, 212, 267, 0, 0, 268, 266, 269, 0, + 0, 0, 265, 202, 203, 204, 205, 206, 207, 208, + 209, 14, 0, 0, 266, 0, 0, 0, 211, 212, + 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, + 0, 0, 0, 0, 0, 211, 212, 0, 0, 0, + 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, + 408, 409, 410, 266, 0, 0, 0, 0, 265, 202, + 203, 204, 205, 206, 207, 208, 209, 14, 0, 0, + 266, 0, 0, 0, 211, 212, 202, 203, 204, 205, + 206, 207, 208, 209, 14, 0, 0, 0, 0, 0, + 0, 211, 212, 0, 265, 0, 0, 0, 0, 0, + 443, 0, 0, 0, 0, 0, 266, 0, 0, 0, + 0, 0, 202, 203, 204, 205, 206, 207, 208, 209, + 14, 0, 0, 0, 0, 0, 0, 211, 212, 76, + 76, 0, 76, 76, 76, 76, 76, 76, 0, 76, + 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, + 0, 76, 0, 0, 76, 0, 0, 266, 0, 0, + 0, 0, 0, 202, 203, 204, 205, 206, 207, 208, + 209, 14, 265, 0, 0, 0, 0, 0, 211, 212, + 0, 0, 0, 76, 266, 0, 76, 0, 0, 0, + 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, + 0, 265, 0, 0, 0, 211, 212, 0, 0, 0, + 0, 0, 0, 266, 0, 76, 76, 0, 0, 202, + 203, 204, 205, 206, 207, 208, 209, 14, 0, 0, + 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, + 266, 0, 0, 0, 0, 0, 202, 203, 204, 205, + 206, 207, 208, 209, 14, 0, 0, 0, 0, 248, + 248, 211, 212, 248, 248, 248, 248, 248, 0, 248, + 262, 0, 0, 0, 262, 262, 262, 262, 262, 262, + 262, 248, 248, 0, 248, 0, 0, 0, 0, 0, + 0, 0, 262, 262, 0, 262, 253, 253, 0, 0, + 253, 253, 253, 253, 253, 253, 253, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 248, 4, 253, 253, + 0, 253, 0, 5, 0, 0, 0, 262, 0, 0, + 7, 8, 9, 0, 11, 12, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 248, 0, 0, 76, + 76, 0, 0, 0, 76, 76, 0, 262, 0, 0, + 0, 76, 0, 0, 0, 76, 76, 0, 76, 76, + 76, 76, 76, 76, 76, 0, 76, 0, 0, 0, + 241, 241, 0, 253, 241, 241, 241, 241, 241, 241, + 241, 0, 0, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 241, 241, 0, 241, 205, 205, 0, 0, + 205, 205, 205, 205, 205, 205, 205, 249, 249, 0, + 0, 249, 249, 249, 249, 249, 1, 249, 205, 205, + 0, 205, 49, 0, 0, 0, 0, 241, 5, 249, + 249, 0, 249, 453, 0, 7, 8, 9, 0, 460, + 50, 0, 0, 13, 0, 0, 464, 0, 0, 0, + 263, 0, 0, 205, 263, 263, 263, 263, 263, 263, + 263, 0, 0, 0, 249, 0, 475, 476, 0, 478, + 0, 0, 263, 263, 484, 263, 0, 0, 485, 0, + 486, 487, 0, 205, 0, 248, 0, 0, 0, 491, + 453, 460, 0, 0, 249, 484, 262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, + 0, 0, 0, 0, 248, 248, 248, 248, 248, 248, + 248, 248, 253, 0, 0, 262, 262, 262, 262, 262, + 262, 262, 262, 0, 0, 0, 0, 263, 254, 254, + 0, 0, 254, 254, 254, 254, 254, 254, 254, 0, + 0, 253, 253, 253, 253, 253, 253, 253, 253, 0, + 254, 254, 0, 254, 242, 242, 0, 0, 242, 242, + 242, 242, 242, 242, 242, 0, 1, 2, 0, 0, + 0, 3, 4, 0, 0, 0, 242, 242, 5, 242, + 0, 0, 0, 6, 0, 7, 8, 9, 10, 11, + 12, 0, 0, 13, 0, 0, 241, 0, 217, 217, + 0, 0, 217, 217, 217, 217, 217, 217, 217, 0, + 14, 242, 0, 0, 0, 254, 0, 0, 0, 0, + 217, 217, 205, 217, 0, 241, 241, 241, 241, 241, + 241, 241, 241, 249, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 205, 205, 205, 205, 217, 205, 205, 205, 0, + 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, + 284, 284, 0, 0, 284, 284, 263, 284, 0, 284, + 284, 0, 0, 0, 0, 217, 0, 0, 0, 0, + 0, 0, 284, 284, 0, 284, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 263, 263, 263, 263, 263, + 263, 263, 263, 0, 273, 273, 0, 0, 273, 273, + 273, 273, 273, 273, 273, 274, 274, 284, 0, 274, + 274, 274, 274, 274, 274, 274, 273, 273, 0, 273, + 0, 0, 0, 0, 0, 0, 0, 274, 274, 0, + 274, 0, 0, 1, 0, 0, 0, 284, 0, 4, + 0, 0, 0, 0, 254, 5, 147, 0, 0, 0, + 152, 273, 7, 8, 9, 0, 0, 12, 0, 0, + 13, 0, 274, 166, 171, 0, 0, 0, 0, 0, + 242, 0, 0, 254, 254, 254, 254, 254, 254, 254, + 254, 273, 152, 0, 166, 171, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 242, + 242, 242, 242, 242, 242, 242, 242, 257, 0, 258, + 0, 275, 275, 0, 217, 275, 275, 275, 275, 275, + 275, 275, 0, 0, 0, 301, 0, 0, 305, 0, + 0, 0, 0, 275, 0, 0, 0, 258, 0, 305, + 0, 0, 0, 217, 217, 217, 217, 217, 0, 217, + 217, 276, 276, 0, 92, 276, 276, 276, 276, 276, + 276, 276, 0, 0, 0, 0, 0, 0, 275, 0, + 277, 277, 0, 276, 277, 277, 277, 277, 277, 277, + 277, 0, 0, 0, 0, 0, 284, 0, 0, 0, + 0, 0, 277, 0, 0, 0, 0, 0, 275, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, + 0, 0, 0, 0, 0, 284, 284, 284, 284, 284, + 284, 284, 284, 0, 0, 0, 285, 277, 0, 285, + 273, 285, 285, 285, 285, 0, 0, 0, 276, 0, + 0, 274, 0, 0, 0, 0, 286, 285, 285, 286, + 285, 286, 286, 286, 286, 0, 0, 277, 376, 377, + 273, 273, 0, 273, 273, 273, 273, 286, 286, 0, + 286, 274, 274, 0, 274, 274, 274, 274, 0, 0, + 0, 0, 285, 287, 0, 0, 287, 0, 287, 287, + 287, 287, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 287, 287, 0, 287, 0, 0, + 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, + 259, 259, 0, 0, 259, 259, 259, 259, 259, 259, + 259, 0, 286, 0, 0, 0, 0, 0, 0, 287, + 0, 0, 259, 259, 0, 259, 0, 0, 169, 0, + 0, 1, 2, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 169, 6, 287, + 7, 8, 9, 0, 0, 0, 275, 259, 13, 275, + 275, 275, 275, 275, 0, 169, 0, 0, 0, 0, + 0, 0, 215, 0, 0, 120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, + 0, 213, 0, 0, 0, 0, 276, 0, 0, 276, + 276, 276, 276, 276, 0, 0, 0, 0, 0, 0, + 0, 169, 0, 169, 0, 277, 215, 0, 277, 277, + 277, 277, 277, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, + 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 144, 0, 214, 0, 0, + 215, 286, 0, 0, 0, 0, 0, 0, 0, 0, + 285, 285, 285, 285, 285, 285, 285, 285, 0, 213, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 286, 286, 286, 286, 286, 286, 286, 286, 287, 144, + 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 287, 287, 287, + 287, 287, 287, 287, 287, 213, 259, 0, 0, 0, + 0, 0, 0, 144, 0, 328, 169, 0, 0, 0, + 169, 0, 0, 0, 0, 202, 0, 0, 0, 169, + 169, 0, 169, 0, 0, 259, 259, 259, 259, 259, + 259, 169, 215, 169, 0, 169, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 2, 213, 0, 0, 3, 0, 169, 169, 0, 144, + 0, 380, 0, 196, 197, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 215, 199, 0, 200, + 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 2, 213, 0, 0, 3, 0, + 211, 212, 0, 0, 0, 0, 0, 196, 197, 0, + 6, 0, 0, 0, 0, 144, 0, 381, 0, 198, + 215, 199, 0, 200, 0, 0, 0, 0, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 2, 213, + 0, 0, 3, 0, 211, 212, 0, 0, 0, 0, + 0, 196, 197, 0, 6, 0, 0, 0, 0, 144, + 0, 427, 0, 198, 215, 199, 0, 200, 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, - 14, 0, 0, 0, 1, 0, 0, 210, 211, 0, - 49, 0, 0, 0, 0, 264, 5, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 265, 50, 0, - 0, 13, 264, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 0, 0, 265, 0, 0, 0, 210, 211, - 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, - 0, 0, 264, 0, 0, 210, 211, 0, 0, 0, - 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, - 201, 202, 203, 204, 205, 206, 207, 208, 14, 0, - 0, 0, 0, 0, 0, 210, 211, 0, 0, 0, - 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 0, 201, 202, - 203, 204, 205, 206, 207, 208, 14, 0, 92, 0, - 0, 0, 0, 210, 211, 76, 76, 0, 76, 76, - 76, 76, 76, 76, 0, 76, 0, 0, 246, 246, - 0, 0, 246, 246, 246, 246, 246, 76, 246, 260, - 76, 0, 0, 260, 260, 260, 260, 260, 260, 260, - 246, 246, 0, 246, 136, 136, 0, 0, 0, 136, - 136, 260, 260, 0, 260, 0, 136, 0, 0, 76, - 0, 136, 76, 136, 136, 136, 136, 136, 136, 0, - 0, 136, 251, 251, 0, 246, 251, 251, 251, 251, - 251, 251, 251, 0, 0, 0, 260, 0, 136, 0, - 0, 76, 76, 0, 251, 251, 0, 251, 0, 0, - 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, - 0, 0, 0, 239, 239, 0, 260, 239, 239, 239, - 239, 239, 239, 239, 214, 214, 0, 0, 214, 214, - 214, 214, 214, 214, 214, 239, 239, 0, 239, 0, - 0, 0, 1, 0, 0, 0, 214, 214, 4, 214, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 251, - 0, 7, 8, 9, 0, 0, 12, 0, 0, 13, - 239, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 203, 214, 0, 203, 203, 203, 203, 203, 203, 203, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, - 3, 203, 203, 0, 203, 0, 0, 5, 0, 0, - 0, 214, 6, 0, 7, 8, 9, 0, 0, 0, - 0, 0, 13, 0, 0, 76, 76, 0, 0, 169, - 76, 76, 0, 0, 0, 0, 203, 76, 0, 120, - 0, 76, 76, 0, 76, 76, 76, 76, 76, 76, - 76, 0, 76, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 203, 0, 0, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, - 0, 0, 0, 246, 246, 246, 246, 246, 246, 246, - 246, 0, 0, 0, 260, 260, 260, 260, 260, 260, - 260, 260, 0, 0, 0, 0, 0, 0, 251, 0, - 247, 247, 0, 0, 247, 247, 247, 247, 247, 0, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 247, 247, 0, 247, 0, 251, 251, 251, - 251, 251, 251, 251, 251, 0, 0, 261, 0, 239, - 0, 261, 261, 261, 261, 261, 261, 261, 0, 0, - 214, 0, 0, 0, 0, 0, 0, 247, 0, 261, - 261, 0, 261, 0, 0, 0, 0, 0, 239, 239, - 239, 239, 239, 239, 239, 239, 0, 0, 0, 214, - 214, 214, 214, 214, 0, 214, 214, 247, 0, 0, - 0, 252, 252, 0, 261, 252, 252, 252, 252, 252, - 252, 252, 0, 0, 0, 203, 0, 0, 0, 0, - 0, 0, 0, 252, 252, 0, 252, 0, 0, 0, - 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 203, 203, 203, 0, 203, - 203, 203, 240, 240, 0, 0, 240, 240, 240, 240, - 240, 240, 240, 0, 0, 0, 0, 0, 0, 0, - 0, 138, 0, 0, 240, 240, 0, 240, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 252, 138, - 0, 0, 0, 0, 0, 0, 0, 215, 215, 0, - 0, 215, 215, 215, 215, 215, 215, 215, 0, 240, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, - 215, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 282, 282, 0, 0, 282, 282, - 0, 282, 0, 282, 282, 0, 247, 0, 0, 0, - 0, 0, 0, 0, 215, 0, 282, 282, 0, 282, - 0, 0, 0, 273, 273, 0, 0, 273, 273, 273, - 273, 273, 273, 273, 0, 247, 247, 247, 247, 247, - 247, 247, 247, 261, 215, 273, 0, 0, 0, 274, - 274, 282, 0, 274, 274, 274, 274, 274, 274, 274, - 271, 271, 0, 0, 271, 271, 271, 271, 271, 271, - 271, 274, 261, 261, 261, 261, 261, 261, 261, 261, - 273, 282, 271, 271, 0, 271, 272, 272, 0, 0, - 272, 272, 272, 272, 272, 272, 272, 252, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 272, 272, - 273, 272, 0, 0, 0, 275, 275, 271, 0, 275, - 275, 275, 275, 275, 275, 275, 252, 252, 252, 252, - 252, 252, 252, 252, 0, 0, 274, 275, 0, 0, - 0, 0, 0, 272, 138, 138, 0, 271, 240, 138, - 138, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 209, 210, 0, 213, 0, 0, 0, 0, 211, 212, + 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, + 0, 0, 0, 144, 0, 0, 0, 196, 197, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 199, 136, 200, 0, 0, 0, 0, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 0, 0, + 136, 0, 0, 0, 211, 212, 0, 144, 0, 0, + 2, 138, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 196, 197, 0, 6, 0, 0, 138, + 0, 0, 0, 0, 0, 198, 0, 199, 0, 200, + 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 2, 92, 0, 0, 3, 0, + 211, 212, 0, 0, 0, 0, 0, 196, 197, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 199, 0, 200, 0, 92, 0, 0, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 0, 0, + 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, + 0, 196, 450, 0, 0, 0, 0, 0, 0, 0, + 93, 92, 0, 198, 0, 199, 0, 200, 0, 0, + 0, 0, 451, 202, 203, 204, 205, 206, 207, 208, + 209, 14, 0, 0, 0, 0, 0, 0, 211, 212, + 121, 0, 0, 0, 0, 196, 197, 0, 92, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, + 0, 200, 0, 0, 0, 0, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 14, 158, 0, 61, 0, + 0, 0, 211, 212, 0, 136, 136, 0, 0, 0, + 136, 136, 0, 0, 0, 0, 0, 136, 0, 0, + 0, 0, 136, 0, 136, 136, 136, 136, 136, 136, + 0, 0, 136, 179, 138, 138, 0, 0, 0, 138, + 138, 0, 0, 0, 0, 0, 138, 0, 0, 136, 0, 138, 0, 138, 138, 138, 138, 138, 138, 0, - 0, 138, 275, 272, 0, 0, 0, 240, 240, 240, - 240, 240, 240, 240, 240, 0, 0, 0, 138, 283, - 0, 0, 283, 215, 283, 283, 283, 283, 0, 0, - 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, - 283, 283, 284, 283, 0, 284, 0, 284, 284, 284, - 284, 92, 215, 215, 215, 215, 215, 0, 215, 215, - 282, 0, 0, 284, 284, 0, 284, 0, 0, 0, - 0, 0, 0, 0, 0, 283, 0, 0, 0, 285, - 0, 0, 285, 0, 285, 285, 285, 285, 0, 282, - 282, 282, 282, 282, 282, 282, 282, 0, 284, 0, - 285, 285, 0, 285, 0, 283, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 273, 0, - 0, 273, 273, 273, 273, 273, 271, 0, 284, 0, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 167, - 0, 0, 0, 0, 274, 0, 0, 274, 274, 274, - 274, 274, 272, 0, 0, 0, 271, 271, 167, 271, - 271, 271, 271, 0, 0, 285, 0, 0, 257, 257, - 0, 0, 257, 257, 257, 257, 257, 257, 257, 0, - 0, 0, 272, 272, 0, 272, 272, 272, 272, 0, - 257, 257, 0, 257, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 275, 0, 0, 275, 275, 275, 275, 275, 0, 0, - 0, 0, 167, 0, 167, 257, 0, 212, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 214, 3, 283, 257, 0, 0, 0, 0, + 0, 138, 1, 2, 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 138, 6, + 0, 7, 8, 9, 0, 0, 0, 0, 0, 89, + 0, 0, 1, 2, 0, 0, 90, 3, 0, 0, + 0, 0, 0, 0, 5, 0, 91, 0, 0, 6, + 0, 7, 8, 9, 0, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 90, 0, 1, 2, + 0, 0, 0, 3, 0, 0, 120, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, 7, 8, 9, - 0, 212, 0, 0, 0, 89, 0, 284, 0, 0, - 0, 0, 90, 283, 283, 283, 283, 283, 283, 283, - 283, 144, 91, 213, 0, 0, 214, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 284, 284, 284, - 284, 284, 284, 284, 285, 212, 0, 0, 0, 0, - 0, 0, 0, 0, 147, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 144, 0, 307, 0, 0, - 214, 166, 171, 285, 285, 285, 285, 285, 285, 285, - 285, 0, 0, 0, 0, 0, 0, 167, 0, 212, - 152, 167, 166, 171, 0, 0, 200, 0, 0, 0, - 167, 167, 0, 167, 0, 0, 0, 0, 0, 144, - 0, 326, 167, 0, 0, 256, 167, 257, 0, 0, - 0, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 0, 214, 300, 257, 0, 304, 167, 167, 0, - 0, 0, 0, 0, 0, 257, 0, 304, 0, 0, - 0, 212, 0, 144, 0, 378, 2, 0, 0, 0, - 3, 0, 0, 257, 257, 257, 257, 257, 257, 196, - 197, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 214, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 2, 0, 0, 0, 3, 0, 210, 211, 212, 0, - 0, 0, 0, 196, 197, 144, 6, 379, 0, 0, - 0, 0, 0, 0, 0, 198, 0, 0, 214, 199, - 0, 0, 0, 0, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 2, 0, 0, 212, 3, 0, - 210, 211, 0, 0, 0, 0, 0, 196, 197, 0, - 6, 0, 0, 0, 0, 374, 375, 0, 0, 198, - 214, 0, 144, 199, 423, 0, 0, 0, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 2, 212, - 0, 0, 3, 0, 210, 211, 0, 0, 0, 0, - 0, 196, 197, 447, 6, 0, 0, 453, 0, 0, - 0, 144, 0, 198, 457, 0, 0, 199, 0, 0, - 0, 0, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 0, 468, 469, 0, 471, 0, 210, 211, - 0, 477, 0, 92, 0, 478, 0, 479, 480, 0, - 2, 0, 0, 144, 3, 0, 484, 447, 453, 0, - 0, 0, 477, 196, 197, 0, 6, 0, 0, 0, - 0, 0, 0, 92, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, - 210, 211, 0, 92, 0, 0, 0, 2, 121, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 197, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 61, 198, 0, 0, 0, 199, 0, 158, 0, - 0, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 0, 0, 0, 0, 0, 0, 210, 211, 196, - 444, 0, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 445, 201, 202, 203, 204, 205, 206, 207, 208, 14, - 0, 0, 0, 0, 0, 0, 210, 211, 0, 0, - 0, 196, 197, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 14, 0, 0, 0, 0, 0, 0, 210, 211, - 1, 2, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 6, 0, 7, - 8, 9, 0, 0, 0, 0, 0, 13, 0, 0, - 1, 2, 0, 0, 90, 3, 0, 0, 0, 0, - 0, 0, 5, 0, 120, 0, 0, 6, 0, 7, - 8, 9, 0, 0, 0, 0, 0, 89, 0, 0, - 1, 2, 0, 0, 90, 3, 0, 0, 0, 0, - 0, 0, 5, 0, 91, 0, 0, 6, 0, 7, - 8, 9, 0, 0, 0, 0, 0, 13, 61, 61, - 0, 0, 0, 61, 90, 0, 0, 0, 0, 0, - 61, 0, 0, 0, 120, 61, 0, 61, 61, 61, - 0, 0, 0, 0, 0, 61, 0, 0, 1, 2, - 0, 0, 61, 3, 4, 0, 0, 0, 0, 0, - 5, 0, 61, 0, 0, 6, 0, 7, 8, 9, - 10, 11, 12, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, + 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, + 0, 0, 90, 0, 0, 1, 2, 0, 0, 0, + 3, 0, 91, 0, 0, 0, 0, 5, 0, 0, + 0, 0, 6, 0, 7, 8, 9, 0, 0, 0, + 0, 0, 13, 0, 0, 61, 61, 0, 0, 90, + 61, 0, 0, 0, 0, 0, 0, 61, 0, 120, + 0, 0, 61, 0, 61, 61, 61, 0, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, }; - protected short yyCheck[] = new short[2964]; + protected short yyCheck[] = new short[3011]; } class yyCheck0 { protected static final short yyCheck0 [] = { 46, - 0, 144, 89, 156, 56, 57, 60, 92, 62, 96, - 10, 11, 59, 220, 66, 174, 123, 46, 132, 133, - 148, 41, 123, 58, 41, 123, 301, 141, 28, 42, - 44, 174, 210, 211, 41, 44, 164, 46, 59, 324, - 46, 59, 123, 123, 44, 69, 268, 46, 48, 59, - 59, 60, 61, 41, 60, 79, 56, 57, 58, 107, - 46, 60, 114, 285, 99, 21, 66, 67, 40, 60, - 46, 66, 107, 59, 46, 60, 61, 220, 130, 44, - 29, 61, 91, 59, 91, 91, 214, 78, 60, 267, - 268, 269, 91, 78, 94, 144, 67, 53, 58, 99, - 40, 308, 123, 40, 156, 153, 46, 41, 108, 123, - 44, 264, 59, 301, 114, 63, 140, 402, 59, 114, - 148, 59, 122, 251, 61, 174, 126, 163, 113, 129, - 130, 59, 132, 133, 134, 130, 164, 172, 266, 99, - 59, 141, 144, 59, 144, 58, 137, 107, 148, 434, - 309, 122, 137, 138, 67, 301, 156, 59, 123, 108, - 144, 268, 198, 59, 164, 308, 309, 268, 59, 254, - 170, 220, 174, 380, 174, 282, 123, 355, 356, 357, - 129, 282, 123, 218, 282, 123, 99, 268, 268, 67, - 174, 59, 21, 153, 91, 123, 349, 258, 312, 302, - 160, 262, 305, 32, 123, 190, 91, 123, 44, 122, - 210, 211, 264, 274, 214, 343, 44, 144, 220, 273, - 220, 123, 308, 309, 53, 403, 62, 123, 41, 60, - 108, 44, 123, 44, 62, 59, 220, 380, 258, 46, - 301, 258, 262, 330, 122, 262, 360, 174, 59, 303, - 304, 129, 40, 41, 274, 123, 44, 274, 46, 308, - 309, 308, 309, 60, 264, 44, 266, 267, 268, 269, - 258, 59, 60, 61, 262, 144, 301, 313, 314, 308, - 309, 301, 318, 62, 301, 428, 274, 93, 301, 432, - 308, 309, 301, 220, 330, 301, 439, 349, 308, 309, - 93, 44, 301, 91, 44, 174, 308, 309, 308, 309, - 258, 301, 312, 301, 262, 458, 459, 41, 461, 62, - 44, 40, 62, 466, 308, 309, 274, 470, 44, 472, - 473, 380, 44, 428, 314, 315, 316, 317, 481, 482, - 483, 321, 144, 343, 487, 381, 62, 383, 268, 349, - 62, 220, 58, 301, 123, 355, 356, 357, 358, 359, + 0, 46, 144, 63, 56, 57, 89, 42, 163, 59, + 10, 11, 59, 96, 66, 41, 37, 38, 221, 92, + 41, 42, 43, 44, 45, 46, 47, 156, 28, 123, + 123, 44, 174, 58, 44, 174, 46, 29, 59, 60, + 46, 62, 123, 198, 44, 123, 60, 123, 48, 59, + 60, 61, 319, 69, 60, 432, 56, 57, 58, 326, + 58, 44, 114, 79, 78, 61, 66, 67, 301, 107, + 67, 59, 301, 94, 99, 132, 133, 58, 130, 221, + 59, 91, 107, 44, 141, 91, 46, 58, 21, 144, + 66, 40, 44, 59, 94, 41, 67, 46, 59, 99, + 60, 99, 301, 124, 156, 59, 309, 59, 108, 107, + 123, 60, 489, 490, 114, 153, 108, 494, 99, 174, + 53, 59, 122, 137, 140, 122, 126, 108, 99, 129, + 130, 91, 132, 133, 134, 123, 265, 129, 114, 406, + 123, 141, 144, 59, 144, 91, 59, 172, 148, 46, + 91, 122, 59, 59, 130, 153, 156, 123, 60, 314, + 315, 61, 160, 60, 164, 320, 221, 309, 310, 123, + 170, 310, 174, 440, 174, 268, 60, 332, 62, 382, + 40, 41, 255, 59, 44, 123, 46, 268, 282, 282, + 268, 91, 268, 91, 219, 31, 59, 21, 258, 59, + 60, 61, 262, 40, 282, 44, 42, 123, 32, 144, + 123, 211, 212, 265, 274, 215, 123, 123, 54, 221, + 268, 221, 351, 62, 61, 41, 148, 144, 383, 53, + 385, 91, 258, 59, 258, 44, 262, 285, 262, 174, + 382, 301, 164, 41, 80, 40, 44, 123, 274, 332, + 274, 46, 273, 62, 309, 310, 313, 174, 308, 309, + 123, 308, 309, 308, 309, 265, 301, 267, 268, 269, + 270, 44, 41, 59, 429, 301, 431, 301, 46, 434, + 44, 302, 303, 304, 305, 306, 221, 308, 309, 62, + 432, 301, 447, 448, 44, 301, 438, 123, 62, 351, + 93, 46, 144, 445, 221, 362, 60, 309, 310, 309, + 310, 301, 62, 313, 59, 470, 471, 472, 314, 315, + 316, 317, 44, 465, 466, 321, 468, 382, 93, 308, + 309, 473, 174, 301, 44, 477, 44, 479, 480, 268, + 62, 301, 46, 67, 123, 345, 488, 489, 490, 59, + 41, 351, 494, 44, 62, 59, 301, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 174, 59, 361, 362, 363, 364, 380, 428, - 380, 308, 309, 432, 44, 358, 359, 482, 483, 425, - 439, 427, 487, 99, 430, 301, 380, 31, 44, 59, - 258, 61, 108, 403, 262, 441, 442, 44, 42, 458, - 459, 46, 461, 59, 482, 483, 274, 466, 220, 487, - 54, 470, 59, 472, 473, 60, 428, 463, 464, 465, - 432, 37, 481, 482, 483, 44, 42, 439, 487, 308, - 309, 47, 41, 301, 428, 44, 80, 289, 432, 41, - 59, 41, 44, 380, 44, 439, 458, 459, 41, 461, - 61, 44, 40, 43, 466, 45, 33, 301, 470, 123, - 472, 473, 59, 40, 458, 459, 43, 461, 45, 481, - 482, 483, 466, 365, 366, 487, 470, 301, 472, 473, - 147, 59, 59, 301, 38, 40, 44, 481, 482, 483, - 40, 428, 40, 487, 40, 432, 308, 309, 61, 166, - 59, 380, 439, 301, 171, 46, 59, 329, 59, 258, - 308, 309, 44, 262, 38, 94, 314, 315, 316, 317, - 124, 458, 459, 321, 461, 274, 307, 301, 91, 466, - 0, 306, 59, 470, 40, 472, 473, 59, 41, 59, - 41, 40, 291, 59, 481, 482, 483, 33, 59, 428, - 487, 59, 301, 432, 40, 59, 41, 43, 28, 45, - 439, 40, 40, 267, 41, 41, 41, 258, 380, 41, - 41, 262, 267, 59, 44, 0, 0, 0, 48, 458, - 459, 0, 461, 274, 301, 59, 59, 466, 58, 256, - 257, 470, 59, 472, 473, 48, 122, 67, 49, 33, - 291, 50, 481, 482, 483, 99, 40, 41, 487, 43, - 301, 45, 32, 78, 266, 79, 428, 368, 343, 367, - 432, 341, 369, 341, 94, 370, 65, 439, 371, 99, - 142, 173, 134, 300, 174, -1, -1, 304, 108, 108, - -1, -1, -1, 33, -1, -1, 458, 459, -1, 461, - 40, 41, 122, 43, 466, 45, 126, -1, 470, 129, - 472, 473, -1, -1, 134, -1, -1, -1, -1, 481, - 482, 483, -1, -1, -1, 487, -1, -1, 148, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, - -1, -1, -1, -1, 164, -1, -1, -1, 275, -1, - 170, 59, 60, 61, 62, -1, -1, 374, 375, -1, - 287, -1, -1, -1, -1, -1, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, 33, -1, -1, - -1, 308, 309, -1, 40, -1, 94, 43, 301, 45, - -1, -1, -1, -1, 214, 308, 309, -1, -1, -1, - -1, 314, 315, 316, 317, 33, -1, -1, 321, -1, - -1, -1, 40, -1, -1, 43, 124, 45, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - 41, 59, 43, -1, 45, -1, -1, -1, -1, 275, - 33, -1, -1, -1, -1, -1, 266, 40, -1, -1, - 43, 287, 45, -1, -1, -1, -1, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, 123, 33, -1, - -1, -1, 308, 309, -1, 40, 41, 257, 43, -1, - 45, -1, -1, 263, -1, -1, -1, -1, -1, 269, - -1, 275, -1, -1, -1, 33, 276, 277, 278, -1, - 280, 281, 40, 287, 284, 43, -1, 45, -1, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, 59, 33, 343, 308, 309, -1, -1, -1, 40, - 41, -1, 43, -1, 45, 275, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 287, -1, -1, + 370, 371, 372, 373, 309, 310, 43, 432, 45, 221, + 382, 44, 382, 438, 108, 41, 489, 490, 44, 273, + 445, 494, 309, 310, 37, 40, 59, 302, 122, 42, + 305, 301, 144, 41, 47, 129, 44, 407, 308, 309, + 465, 466, 44, 468, 314, 315, 316, 317, 473, 303, + 304, 321, 477, 41, 479, 480, 44, 59, 41, 61, + 432, 44, 174, 488, 489, 490, 438, 41, 289, 494, + 44, 301, 258, 445, 308, 309, 262, 382, 308, 309, + 41, 360, 361, 44, 314, 315, 316, 317, 274, 367, + 368, 321, 59, 465, 466, 382, 468, 309, 310, 61, + 40, 473, 301, 123, 59, 477, 301, 479, 480, 221, + 148, 363, 364, 365, 366, 301, 488, 489, 490, 258, + 59, 258, 494, 262, 301, 262, 164, 432, 258, 38, + 40, 44, 262, 438, 40, 274, 40, 274, 40, 40, + 445, 60, 61, 33, 274, 432, 329, 59, 46, 44, + 40, 438, 59, 43, 291, 45, 59, 38, 445, 78, + 465, 466, 301, 468, 301, 94, 124, 307, 473, 59, + 382, 301, 477, 306, 479, 480, 59, 215, 465, 466, + 0, 468, 301, 488, 489, 490, 473, 40, 59, 494, + 477, 41, 479, 480, 113, 59, 59, 309, 310, 33, + 41, 488, 489, 490, 40, 59, 40, 494, 28, 43, + 59, 45, 59, 59, 252, 41, 59, 40, 137, 138, + 432, 40, 267, 41, 44, 59, 438, 41, 48, 267, + 258, 41, 41, 445, 262, 37, 38, 41, 58, 41, + 42, 43, 44, 45, 267, 47, 274, 67, 0, 0, + 0, 0, 59, 465, 466, 301, 468, 59, 60, 61, + 62, 473, 59, 291, 59, 477, 48, 479, 480, 49, + 382, 190, 50, 301, 94, 99, 488, 489, 490, 99, + 122, 147, 494, 79, 32, 78, 33, 267, 108, 345, + 369, 372, 94, 40, 41, 370, 43, 373, 45, 371, + 166, 343, 122, 33, 343, 171, 126, 345, 65, 129, + 40, 41, 142, 43, 134, 45, 108, 173, 134, 174, + 432, -1, 124, -1, -1, -1, 438, -1, 148, -1, + 33, -1, -1, 445, -1, -1, -1, 40, 41, -1, + 43, -1, 45, -1, 164, -1, -1, -1, -1, -1, + 170, -1, -1, 465, 466, -1, 468, -1, -1, 33, + -1, 473, -1, -1, -1, 477, 40, 479, 480, 43, + -1, 45, -1, -1, -1, -1, 488, 489, 490, -1, + -1, -1, 494, -1, -1, 275, 33, -1, -1, -1, + -1, 257, 258, 40, -1, 215, 43, 287, 45, -1, -1, -1, -1, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, 33, -1, 273, -1, -1, 308, 309, + 300, 301, 59, 33, -1, -1, -1, -1, 308, 309, 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, - 43, -1, 45, -1, 302, 303, 304, 305, 306, 307, - 308, 309, -1, -1, -1, -1, 314, 315, 316, 317, - 33, -1, -1, 321, -1, -1, -1, 40, 41, 275, - 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, - -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, + 33, -1, -1, -1, -1, 301, -1, 40, 41, 305, + 43, 275, 45, -1, -1, -1, -1, 267, -1, 123, + -1, -1, -1, 287, -1, -1, -1, -1, -1, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, 33, + -1, 273, -1, -1, 308, 309, 40, -1, -1, 43, + -1, 45, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, 41, 59, 43, -1, 45, -1, + 302, 303, 304, 305, 306, 307, 308, 309, -1, -1, + 376, 377, 314, 315, 316, 317, -1, -1, -1, 321, + -1, -1, 33, -1, -1, 345, -1, -1, 275, 40, + 41, -1, 43, -1, 45, -1, -1, -1, -1, -1, + 287, -1, -1, -1, -1, 275, 293, 294, 295, 296, + 297, 298, 299, 300, 301, -1, -1, 287, -1, -1, + -1, 308, 309, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 275, 33, 211, 212, -1, -1, 308, 309, + 40, 41, -1, 43, 287, 45, -1, -1, -1, -1, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + 33, 275, -1, -1, -1, 308, 309, 40, 41, -1, + 43, -1, 45, 287, -1, -1, -1, -1, -1, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 275, 33, }; } class yyCheck1 { - protected static final short yyCheck1 [] = { 296, - 297, 298, 299, 300, 301, -1, 275, 33, -1, -1, - -1, 308, 309, -1, 40, -1, -1, 43, 287, 45, - -1, -1, -1, 275, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, 287, -1, -1, -1, 308, - 309, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, 287, -1, -1, 308, 309, -1, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, 275, - -1, -1, -1, -1, 308, 309, -1, -1, -1, -1, - -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 275, -1, -1, -1, - -1, -1, 308, 309, -1, -1, -1, -1, 287, -1, - 44, -1, -1, -1, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 275, -1, -1, -1, -1, 62, 308, - 309, -1, -1, -1, -1, 287, -1, -1, -1, -1, - -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, 257, -1, -1, 308, 309, -1, 263, - -1, -1, -1, -1, 275, 269, -1, -1, -1, -1, - -1, -1, 276, 277, 278, -1, 287, 281, -1, -1, - 284, 275, 293, 294, 295, 296, 297, 298, 299, 300, + protected static final short yyCheck1 [] = { -1, + 268, 269, 270, 308, 309, 40, -1, -1, 43, 287, + 45, -1, -1, -1, -1, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 275, 33, -1, -1, -1, -1, + 308, 309, 40, -1, -1, 43, 287, 45, -1, -1, + -1, 275, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, 287, -1, -1, -1, 308, 309, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, 275, -1, -1, 308, 309, -1, -1, -1, -1, - -1, -1, -1, 287, -1, -1, -1, -1, -1, 293, + -1, -1, -1, -1, 308, 309, -1, -1, -1, -1, + 275, -1, -1, -1, -1, -1, -1, -1, -1, 357, + 358, 359, 287, -1, -1, -1, -1, 275, 293, 294, + 295, 296, 297, 298, 299, 300, 301, -1, -1, 287, + -1, -1, -1, 308, 309, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, -1, -1, -1, -1, + 308, 309, -1, 275, -1, -1, -1, -1, -1, 407, + -1, -1, -1, -1, -1, 287, -1, -1, -1, -1, + -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, -1, -1, 308, 309, 37, 38, + -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, + -1, -1, -1, -1, 275, -1, -1, -1, -1, -1, + 59, -1, -1, 62, -1, -1, 287, -1, -1, -1, + -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 275, -1, -1, -1, -1, -1, 308, 309, -1, + -1, -1, 91, 287, -1, 94, -1, -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, -1, 308, 309, -1, -1, -1, 275, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, 60, -1, -1, - -1, -1, 308, 309, 37, 38, -1, 40, 41, 42, - 43, 44, 45, -1, 47, -1, -1, 37, 38, -1, - -1, 41, 42, 43, 44, 45, 59, 47, 37, 62, - -1, -1, 41, 42, 43, 44, 45, 46, 47, 59, - 60, -1, 62, 257, 258, -1, -1, -1, 262, 263, - 59, 60, -1, 62, -1, 269, -1, -1, 91, -1, - 274, 94, 276, 277, 278, 279, 280, 281, -1, -1, - 284, 37, 38, -1, 94, 41, 42, 43, 44, 45, - 46, 47, -1, -1, -1, 94, -1, 301, -1, -1, - 123, 124, -1, 59, 60, -1, 62, -1, -1, -1, - -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, - -1, -1, 37, 38, -1, 124, 41, 42, 43, 44, - 45, 46, 47, 37, 38, -1, -1, 41, 42, 43, - 44, 45, 46, 47, 59, 60, -1, 62, -1, -1, - -1, 257, -1, -1, -1, 59, 60, 263, 62, -1, - -1, -1, -1, 269, -1, -1, -1, -1, 124, -1, - 276, 277, 278, -1, -1, 281, -1, -1, 284, 94, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - 94, -1, 41, 42, 43, 44, 45, 46, 47, -1, - -1, -1, -1, -1, 257, 258, -1, -1, -1, 262, - 59, 60, -1, 62, -1, -1, 269, -1, -1, -1, - 124, 274, -1, 276, 277, 278, -1, -1, -1, -1, - -1, 284, -1, -1, 257, 258, -1, -1, 291, 262, - 263, -1, -1, -1, -1, 94, 269, -1, 301, -1, - 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, - -1, 284, -1, 273, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 273, 124, -1, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, -1, -1, -1, - -1, -1, 302, 303, 304, 305, 306, 307, 308, 309, + 275, -1, -1, -1, 308, 309, -1, -1, -1, -1, + -1, -1, 287, -1, 123, 124, -1, -1, 293, 294, + 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, + -1, -1, -1, 308, 309, -1, -1, -1, -1, 287, + -1, -1, -1, -1, -1, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, -1, -1, 37, 38, + 308, 309, 41, 42, 43, 44, 45, -1, 47, 37, + -1, -1, -1, 41, 42, 43, 44, 45, 46, 47, + 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, + -1, 59, 60, -1, 62, 37, 38, -1, -1, 41, + 42, 43, 44, 45, 46, 47, -1, -1, -1, -1, + 257, -1, -1, -1, -1, 94, 263, 59, 60, -1, + 62, -1, 269, -1, -1, -1, 94, -1, -1, 276, + 277, 278, -1, 280, 281, -1, -1, 284, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 257, 258, + -1, -1, -1, 262, 263, -1, 124, -1, -1, -1, + 269, -1, -1, -1, 273, 274, -1, 276, 277, 278, + 279, 280, 281, 282, -1, 284, -1, -1, -1, 37, + 38, -1, 124, 41, 42, 43, 44, 45, 46, 47, + -1, -1, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 59, 60, -1, 62, 37, 38, -1, -1, 41, + 42, 43, 44, 45, 46, 47, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 257, 47, 59, 60, -1, + 62, 263, -1, -1, -1, -1, 94, 269, 59, 60, + -1, 62, 432, -1, 276, 277, 278, -1, 438, 281, + -1, -1, 284, -1, -1, 445, -1, -1, -1, 37, + -1, -1, 94, 41, 42, 43, 44, 45, 46, 47, + -1, -1, -1, 94, -1, 465, 466, -1, 468, -1, + -1, 59, 60, 473, 62, -1, -1, 477, -1, 479, + 480, -1, 124, -1, 273, -1, -1, -1, 488, 489, + 490, -1, -1, 124, 494, 273, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, 308, - 309, -1, -1, -1, -1, -1, -1, 273, -1, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, + 309, 273, -1, -1, 302, 303, 304, 305, 306, 307, + 308, 309, -1, -1, -1, -1, 124, 37, 38, -1, + -1, 41, 42, 43, 44, 45, 46, 47, -1, -1, + 302, 303, 304, 305, 306, 307, 308, 309, -1, 59, + 60, -1, 62, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, -1, 257, 258, -1, -1, -1, + 262, 263, -1, -1, -1, 59, 60, 269, 62, -1, + -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, + -1, -1, 284, -1, -1, 273, -1, 37, 38, -1, + -1, 41, 42, 43, 44, 45, 46, 47, -1, 301, + 94, -1, -1, -1, 124, -1, -1, -1, -1, 59, + 60, 273, 62, -1, 302, 303, 304, 305, 306, 307, + 308, 309, 273, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, 60, -1, 62, -1, 302, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 37, -1, 273, -1, - 41, 42, 43, 44, 45, 46, 47, -1, -1, 273, - -1, -1, -1, -1, -1, -1, 94, -1, 59, 60, - -1, 62, -1, -1, -1, -1, -1, 302, 303, 304, - 305, 306, 307, 308, 309, -1, -1, -1, 302, 303, - 304, 305, 306, -1, 308, 309, 124, -1, -1, -1, - 37, 38, -1, 94, 41, 42, 43, 44, 45, 46, - 47, -1, -1, -1, 273, -1, -1, -1, -1, -1, - -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, - -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 302, 303, 304, 305, -1, 307, 308, - 309, 37, 38, -1, -1, 41, 42, 43, 44, 45, - 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, - 44, -1, -1, 59, 60, -1, 62, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 62, -1, - -1, -1, -1, -1, -1, -1, 37, 38, -1, -1, - 41, 42, 43, 44, 45, 46, 47, -1, 94, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, - -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, 38, -1, -1, 41, 42, -1, - 44, -1, 46, 47, -1, 273, -1, -1, -1, -1, - -1, -1, -1, 94, -1, 59, 60, -1, 62, -1, - -1, -1, 37, 38, -1, -1, 41, 42, 43, 44, - 45, 46, 47, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 273, 124, 59, -1, -1, -1, 37, 38, - 94, -1, 41, 42, 43, 44, 45, 46, 47, 37, - 38, -1, -1, 41, 42, 43, 44, 45, 46, 47, - 59, 302, 303, 304, 305, 306, 307, 308, 309, 94, - 124, 59, 60, -1, 62, 37, 38, -1, -1, 41, - 42, 43, 44, 45, 46, 47, 273, -1, -1, -1, - -1, -1, -1, -1, -1, 94, -1, 59, 60, 124, - 62, -1, -1, -1, 37, 38, 94, -1, 41, 42, - 43, 44, 45, 46, 47, 302, 303, 304, 305, 306, - 307, 308, 309, -1, -1, 124, 59, -1, -1, -1, - -1, -1, 94, 257, 258, -1, 124, 273, 262, 263, - -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, - 274, -1, 276, 277, 278, 279, 280, 281, -1, -1, - 284, 94, 124, -1, -1, -1, 302, 303, 304, 305, + 302, 303, 304, 305, 94, 307, 308, 309, -1, -1, + -1, 302, 303, 304, 305, 306, 307, 308, 309, 37, + 38, -1, -1, 41, 42, 273, 44, -1, 46, 47, + -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, + -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, + 308, 309, -1, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, 37, 38, 94, -1, 41, 42, + 43, 44, 45, 46, 47, 59, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, + -1, -1, 257, -1, -1, -1, 124, -1, 263, -1, + -1, -1, -1, 273, 269, 90, -1, -1, -1, 94, + 94, 276, 277, 278, -1, -1, 281, -1, -1, 284, + -1, 94, 107, 108, -1, -1, -1, -1, -1, 273, + -1, -1, 302, 303, 304, 305, 306, 307, 308, 309, + 124, 126, -1, 128, 129, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 151, -1, 153, -1, + 37, 38, -1, 273, 41, 42, 43, 44, 45, 46, + 47, -1, -1, -1, 169, -1, -1, 172, -1, -1, + -1, -1, 59, -1, -1, -1, 181, -1, 183, -1, + -1, -1, 302, 303, 304, 305, 306, -1, 308, 309, + 37, 38, -1, 60, 41, 42, 43, 44, 45, 46, + 47, -1, -1, -1, -1, -1, -1, 94, -1, 37, + 38, -1, 59, 41, 42, 43, 44, 45, 46, 47, + -1, -1, -1, -1, -1, 273, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, + -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, }; } class yyCheck2 { - protected static final short yyCheck2 [] = { 306, - 307, 308, 309, -1, -1, -1, 301, 38, -1, -1, - 41, 273, 43, 44, 45, 46, -1, -1, -1, -1, - 124, -1, -1, -1, -1, -1, -1, -1, 59, 60, - 38, 62, -1, 41, -1, 43, 44, 45, 46, 60, - 302, 303, 304, 305, 306, -1, 308, 309, 273, -1, - -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, - -1, -1, -1, 94, -1, -1, -1, 38, -1, -1, - 41, -1, 43, 44, 45, 46, -1, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 94, -1, 59, 60, - -1, 62, -1, 124, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 125, -1, 302, -1, -1, 305, - 306, 307, 308, 309, 273, -1, 124, -1, -1, -1, - -1, -1, -1, 94, -1, -1, -1, 40, -1, -1, - -1, -1, 302, -1, -1, 305, 306, 307, 308, 309, - 273, -1, -1, -1, 303, 304, 59, 306, 307, 308, - 309, -1, -1, 124, -1, -1, 37, 38, -1, -1, - 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, - 303, 304, -1, 306, 307, 308, 309, -1, 59, 60, - -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 40, -1, 302, -1, - -1, 305, 306, 307, 308, 309, -1, -1, -1, -1, - 123, -1, 125, 94, -1, 59, -1, -1, -1, -1, + protected static final short yyCheck2 [] = { 308, + 309, -1, -1, -1, 38, 94, -1, 41, 273, 43, + 44, 45, 46, -1, -1, -1, 124, -1, -1, 273, + -1, -1, -1, -1, 38, 59, 60, 41, 62, 43, + 44, 45, 46, -1, -1, 124, 302, 303, 303, 304, + -1, 306, 307, 308, 309, 59, 60, -1, 62, 303, + 304, -1, 306, 307, 308, 309, -1, -1, -1, -1, + 94, 38, -1, -1, 41, -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, -1, -1, - 40, 262, 273, 124, -1, -1, -1, -1, 269, -1, - -1, -1, -1, 274, -1, 276, 277, 278, -1, 59, - -1, -1, -1, 284, -1, 273, -1, -1, -1, -1, - 291, 302, 303, 304, 305, 306, 307, 308, 309, 123, - 301, 125, -1, -1, 40, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 273, 59, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, -1, 94, -1, -1, -1, - -1, -1, -1, 123, -1, 125, -1, -1, 40, 107, - 108, 302, 303, 304, 305, 306, 307, 308, 309, -1, - -1, -1, -1, -1, -1, 258, -1, 59, 126, 262, - 128, 129, -1, -1, 267, -1, -1, -1, 271, 272, - -1, 274, -1, -1, -1, -1, -1, 123, -1, 125, - 283, -1, -1, 151, 287, 153, -1, -1, -1, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - 40, 169, 273, -1, 172, 308, 309, -1, -1, -1, - -1, -1, -1, 181, -1, 183, -1, -1, -1, 59, + 94, -1, 59, 60, -1, 62, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, 37, 38, + -1, -1, 41, 42, 43, 44, 45, 46, 47, -1, + 124, -1, -1, -1, -1, -1, -1, 94, -1, -1, + 59, 60, -1, 62, -1, -1, 40, -1, -1, 257, + 258, -1, -1, -1, 262, -1, -1, -1, -1, -1, + -1, 269, -1, -1, -1, 59, 274, 124, 276, 277, + 278, -1, -1, -1, 302, 94, 284, 305, 306, 307, + 308, 309, -1, 291, -1, -1, -1, -1, -1, -1, + 40, -1, -1, 301, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, 59, + -1, -1, -1, -1, 302, -1, -1, 305, 306, 307, + 308, 309, -1, -1, -1, -1, -1, -1, -1, 123, + -1, 125, -1, 302, 40, -1, 305, 306, 307, 308, + 309, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, 273, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 123, -1, 125, -1, -1, 40, 273, + -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, + 304, 305, 306, 307, 308, 309, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 273, 123, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 59, 273, -1, -1, -1, -1, -1, -1, 123, -1, 125, 258, -1, -1, -1, 262, -1, - -1, 302, 303, 304, 305, 306, 307, 271, 272, -1, - 274, -1, -1, -1, -1, -1, -1, -1, -1, 283, - -1, -1, -1, 287, -1, -1, -1, 40, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 258, -1, - -1, -1, 262, -1, 308, 309, 59, -1, -1, -1, - -1, 271, 272, 123, 274, 125, -1, -1, -1, -1, - -1, -1, -1, 283, -1, -1, 40, 287, -1, -1, + -1, -1, -1, 267, -1, -1, -1, 271, 272, -1, + 274, -1, -1, 302, 303, 304, 305, 306, 307, 283, + 40, 285, -1, 287, -1, -1, -1, -1, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 258, 59, + -1, -1, 262, -1, 308, 309, -1, 123, -1, 125, + -1, 271, 272, -1, 274, -1, -1, -1, -1, -1, + -1, -1, -1, 283, 40, 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 258, -1, -1, 59, 262, -1, 308, 309, + 300, 301, 258, 59, -1, -1, 262, -1, 308, 309, -1, -1, -1, -1, -1, 271, 272, -1, 274, -1, - -1, -1, -1, 301, 302, -1, -1, 283, 40, -1, - 123, 287, 125, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, 123, -1, 125, -1, 283, 40, 285, + -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 258, 59, -1, -1, 262, -1, 308, 309, -1, -1, -1, -1, -1, 271, - 272, 428, 274, -1, -1, 432, -1, -1, -1, 123, - -1, 283, 439, -1, -1, 287, -1, -1, -1, -1, + 272, -1, 274, -1, -1, -1, -1, 123, -1, 125, + -1, 283, 40, 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 458, 459, -1, 461, -1, 308, 309, -1, 466, - -1, 60, -1, 470, -1, 472, 473, -1, 258, -1, - -1, 123, 262, -1, 481, 482, 483, -1, -1, -1, - 487, 271, 272, -1, 274, -1, -1, -1, -1, -1, - -1, 60, -1, 283, -1, -1, -1, 287, -1, -1, + -1, 59, -1, -1, -1, -1, 308, 309, -1, -1, + -1, -1, 258, -1, -1, -1, 262, -1, -1, -1, + -1, 123, -1, -1, -1, 271, 272, -1, 274, -1, + -1, -1, -1, -1, -1, -1, -1, 283, -1, 285, + 44, 287, -1, -1, -1, -1, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, 62, -1, + -1, -1, 308, 309, -1, 123, -1, -1, 258, 44, + -1, -1, 262, -1, -1, -1, -1, -1, -1, -1, + -1, 271, 272, -1, 274, -1, -1, 62, -1, -1, + -1, -1, -1, 283, -1, 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, -1, 308, 309, - -1, 60, -1, -1, -1, 258, 125, -1, -1, 262, - -1, -1, -1, -1, -1, -1, -1, -1, 271, 272, - -1, 274, -1, -1, -1, -1, -1, -1, -1, 60, - 283, -1, -1, -1, 287, -1, 125, -1, -1, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, -1, 308, 309, 271, 272, -1, - -1, -1, -1, -1, -1, -1, 125, -1, -1, 283, - -1, -1, -1, 287, -1, -1, -1, -1, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, -1, 308, 309, -1, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 283, -1, -1, -1, 287, -1, -1, -1, -1, + 300, 301, 258, 60, -1, -1, 262, -1, 308, 309, + -1, -1, -1, -1, -1, 271, 272, -1, 274, -1, + -1, -1, -1, -1, -1, -1, -1, 283, -1, 285, + -1, 287, -1, 60, -1, -1, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, + -1, -1, 308, 309, -1, -1, -1, -1, -1, 271, + 272, -1, -1, -1, -1, -1, -1, -1, 125, 60, + -1, 283, -1, 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, -1, 308, 309, 257, 258, - -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, - 269, -1, -1, -1, -1, 274, -1, 276, 277, 278, - -1, -1, -1, -1, -1, 284, -1, -1, 257, 258, - -1, -1, 291, 262, -1, -1, -1, -1, -1, -1, - 269, -1, 301, -1, -1, 274, -1, 276, 277, 278, - -1, -1, -1, -1, -1, 284, -1, -1, 257, 258, - -1, -1, 291, 262, -1, -1, -1, -1, -1, -1, - 269, -1, 301, -1, -1, 274, -1, 276, 277, 278, - -1, -1, -1, -1, -1, 284, 257, 258, -1, -1, - -1, 262, 291, -1, -1, -1, -1, -1, 269, -1, - -1, -1, 301, 274, -1, 276, 277, 278, -1, -1, - -1, -1, -1, 284, -1, -1, 257, 258, -1, -1, - 291, 262, 263, -1, -1, -1, -1, -1, 269, -1, - 301, -1, -1, 274, -1, 276, 277, 278, 279, 280, - 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 301, + -1, -1, -1, -1, -1, -1, 308, 309, 125, -1, + -1, -1, -1, 271, 272, -1, 60, -1, -1, -1, + -1, -1, -1, -1, -1, 283, -1, 285, -1, 287, + -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 125, -1, 60, -1, -1, -1, + 308, 309, -1, 257, 258, -1, -1, -1, 262, 263, + -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, + 274, -1, 276, 277, 278, 279, 280, 281, -1, -1, + 284, 125, 257, 258, -1, -1, -1, 262, 263, -1, + -1, -1, -1, -1, 269, -1, -1, 301, -1, 274, + -1, 276, 277, 278, 279, 280, 281, -1, -1, 284, + 257, 258, -1, -1, -1, 262, -1, -1, -1, -1, + -1, -1, 269, -1, -1, -1, 301, 274, -1, 276, + 277, 278, -1, -1, -1, -1, -1, 284, -1, -1, + 257, 258, -1, -1, 291, 262, -1, -1, -1, -1, + -1, -1, 269, -1, 301, -1, -1, 274, -1, 276, + 277, 278, -1, -1, -1, -1, -1, 284, -1, -1, + -1, -1, -1, -1, 291, -1, 257, 258, -1, -1, + -1, 262, -1, -1, 301, -1, -1, -1, 269, -1, + -1, -1, -1, 274, -1, 276, 277, 278, -1, -1, + -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, + 291, -1, -1, 257, 258, -1, -1, -1, 262, -1, + 301, -1, -1, -1, -1, 269, -1, -1, -1, -1, + 274, -1, 276, 277, 278, -1, -1, -1, -1, -1, + 284, -1, -1, 257, 258, -1, -1, 291, 262, -1, + -1, -1, -1, -1, -1, 269, -1, 301, -1, -1, + 274, -1, 276, 277, 278, -1, -1, -1, -1, -1, + 284, -1, -1, -1, -1, -1, -1, 291, -1, -1, + }; +} +class yyCheck3 { + protected static final short yyCheck3 [] = { -1, + -1, -1, -1, -1, -1, -1, 301, }; } class yyCheckInit { - static short[] yyCheck = new short[2964]; + static short[] yyCheck = new short[3011]; protected static void yyCheckInit () { int numyycheck; int yyCheckerun = 0; for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2964) { + if (yyCheckerun < 3011) { yyCheck[yyCheckerun] = yyCheck0.yyCheck0[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2964) { + if (yyCheckerun < 3011) { yyCheck[yyCheckerun] = yyCheck1.yyCheck1[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 2964) { + if (yyCheckerun < 3011) { yyCheck[yyCheckerun] = yyCheck2.yyCheck2[numyycheck]; yyCheckerun++; } } + for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { + if (yyCheckerun < 3011) { + yyCheck[yyCheckerun] = yyCheck3.yyCheck3[numyycheck]; + yyCheckerun++; + } + } } } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 75980805..fbce3875 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -1231,9 +1231,18 @@ explicitconstructorinvocation : THIS '(' ')' ';' THCONargl.set_ArgumentList($3); $$=THCONargl; } - // |SUPER '(' ')' ';' - // |SUPER '(' argumentlist ')' ';' - + |SUPER '(' ')' ';' + { + SuperCall sCall = new SuperCall($1.getOffset(),$1.getLexem().length()); + $$=sCall; + } + |SUPER '(' argumentlist ')' ';' + { + SuperCall sCall = new SuperCall($1.getOffset(),$1.getLexem().length()); + sCall.set_ArgumentList($3); + $$=sCall; + } + classtypelist : classtype { //RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1); diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java b/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java new file mode 100644 index 00000000..3ef7c81d --- /dev/null +++ b/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java @@ -0,0 +1,41 @@ +package de.dhbwstuttgart.syntaxtree.misc; + +import de.dhbwstuttgart.syntaxtree.statement.ArgumentList; +import de.dhbwstuttgart.syntaxtree.statement.MethodCall; +import de.dhbwstuttgart.syntaxtree.statement.Receiver; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; + +/** + * Diese Klasse stellt den this()-Aufruf dar. + * @author janulrich + * + */ +public class ConstructorCall extends MethodCall +{ + public ConstructorCall(Receiver receiver, String methodName, ArgumentList argumentList, int offset){ + super(offset, 0); + this.set_Receiver(receiver); + this.set_Name(methodName); + this.set_ArgumentList(argumentList); + } + + /* + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + throw new TypeinferenceException("this(...)-Aufruf kann nicht als Ausdruck verwendet werden",this); + } + */ + + @Override + public ConstraintsSet overloading(TypeAssumptions assumptions){ + ConstraintsSet ret = new ConstraintsSet(); + ConstructorAssumption cAss = assumptions.getConstructorAssumption(this.get_Name(), this.getArgumentList().size()); + if(cAss == null)throw new TypeinferenceException("Kein Konstruktor mit passender Parameteranzahl vorhanden",this); + + ret.add(constraintsFromMethodAssumption(cAss, assumptions)); + return ret; + } +} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java index 08c66c28..52b87589 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java @@ -10,6 +10,7 @@ import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.FormalParameter; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -17,7 +18,7 @@ import de.dhbwstuttgart.typeinference.ResultSet; // ino.class.ArgumentList.24911.declaration -public class ArgumentList +public class ArgumentList extends SyntaxTreeNode // ino.end // ino.class.ArgumentList.24911.body { @@ -106,6 +107,27 @@ public class ArgumentList //if(this.expr.size()>0)ret = ret.substring(0, ret.length()-2); return ret; } + + + + @Override + public int getOffset() { + return 0; + } + + + + @Override + public int getVariableLength() { + return 0; + } + + + + @Override + public Vector getChildren() { + return expr; + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index fd7526bd..730a5861 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -217,7 +217,7 @@ public class MethodCall extends Expr * @param assumptions * @return */ - ConstraintsSet overloading(TypeAssumptions assumptions){ + public ConstraintsSet overloading(TypeAssumptions assumptions){ ConstraintsSet ret = new ConstraintsSet(); //ret.add(new Overloading(assumptions, this, this.getType()).generateConsstraints()); OderConstraint oCons = new OderConstraint(); @@ -248,7 +248,7 @@ public class MethodCall extends Expr * * @return */ - UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ + public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ UndConstraint methodConstraint = new UndConstraint(); //Ein Constraint für den ReturnType der Methode... methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), type.TYPE(assumptions, this)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java new file mode 100644 index 00000000..cdc1d0f1 --- /dev/null +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -0,0 +1,108 @@ +// ino.module.This.8654.package +package de.dhbwstuttgart.syntaxtree.statement; +// ino.end +// ino.module.This.8654.import +import java.util.Hashtable; +import java.util.Vector; + +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.bytecode.ClassFile; +import de.dhbwstuttgart.bytecode.CodeAttribute; +import de.dhbwstuttgart.bytecode.JVMCode; +import de.dhbwstuttgart.myexception.CTypeReconstructionException; +import de.dhbwstuttgart.myexception.JVMCodeException; +import de.dhbwstuttgart.myexception.SCStatementException; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.Constructor; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.misc.ConstructorCall; +import de.dhbwstuttgart.syntaxtree.misc.UsedId; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.Void; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.Overloading; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; +import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; + + + +public class SuperCall extends MethodCall +{ + public SuperCall(int offset,int variableLength) + { + super(offset,variableLength); + } + + public SuperCall(SyntaxTreeNode parent){ + this(0,0); + this.parent = parent; + } + + public ArgumentList arglist; + + public void set_ArgumentList(ArgumentList al) + { + this.arglist = al; + } + + public ArgumentList getArgumentList() + { + return this.arglist; + } + + public void set_UsedId(UsedId ui) + { + this.usedid = ui; + } + + + + + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + throw new TypeinferenceException("this(...)-Aufruf kann nicht als Ausdruck verwendet werden",this); + } + + /** + * This kann auch als Konstruktoraufruf in einem Konstruktor-Block vorkommen. + */ + @Override + public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { + String className = this.getParentClass().getSuperClass().getName().toString(); + ConstraintsSet ret = new ConstraintsSet(); + this.setType(new Void(this,this.getOffset())); + //Kontrollieren, dass sich this(...) in einem Konstruktor und dort als erstes Statement befindet: + SyntaxTreeNode p = this.getGTVDeclarationContext(); + if(p instanceof Constructor && + ((Constructor)p).get_Block().statements.firstElement().equals(this)){ + //Constraints generieren: + + MethodCall constructorCall = new ConstructorCall(new Receiver(new This(this)), className, arglist, this.getOffset()); + ret.add(constructorCall.TYPEStmt(assumptions)); + return ret; + }else{ + //Ansonsten Fehler ausgeben: + throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this); + } + } + + public String toString() + { + //return receiver/*.toString()*/ + " " + usedid.toString(); + return "(" + "super" +"(" + this.getArgumentList() + "))"; + } + + @Override + public JavaCodeResult printJavaCode(ResultSet resultSet) { + return new JavaCodeResult("super("+this.getArgumentList().printJavaCode(resultSet)+")"); + } + + + +} diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java new file mode 100644 index 00000000..ae590734 --- /dev/null +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java @@ -0,0 +1,115 @@ +// ino.module.This.8654.package +package de.dhbwstuttgart.syntaxtree.statement; +// ino.end +// ino.module.This.8654.import +import java.util.Hashtable; +import java.util.Vector; + +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.bytecode.ClassFile; +import de.dhbwstuttgart.bytecode.CodeAttribute; +import de.dhbwstuttgart.bytecode.JVMCode; +import de.dhbwstuttgart.myexception.CTypeReconstructionException; +import de.dhbwstuttgart.myexception.JVMCodeException; +import de.dhbwstuttgart.myexception.SCStatementException; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.Constructor; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.misc.ConstructorCall; +import de.dhbwstuttgart.syntaxtree.misc.UsedId; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.Void; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.Overloading; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; +import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; + + + +public class ThisCall extends MethodCall +{ + public ThisCall(int offset,int variableLength) + { + super(offset,variableLength); + } + + public ThisCall(SyntaxTreeNode parent){ + this(0,0); + this.parent = parent; + } + + public ArgumentList arglist; + + public void set_ArgumentList(ArgumentList al) + { + this.arglist = al; + } + + public ArgumentList getArgumentList() + { + return this.arglist; + } + + public void set_UsedId(UsedId ui) + { + this.usedid = ui; + } + + + + + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + throw new TypeinferenceException("this(...)-Aufruf kann nicht als Ausdruck verwendet werden",this); + } + + /** + * This kann auch als Konstruktoraufruf in einem Konstruktor-Block vorkommen. + */ + @Override + public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { + String className = this.getParentClass().getName().toString(); + ConstraintsSet ret = new ConstraintsSet(); + this.setType(new Void(this,this.getOffset())); + //Kontrollieren, dass sich this(...) in einem Konstruktor und dort als erstes Statement befindet: + SyntaxTreeNode p = this.getGTVDeclarationContext(); + if(p instanceof Constructor && + ((Constructor)p).get_Block().statements.firstElement().equals(this)){ + //Constraints generieren: + + ConstructorCall constructorCall = new ConstructorCall(new Receiver(new This(this)), className, arglist, this.getOffset()); + ret.add(constructorCall.TYPEStmt(assumptions)); + return ret; + }else{ + //Ansonsten Fehler ausgeben: + throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this); + } + } + + public String toString() + { + //return receiver/*.toString()*/ + " " + usedid.toString(); + return "(" + "this" +"(" + this.getArgumentList() + "))"; + } + + @Override + public JavaCodeResult printJavaCode(ResultSet resultSet) { + return new JavaCodeResult("this("+this.getArgumentList().printJavaCode(resultSet)+")"); + } + + @Override + public Vector getChildren() { + Vector ret = new Vector(); + if(arglist != null)ret.add(arglist); + return ret; + } + +} + + From a8a7ad564bdce4a097fdeefe716e26018a7fe984 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 26 Feb 2015 17:46:04 +0100 Subject: [PATCH 057/186] Super-Aufruf implementieren --- .../syntaxtree/statement/SuperCall.java | 28 ++----------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index cdc1d0f1..5a494a28 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -32,7 +32,7 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; -public class SuperCall extends MethodCall +public class SuperCall extends ThisCall { public SuperCall(int offset,int variableLength) { @@ -44,29 +44,9 @@ public class SuperCall extends MethodCall this.parent = parent; } - public ArgumentList arglist; - - public void set_ArgumentList(ArgumentList al) - { - this.arglist = al; - } - - public ArgumentList getArgumentList() - { - return this.arglist; - } - - public void set_UsedId(UsedId ui) - { - this.usedid = ui; - } - - - - @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - throw new TypeinferenceException("this(...)-Aufruf kann nicht als Ausdruck verwendet werden",this); + throw new TypeinferenceException("super(...)-Aufruf kann nicht als Ausdruck verwendet werden",this); } /** @@ -101,8 +81,6 @@ public class SuperCall extends MethodCall @Override public JavaCodeResult printJavaCode(ResultSet resultSet) { return new JavaCodeResult("super("+this.getArgumentList().printJavaCode(resultSet)+")"); - } - - + } } From 8e59e46d5779aef4d6e168a873e16216e34657f7 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Mar 2015 11:34:42 +0100 Subject: [PATCH 058/186] Overloading-Algorithmus in Klasse MethodCall auslagern --- .../syntaxtree/statement/MethodCall.java | 3 +- .../typeinference/Overloading.java | 76 ------------------- .../TypeInsertTests/SuperTest.jav | 12 +++ .../TypeInsertTests/SuperTest.java | 18 +++++ 4 files changed, 32 insertions(+), 77 deletions(-) delete mode 100755 src/de/dhbwstuttgart/typeinference/Overloading.java create mode 100644 test/plugindevelopment/TypeInsertTests/SuperTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/SuperTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 730a5861..e1b6661a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -229,6 +229,7 @@ public class MethodCall extends Expr if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions)); } + ret.add(oCons); return ret; } @@ -251,7 +252,7 @@ public class MethodCall extends Expr public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ UndConstraint methodConstraint = new UndConstraint(); //Ein Constraint für den ReturnType der Methode... - methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), type.TYPE(assumptions, this)); + methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this)); //Ein Constraint für die Parameter der Methode... for(int i=0; i parameterList = new Vector(); - for(Expr argument : methodCall.getArgumentList().expr){ - parameterList.add(argument.getType()); - } - Vector methodAssumptions = assumptions.getMethodAssumptions(methodCall.getName(), parameterList); - if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+methodCall.get_Name()+" ist in den Assumptions nicht vorhanden", methodCall); - //Alle möglichen Methoden durchgehen: - for(MethodAssumption methodAssumption : methodAssumptions){ - //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: - if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; - ret.addConstraint(constraintsFromMethodAssumption(methodAssumption)); - } - return ret; - } - */ - - -} diff --git a/test/plugindevelopment/TypeInsertTests/SuperTest.jav b/test/plugindevelopment/TypeInsertTests/SuperTest.jav new file mode 100644 index 00000000..3b28814a --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/SuperTest.jav @@ -0,0 +1,12 @@ +import java.util.Vector; + +class Klasse1{ + Klasse1(var){} +} + +class Klass2 extends Klasse1{ + + Klass2(){ + super(this); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/SuperTest.java b/test/plugindevelopment/TypeInsertTests/SuperTest.java new file mode 100644 index 00000000..f9d6d375 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/SuperTest.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class SuperTest { + + private static final String TEST_FILE = "SuperTest.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 0674de12c6216ef8f4994c552e3f9b9de55426e6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Mar 2015 11:37:04 +0100 Subject: [PATCH 059/186] Overloading-Algorithmus in Klasse MethodCall auslagern --- src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java | 1 - src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java | 1 - src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java | 1 - src/de/dhbwstuttgart/syntaxtree/statement/This.java | 1 - src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java | 1 - 5 files changed, 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index e1b6661a..cd7bd1de 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -20,7 +20,6 @@ import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.OderConstraint; -import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.UndConstraint; import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index ce586551..0d3179ab 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -27,7 +27,6 @@ import de.dhbwstuttgart.syntaxtree.type.Void; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.SingleConstraint; import de.dhbwstuttgart.typeinference.UndConstraint; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index 5a494a28..3849e3c0 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -23,7 +23,6 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.Void; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index ebb42c9b..8a568600 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -22,7 +22,6 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.Void; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java index ae590734..fb50b013 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java @@ -23,7 +23,6 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.Void; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.Overloading; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; From 618847bf4f6745c5e8ed3aade572f9f4d549bba8 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Mar 2015 16:59:00 +0100 Subject: [PATCH 060/186] Fehlende Umwandlung von RefType zu GTV in Wildcard-Types implementieren --- .../syntaxtree/type/ExtendsWildcardType.java | 7 +++++++ .../syntaxtree/type/SuperWildcardType.java | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index dfe0fdd1..00f0629f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -4,8 +4,10 @@ import java.util.Vector; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; /** @@ -148,4 +150,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, this.extendsType.parserPostProcessing(this); } + @Override + public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + this.extendsType = this.extendsType.TYPE(ass, parent).getType(); + return super.TYPE(ass, parent); + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 3dea9599..e0e08303 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.type; import java.util.Vector; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; /** * Stellt eine Wildcard mit unterer Grenze dar. @@ -144,4 +146,12 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I super.parserPostProcessing(parent); this.superType.parserPostProcessing(this); } + + @Override + public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + this.superType = this.superType.TYPE(ass, parent).getType(); + return super.TYPE(ass, parent); + } + + } From 1ec9c3f67f1596f657bd37ed3d8ffca0533590f2 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 3 Mar 2015 18:24:14 +0100 Subject: [PATCH 061/186] Fehler in Umwandlung von RefType zu GTV in BoGTV beheben --- .../dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index 516abdbe..46a043f3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -88,14 +88,16 @@ public class BoundedGenericTypeVar extends GenericTypeVar ConstraintsSet ret = super.TYPE(ass); //ass.addGenericVarAssumption(this); //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds + Vector tempBounds = new Vector<>(); if(this.bounds != null){ for(Type ev : this.bounds){ ConstraintType extendsType = ass.getTypeFor(ev, this); if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); - + tempBounds.add(extendsType.getType()); //ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); } } + this.bounds = tempBounds; return ret; } From e8538be1c28decab6a66e08b20c7c341b3f148c6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 4 Mar 2015 13:50:09 +0100 Subject: [PATCH 062/186] Fehler in Umwandlung von GTV zu TPH beheben --- .../typeinference/ResultSet.java | 1 + .../assumptions/TypeAssumptions.java | 20 +++++++++++++++---- .../TypeInsertTests/GenericTypeVarTest.java | 15 ++++++-------- .../TypeInsertTests/IntTest.java | 2 +- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index e86335f0..a856d6d9 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -5,6 +5,7 @@ import java.util.Vector; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** * Im Grunde Sammlung von Pair s mit Equal-Operatoren. diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index acd08a43..ecb6c6c5 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,15 +327,27 @@ public class TypeAssumptions { //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ //Generische Variable gefunden! + //Erkennen, ob sich inNode im gleichen Kontext wie die GTV aus den Assumptions befindet. + boolean sameContext = true; + //Der GTV-Kontext der einzusetzenden GTV GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext(); - if(gtvDeclNode == null || gtvDeclNode.isClass() - || !gtvDeclNode.equals(inNode.getGTVDeclarationContext())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) + //Der GTV-Kontext von inNOde + GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext(); + //Überprüfungen (siehe Dokumentation): + if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert + if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false; + }else{ //GTV wurde in Methode oder Feld definiert: + if(! gtvNode.equals(gtvDeclNode))sameContext = false; + } + + if(sameContext){ + TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); + return new ConstraintType(ass.getAssumedType()); + }else{ TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); } - TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); - return new ConstraintType(ass.getAssumedType()); } } diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java index 40aad284..0721692c 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java @@ -4,23 +4,20 @@ import java.util.Vector; import org.junit.Test; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; + public class GenericTypeVarTest { private static final String TEST_FILE = "GenericTypeVarTest.jav"; - private static final String TEST_FILE2 = "GenericTypeVarTest2.jav"; - /* @Test public void run(){ + Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.ASSUMPTIONS, System.out)); Vector mustContain = new Vector(); mustContain.add("String methode"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } - */ - @Test - public void run2(){ - Vector mustContain = new Vector(); - mustContain.add("String var2"); - MultipleTypesInsertTester.test(TEST_FILE2, mustContain); - } + } diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.java b/test/plugindevelopment/TypeInsertTests/IntTest.java index 8020e667..95fd200f 100644 --- a/test/plugindevelopment/TypeInsertTests/IntTest.java +++ b/test/plugindevelopment/TypeInsertTests/IntTest.java @@ -11,7 +11,7 @@ public class IntTest { @Test public void run(){ Vector mustContain = new Vector(); - mustContain.add("int var"); + mustContain.add("Integer var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } From 7889783e8a0c0542030dea767715c78d07bddc0b Mon Sep 17 00:00:00 2001 From: "Dr. Martin Pluemicke" Date: Thu, 5 Mar 2015 13:55:21 +0100 Subject: [PATCH 063/186] Unify Bugfix Bug 5 geloest und fuer TypVar <. RefType: ? extends Ty <. RefType eingefuegt --- .../dhbwstuttgart/syntaxtree/SourceFile.java | 9 ++++++- .../typeinference/unify/Unify.java | 27 +++++++++++++++++++ .../GenericParaListInsertTest.jav | 2 +- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 46ab3220..f8a820f5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -804,7 +804,14 @@ public class SourceFile //Schritt 4: Unifikation Vector>> vecunifyResult = - streamconstraintsclone.map(x -> Unify.unify(x, finiteClosure)).collect(Vector::new, Vector::add, Vector::addAll); + //streamconstraintsclone.map(x -> Unify.unify(x, finiteClosure)).collect(Vector::new, Vector::add, Vector::addAll); + //DEBUG-Variante + streamconstraintsclone.map(x -> + { Vector> z = Unify.unify(x, finiteClosure); + return z; + } + ).collect(Vector::new, Vector::add, Vector::addAll); + //card gibt die Cardinalitaet der unifizierten Mengen an Vector card = vecunifyResult.stream().map(x -> x.size()).collect(Vector::new, Vector::add, Vector::addAll); diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 3ac54308..e6f7b563 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -7,6 +7,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; +import java.util.stream.Stream; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -443,7 +444,25 @@ public class Unify } } } + + //aus {ty <. ty'} {? extends ty <. ty'} erzeugen //angefuegt PL 15-03-03 + Stream> extergMenge1 = + ergMenge1.stream().map(v -> + v.stream().map(pa -> + new Pair(new ExtendsWildcardType(pa.getTA1Copy().getOffset(), pa.getTA1Copy()), pa.getTA2Copy(), pa.GetOperator(), pa.bSubst) + ).collect(Vector::new, Vector::add, Vector::addAll)); + cartProduktSets.add(ergMenge1); + cartProduktSets.add(extergMenge1.collect(Vector::new, Vector::add, Vector::addAll)); + } + else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) + { + //Paar unverändert lassen, wenn eine GenericTypeVar ist + Vector> setofsetofpairs = new Vector>(); + Vector vTmp = new Vector(); + vTmp.add(p); + setofsetofpairs.add(vTmp); + cartProduktSets.add(setofsetofpairs); } else if(p.OperatorSmallerExtends()) { @@ -582,6 +601,10 @@ public class Unify cartProduktSets.add(setofsetofpairs); } } + else { + //kein programmierter Fall konnte angewandt werden. PL 15-03-05 + return new Vector>(); + } } else if (p.TA2 instanceof TypePlaceholder) { @@ -725,6 +748,10 @@ public class Unify cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } } + else { + //kein programmierter Fall konnte angewandt werden. PL 15-03-05 + return new Vector>(); + } } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav index e3c98b2b..ed362c9d 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav @@ -1,3 +1,3 @@ class GenericParaListInsertTest{ -methode(a){return a;} + A methode(a){return a;} } \ No newline at end of file From 90e4c3bc966c936b22ee3e5bd205cb69dffc61a8 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 5 Mar 2015 13:56:42 +0100 Subject: [PATCH 064/186] Doku erweitert --- doc/documentation.md | 28 ++++++++----------- .../typeinference/ResultSet.java | 1 - .../GenericTypeInsertPoint.java | 18 ++++++------ .../typedeployment/TypeInsertSet.java | 8 ++++++ 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/doc/documentation.md b/doc/documentation.md index 0b88a6bc..74c5add5 100644 --- a/doc/documentation.md +++ b/doc/documentation.md @@ -29,6 +29,17 @@ * Stellt die Typeinsetzung für eine der generierten Lösungen dar * Setzt alle Typen und generischen Variablen ein, welche zu dieser Lösung gehören +### Einsetzen von Generischen Variablen +Die einzusetzenden Generischen Variablen werden erst beim Einsetzen eines Typs generiert. + +* Ablauf: + * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) + * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. + * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. + * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) + * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. + ## Ablauf Typinferenz: 1. Parsen @@ -53,19 +64,4 @@ 5. Einsetzen eines TypeInsertSet (optional) 1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen 2. Alle Abhängigkeiten dieser - -# Typinferenz für Java 8 - -## Programmablauf - -1. SourceFile parst die Java-Dateien -2. SourceFile erstellt die Basic/Global Assumptions -3. Das Globale AssumptionSet wird anschließend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben -4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenübergreifend und jede AssumptionType darf darin nur einmalig gesetzt werden. -5. Haben alle Klassen ihrer Constraints erstellt können diese Unifiziert werden. - -## Overloading - -* Die Overloading Klasse generiert Constraints aus einem Methodenaufruf. - - + diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index a856d6d9..d13429be 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -105,7 +105,6 @@ public class ResultSet implements Iterable { } } } - return ret; } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index bd16e90b..751fea6b 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -170,15 +170,17 @@ class GenericVarPatch { public void removeUnusedTPHs(Vector usedTPHs) { this.usedTPHs = usedTPHs; return; - /* - for(TypePlaceholder tph : usedTPHs){ - //Zuerst alle extends Typen kontrollieren und entfernen: - for(GenericVarExtendsDeclarationPatch p : this.genericVarExtendDeclarations){ - if(p.definesGenericVar(tph))return; - } - } - */ + } + + /* + for(TypePlaceholder tph : usedTPHs){ + //Zuerst alle extends Typen kontrollieren und entfernen: + for(GenericVarExtendsDeclarationPatch p : this.genericVarExtendDeclarations){ + if(p.definesGenericVar(tph))return; + } + } + */ } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index c588aaea..6bce9a06 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -92,7 +92,15 @@ public class TypeInsertSet { allTPHs.add(tph); } } + for(Pair pair : pairs) + for(TypePlaceholder tph : pair.getTypePlaceholder()){ + if(!allTPHs.contains(tph)){ + allTPHs.add(tph); + } + } //TODO: Schritt 4 (Es wird nicht kontrolliert, ob der TPH in dem Kontext schon bekannt ist) + + /* // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){ From f2bc4f0ffa0a148985341ea0bcb32f5ddb53ad83 Mon Sep 17 00:00:00 2001 From: "Dr. Martin Pluemicke" Date: Thu, 5 Mar 2015 16:37:45 +0100 Subject: [PATCH 065/186] TPH <. ? super Ty reduziert auf TPH <. Ty eingefuegt, damit BUG 7 geloest --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index e6f7b563..55050f38 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -321,6 +321,9 @@ public class Unify { if(p.TA1 instanceof TypePlaceholder) { + //TPH <. ? super Ty entspricht TPH <. Ty + if (p.TA2 instanceof SuperWildcardType) p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); + if(p.OperatorEqual()) { //Alle Paare die bereits durch sub_unify die richtige Struktur haben einfach durchleiten. @@ -330,7 +333,7 @@ public class Unify setofsetofpairs.add(vTmp); cartProduktSets.add(setofsetofpairs); } - else if(p.OperatorSmaller() && p.TA2 instanceof RefType) + else if(p.OperatorSmaller() && (p.TA2 instanceof RefType)) { RefType p_TA2 = (RefType)p.TA2; //1. Menge @@ -446,14 +449,16 @@ public class Unify } //aus {ty <. ty'} {? extends ty <. ty'} erzeugen //angefuegt PL 15-03-03 - Stream> extergMenge1 = + //DIES IST NICHT RICHTIG GETESTET, ES KOENNTE SEIN, DASS DAS KART. PRODUKT FALSCH GEBILDET WIRD. + Stream> strextergMenge1 = ergMenge1.stream().map(v -> v.stream().map(pa -> - new Pair(new ExtendsWildcardType(pa.getTA1Copy().getOffset(), pa.getTA1Copy()), pa.getTA2Copy(), pa.GetOperator(), pa.bSubst) + new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) ).collect(Vector::new, Vector::add, Vector::addAll)); + Vector> extergMenge1 = strextergMenge1.collect(Vector::new, Vector::add, Vector::addAll); + ergMenge1.addAll(extergMenge1); cartProduktSets.add(ergMenge1); - cartProduktSets.add(extergMenge1.collect(Vector::new, Vector::add, Vector::addAll)); } else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) { From 324fb27b6d3ec1414fbe313559444bfa26497887 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 10 Mar 2015 12:33:52 +0100 Subject: [PATCH 066/186] =?UTF-8?q?ObjectType=20eingef=C3=BChrt.=20Es=20mu?= =?UTF-8?q?ss=20noch=20Unify=20angepasst=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/LambdaExpression.java | 7 ++++++- .../syntaxtree/type/FreshSuperWildcardType.java | 10 +++++----- src/de/dhbwstuttgart/syntaxtree/type/RefType.java | 2 +- .../syntaxtree/type/SuperWildcardType.java | 8 ++++---- .../dhbwstuttgart/syntaxtree/type/TypePlaceholder.java | 2 +- src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java | 2 +- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 8e21bd7c..144d1278 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -17,6 +17,7 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.DoubleType; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -154,7 +155,11 @@ public class LambdaExpression extends Expr{ //Die Typen innerhalb von FunN anpassen: Vector superParamTypes = new Vector<>(); for(Type pT : paramTypes){ - superParamTypes.add(new SuperWildcardType(pT.getOffset(), pT)); + if(pT instanceof ObjectType){ + superParamTypes.add(new SuperWildcardType(pT.getOffset(), (ObjectType) pT)); + }else{ + superParamTypes.add(pT); + } } Type retType = method_body.getType(); Type extRetType = retType; diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java index 411cd1a8..6670db46 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java @@ -4,13 +4,13 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; public class FreshSuperWildcardType extends FreshWildcardType implements IMatchable { - private Type superBoundType; + private ObjectType superBoundType; /** * Author: Arne Lüdtke
* Standard Konstruktor für eine FreshSuperWildcard */ - public FreshSuperWildcardType(Type superBound ,SyntaxTreeNode parent, int offset) + public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset) { super(parent,offset); this.superBoundType = superBound; @@ -20,7 +20,7 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha * Author: Arne Lüdtke
* Privater Konstruktor für clone */ - private FreshSuperWildcardType(Type superBound,SyntaxTreeNode parent,int offset, String name) + private FreshSuperWildcardType(ObjectType superBound,SyntaxTreeNode parent,int offset, String name) { super(parent,offset,name); this.superBoundType = superBound; @@ -46,14 +46,14 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha */ public FreshSuperWildcardType clone() { - return new FreshSuperWildcardType(this.superBoundType.clone(),this.getParent(),getOffset(),this.name.toString()); + return new FreshSuperWildcardType((ObjectType) this.superBoundType.clone(),this.getParent(),getOffset(),this.name.toString()); } /** * Author: Arne Lüdtke
* Gibt die Grenze der Wildcard zurück */ - public Type get_SuperBound() + public ObjectType get_SuperBound() { return superBoundType; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 2c5d0e59..c59303c6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -28,7 +28,7 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; // ino.class.RefType.26621.declaration -public class RefType extends Type implements IMatchable +public class RefType extends ObjectType implements IMatchable // ino.end // ino.class.RefType.26621.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index e0e08303..42f7f4bf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -18,13 +18,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class SuperWildcardType extends WildcardType implements ITypeContainer, IMatchable{ - private Type superType = null; + private ObjectType superType = null; /** * Author: Arne Lüdtke
* Standard Konstruktor für eine SuperWildcard */ - public SuperWildcardType(int offset, Type superType) + public SuperWildcardType(int offset, ObjectType superType) { super(superType.getParent(),offset); this.superType = superType; @@ -57,7 +57,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public SuperWildcardType clone() { - return new SuperWildcardType(getOffset(), superType.clone()); + return new SuperWildcardType(getOffset(), (ObjectType) superType.clone()); } @@ -149,7 +149,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - this.superType = this.superType.TYPE(ass, parent).getType(); + this.superType = (ObjectType) this.superType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 8549f31f..79bdb2e5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -27,7 +27,7 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; */ // ino.end // ino.class.TypePlaceholder.26780.declaration -public class TypePlaceholder extends Type +public class TypePlaceholder extends ObjectType // ino.end // ino.class.TypePlaceholder.26780.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index aa32de77..e6277b7a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; * */ -public class WildcardType extends Type{ +public class WildcardType extends ObjectType{ /** * Author: Arne Lüdtke
From 3d2dbc8709a85108c1c881bc17ab87605e65862e Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 10 Mar 2015 12:38:18 +0100 Subject: [PATCH 067/186] =?UTF-8?q?ObjectType=20eingef=C3=BChrt.=20Es=20mu?= =?UTF-8?q?ss=20noch=20Unify=20angepasst=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dhbwstuttgart/syntaxtree/type/ObjectType.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java new file mode 100644 index 00000000..61eea8a5 --- /dev/null +++ b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java @@ -0,0 +1,14 @@ +package de.dhbwstuttgart.syntaxtree.type; + +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; + +public abstract class ObjectType extends Type { + + public ObjectType(String s, SyntaxTreeNode parent, int offset) { + super(s, parent, offset); + } + public ObjectType(SyntaxTreeNode parent, int offset) { + super(parent, offset); + } + public abstract Type clone(); +} From 6a47dfaf58ef8f92efe0947428dac92a85fca82e Mon Sep 17 00:00:00 2001 From: Pluemicke Martin Date: Tue, 10 Mar 2015 22:32:29 +0100 Subject: [PATCH 068/186] nicht lauffaehige Version --- .../type/BoundedGenericTypeVar.java | 16 +- .../syntaxtree/type/ExtendsWildcardType.java | 14 +- .../syntaxtree/type/GenericTypeVar.java | 2 +- .../syntaxtree/type/ObjectType.java | 2 +- .../syntaxtree/type/SuperWildcardType.java | 6 +- .../syntaxtree/type/WildcardType.java | 2 +- .../typeinference/unify/Unify.java | 434 ++++++------------ 7 files changed, 169 insertions(+), 307 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index 46a043f3..cc284edc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -37,7 +37,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar */ // ino.end // ino.attribute.bounds.26468.declaration - Vector bounds=new Vector(); + Vector bounds=new Vector(); // ino.end private int endOffset; @@ -54,7 +54,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar */ // ino.method.BoundedGenericTypeVar.29409.definition - public BoundedGenericTypeVar(String s, Vector bounds, SyntaxTreeNode parentClass, int offset, int endOffset) + public BoundedGenericTypeVar(String s, Vector bounds, SyntaxTreeNode parentClass, int offset, int endOffset) // ino.end // ino.method.BoundedGenericTypeVar.29409.body { @@ -74,7 +74,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar } // ino.method.getBounds.26474.definition - public Vector getBounds() + public Vector getBounds() // ino.end // ino.method.getBounds.26474.body { @@ -88,12 +88,14 @@ public class BoundedGenericTypeVar extends GenericTypeVar ConstraintsSet ret = super.TYPE(ass); //ass.addGenericVarAssumption(this); //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds - Vector tempBounds = new Vector<>(); + Vector tempBounds = new Vector<>(); if(this.bounds != null){ - for(Type ev : this.bounds){ + for(ObjectType ev : this.bounds){ ConstraintType extendsType = ass.getTypeFor(ev, this); if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); - tempBounds.add(extendsType.getType()); + + ??? stimmt der Cast??? + tempBounds.add((ObjectType)extendsType.getType()); //ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); } } @@ -102,7 +104,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar } // ino.method.addBound.26480.definition - public void addBound(Type bound) + public void addBound(ObjectType bound) // ino.end // ino.method.addBound.26480.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 00f0629f..69cb4e6f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -20,13 +20,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{ - private Type extendsType = null; + private ObjectType extendsType = null; /** * Author: Arne Lüdtke
* Standard Konstruktor für eine ExtendsWildcard */ - public ExtendsWildcardType (int offset, Type extendsType) + public ExtendsWildcardType (int offset, ObjectType extendsType) { super(extendsType.getParent(), offset); this.extendsType = extendsType; @@ -39,7 +39,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, * Beispiel: ? extends Integer. * Integer wird zurückgegeben. */ - public Type get_ExtendsType() + public ObjectType get_ExtendsType() { return this.extendsType; } @@ -106,9 +106,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, * Setzt den Typ in der Wildcard * @param T - Type to be set */ - public void SetWildcardType(Type T) + public void SetWildcardType(ObjectType T) { - if(T instanceof RefType) + //if(T instanceof RefType) this.extendsType = (RefType)T; } @@ -117,7 +117,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, * Das gleiche wie get_ExtendsType(). * Implementiert ITypeContainer */ - public Type getContainedType() + public ObjectType getContainedType() { return this.get_ExtendsType(); } @@ -127,7 +127,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. * Wird über IMatchable implementiert. */ - public Type getMatchType() + public ObjectType getMatchType() { return this.get_ExtendsType(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 658e7536..bb1a22a5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -30,7 +30,7 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; */ // ino.end // ino.class.GenericTypeVar.26505.declaration -public class GenericTypeVar extends Type +public class GenericTypeVar extends ObjectType // ino.end // ino.class.GenericTypeVar.26505.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java index 61eea8a5..5c1e5064 100644 --- a/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java @@ -10,5 +10,5 @@ public abstract class ObjectType extends Type { public ObjectType(SyntaxTreeNode parent, int offset) { super(parent, offset); } - public abstract Type clone(); + public abstract ObjectType clone(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 42f7f4bf..5907388c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -36,7 +36,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I * Beispiel: ? super Integer. * Integer wird zurückgegeben. */ - public Type get_SuperType() + public ObjectType get_SuperType() { return this.superType; } @@ -86,9 +86,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I * Setzt den Typ in der Wildcard * @param T - Type to be set */ - public void SetWildcardType(Type T) + public void SetWildcardType(ObjectType T) { - if(T instanceof RefType) + //if(T instanceof RefType) this.superType = (RefType)T; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index e6277b7a..aa32de77 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; * */ -public class WildcardType extends ObjectType{ +public class WildcardType extends Type{ /** * Author: Arne Lüdtke
diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 55050f38..3b6d00c1 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -29,6 +29,7 @@ import de.dhbwstuttgart.syntaxtree.type.IMatchable; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.Pair; @@ -72,181 +73,7 @@ public class Unify } // ino.end - // ino.method.unify.28058.definition - //public static Vector> unify(Vector E, FC_TTO fc_tto ) - public static Vector> unifyOld(Vector E, FC_TTO fc_tto ) - // ino.end - // ino.method.unify.28058.body - { - //HIER MUSS NICHT-UNITARY UNIFIER NOCH PROGRAMMIERT WERDEN - - Vector FC = fc_tto.getFC(); - //Vector TTO = fc_tto.getTTO(); - //Vector> Eq_set = new Vector>(); - Vector Eq_11 = new Vector (); - Vector Eq_12 = new Vector (); - Vector>> sm_set = new Vector>>(); - Vector>> gr_set = new Vector>>(); - Vector>> bound_set = new Vector>>(); - - //1./2. Schritt (smaller und greater Set bilden) - for( int i = 0; i < E.size(); i++ ) - { - Pair P = E.elementAt(i); - inferencelog.debug(""); - inferencelog.debug(""); - inferencelog.debug("Ausgew�hltes Paar = " + P.toString() + ""); - inferencelog.debug( "--------------------------------------------------"); - if ( P.TA1 instanceof TypePlaceholder && P.TA2 instanceof RefType && P.OperatorSmaller()) - { - //1. Schritt (smaller) - Vector> setofsetofpairs= instanceSmaller(P, fc_tto); - - //sm_set = setofsetofpairs; // Urspruenglich - sm_set.addElement(setofsetofpairs); // PL - } - else if ( (P.TA1 instanceof RefType || P.TA1 instanceof BoundedGenericTypeVar) && P.TA2 instanceof TypePlaceholder && P.OperatorSmaller()) - { - //2. Schritt (greater) - //IST KEIN MATCH IN DER FUNKTION allGreater NOETIG - Vector gr; - if (P.TA1 instanceof RefType) - gr = allGreater((RefType)P.TA1, FC); - else - gr = allGreater((BoundedGenericTypeVar)P.TA1, FC); - Vector setofpairs = new Vector (); - setofpairs.addElement(new Pair(P.TA2, P.TA1, PairOperator.Equal)); //Reflexivitaet - Vector> setofsetofpairs = new Vector>(); - setofsetofpairs.addElement(setofpairs); - for (int ii = 0; ii < gr.size(); ii++) - { - setofpairs = new Vector (); - setofpairs.addElement(new Pair(P.TA2, gr.elementAt(ii), PairOperator.Equal)); - setofsetofpairs.addElement(setofpairs); - } - gr_set.addElement(setofsetofpairs); - } - else if ( P.TA1 instanceof TypePlaceholder && P.TA2 instanceof TypePlaceholder && P.OperatorSmaller()) - { - //WAS PASSIERT MIT EINE PAAR HIER DRIN BLEIBT??? - Eq_12.addElement(P); - printMenge("Eq_12", Eq_12, 6); - //inferencelog.debug(P.OperatorEqual()); - } - else if (P.TA1 instanceof BoundedGenericTypeVar && P.TA2 instanceof RefType) - { //PL 06-06-13 - Vector bounds = ((BoundedGenericTypeVar)(P.TA1)).getBounds(); - Vector> setofsetofpairs = new Vector>(); - for (int ii = 0; ii < bounds.size(); ii++) - { - Vector setofpairs = new Vector (); - setofpairs.addElement(new Pair(bounds.elementAt(ii), P.TA2)); - setofsetofpairs.addElement(setofpairs); - } - bound_set.addElement(setofsetofpairs); - } - else - { //P.TA1 instanceof RefType && P.TA2 instanceof RefType - Eq_11.addElement(P); - printMenge("Eq_11", Eq_11, 6); - } - //ret.addElement(sub_unify(E, FC)); - } - - //3. Schritt, kartesisches Produkt - Vector helpvp; - Vector> newvecvecpair1 = new Vector>(); - - //notwendig damit die naechste for-Schleife (ii) auf alle Faelle - //mindestens einmal durchlaufen wird. - //if (sm_set.size() == 0) sm_set.addElement(new Vector()); - - //korregiert PL 06-05-12 - Vector>> Eq_2expand = sm_set; - Eq_2expand.addAll(gr_set); //kleinere und groessere Elemente zusammengefasst - Eq_2expand.addAll(bound_set); //bounds werden auch hinzugefuegt //PL 06-06-13 - - newvecvecpair1.addElement(copyVectorPair(Eq_11)); - - for (int ii = 0; ii < Eq_2expand.size(); ii++) { - Vector> OneE_Element = Eq_2expand.elementAt(ii); - Vector> newvecvecpair1old = newvecvecpair1; - newvecvecpair1 = new Vector>(); - for(int iii=0; iii< OneE_Element.size(); iii++) { - for(int k = 0; k < newvecvecpair1old.size(); k++) { - helpvp = copyVectorPair(newvecvecpair1old.elementAt(k)); - helpvp.addAll(copyVectorPair(OneE_Element.elementAt(iii))); - newvecvecpair1.addElement(helpvp); - } - } - } - - //groessere Elemente auskommentiert PL 06-05-12 - // Vector> helpvp2; - Vector> newvecvecpair2 = newvecvecpair1; //new Vector>(); - // for (int ii = 0; ii < newvecvecpair1.size(); ii++) { - // Vector OneUnifier = newvecvecpair1.elementAt(ii); - // //notwendig damit die naechste for-Schleife (jj) auf alle Faelle - // //mindestens einmal durchlaufen wird. - // //if (gr_set.size() == 0) gr_set.addElement(new Vector ()); - // if (gr_set.size() == 0) newvecvecpair2.addElement(OneUnifier); - // for (int jj = 0; jj < gr_set.size(); jj++) { - // Vector> OneE_Element = gr_set.elementAt(ii); - // for(int jjj = 0; jjj< OneE_Element.size(); jjj++) { - // helpvp = copyVectorPair(OneUnifier); - // inferencelog.debug(gr_set); - // helpvp.addAll(copyVectorPair(OneE_Element.elementAt(jjj))); - // newvecvecpair2.addElement(helpvp); - // } - // } - // } - - - Vector> newvecvecpair3 = new Vector>(); - //Vector> rek = new Vector>(); - //Vector> ret = new Vector>(); - for (int kk = 0; kk < newvecvecpair2.size(); kk++) { - //newvecvecpair3.addElement(sub_unify(newvecvecpair2.elementAt(kk), FC)); - printMenge("Sigma_alt", newvecvecpair2.elementAt(kk), 6); - - //4. Schritt - Vector sigma = sub_unify(newvecvecpair2.elementAt(kk), fc_tto); - //5, Schritt - if (hasSolvedForm(sigma)) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. - { - Hashtable ht = VectorPair2SubstHashtableVectorPair(sigma); - Type r1; - Type r2; - boolean ready = true; - for(int ll = 0; ll < Eq_12.size(); ll++) { - r1 = (Type)ht.get(Eq_12.elementAt(ll).TA1.getName()); - r2 = (Type)ht.get(Eq_12.elementAt(ll).TA2.getName()); - if (r1 == null) r1 = Eq_12.elementAt(ll).TA1; - else ready = false; - if (r2 == null) r2 = Eq_12.elementAt(ll).TA2; - else ready = false; - sigma.addElement(new Pair(r1, r2)); - } - //inferencelog.debug(ready); - if (!ready) { - printMenge("Sigma", sigma, 6); - - //6. Schritt (a) - //7. Schritt (addAll) - newvecvecpair3.addAll(unify(sigma, fc_tto)); - printMengeUnifier("newvecvecpair3_alt", newvecvecpair3, 6); - } - else { - //6. Schritt (b) - newvecvecpair3.addElement(sigma); - } - } - } - return newvecvecpair3; - } - // ino.end - /** * Einstieg in die Unifizierung mit Wildcards * @@ -303,6 +130,7 @@ public class Unify else if(!(p.TA1 instanceof TypePlaceholder) && !(p.TA2 instanceof TypePlaceholder)) { //Diese Paare können nicht mehr Unifiziert werden. fail. + inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten."); return new Vector>(); } } @@ -346,10 +174,10 @@ public class Unify { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Vector greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else @@ -387,10 +215,10 @@ public class Unify //doppelte Elemente rein //Anfang Vector smallers = new Vector(); - Vector smaller1elemente; + Vector smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -453,7 +281,7 @@ public class Unify Stream> strextergMenge1 = ergMenge1.stream().map(v -> v.stream().map(pa -> - new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) + new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), (ObjectType)pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) ).collect(Vector::new, Vector::add, Vector::addAll)); Vector> extergMenge1 = strextergMenge1.collect(Vector::new, Vector::add, Vector::addAll); @@ -484,10 +312,10 @@ public class Unify { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Vector greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else @@ -525,10 +353,10 @@ public class Unify //doppelte Elemente rein //Anfang Vector smallers = new Vector(); - Vector smaller1elemente; + Vector smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -536,7 +364,7 @@ public class Unify smaller1elemente = smaller1(p_fc_TA1_new, fc_tto); } - for(Type smele : smaller1elemente) + for(ObjectType smele : smaller1elemente) { smallers.add(smele); smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); @@ -608,6 +436,8 @@ public class Unify } else { //kein programmierter Fall konnte angewandt werden. PL 15-03-05 + //z.B. TPH <. ? extends Ty + inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " Ty wurde kein Fall gefunden"); return new Vector>(); } } @@ -617,7 +447,7 @@ public class Unify { //5. Menge //Greater auf den Typen bilden, und mit den Ergebnissen neue Paare bilden. - Vector grErg = greater(p.TA1,fc_tto); + Vector grErg = greater((ObjectType)p.TA1,fc_tto); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } else if(p.OperatorSmallerExtends()) @@ -642,10 +472,10 @@ public class Unify { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Vector greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else @@ -682,11 +512,11 @@ public class Unify //smallerArg ersetz durch folgende Zeilen. Durch Transistivitaet von fc kommen sonst //doppelte Elemente rein //Anfang - Vector smallers = new Vector(); - Vector smaller1elemente; + Vector smallers = new Vector(); + Vector smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -694,7 +524,7 @@ public class Unify smaller1elemente = smaller0(p_fc_TA1_new, fc_tto); //Von Menge 2 kopiert und smaller1 durch smaller0 ersetzt, Luar 07-08-08 } - for(Type smele : smaller1elemente) + for(ObjectType smele : smaller1elemente) { smallers.add(smele); //smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); //Auskommentiert luar 07-08-08 @@ -719,7 +549,7 @@ public class Unify //Mit den kleineren Typen neue Paare bilden, linke Seite Klonen. Vector smallerPairs = new Vector(); - for(Type sT : smallers) + for(ObjectType sT : smallers) { smallerPairs.add(new Pair(p.TA2.clone(),new SuperWildcardType(sT.getOffset(),sT),PairOperator.Equal)); } @@ -755,6 +585,7 @@ public class Unify } else { //kein programmierter Fall konnte angewandt werden. PL 15-03-05 + inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " Ty wurde kein Fall gefunden"); return new Vector>(); } } @@ -987,7 +818,7 @@ public class Unify * @param otherPairTypes - Die anderen Typen * @return - Ein Vector> der alle Paare enthält. */ - private static Vector> generateSetOfSetOfPair(Type TA1, Vector otherPairTypes) + private static Vector> generateSetOfSetOfPair(Type TA1, Vector otherPairTypes) { Vector> setofsetofpairs = new Vector>(); for(Type t : otherPairTypes) @@ -1228,7 +1059,8 @@ throws MatchException { if((P.TA2 instanceof RefType) == false || ((RefType)P.TA2).get_ParaList() == null) { - Vector greaters = greater(P.TA1,fc_tto); + Vector greaters = greater((ObjectType)P.TA1,fc_tto); + //Ist ObjectType weil P.OperatorSmaller, kann kein Wildcard sein //System.out.println(P.TA2.toString()); // "P.TA2.toString() != null" angefügt von Andreas Stadelmeier a10023 @@ -1408,36 +1240,41 @@ throws MatchException //erledigt 15-02-03 if(P.OperatorEqual()) { - - //PL 15-02-08 bisher mit keinem Beispiel getestet - if(P.TA1 instanceof WildcardType && ((WildcardType)P.TA1).GetWildcardType() instanceof TypePlaceholder - && (P.TA2 instanceof GenericTypeVar || P.TA2 instanceof RefType)) - { - H.add(new Pair(((WildcardType)P.TA1).GetWildcardType(),P.TA2, PairOperator.Equal)); - bRegel = true; - continue; - } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //PL 15-03-05: Ich halte dies fuer falsch + ////PL 15-02-08 bisher mit keinem Beispiel getestet + //if(P.TA1 instanceof WildcardType && ((WildcardType)P.TA1).GetWildcardType() instanceof TypePlaceholder + //&& (P.TA2 instanceof GenericTypeVar || P.TA2 instanceof RefType)) + //{ + //H.add(new Pair(((WildcardType)P.TA1).GetWildcardType(),P.TA2, PairOperator.Equal)); + //bRegel = true; + //continue; + //} //PL 15-02-08 bisher mit keinem Beispiel getestet - if((P.TA1 instanceof GenericTypeVar || P.TA1 instanceof RefType) - && (P.TA2 instanceof WildcardType && ((WildcardType)P.TA2).GetWildcardType() instanceof TypePlaceholder)) - { - H.add(new Pair(P.TA1, ((WildcardType)P.TA2).GetWildcardType(), PairOperator.Equal)); - bRegel = true; - continue; - } + //if((P.TA1 instanceof GenericTypeVar || P.TA1 instanceof RefType) + //&& (P.TA2 instanceof WildcardType && ((WildcardType)P.TA2).GetWildcardType() instanceof TypePlaceholder)) + //{ + //H.add(new Pair(P.TA1, ((WildcardType)P.TA2).GetWildcardType(), PairOperator.Equal)); + //bRegel = true; + //continue; + //} + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //wenn noetig extends-wildcards entfernen PL 15-02-03 //korrekt da P.OperatorEqual() - if(P.TA1 instanceof WildcardType) - { - P.TA1 = ((WildcardType)P.TA1).GetWildcardType(); - } - if(P.TA2 instanceof WildcardType) { - P.TA2 = ((WildcardType)P.TA2).GetWildcardType(); - } - + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //PL 15-03-05: Ich halte dies fuer falsch + //if(P.TA1 instanceof WildcardType) + //{ + //P.TA1 = ((WildcardType)P.TA1).GetWildcardType(); + //} + //if(P.TA2 instanceof WildcardType) { + //P.TA2 = ((WildcardType)P.TA2).GetWildcardType(); + //} + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + RefType TA1 = null; RefType TA2 = null; @@ -2230,7 +2067,7 @@ throws MatchException // ino.method.allGreater.29428.body { CRefTypeSet ret = new CRefTypeSet(); - Iterator typeIt = ty.getBounds().iterator(); + Iterator typeIt = ty.getBounds().iterator(); while(typeIt.hasNext()) { CRefTypeSet grBounds = new CRefTypeSet(); RefType act = (RefType)typeIt.next(); @@ -2943,12 +2780,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Vector TVec an. * Rückgabe ist ein Ergebnisvector */ - private static Vector CaptureConversion(Vector TVec, FC_TTO fc_tto) + private static Vector CaptureConversion(Vector TVec, FC_TTO fc_tto) { - Vector retVec = new Vector(); - for(Type t : TVec) + Vector retVec = new Vector(); + for(ObjectType t : TVec) { - Type ccT = CaptureConversion(t,fc_tto); + ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto); + //CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen. if(ccT != null) retVec.add(ccT); } @@ -3013,12 +2851,14 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: else return null; } + if(T instanceof WildcardType) { return ((WildcardType)T).GetFreshWildcardType(); } return null; - } +} + //Von hier an Greater implementierung 28-03-07 /** @@ -3030,12 +2870,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * Erzeugt alle Typen die greater sind als T. Gibt diese zurück. * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - private static Vector greater(Type T, FC_TTO fc_tto) + private static Vector greater(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 { - Vector retVec = new Vector(); - Vector greater0Erg = greater0(T,fc_tto); - for(Type t : greater0Erg) + Vector retVec = new Vector(); + Vector greater0Erg = greater0(T,fc_tto); + for(ObjectType t : greater0Erg) { if(!DelFreshWildcardTypeVar(t)) retVec.add(t); @@ -3046,31 +2886,31 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater0 Schritt von greater. */ - private static Vector greater0(Type T, FC_TTO fc_tto) + private static Vector greater0(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); //greater1 Erzeugen - Vector greater1Erg = greater1(T,fc_tto); + Vector greater1Erg = greater1(T,fc_tto); //Reflexivität, deshalb T hinzufügen. if(!greater1Erg.contains(T)) greater1Erg.add(T); //Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen. - for(Type t : greater1Erg) + for(ObjectType t : greater1Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen - Vector greater2Erg = greater2(greater1Erg,fc_tto); - for(Type t : greater2Erg) + Vector greater2Erg = greater2(greater1Erg,fc_tto); + for(ObjectType t : greater2Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen - Vector greater3Erg = greater3(greater2Erg,fc_tto); - for(Type t : greater3Erg) + Vector greater3Erg = greater3(greater2Erg,fc_tto); + for(ObjectType t : greater3Erg) if(!retVec.contains(t)) retVec.add(t); @@ -3081,9 +2921,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * greater1 Schritt von greater. * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - private static Vector greater1(Type T, FC_TTO fc_tto) + private static Vector greater1(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); if(T instanceof RefType) { RefType refT = (RefType)T; @@ -3110,8 +2950,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: else if(T instanceof BoundedGenericTypeVar) //PL 15-02-03 angefuegt da BGTV Kleiner als alle seine Bounds ist { BoundedGenericTypeVar bgtv = (BoundedGenericTypeVar)T; - Vector types = bgtv.getBounds(); - retVec = types.stream().map(ty -> greater(ty, fc_tto)).reduce(new Vector(), (a,b) -> { a.addAll(b); return a;}); + Vector types = bgtv.getBounds(); + retVec = types.stream().map(ty -> greater(ty, fc_tto)).reduce(new Vector(), (a,b) -> { a.addAll(b); return a;}); } return retVec; } @@ -3205,11 +3045,10 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } return retVec; } - /** * Kopiert einen Vector. Es ist eine Deep Copy, da die Elemente auch kopiert werden. */ - private static Vector copyVectorType(Vector vec) + private static Vector copyVectorType(Vector vec) { Vector retVec = new Vector(); for(Type t : vec) @@ -3218,6 +3057,19 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return retVec; } + /** + * Kopiert einen Vector. Es ist eine Deep Copy, da die Elemente auch kopiert werden. + * noetig wegen Type-Erasure + */ + private static Vector copyVectorObjectType(Vector vec) + { + Vector retVec = new Vector(); + for(ObjectType t : vec) + retVec.add(t.clone()); + + return retVec; + } + /** * greaterArg Schritt von greater * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt @@ -3229,18 +3081,22 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Bei einer ExtendsWildcard Rekursiv greater0 aufrufen und neue ExtendsWildcars erzeugen ExtendsWildcardType exT = (ExtendsWildcardType)T; - Vector greaterTypes = greater0(exT.get_ExtendsType(),fc_tto); - for(Type t : greaterTypes) + Vector greaterTypes = greater0(exT.get_ExtendsType(),fc_tto); + for(ObjectType t : greaterTypes) retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); } else if(T instanceof SuperWildcardType) { //Bei einer SuperWildcard Rekursiv smaller0 aufrufen und neue SuperWildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; - Vector smallerTypes = smaller0(suT.get_SuperType(),fc_tto); - for(Type t : smallerTypes) + Vector smallerTypes = smaller0(suT.get_SuperType(),fc_tto); + for(ObjectType t : smallerTypes) retVec.add(new SuperWildcardType(t.getOffset(),t.clone())); } + + /* PL 15-03-10 + * Kann meiner Ansicht nach nicht vorkommen + else if(T instanceof FreshExtendsWildcardType) { //Bei einer FreshExtendsWildcard greaterArg aufrufen, auf Bounds achten. @@ -3269,23 +3125,25 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } } else if(T instanceof FreshSuperWildcardType) - return new Vector(); + return new Vector(); + */ + //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 else if(T instanceof TypePlaceholder) retVec.add(T); //Diese Abfrage verhindert, dass bei FunN Wildcard-Typen generiert werden //PL 13-05-22 else if((T instanceof RefType) && (T.getName().equals("FunN"))) retVec.add(T); - else + else //RefType oder GTV { //Bei allen anderen Typen greater0 und smaller0 aufrufen. - retVec.add(T); - Vector greaterTypes = greater0(T,fc_tto); - Vector smallerTypes = smaller0(T,fc_tto); - for(Type t : greaterTypes) + retVec.add((ObjectType)T); + Vector greaterTypes = greater0((ObjectType)T,fc_tto); + Vector smallerTypes = smaller0((ObjectType)T,fc_tto); + for(ObjectType t : greaterTypes) retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); - for(Type t : smallerTypes) + for(ObjectType t : smallerTypes) retVec.add(new SuperWildcardType(t.getOffset(),t.clone())); } return retVec; @@ -3294,9 +3152,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater2 Schritt von greater */ - private static Vector greater2(Vector greater1Erg, FC_TTO fc_tto) + private static Vector greater2(Vector greater1Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); /* * luar 02-05-07: Beschreibung der Funktion: * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. @@ -3339,13 +3197,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater3 Schritt von greater */ - private static Vector greater3(Vector greater2Erg, FC_TTO fc_tto) + private static Vector greater3(Vector greater2Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); - for(Type t : greater2Erg) + Vector retVec = new Vector(); + for(ObjectType t : greater2Erg) { - Vector greater1Erg = greater1(t,fc_tto); - for(Type tt : greater1Erg) + Vector greater1Erg = greater1(t,fc_tto); + for(ObjectType tt : greater1Erg) if(!retVec.contains(tt)) retVec.add(tt); } @@ -3361,12 +3219,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. */ - private static Vector smaller(Type T, FC_TTO fc_tto) + private static Vector smaller(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 { - Vector retVec = new Vector(); - Vector smaller0Erg = smaller0(T,fc_tto); - for(Type t : smaller0Erg) + Vector retVec = new Vector(); + Vector smaller0Erg = smaller0(T,fc_tto); + for(ObjectType t : smaller0Erg) { if(!DelFreshWildcardTypeVar(t)) retVec.add(t); @@ -3377,16 +3235,18 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller0 Schritt von smaller */ - private static Vector smaller0(Type T, FC_TTO fc_tto) + private static Vector smaller0(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); - Vector smaller1Erg = smaller1(T,fc_tto); - Vector smaller2Erg = smaller2(smaller1Erg,fc_tto); + Vector smaller1Erg = smaller1(T,fc_tto); + + + Vector smaller2Erg = smaller2(smaller1Erg,fc_tto); //Unite von smaller 1 und 2 bilden, um dies an smaller 3 weiterzugeben. - Vector smaller12Erg = copyVectorType(smaller1Erg); - for(Type t : smaller2Erg) + Vector smaller12Erg = copyVectorObjectType(smaller1Erg); + for(ObjectType t : smaller2Erg) if(!smaller12Erg.contains(t)) smaller12Erg.add(t); @@ -3394,19 +3254,19 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: smaller12Erg.add(T); //Ergebnise in retVec einfügen. Doppelte werden gelöscht. - for(Type t : smaller12Erg) + for(ObjectType t : smaller12Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. - Vector smaller3Erg = smaller3(smaller12Erg,fc_tto); - for(Type t : smaller3Erg) + Vector smaller3Erg = smaller3(smaller12Erg,fc_tto); + for(ObjectType t : smaller3Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. - Vector smaller4Erg = smaller4(smaller3Erg); - for(Type t : smaller4Erg) + Vector smaller4Erg = smaller4(smaller3Erg); + for(ObjectType t : smaller4Erg) if(!retVec.contains(t)) retVec.add(t); @@ -3416,9 +3276,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller1 Schritt von smaller */ - private static Vector smaller1(Type T, FC_TTO fc_tto) + private static Vector smaller1(Type T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); if(T instanceof RefType) { RefType refT = (RefType)T; @@ -3455,8 +3315,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. ExtendsWildcardType exT = (ExtendsWildcardType)T; - Vector smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); - for(Type t : smallerTypes) + Vector smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); + for(ObjectType t : smallerTypes) { retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); retVec.add(t.clone()); @@ -3466,8 +3326,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; - Vector greaterTypes = greater0(suT.get_SuperType(),fc_tto); - for(Type t : greaterTypes) + Vector greaterTypes = greater0(suT.get_SuperType(),fc_tto); + for(ObjectType t : greaterTypes) { retVec.add(new SuperWildcardType(-1,t.clone())); retVec.add(t.clone()); @@ -3490,7 +3350,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller2 Schritt von smaller */ - private static Vector smaller2(Vector smaller1Erg, FC_TTO fc_tto) + private static Vector smaller2(Vector smaller1Erg, FC_TTO fc_tto) { return CaptureConversion(smaller1Erg,fc_tto); } @@ -3498,9 +3358,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller3 Schritt von smaller */ - private static Vector smaller3(Vector smaller12Erg, FC_TTO fc_tto) + private static Vector smaller3(Vector smaller12Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Vector retVec = new Vector(); /* * luar 02-05-07: Beschreibung der Funktion: * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. @@ -3541,14 +3401,14 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller4 Schritt von smaller */ - private static Vector smaller4(Vector smallerErg) + private static Vector smaller4(Vector smallerErg) { /* smaller4 ist die inverse CaptureConversion. * Alle Typen in smallerErg werden durchlaufen, und evtl. gefundene * FreshWildcardTypes werden durch die entsprechenden Wildcards ersetzt. * */ - Vector retVec = new Vector(); - for(Type t : smallerErg) + Vector retVec = new Vector(); + for(ObjectType t : smallerErg) { if(t instanceof RefType) { From 40bfc79948f15db4e2562aaa810260d128068d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 10 Mar 2015 22:48:29 +0100 Subject: [PATCH 069/186] ObjectType als Supertype von RefType, GTV und TPH eingefuegt, einige Fehler muessen noch geloest werden --- .../syntaxtree/type/FreshExtendsWildcardType.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java index eda214ec..1a5c2447 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java @@ -4,13 +4,13 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; public class FreshExtendsWildcardType extends FreshWildcardType implements IMatchable { - private Type extendsBoundType; + private ObjectType extendsBoundType; /** * Author: Arne Lüdtke
* Standard Konstruktor für eine FreshExtendsWildcard */ - public FreshExtendsWildcardType(Type extendsBound,SyntaxTreeNode parent ,int offset) + public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset) { super(parent,offset); this.extendsBoundType = extendsBound; @@ -20,7 +20,7 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc * Author: Arne Lüdtke
* Privater Konstruktor für clone */ - private FreshExtendsWildcardType(Type extendsBound ,SyntaxTreeNode parent,int offset, String name) + private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name) { super(parent,offset,name); this.extendsBoundType = extendsBound; @@ -53,7 +53,7 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc * Author: Arne Lüdtke
* Gibt die Grenze der Wildcard zurück */ - public Type get_ExtendsBound() + public ObjectType get_ExtendsBound() { return extendsBoundType; } From 3b258c3880413c4d27b0340ed7c4081f2c6ecd61 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 11 Mar 2015 11:54:42 +0100 Subject: [PATCH 070/186] Object Type implementieren --- .../parser/BoundedClassIdentifierList.java | 7 ++++--- src/de/dhbwstuttgart/parser/JavaParser.java | 2 +- src/de/dhbwstuttgart/parser/JavaParser.jay | 2 +- .../syntaxtree/statement/LambdaExpression.java | 9 +++++++-- .../syntaxtree/type/BoundedGenericTypeVar.java | 2 +- .../syntaxtree/type/ExtendsWildcardType.java | 3 ++- .../GenericParaListInsertTest2.jav | 3 +++ .../GenericParaListInsertTest2.java | 16 ++++++++++++++++ .../TypeInsertTests/GenericTypeVarTest2.java | 17 +++++++++++++++++ 9 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java create mode 100644 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java diff --git a/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java b/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java index 6a41d80d..844f6ee6 100644 --- a/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java +++ b/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java @@ -2,15 +2,16 @@ package de.dhbwstuttgart.parser; import java.util.Vector; +import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -public class BoundedClassIdentifierList extends Vector{ +public class BoundedClassIdentifierList extends Vector{ private int endOffset; - private Vector list; + private Vector list; - public BoundedClassIdentifierList(Vector list, int endOffset){ + public BoundedClassIdentifierList(Vector list, int endOffset){ this.endOffset = endOffset; this.addAll(list); } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 69f95ed5..c62303e2 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -1561,7 +1561,7 @@ case 110: case 111: // line 990 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Vector vec=new Vector(); + Vector vec=new Vector(); vec.addElement(((RefType)yyVals[0+yyTop])); containedTypes.addElement(((RefType)yyVals[0+yyTop])); yyVal=new BoundedClassIdentifierList(vec, ((RefType)yyVals[0+yyTop]).getOffset()+((RefType)yyVals[0+yyTop]).getName().toString().length()); diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index fbce3875..96b4facf 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -988,7 +988,7 @@ boundedMethodParameter : IDENTIFIER // returns Vector boundedclassidentifierlist : referencetype { - Vector vec=new Vector(); + Vector vec=new Vector(); vec.addElement($1); containedTypes.addElement($1); $$=new BoundedClassIdentifierList(vec, $1.getOffset()+$1.getName().toString().length()); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 144d1278..57af4a02 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -152,19 +152,24 @@ public class LambdaExpression extends Expr{ //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression + //TODO: OderConstraint erstellen mit normalem Typ und ? extemds/super Type //Die Typen innerhalb von FunN anpassen: Vector superParamTypes = new Vector<>(); for(Type pT : paramTypes){ if(pT instanceof ObjectType){ superParamTypes.add(new SuperWildcardType(pT.getOffset(), (ObjectType) pT)); - }else{ + }else{ //pT ist weder Void noch ein ObjectType (TPH, GTV, RefType) superParamTypes.add(pT); } } Type retType = method_body.getType(); Type extRetType = retType; if(!(retType instanceof de.dhbwstuttgart.syntaxtree.type.Void)){ - extRetType = new ExtendsWildcardType(retType.getOffset(), retType); + if(retType instanceof ObjectType){ + extRetType = new ExtendsWildcardType(retType.getOffset(), (ObjectType) retType); + }else{ //retType ist weder Void noch ein ObjectType (TPH, GTV, RefType) + extRetType = retType; + } } ret.add(new SingleConstraint(new FunN(extRetType, superParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index cc284edc..87f4616c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -94,7 +94,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar ConstraintType extendsType = ass.getTypeFor(ev, this); if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); - ??? stimmt der Cast??? + //TODO: ??? stimmt der Cast??? tempBounds.add((ObjectType)extendsType.getType()); //ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 69cb4e6f..5790a29a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -152,7 +152,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - this.extendsType = this.extendsType.TYPE(ass, parent).getType(); + //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. + this.extendsType = (ObjectType) this.extendsType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } } diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.jav b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.jav new file mode 100644 index 00000000..d42042c9 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.jav @@ -0,0 +1,3 @@ +class GenericParaListInsertTest{ + A methode(a){return a;} +} diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java new file mode 100644 index 00000000..8a706d8e --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenericParaListInsertTest2 { + private static final String TEST_FILE = "GenericParaListInsertTest2.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + mustContain.add("<"); //Es muss eine Parameterliste generiert werden. + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java new file mode 100644 index 00000000..cbeae139 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java @@ -0,0 +1,17 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class GenericTypeVarTest2 { + + private static final String TEST_FILE2 = "GenericTypeVarTest2.jav"; + + @Test + public void run2(){ + Vector mustContain = new Vector(); + mustContain.add("String var2"); + MultipleTypesInsertTester.test(TEST_FILE2, mustContain); + } +} From 7f2d64e73bd91c9c37e608108d2afdcd1262c7ef Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 11 Mar 2015 12:39:08 +0100 Subject: [PATCH 071/186] =?UTF-8?q?=C3=84nderung=20an=20der=20Constraint?= =?UTF-8?q?=20Erstellung=20f=C3=BCr=20LambdaExpressions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/documentation.md | 11 ++++++++ .../statement/LambdaExpression.java | 27 +++++++------------ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/doc/documentation.md b/doc/documentation.md index 74c5add5..1609c390 100644 --- a/doc/documentation.md +++ b/doc/documentation.md @@ -40,6 +40,17 @@ Die einzusetzenden Generischen Variablen werden erst beim Einsetzen eines Typs g * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. +## Lambda Ausdrücke und FunN +### Erstellen der Typconstraints für einen Lambda Ausdruck +* Return-Type des Lambda Ausdrucks: retT +* Parameter Typen: pT1 ... pTN +* Für jeden Typ einen TPH generieren + * für Return Typ: TPH R + * für Parameter Typen: TPH P1 ... TPH PN +* Es gilt: + * TPH R < retT + * pTN < TPH PN + ## Ablauf Typinferenz: 1. Parsen diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 57af4a02..132fa399 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -152,27 +152,20 @@ public class LambdaExpression extends Expr{ //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression - //TODO: OderConstraint erstellen mit normalem Typ und ? extemds/super Type - //Die Typen innerhalb von FunN anpassen: - Vector superParamTypes = new Vector<>(); + //Die Constraints für ParameterTypen und Ret Typ erstellen: + Vector tphParamTypes = new Vector<>(); for(Type pT : paramTypes){ - if(pT instanceof ObjectType){ - superParamTypes.add(new SuperWildcardType(pT.getOffset(), (ObjectType) pT)); - }else{ //pT ist weder Void noch ein ObjectType (TPH, GTV, RefType) - superParamTypes.add(pT); - } + TypePlaceholder tph = TypePlaceholder.fresh(this); + tphParamTypes.add(tph); + // PN < TPH PN + ret.add(new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this))); } Type retType = method_body.getType(); - Type extRetType = retType; - if(!(retType instanceof de.dhbwstuttgart.syntaxtree.type.Void)){ - if(retType instanceof ObjectType){ - extRetType = new ExtendsWildcardType(retType.getOffset(), (ObjectType) retType); - }else{ //retType ist weder Void noch ein ObjectType (TPH, GTV, RefType) - extRetType = retType; - } - } + Type tphRetType = TypePlaceholder.fresh(this); + // PN < TPH PN + ret.add(new SingleConstraint(retType.TYPE(assumptions, this), tphRetType.TYPE(assumptions, this))); - ret.add(new SingleConstraint(new FunN(extRetType, superParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); + ret.add(new SingleConstraint(new FunN(tphRetType, tphParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; } From 8cc1c79c671d2c25a3c1073be759164da1d1885f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Wed, 11 Mar 2015 16:36:05 +0100 Subject: [PATCH 072/186] ? ext Ty <. TPH in Unify eingefuegt --- .../typeinference/unify/Unify.java | 72 +++++++++++++------ 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 3b6d00c1..69b15d40 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -445,10 +445,25 @@ public class Unify { if(p.OperatorSmaller()) { - //5. Menge - //Greater auf den Typen bilden, und mit den Ergebnissen neue Paare bilden. - Vector grErg = greater((ObjectType)p.TA1,fc_tto); - cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); + if (p.TA1 instanceof ObjectType) { + //5. Menge + //Greater auf den Typen bilden, und mit den Ergebnissen neue Paare bilden. + Vector grErg = greater((ObjectType)p.TA1,fc_tto); + cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); + } + else if (p.TA1 instanceof ExtendsWildcardType) { // eingefuegt 15-3-11 PL + Vector grErg1 = greater(((ExtendsWildcardType)p.TA1).getContainedType(),fc_tto); + Vector grErg2 = grErg1.stream().map(ty -> new SuperWildcardType(ty.getOffset(), ty.clone())).collect(Vector::new, Vector::add, Vector::addAll); + Vector grErg = new Vector<>(); + grErg.addAll(grErg1); + grErg.addAll(grErg2); + cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); + } + else if (p.TA1 instanceof SuperWildcardType) {// eingefuegt 15-3-11 PL + Vector erg = new Vector<> (); + erg.addElement(p.TA1); + cartProduktSets.add(generateSetOfSetOfPair(p.TA2,erg)); + } } else if(p.OperatorSmallerExtends()) { @@ -1055,25 +1070,38 @@ throws MatchException // ERASE1 luar 15-04-07 if(P.OperatorSmaller()) { - if((P.TA1 instanceof RefType) == false || ((RefType)P.TA1).get_ParaList() == null) - { - if((P.TA2 instanceof RefType) == false || ((RefType)P.TA2).get_ParaList() == null) - { - Vector greaters = greater((ObjectType)P.TA1,fc_tto); - //Ist ObjectType weil P.OperatorSmaller, kann kein Wildcard sein - - //System.out.println(P.TA2.toString()); - // "P.TA2.toString() != null" angefügt von Andreas Stadelmeier a10023 - if(P.TA2.toString() != null && greaters.contains(P.TA2)) - { - inferencelog.debug(" ================================"); - inferencelog.debug(" ERASE1"); - inferencelog.debug(" ================================"); - bRegel = true; - continue; - } - } + if (P.TA1 instanceof ObjectType) { + Vector greaters = greater((ObjectType)P.TA1,fc_tto); + if (greaters.contains(P.TA2)) + { + inferencelog.debug(" ================================"); + inferencelog.debug(" ERASE1 ObjectType"); + inferencelog.debug(" ================================"); + bRegel = true; + continue; + } } + else if (P.TA1 instanceof ExtendsWildcardType) { + ObjectType pta1 = ((ExtendsWildcardType)P.TA1).getContainedType(); + Vector greaters = greater((ObjectType)pta1,fc_tto); + if (greaters.contains(P.TA2)) + { + inferencelog.debug(" ================================"); + inferencelog.debug(" ERASE1 ExtendsWildcardType"); + inferencelog.debug(" ================================"); + bRegel = true; + continue; + } + } + } + else if (P.TA1 instanceof SuperWildcardType) { + if( P.isEqual()) { + inferencelog.debug(" ================================"); + inferencelog.debug(" ERASE1 SuperWildcardType"); + inferencelog.debug(" ================================"); + bRegel = true; + continue; + } } //ERASE2 luar 15-04-07 if(P.OperatorSmallerExtends()) From 2c6bce344db76457f4ba2a371a0e6d04e334403c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 12 Mar 2015 12:27:43 +0100 Subject: [PATCH 073/186] TYPE erstellt bei LambdaExpression nun zwei constraints, falls die Parameter/RetType nicht vom Typ ? extends sind. Dann werden die Constraints einmal mit dem eigentlichen Typ T und einem ? extends/super T -Typ generiert --- .../statement/LambdaExpression.java | 26 +++++++++++++++++-- .../TypeInsertTests/BoundedGenericTest.jav | 4 +-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 132fa399..055f8041 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -22,9 +22,11 @@ import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.SingleConstraint; import de.dhbwstuttgart.typeinference.Typeable; @@ -158,12 +160,32 @@ public class LambdaExpression extends Expr{ TypePlaceholder tph = TypePlaceholder.fresh(this); tphParamTypes.add(tph); // PN < TPH PN - ret.add(new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this))); + if(pT instanceof WildcardType){ + ret.add(new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this))); + }else{ + OderConstraint orCons = new OderConstraint(); + SuperWildcardType superpT = new SuperWildcardType(pT.getOffset(), (ObjectType) pT); + SingleConstraint cons1 = new SingleConstraint(tph.TYPE(assumptions, this), superpT.TYPE(assumptions, this)); + SingleConstraint cons2 = new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this)); + orCons.addConstraint(cons1); + orCons.addConstraint(cons2); + ret.add(orCons); + } } Type retType = method_body.getType(); Type tphRetType = TypePlaceholder.fresh(this); // PN < TPH PN - ret.add(new SingleConstraint(retType.TYPE(assumptions, this), tphRetType.TYPE(assumptions, this))); + if(retType instanceof WildcardType){ + ret.add(new SingleConstraint(retType.TYPE(assumptions, this), tphRetType.TYPE(assumptions, this))); + }else{ + OderConstraint orCons = new OderConstraint(); + SuperWildcardType superretType = new SuperWildcardType(retType.getOffset(), (ObjectType) retType); + SingleConstraint cons1 = new SingleConstraint(tphRetType.TYPE(assumptions, this), superretType.TYPE(assumptions, this)); + SingleConstraint cons2 = new SingleConstraint(tphRetType.TYPE(assumptions, this), retType.TYPE(assumptions, this)); + orCons.addConstraint(cons1); + orCons.addConstraint(cons2); + ret.add(orCons); + } ret.add(new SingleConstraint(new FunN(tphRetType, tphParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav index 68703a12..2fbcc715 100755 --- a/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav +++ b/test/plugindevelopment/TypeInsertTests/BoundedGenericTest.jav @@ -1,6 +1,6 @@ -class BoundedGenericTest
{ +class BoundedGenericTest{ var = "test"; - B methode(){ + methode(){ return var; } } \ No newline at end of file From 385423092ab55933029a39e47ba59cbd829ee277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Thu, 12 Mar 2015 12:29:54 +0100 Subject: [PATCH 074/186] Fuer TPH <. Ty' hinzugefuegt: ? ext Ty <. Ty' --- .../typeinference/unify/Unify.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 69b15d40..153fa353 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -226,10 +226,11 @@ public class Unify smaller1elemente = smaller0(p_fc_TA1_new, fc_tto); //Von Menge 2 kopiert und smaller1 durch smaller0 ersetzt, Luar 07-08-08 } - for(Type smele : smaller1elemente) + for(ObjectType smele : smaller1elemente) { smallers.add(smele); - //smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); //Auskommentiert luar 07-08-08 + smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); //Auskommentiert luar 07-08-08 + //wieder einkommentiert PL 15-03-11 } //Ende @@ -278,14 +279,16 @@ public class Unify //aus {ty <. ty'} {? extends ty <. ty'} erzeugen //angefuegt PL 15-03-03 //DIES IST NICHT RICHTIG GETESTET, ES KOENNTE SEIN, DASS DAS KART. PRODUKT FALSCH GEBILDET WIRD. - Stream> strextergMenge1 = - ergMenge1.stream().map(v -> - v.stream().map(pa -> - new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), (ObjectType)pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) - ).collect(Vector::new, Vector::add, Vector::addAll)); - - Vector> extergMenge1 = strextergMenge1.collect(Vector::new, Vector::add, Vector::addAll); - ergMenge1.addAll(extergMenge1); + //DIES MUEESTE DURCH smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); weiter ober erledigt sein. + //PL 15-03-11 + //Stream> strextergMenge1 = +// ergMenge1.stream().map(v -> +// v.stream().map(pa -> +// new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), (ObjectType)pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) +// ).collect(Vector::new, Vector::add, Vector::addAll)); +// +// Vector> extergMenge1 = strextergMenge1.collect(Vector::new, Vector::add, Vector::addAll); +// ergMenge1.addAll(extergMenge1); cartProduktSets.add(ergMenge1); } else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) From b2f742033b5a0b04e4bc0b91b156ee531f69e97b Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 31 Mar 2015 12:37:45 +0200 Subject: [PATCH 075/186] =?UTF-8?q?Aufr=C3=A4umen:=20Statt=20getTypeFor=20?= =?UTF-8?q?wird=20nun=20nur=20noch=20TYPE=20aufgerufen.=20Die=20Constraint?= =?UTF-8?q?bildung=20in=20der=20LambdaExpression=20wurde=20ge=C3=A4ndert.?= =?UTF-8?q?=20Siehe=20Bug=20#12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/parser/JavaParser.java | 2 +- src/de/dhbwstuttgart/parser/JavaParser.jay | 2 +- .../syntaxtree/operator/AddOp.java | 10 ++--- .../syntaxtree/operator/LogOp.java | 2 +- .../syntaxtree/operator/MulOp.java | 8 ++-- .../syntaxtree/operator/RelOp.java | 8 ++-- .../syntaxtree/statement/IfStmt.java | 2 +- .../statement/LambdaExpression.java | 40 ++++++++----------- .../syntaxtree/statement/NotExpr.java | 2 +- .../syntaxtree/statement/WhileStmt.java | 2 +- .../type/BoundedGenericTypeVar.java | 2 +- .../syntaxtree/type/ExtendsWildcardType.java | 27 +++++++------ .../syntaxtree/type/FreshWildcardType.java | 2 +- .../syntaxtree/type/SuperWildcardType.java | 37 ++++++++--------- .../syntaxtree/type/TypePlaceholder.java | 11 ++++- .../syntaxtree/type/WildcardType.java | 14 ++++++- .../assumptions/TypeAssumptions.java | 3 +- .../typeinference/unify/FC_TTO.java | 4 +- .../TypeInsertTests/LambdaTest27.jav | 17 ++++++++ .../TypeInsertTests/LambdaTest27.java | 18 +++++++++ 20 files changed, 131 insertions(+), 82 deletions(-) create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest27.jav create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest27.java diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index c62303e2..a90acd91 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -1038,7 +1038,7 @@ case 42: // line 535 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Luar 29.11.06 Offset auf -1, da keine Angabe vorhanden*/ - WildcardType wc = new WildcardType(null,-1); + WildcardType wc = new WildcardType(null,null,-1); yyVal = wc; } break; diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 96b4facf..7d6874b0 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -534,7 +534,7 @@ paralist : IDENTIFIER wildcardparameter : '?' { //Luar 29.11.06 Offset auf -1, da keine Angabe vorhanden - WildcardType wc = new WildcardType(null,-1); + WildcardType wc = new WildcardType(null,null,-1); $$ = wc; } | '?' EXTENDS referencetype diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java index dc4bedbe..419061f1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java @@ -62,11 +62,11 @@ public abstract class AddOp extends Operator @Override public HashMap getReturnTypes(TypeAssumptions ass) { HashMap ret = new HashMap(); - ret.put(ass.getTypeFor(new RefType("java.lang.Integer",this,-1), this), ass.getTypeFor(new RefType("java.lang.Integer",this,-1),this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Double",this,-1), this), ass.getTypeFor(new RefType("java.lang.Double",this,-1),this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Float",this,-1), this), ass.getTypeFor(new RefType("java.lang.Float",this,-1),this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Long",this,-1), this), ass.getTypeFor(new RefType("java.lang.Long",this,-1),this)); - ret.put(ass.getTypeFor(new RefType("java.lang.String",this,-1),this), ass.getTypeFor(new RefType("java.lang.String",this,-1),this)); + ret.put(new RefType("java.lang.Integer",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Double",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Float",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Long",this,-1).TYPE(ass, this), new RefType("java.lang.Long",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.String",this,-1).TYPE(ass, this), new RefType("java.lang.String",this,-1).TYPE(ass, this)); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java index ce80cd9b..7b2953ab 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java @@ -232,7 +232,7 @@ public abstract class LogOp extends Operator @Override public HashMap getReturnTypes(TypeAssumptions ass) { HashMap ret = new HashMap<>(); - ret.put(ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this), ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this)); + ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Boolean",this,-1).TYPE(ass, this)); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java index e3b37f08..34ca0f7e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java @@ -43,10 +43,10 @@ public abstract class MulOp extends Operator @Override public HashMap getReturnTypes(TypeAssumptions ass) { HashMap ret = new HashMap<>(); - ret.put(ass.getTypeFor(new RefType("java.lang.Integer",this,-1), this), ass.getTypeFor(new RefType("java.lang.Integer",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Double",this,-1), this), ass.getTypeFor(new RefType("java.lang.Double",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Float",this,-1), this), ass.getTypeFor(new RefType("java.lang.Float",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Long",this,-1), this), ass.getTypeFor(new RefType("java.lang.Long",this,-1), this)); + ret.put(new RefType("java.lang.Integer",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Double",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Float",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Long",this,-1).TYPE(ass, this), new RefType("java.lang.Long",this,-1).TYPE(ass, this)); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java index c0718774..43fb132d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java @@ -54,10 +54,10 @@ public abstract class RelOp extends Operator @Override public HashMap getReturnTypes(TypeAssumptions ass) { HashMap ret = new HashMap<>(); - ret.put(ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this), ass.getTypeFor(new RefType("java.lang.Integer",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this), ass.getTypeFor(new RefType("java.lang.Double",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this), ass.getTypeFor(new RefType("java.lang.Float",this,-1), this)); - ret.put(ass.getTypeFor(new RefType("java.lang.Boolean",this,-1), this), ass.getTypeFor(new RefType("java.lang.Long",this,-1), this)); + ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); + ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Long",this,-1).TYPE(ass, this)); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 8b8ae046..4541f13c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -258,7 +258,7 @@ public class IfStmt extends Statement ret.add(this.else_block.TYPEStmt(assumptions)); if(!(else_block.getType() instanceof Void))ret.add(new SingleConstraint(else_block.getType().TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); } - ret.add(new SingleConstraint(expr.getType().TYPE(assumptions, this),assumptions.getTypeFor(new RefType("Boolean",this,0), this))); //(expressionDesIfStmt)<.boolean + ret.add(new SingleConstraint(expr.getType().TYPE(assumptions, this),new RefType("Boolean",this,0).TYPE(assumptions, this))); //(expressionDesIfStmt)<.boolean if(!(then_block.getType() instanceof Void))ret.add(new SingleConstraint(then_block.getType().TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); if(then_block.getType() instanceof Void && (else_block == null || else_block.getType() instanceof Void))this.setType(new Void(this,this.getOffset())); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 055f8041..7976481a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -155,39 +155,33 @@ public class LambdaExpression extends Expr{ ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression //Die Constraints für ParameterTypen und Ret Typ erstellen: - Vector tphParamTypes = new Vector<>(); + Vector modifiedParamTypes = new Vector<>(); for(Type pT : paramTypes){ - TypePlaceholder tph = TypePlaceholder.fresh(this); - tphParamTypes.add(tph); - // PN < TPH PN if(pT instanceof WildcardType){ - ret.add(new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this))); + //Auf Typfehler kontrollieren. Siehe Bug #12 Kommentar 3 + if(pT instanceof ExtendsWildcardType){ + throw new TypeinferenceException("Typfehler von Parametertyp "+pT,this); + }else{ + modifiedParamTypes.add(pT); + } }else{ - OderConstraint orCons = new OderConstraint(); - SuperWildcardType superpT = new SuperWildcardType(pT.getOffset(), (ObjectType) pT); - SingleConstraint cons1 = new SingleConstraint(tph.TYPE(assumptions, this), superpT.TYPE(assumptions, this)); - SingleConstraint cons2 = new SingleConstraint(tph.TYPE(assumptions, this), pT.TYPE(assumptions, this)); - orCons.addConstraint(cons1); - orCons.addConstraint(cons2); - ret.add(orCons); + modifiedParamTypes.add(new SuperWildcardType((ObjectType) pT)); } } Type retType = method_body.getType(); - Type tphRetType = TypePlaceholder.fresh(this); // PN < TPH PN if(retType instanceof WildcardType){ - ret.add(new SingleConstraint(retType.TYPE(assumptions, this), tphRetType.TYPE(assumptions, this))); - }else{ - OderConstraint orCons = new OderConstraint(); - SuperWildcardType superretType = new SuperWildcardType(retType.getOffset(), (ObjectType) retType); - SingleConstraint cons1 = new SingleConstraint(tphRetType.TYPE(assumptions, this), superretType.TYPE(assumptions, this)); - SingleConstraint cons2 = new SingleConstraint(tphRetType.TYPE(assumptions, this), retType.TYPE(assumptions, this)); - orCons.addConstraint(cons1); - orCons.addConstraint(cons2); - ret.add(orCons); + //Auf Typfehler kontrollieren. Siehe Bug #12 Kommentar 3 + if(retType instanceof SuperWildcardType){ + throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this); + }else{ + //retType bleibt unverändert + } + }else{ + retType = new ExtendsWildcardType((ObjectType) retType); } - ret.add(new SingleConstraint(new FunN(tphRetType, tphParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); + ret.add(new SingleConstraint(new FunN(retType, modifiedParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index e859441e..d318c9da 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -145,7 +145,7 @@ public class NotExpr extends UnaryExpr public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); OderConstraint constraint = new OderConstraint(); - constraint.addConstraint(this.getType().TYPE(assumptions, this), assumptions.getTypeFor(new RefType("Boolean",this,-1),this)); + constraint.addConstraint(this.getType().TYPE(assumptions, this), new RefType("Boolean",this,-1).TYPE(assumptions, this)); ret.add(constraint); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 8d1e0ddc..13a2ace4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -165,7 +165,7 @@ public class WhileStmt extends Statement public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); ret.add(expr.TYPEExpr(assumptions)); - SingleConstraint exprMustBeBool = new SingleConstraint(expr.getType().TYPE(assumptions, this), assumptions.getTypeFor(new RefType("Boolean",this, 0), this)); // while(expr){}; expr <. boolean + SingleConstraint exprMustBeBool = new SingleConstraint(expr.getType().TYPE(assumptions, this), new RefType("Boolean",this, 0).TYPE(assumptions, this)); // while(expr){}; expr <. boolean ret.add(exprMustBeBool); ret.add(this.loop_block.TYPEStmt(assumptions)); this.setType(loop_block.getType()); diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index 87f4616c..15bee03a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -91,7 +91,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar Vector tempBounds = new Vector<>(); if(this.bounds != null){ for(ObjectType ev : this.bounds){ - ConstraintType extendsType = ass.getTypeFor(ev, this); + ConstraintType extendsType = ev.TYPE(ass, this); if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); //TODO: ??? stimmt der Cast??? diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 5790a29a..7ab8e5e6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -20,19 +20,20 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{ - private ObjectType extendsType = null; - /** * Author: Arne Lüdtke
* Standard Konstruktor für eine ExtendsWildcard */ public ExtendsWildcardType (int offset, ObjectType extendsType) { - super(extendsType.getParent(), offset); - this.extendsType = extendsType; + super(extendsType, extendsType.getParent(), offset); this.name = new JavaClassName(this.toString()); } + public ExtendsWildcardType(ObjectType extendsType) { + this(extendsType.getOffset(),extendsType); + } + /** * Author: Arne Lüdtke
* Gibt den Typen in der Wildcard zurück. @@ -41,7 +42,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, */ public ObjectType get_ExtendsType() { - return this.extendsType; + return this.innerType; } /** @@ -50,7 +51,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, */ public String toString() { - return "? extends " + extendsType.toString(); + return "? extends " + innerType.toString(); } /** @@ -61,7 +62,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, public ExtendsWildcardType clone() { //Hier ist unklar, ob der Extends Type auch geklont werden muss. - return new ExtendsWildcardType(getOffset(),extendsType.clone()); + return new ExtendsWildcardType(getOffset(),innerType.clone()); } /** @@ -88,7 +89,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, */ public FreshExtendsWildcardType GetFreshWildcardType() { - return new FreshExtendsWildcardType(this.extendsType,this.getParent(),-1); + return new FreshExtendsWildcardType(this.innerType,this.getParent(),-1); } /** @@ -109,7 +110,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, public void SetWildcardType(ObjectType T) { //if(T instanceof RefType) - this.extendsType = (RefType)T; + this.innerType = (RefType)T; } /** @@ -134,26 +135,26 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, @Override public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("? extends "+this.extendsType.printJavaCode(resultSet)); + return new JavaCodeResult("? extends "+this.innerType.printJavaCode(resultSet)); } @Override public Vector getInvolvedTypePlaceholder() { Vector ret = super.getInvolvedTypePlaceholder(); - ret.addAll(this.extendsType.getInvolvedTypePlaceholder()); + ret.addAll(this.innerType.getInvolvedTypePlaceholder()); return ret; } @Override public void parserPostProcessing(SyntaxTreeNode parent) { super.parserPostProcessing(parent); - this.extendsType.parserPostProcessing(this); + this.innerType.parserPostProcessing(this); } @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. - this.extendsType = (ObjectType) this.extendsType.TYPE(ass, parent).getType(); + this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java index 829f0f40..3b3f0fc2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java @@ -147,7 +147,7 @@ public class FreshWildcardType extends Type { */ public WildcardType get_WildcardType() { - return new WildcardType(this.getParent(),this.getOffset()); + return new WildcardType(null, this.getParent(),this.getOffset()); } /** * Author: Arne Lüdtke
diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 5907388c..424fba25 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -18,16 +18,17 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class SuperWildcardType extends WildcardType implements ITypeContainer, IMatchable{ - private ObjectType superType = null; + public SuperWildcardType(ObjectType innerType){ + this(innerType.getOffset(), innerType); + } /** * Author: Arne Lüdtke
* Standard Konstruktor für eine SuperWildcard */ - public SuperWildcardType(int offset, ObjectType superType) + public SuperWildcardType(int offset, ObjectType innerType) { - super(superType.getParent(),offset); - this.superType = superType; + super(innerType, innerType.getParent(),offset); } /** @@ -38,7 +39,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public ObjectType get_SuperType() { - return this.superType; + return this.innerType; } /** @@ -47,7 +48,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public String toString() { - return "? super " + superType.toString(); + return "? super " + innerType.toString(); } /** @@ -57,7 +58,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public SuperWildcardType clone() { - return new SuperWildcardType(getOffset(), (ObjectType) superType.clone()); + return new SuperWildcardType(getOffset(), (ObjectType) innerType.clone()); } @@ -68,17 +69,17 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public FreshSuperWildcardType GetFreshWildcardType() { - return new FreshSuperWildcardType(this.superType,this.getParent(),-1); + return new FreshSuperWildcardType(this.innerType,this.getParent(),-1); } /** * Author: Arne Lüdtke
- * Das gleiche wie get_SuperType(). + * Das gleiche wie get_innerType(). * Überschreibt die Methode der Superklasse */ public Type GetWildcardType() { - return this.get_SuperType(); + return this.get_innerType(); } /** @@ -89,17 +90,17 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I public void SetWildcardType(ObjectType T) { //if(T instanceof RefType) - this.superType = (RefType)T; + this.innerType = (RefType)T; } /** * Author: Arne Lüdtke
- * Das gleiche wie get_SuperType(). + * Das gleiche wie get_innerType(). * Implementiert ITypeContainer */ public Type getContainedType() { - return this.get_SuperType(); + return this.get_innerType(); } /** @@ -109,12 +110,12 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public Type getMatchType() { - return this.get_SuperType(); + return this.get_innerType(); } @Override public JavaCodeResult printJavaCode(ResultSet result){ - return new JavaCodeResult("? super " + this.superType.printJavaCode(result)); + return new JavaCodeResult("? super " + this.innerType.printJavaCode(result)); } /** @@ -137,19 +138,19 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I @Override public Vector getInvolvedTypePlaceholder() { Vector ret = super.getInvolvedTypePlaceholder(); - ret.addAll(this.superType.getInvolvedTypePlaceholder()); + ret.addAll(this.innerType.getInvolvedTypePlaceholder()); return ret; } @Override public void parserPostProcessing(SyntaxTreeNode parent) { super.parserPostProcessing(parent); - this.superType.parserPostProcessing(this); + this.innerType.parserPostProcessing(this); } @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - this.superType = (ObjectType) this.superType.TYPE(ass, parent).getType(); + this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 79bdb2e5..7f33ba6a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -6,14 +6,16 @@ package de.dhbwstuttgart.syntaxtree.type; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; -import de.dhbwstuttgart.logger.*; +import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; // ino.class.TypePlaceholder.26780.description type=javadoc @@ -41,7 +43,12 @@ public class TypePlaceholder extends ObjectType private SyntaxTreeNode parent; - // ino.method.TypePlaceholder.26794.defdescription type=javadoc + @Override + public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + return new ConstraintType(this); + } + + // ino.method.TypePlaceholder.26794.defdescription type=javadoc /** * Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die * Factory-Methode fresh() erzeugt. diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index aa32de77..ef1ca368 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -3,6 +3,7 @@ package de.dhbwstuttgart.syntaxtree.type; import java.util.Vector; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; @@ -17,13 +18,16 @@ import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; public class WildcardType extends Type{ + protected ObjectType innerType = null; + /** * Author: Arne Lüdtke
* Standard Konstruktor für eine Wildcard */ - public WildcardType(SyntaxTreeNode parent, int offset) + public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset) { super(parent, offset); + this.innerType = innerType; } /** @@ -41,7 +45,7 @@ public class WildcardType extends Type{ */ public WildcardType clone() { - return new WildcardType(this.getParent(), getOffset()); + return new WildcardType(this.innerType, this.getParent(), getOffset()); } /** @@ -78,6 +82,12 @@ public class WildcardType extends Type{ throw new NotImplementedException(); } + @Override + public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + this.innerType = (ObjectType) innerType.TYPE(ass, this).getType(); + return new ConstraintType(this); + } + public boolean equals(Object obj) { if(obj instanceof WildcardType) diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index ecb6c6c5..ddc01bb8 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -285,6 +285,7 @@ public class TypeAssumptions { * @return null, falls der Typ nicht vorhanden ist. */ public ConstraintType getTypeFor(Type t, SyntaxTreeNode inNode){ + /* if(t instanceof WildcardType){ WildcardType wt = (WildcardType)t; Type innerType = wt.GetWildcardType(); @@ -295,7 +296,7 @@ public class TypeAssumptions { if(t instanceof TypePlaceholder) return new ConstraintType((TypePlaceholder)t); //Handelt es sich um einen TypePlaceholder kann dieser nicht in den Assumptions vorkommen. - + */ //Alle bekannten Klassen nach diesem Typ durchsuchen: JavaClassName typName = t.getName(); for(ClassAssumption ass : this.classAssumptions){ diff --git a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java index 440bbd50..0e06e9c4 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java +++ b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java @@ -74,8 +74,8 @@ public class FC_TTO public void generateFullyNamedTypes(TypeAssumptions ass) { for(Pair p : this.FC){ - p.TA1 = ass.getTypeFor(p.TA1, p.TA1.getParent()).getType(); - p.TA2 = ass.getTypeFor(p.TA2, p.TA2.getParent()).getType(); + p.TA1 = p.TA1.TYPE(ass, p.TA1.getParent()).getType();//ass.getTypeFor(p.TA1, p.TA1.getParent()).getType(); + p.TA2 = p.TA2.TYPE(ass, p.TA2.getParent()).getType();//ass.getTypeFor(p.TA2, p.TA2.getParent()).getType(); } } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest27.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest27.jav new file mode 100644 index 00000000..cf52b258 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest27.jav @@ -0,0 +1,17 @@ +class Klasse{ +main(String argument){ +var; +var.methode(argument); +return var.methode(argument); +} +} +class Klasse1{ +String methode(String arg){ +return arg; +} +} +class Klasse2{ +Integer methode(Integer arg){ +return arg; +} +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest27.java b/test/plugindevelopment/TypeInsertTests/LambdaTest27.java new file mode 100644 index 00000000..69c2f0bd --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest27.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.Vector; + +import org.junit.Test; + +public class LambdaTest27 { + + private static final String TEST_FILE = "LambdaTest27.jav"; + + @Test + public void run(){ + Vector mustContain = new Vector(); + //mustContain.add("A a"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 03753d68b959535db4482c1756f52ce1afebcbad Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 31 Mar 2015 15:24:30 +0200 Subject: [PATCH 076/186] =?UTF-8?q?Aufr=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 424fba25..7fd6ec6f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -79,7 +79,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public Type GetWildcardType() { - return this.get_innerType(); + return this.get_SuperType(); } /** @@ -100,7 +100,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public Type getContainedType() { - return this.get_innerType(); + return this.get_SuperType(); } /** @@ -110,7 +110,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I */ public Type getMatchType() { - return this.get_innerType(); + return this.get_SuperType(); } @Override From 565fd1ba0c5b3a41e2f2e82c9d3fdfd969c91c45 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 31 Mar 2015 16:25:34 +0200 Subject: [PATCH 077/186] bin-Verzeichnis auf gitignore setzen --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e73b9b4e..10266eb8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ CVS +bin *.class # Mobile Tools for Java (J2ME) From a2997fdd6b381a0fe1549164a55ace0eb155f4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Tue, 31 Mar 2015 16:45:22 +0200 Subject: [PATCH 078/186] Bug 16: wieder zurueckgenommen, Zusammenhangskomponenten wieder raus --- .../typeinference/unify/Unify.java | 104 +++--------------- 1 file changed, 13 insertions(+), 91 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index e302ca80..e22e56b6 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -7,9 +7,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; -import java.util.TreeSet; import java.util.stream.Stream; -import java.util.function.BiFunction; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -152,19 +150,19 @@ public class Unify if(p.TA1 instanceof TypePlaceholder) { //TPH <. ? super Ty entspricht TPH <. Ty - if (p.TA2 instanceof SuperWildcardType) { - p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); + if (p.TA2 instanceof SuperWildcardType) { + p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); + //HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12 + //Dann ist THP <. TPH in Eq2 anstatt in Eq1 + //Muesste mit folgendem if gelöst sein. PL 15-03-17 + if (p.TA2 instanceof TypePlaceholder) { + Eq1.addElement(p); + // Eq2.remove(p); + continue; + } + } + - - //HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12 - //Dann ist THP <. TPH in Eq2 anstatt in Eq1 - //Muesste mit folgendem if gelöst sein. PL 15-03-17 - if (p.TA2 instanceof TypePlaceholder) { - Eq1.addElement(p); - // Eq2.remove(p); - continue; - } - } if(p.OperatorEqual()) { //Alle Paare die bereits durch sub_unify die richtige Struktur haben einfach durchleiten. @@ -621,87 +619,10 @@ public class Unify } } } - - - /////////////////////////////////////////////////////////////////////////////////// - //EINSCHUB AUFTEILEN ZUSAMMENHANGSKOMPONENTEN PL 15-03-19 IN SCHRITTEN A. - C. - //BRINGT nichts OverloadingInMethod2 - ////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //A. Zusammenhangskomponenten bilden - - BiFunction,Vector,Vector> addAllSet = - (v1, v2) -> { for (TypePlaceholder v2elem : v2) { if (!v1.contains(v2elem)) v1.addElement(v2elem); } - return v1; - - }; - //A.1 Eq1 als Vec> zu cartProduktSets hinzufuegen - Vector>> VecVecEq1 = Eq1.stream().map(x -> { Vector PVec = new Vector<>(); - PVec.addElement(x); - Vector> PVecVec = new Vector<>(); - PVecVec.add(PVec); - return PVecVec;}) - .collect(Vector::new, Vector::add, Vector::addAll); - - cartProduktSets.addAll(VecVecEq1); - - //A.2 Schritt 1: Alle Variablen in den Paaren von Elementen einsammeln - - //A.2 Schritt 1: Alle Variablen in den Paaren von Elementen einsammeln - Stream>> constraintsclonevars2 = - cartProduktSets.stream() - .map(vecvec_p -> vecvec_p.stream().map(vec_p -> vec_p.stream() - .reduce(new Vector(), (vTPH, p) -> { addAllSet.apply(vTPH,p.TA1.getInvolvedTypePlaceholder()); - addAllSet.apply(vTPH, p.TA2.getInvolvedTypePlaceholder()); - return vTPH;}, - (x,y) -> {x.addAll(y); return x;}) - - ).collect(Vector::new, Vector::add, Vector::addAll) - );//.collect(Vector::new, Vector::add, Vector::addAll); - - Vector>> constraintsclonevars3 = constraintsclonevars2.collect(Vector::new, Vector::add, Vector::addAll); - - Vector> constraintsclonevars4 = - constraintsclonevars3.stream().map(vars -> vars.stream().reduce(new Vector(),(vTPH1, vTPH2) -> { addAllSet.apply(vTPH1,vTPH2); return vTPH1;})) - .collect(Vector::new, Vector::add, Vector::addAll); - - - Vector> constraintsclonevars = - cartProduktSets.stream() - .map(vecvec_p -> vecvec_p.stream().map(vec_p -> vec_p.stream() - .reduce(new Vector(), (vTPH, p) -> { vTPH.addAll(p.TA1.getInvolvedTypePlaceholder()); - vTPH.addAll(p.TA2.getInvolvedTypePlaceholder()); - return vTPH;}, - (x,y) -> {x.addAll(y); return x;}) - - ).reduce(new Vector(), (vTPH1, vTPH2) -> { vTPH1.addAll(vTPH2); return vTPH1;}) - //HIER STIMMT ES NICHT - ).collect(Vector::new, Vector::add, Vector::addAll); - - //A.3 Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen - //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen - Vector> indexeset = new Vector<>(); - if (constraintsclonevars4 != null && constraintsclonevars4.size()>0) { - indexeset = Unify.schnitt(constraintsclonevars4); - } - - //A.4 Schritt 3: Umwandlung der Indizes in die zugehoerigen Elemente - // In streamconstraintsclone sind die Mengen von Paar enthalten die unifiziert werden muessen - Stream>>> streamconstraintsclone = indexeset.stream().map(x -> x.stream() - .map(i -> cartProduktSets.elementAt(i))//); - .collect(Vector::new, Vector::add, Vector::addAll)); - Vector>>> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //B. Schitte 4. bis 7 der Unifikation auf den Zusammenhangskomponenten getrennt ausfuehren //Schritt 4, Teil 2: Kartesisches Produkt bilden. //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebilden. Vector helpvp; Vector> bigCartProductErg = new Vector>(); - - //auskommentiert, da bereits in Schritt A vor der Zusammenhangskomponenetenbildung hinzugefuegt PL 15-03-19 bigCartProductErg.addElement(copyVectorPair(Eq1)); for (Vector> vecvecpair : cartProduktSets) @@ -864,6 +785,7 @@ public class Unify } return ret; } + /** * Diese Methode wird verwendet, um Zuordnungen z.B. TPH a = Integer From f66150a1e7b0d66366c0ef3d343e680708034db8 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 31 Mar 2015 17:29:29 +0200 Subject: [PATCH 079/186] =?UTF-8?q?Testf=C3=A4lle=20angepasst.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/plugindevelopment/TypeInsertTests/LambdaTest3.jav | 2 +- test/plugindevelopment/TypeInsertTests/LambdaTest4.jav | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav index 1e47f863..3500832b 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav @@ -1,7 +1,7 @@ class LambdaTest{ void methode(){ var; - Fun0 op; + Fun0 op; op = () -> {return var;}; } } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav index 93ad27b5..681715f9 100755 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest4.jav @@ -1,6 +1,6 @@ class LambdaTest{ -Fun1 op = (var) -> { +Fun1 op = (var) -> { var2; var2 = var; return var; From c080f452ae5e2173775e716a2cf607cd02f64c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Wed, 1 Apr 2015 01:28:15 +0200 Subject: [PATCH 080/186] Bug 18: ? ext/sup ty1 = ? ext/sup ty2 wird reduziert zu ty1 = ty2 --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index e22e56b6..75039c68 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -622,7 +622,7 @@ public class Unify //Schritt 4, Teil 2: Kartesisches Produkt bilden. //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebilden. Vector helpvp; - Vector> bigCartProductErg = new Vector>(); + Vector> bigCartProductErg = new Vector>(); bigCartProductErg.addElement(copyVectorPair(Eq1)); for (Vector> vecvecpair : cartProduktSets) @@ -1282,6 +1282,13 @@ throws MatchException //erledigt 15-02-03 if(P.OperatorEqual()) { + if((P.TA1 instanceof ExtendsWildcardType && P.TA2 instanceof ExtendsWildcardType) || //PL 15-03-31 eingefuegt + (P.TA1 instanceof SuperWildcardType && P.TA2 instanceof SuperWildcardType)) + { + H.add(new Pair(((WildcardType)P.TA1).GetWildcardType(), ((WildcardType)P.TA2).GetWildcardType(), PairOperator.Equal)); + bRegel = true; + continue; + } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //PL 15-03-05: Ich halte dies fuer falsch ////PL 15-02-08 bisher mit keinem Beispiel getestet From 144c31a4cb96bf327bebeb78be18be4e2b6f13ac Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 8 Apr 2015 21:23:28 +0200 Subject: [PATCH 081/186] =?UTF-8?q?Bei=20der=20Generierung=20der=20FiniteC?= =?UTF-8?q?losure=20werden=20nun=20Beziehungen=20zu=20Superklassen,=20welc?= =?UTF-8?q?he=20Importiert=20wurden,=20korrekt=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 1 + src/de/dhbwstuttgart/syntaxtree/SourceFile.java | 17 ++++++++++++++--- .../typeinference/unify/Unify.java | 1 + test/plugindevelopment/TypeInsertTests/Add.java | 3 +++ .../TypeInsertTests/LambdaTest5.jav | 2 +- .../TypeInsertTests/OverloadingRecursive.java | 3 ++- 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 9bf64ff5..75108071 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -185,6 +185,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I public Class(String name, RefType superClass, Modifiers mod, int offset){ this(name,mod,offset); if(superClass == null)this.superClass = new Class("Object",-1).getType(); + else this.superClass = superClass; } // ino.method.Class.23044.definition diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 522727fb..360d2eef 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -310,15 +310,26 @@ public class SourceFile TypeAssumptions globalAssumptions = this.makeBasicAssumptionsFromJRE(imports, false); globalAssumptions.add(this.getPublicFieldAssumptions()); // 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen - - Vector basicAssumptionsClassVector = new Vector<>(); //die Klassen aus den BasicAssumptions + + Vector ignoreTypes = new Vector<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. + ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("String",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("Integer",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("Object",null,-1).TYPE(globalAssumptions, parent).getType()); + + Vector basicAssumptionsClassVector = new Vector<>(); //die Klassen aus den BasicAssumptions und den Importierten Klassen for(ClassAssumption cAss : ass.getClassAssumptions()){ Type t1 = cAss.getAssumedClass().getType(); Type t2 = cAss.getAssumedClass().getSuperClass(); Pair p = new Pair(t1, t2); //System.out.println("FCPair: "+p); if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen. - //vFC.add(p); //Wird momentan nicht hinzugefügt + Type superTypeFromAssumptions = ass.getTypeFor(t2, t2).getType(); //In den Assumptions den SuperTyp nachschlagen + if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. + vFC.add(p); + } basicAssumptionsClassVector.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen }else{ //System.out.println("Wurde nicht aufgenommen"); diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 75039c68..5977b8a2 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -620,6 +620,7 @@ public class Unify } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. + //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebilden. Vector helpvp; Vector> bigCartProductErg = new Vector>(); diff --git a/test/plugindevelopment/TypeInsertTests/Add.java b/test/plugindevelopment/TypeInsertTests/Add.java index 6a00e7b0..577d24c1 100644 --- a/test/plugindevelopment/TypeInsertTests/Add.java +++ b/test/plugindevelopment/TypeInsertTests/Add.java @@ -1,5 +1,7 @@ package plugindevelopment.TypeInsertTests; +import java.util.ArrayList; +import java.util.List; import java.util.Vector; import org.junit.Test; @@ -12,5 +14,6 @@ public class Add { Vector mustContain = new Vector(); //mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + ArrayList l = new ArrayList(); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav index 4c00bc85..8baed3b3 100755 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest5.jav @@ -1,5 +1,5 @@ class LambdaTest
{ -Fun1 op = (var) -> {return var;}; +Fun1 op = (var) -> {return var;}; } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java index 6c394ab4..65833bb1 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java @@ -13,6 +13,7 @@ public class OverloadingRecursive { Vector mustContain = new Vector(); //mustContain.add("Fun0>> op"); - MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + //Untypisierbar + //MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } } From 7ba9688702e7af987e00ea5b837ccc508542d972 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 22 Apr 2015 21:40:22 +0200 Subject: [PATCH 082/186] =?UTF-8?q?Menge=20eingef=C3=BChrt=20und=20dadurch?= =?UTF-8?q?=20Vector=20abgel=C3=B6st.=20KomplexeMenge=20eingef=C3=BChrt,?= =?UTF-8?q?=20ConstraintSet=20baut=20nun=20darauf=20auf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 1 + Papers/FMCO2005/main.tex | 2 +- bin/mycompiler/test/blocks/TestIfStmt.jav | 4 +- .../complexTypes/TestStandardLibMethod.jav | 4 +- doc/Javadoc/allclasses-frame.html | 2 +- doc/Javadoc/allclasses-noframe.html | 2 +- doc/Javadoc/index-files/index-1.html | 18 +- doc/Javadoc/index-files/index-12.html | 4 +- doc/Javadoc/index-files/index-14.html | 12 +- doc/Javadoc/index-files/index-16.html | 22 +- doc/Javadoc/index-files/index-17.html | 24 +- doc/Javadoc/index-files/index-18.html | 170 ++--- doc/Javadoc/index-files/index-19.html | 142 ++-- doc/Javadoc/index-files/index-2.html | 10 +- doc/Javadoc/index-files/index-20.html | 6 +- doc/Javadoc/index-files/index-21.html | 2 +- doc/Javadoc/index-files/index-3.html | 188 ++--- doc/Javadoc/index-files/index-5.html | 40 +- doc/Javadoc/index-files/index-6.html | 4 +- doc/Javadoc/index-files/index-7.html | 114 +-- doc/Javadoc/index-files/index-8.html | 4 +- doc/Javadoc/index-files/index-9.html | 24 +- doc/Javadoc/mycompiler/MyCompiler.html | 84 +-- doc/Javadoc/mycompiler/MyCompilerAPI.html | 58 +- doc/Javadoc/mycompiler/SourceFile.html | 24 +- .../mycompiler/mybytecode/AttributeInfo.html | 16 +- .../mycompiler/mybytecode/ClassFile.html | 62 +- .../mycompiler/mybytecode/CodeAttribute.html | 56 +- .../mycompiler/mybytecode/FieldInfo.html | 10 +- .../mycompiler/mybytecode/JVMCode.html | 14 +- .../mycompiler/mybytecode/MethodInfo.html | 10 +- .../mybytecode/class-use/ClassFile.html | 246 +++---- .../mybytecode/class-use/CodeAttribute.html | 226 +++--- doc/Javadoc/mycompiler/myclass/Class.html | 56 +- doc/Javadoc/mycompiler/myclass/ClassBody.html | 70 +- .../mycompiler/myclass/Constructor.html | 22 +- doc/Javadoc/mycompiler/myclass/DeclId.html | 30 +- doc/Javadoc/mycompiler/myclass/FieldDecl.html | 34 +- .../mycompiler/myclass/InstVarDecl.html | 24 +- doc/Javadoc/mycompiler/myclass/Method.html | 44 +- .../mycompiler/myclass/ParameterList.html | 18 +- doc/Javadoc/mycompiler/myclass/UsedId.html | 36 +- .../myclass/class-use/ParameterList.html | 4 +- .../mycompiler/myclass/class-use/UsedId.html | 2 +- .../myexception/SCClassBodyException.html | 4 +- .../myexception/SCClassException.html | 6 +- .../myexception/SCMethodException.html | 10 +- .../myexception/SCStatementException.html | 4 +- .../CTypeReconstructionException.html | 38 +- .../class-use/JVMCodeException.html | 256 +++---- .../class-use/SCClassBodyException.html | 10 +- .../class-use/SCClassException.html | 4 +- .../myexception/class-use/SCException.html | 10 +- .../class-use/SCMethodException.html | 2 +- .../class-use/SCStatementException.html | 52 +- .../mycompiler/mymodifier/Modifiers.html | 8 +- doc/Javadoc/mycompiler/myoperator/AddOp.html | 20 +- doc/Javadoc/mycompiler/myoperator/AndOp.html | 2 +- .../mycompiler/myoperator/DivideOp.html | 10 +- .../mycompiler/myoperator/EqualOp.html | 20 +- .../mycompiler/myoperator/GreaterEquOp.html | 10 +- .../mycompiler/myoperator/GreaterOp.html | 10 +- .../mycompiler/myoperator/LessEquOp.html | 10 +- doc/Javadoc/mycompiler/myoperator/LessOp.html | 10 +- doc/Javadoc/mycompiler/myoperator/LogOp.html | 52 +- .../mycompiler/myoperator/MinusOp.html | 10 +- .../mycompiler/myoperator/ModuloOp.html | 10 +- doc/Javadoc/mycompiler/myoperator/MulOp.html | 12 +- .../mycompiler/myoperator/NotEqualOp.html | 20 +- .../mycompiler/myoperator/Operator.html | 8 +- doc/Javadoc/mycompiler/myoperator/OrOp.html | 2 +- doc/Javadoc/mycompiler/myoperator/PlusOp.html | 10 +- doc/Javadoc/mycompiler/myoperator/RelOp.html | 12 +- .../mycompiler/myoperator/TimesOp.html | 10 +- .../mycompiler/myparser/JavaParser.html | 6 +- .../mycompiler/mystatement/ArgumentList.html | 18 +- .../mycompiler/mystatement/Assign.html | 36 +- .../mycompiler/mystatement/Binary.html | 36 +- .../mycompiler/mystatement/BinaryExpr.html | 4 +- doc/Javadoc/mycompiler/mystatement/Block.html | 56 +- .../mycompiler/mystatement/BoolLiteral.html | 32 +- .../mycompiler/mystatement/CastExpr.html | 28 +- .../mycompiler/mystatement/CharLiteral.html | 32 +- .../mycompiler/mystatement/EmptyStmt.html | 16 +- doc/Javadoc/mycompiler/mystatement/Expr.html | 52 +- .../mycompiler/mystatement/ExprStmt.html | 12 +- .../mycompiler/mystatement/IfStmt.html | 24 +- .../mycompiler/mystatement/InstVar.html | 36 +- .../mycompiler/mystatement/InstanceOf.html | 20 +- .../mycompiler/mystatement/IntLiteral.html | 32 +- .../mycompiler/mystatement/Literal.html | 12 +- .../mystatement/LocalOrFieldVar.html | 28 +- .../mycompiler/mystatement/LocalVarDecl.html | 80 +-- .../mycompiler/mystatement/MethodCall.html | 80 +-- .../mycompiler/mystatement/NegativeExpr.html | 38 +- .../mycompiler/mystatement/NewArray.html | 36 +- .../mycompiler/mystatement/NewClass.html | 36 +- .../mycompiler/mystatement/NotExpr.html | 38 +- doc/Javadoc/mycompiler/mystatement/Null.html | 28 +- .../mycompiler/mystatement/PositivExpr.html | 20 +- .../mycompiler/mystatement/PostDecExpr.html | 22 +- .../mycompiler/mystatement/PostIncExpr.html | 22 +- .../mycompiler/mystatement/PreDecExpr.html | 22 +- .../mycompiler/mystatement/PreIncExpr.html | 22 +- .../mycompiler/mystatement/Receiver.html | 10 +- .../mycompiler/mystatement/Return.html | 18 +- .../mycompiler/mystatement/Statement.html | 8 +- .../mycompiler/mystatement/StringLiteral.html | 20 +- doc/Javadoc/mycompiler/mystatement/This.html | 28 +- .../mycompiler/mystatement/UnaryExpr.html | 12 +- .../mycompiler/mystatement/WhileStmt.html | 24 +- .../mystatement/class-use/Block.html | 4 +- .../mystatement/class-use/Expr.html | 84 +-- .../mystatement/class-use/Statement.html | 12 +- doc/Javadoc/mycompiler/mytype/BaseType.html | 10 +- .../mycompiler/mytype/BooleanType.html | 10 +- .../mycompiler/mytype/CharacterType.html | 10 +- .../mycompiler/mytype/GenericTypeVar.html | 12 +- .../mycompiler/mytype/IntegerType.html | 10 +- doc/Javadoc/mycompiler/mytype/Pair.html | 12 +- doc/Javadoc/mycompiler/mytype/ParaList.html | 18 +- doc/Javadoc/mycompiler/mytype/RefType.html | 28 +- doc/Javadoc/mycompiler/mytype/ReturnType.html | 10 +- doc/Javadoc/mycompiler/mytype/Type.html | 18 +- .../mycompiler/mytype/TyploseVariable.html | 94 +-- doc/Javadoc/mycompiler/mytype/Void.html | 12 +- .../mytype/class-use/GenericTypeVar.html | 8 +- .../mycompiler/mytype/class-use/Pair.html | 46 +- .../mycompiler/mytype/class-use/RefType.html | 28 +- .../mycompiler/mytype/class-use/Type.html | 74 +- .../CIntersectionType.html | 30 +- .../mytypereconstruction/CMultiplyTuple.html | 52 +- .../mytypereconstruction/CSupportData.html | 54 +- .../CTypeReconstructionResult.html | 26 +- .../class-use/CMultiplyTuple.html | 14 +- .../class-use/CSupportData.html | 130 ++-- .../class-use/CTypeReconstructionResult.html | 30 +- .../set/CMultiplyTupleSet.html | 12 +- .../set/CReconstructionTupleSet.html | 16 +- .../mytypereconstruction/set/CSet.html | 4 +- .../set/CSubstitutionSet.html | 26 +- .../mytypereconstruction/set/CTripleSet.html | 12 +- .../set/CTypeAssumptionSet.html | 6 +- .../mytypereconstruction/set/CVectorSet.html | 98 +-- .../set/IHashSetElement.html | 6 +- .../set/class-use/CMultiplyTupleSet.html | 12 +- .../set/class-use/CSet.html | 6 +- .../set/class-use/CSubstitutionSet.html | 120 ++-- .../set/class-use/CTripleSet.html | 114 +-- .../set/class-use/CTypeAssumptionSet.html | 120 ++-- .../set/class-use/CVectorSet.html | 24 +- .../set/package-frame.html | 2 +- .../set/package-summary.html | 2 +- .../set/package-tree.html | 2 +- .../mytypereconstruction/set/package-use.html | 2 +- .../typeassumption/CMethodTypeAssumption.html | 30 +- .../class-use/CMethodTypeAssumption.html | 6 +- .../class-use/CParaTypeAssumption.html | 8 +- .../mytypereconstruction/unify/FC_TTO.html | 22 +- .../mytypereconstruction/unify/Unify.html | 142 ++-- .../unify/class-use/FC_TTO.html | 22 +- doc/Javadoc/overview-tree.html | 2 +- doc/Javadoc/serialized-form.html | 10 +- doc/LambdaJavadoc/allclasses-frame.html | 2 +- doc/LambdaJavadoc/allclasses-noframe.html | 2 +- doc/LambdaJavadoc/index-files/index-1.html | 22 +- doc/LambdaJavadoc/index-files/index-12.html | 6 +- doc/LambdaJavadoc/index-files/index-13.html | 2 +- doc/LambdaJavadoc/index-files/index-14.html | 8 +- doc/LambdaJavadoc/index-files/index-16.html | 12 +- doc/LambdaJavadoc/index-files/index-17.html | 8 +- doc/LambdaJavadoc/index-files/index-18.html | 184 ++--- doc/LambdaJavadoc/index-files/index-19.html | 6 +- doc/LambdaJavadoc/index-files/index-2.html | 6 +- doc/LambdaJavadoc/index-files/index-20.html | 8 +- doc/LambdaJavadoc/index-files/index-21.html | 2 +- doc/LambdaJavadoc/index-files/index-22.html | 72 +- doc/LambdaJavadoc/index-files/index-3.html | 164 ++--- doc/LambdaJavadoc/index-files/index-4.html | 2 +- doc/LambdaJavadoc/index-files/index-5.html | 2 +- doc/LambdaJavadoc/index-files/index-6.html | 6 +- doc/LambdaJavadoc/index-files/index-7.html | 70 +- doc/LambdaJavadoc/index-files/index-8.html | 2 +- doc/LambdaJavadoc/index-files/index-9.html | 20 +- .../mycompiler/AClassOrInterface.html | 10 +- doc/LambdaJavadoc/mycompiler/MyCompiler.html | 32 +- .../mycompiler/MyCompilerAPI.html | 10 +- doc/LambdaJavadoc/mycompiler/SourceFile.html | 20 +- .../mycompiler/class-use/IItemWithOffset.html | 6 +- .../mycompiler/mybytecode/AttributeInfo.html | 16 +- .../mycompiler/mybytecode/ClassFile.html | 78 +- .../mycompiler/mybytecode/CodeAttribute.html | 56 +- .../mycompiler/mybytecode/FieldInfo.html | 10 +- .../mycompiler/mybytecode/JVMCode.html | 16 +- .../mycompiler/mybytecode/MethodInfo.html | 10 +- .../mycompiler/mybytecode/SignatureInfo.html | 10 +- .../mybytecode/class-use/Attribute.html | 18 +- .../mybytecode/class-use/CPInfo.html | 4 +- .../mybytecode/class-use/ClassFile.html | 282 ++++---- .../mybytecode/class-use/CodeAttribute.html | 246 +++---- .../mybytecode/class-use/ExceptionTable.html | 6 +- .../mybytecode/class-use/FieldInfo.html | 4 +- .../mycompiler/mybytecode/class-use/Key.html | 4 +- .../mybytecode/class-use/MethodInfo.html | 4 +- .../myclass/BasicAssumptionClass.html | 4 +- .../mycompiler/myclass/Class.html | 96 +-- .../mycompiler/myclass/ClassBody.html | 74 +- .../mycompiler/myclass/ClassHelper.html | 12 +- .../mycompiler/myclass/Constant.html | 12 +- .../mycompiler/myclass/Constructor.html | 22 +- .../mycompiler/myclass/DeclId.html | 30 +- .../mycompiler/myclass/FieldDecl.html | 30 +- .../myclass/FieldInitialization.html | 12 +- .../myclass/ImportDeclarations.html | 12 +- .../mycompiler/myclass/InstVarDecl.html | 12 +- .../mycompiler/myclass/Method.html | 44 +- .../mycompiler/myclass/ParameterList.html | 14 +- .../mycompiler/myclass/UsedId.html | 40 +- .../mycompiler/myclass/class-use/Class.html | 124 ++-- .../myclass/class-use/ClassBody.html | 10 +- .../myclass/class-use/Constant.html | 4 +- .../mycompiler/myclass/class-use/DeclId.html | 14 +- .../myclass/class-use/FieldDecl.html | 4 +- .../class-use/FieldInitialization.html | 2 +- .../myclass/class-use/FormalParameter.html | 4 +- .../myclass/class-use/ImportDeclarations.html | 2 +- .../mycompiler/myclass/class-use/Method.html | 20 +- .../myclass/class-use/ParameterList.html | 4 +- .../mycompiler/myclass/class-use/UsedId.html | 64 +- .../mycompiler/myclass/package-tree.html | 2 +- .../CTypeReconstructionException.html | 16 +- .../myexception/SCClassBodyException.html | 4 +- .../myexception/SCClassException.html | 6 +- .../myexception/SCMethodException.html | 10 +- .../myexception/SCStatementException.html | 4 +- .../CTypeReconstructionException.html | 20 +- .../class-use/JVMCodeException.html | 288 ++++---- .../class-use/SCClassBodyException.html | 10 +- .../class-use/SCClassException.html | 4 +- .../myexception/class-use/SCExcept.html | 10 +- .../myexception/class-use/SCException.html | 4 +- .../class-use/SCMethodException.html | 2 +- .../class-use/SCStatementException.html | 54 +- .../mycompiler/myinterface/Interface.html | 22 +- .../mycompiler/myinterface/InterfaceBody.html | 28 +- .../myinterface/class-use/Interface.html | 2 +- .../mycompiler/mymodifier/Modifiers.html | 10 +- .../mymodifier/class-use/Modifier.html | 4 +- .../mymodifier/class-use/Modifiers.html | 10 +- .../mycompiler/myoperator/AddOp.html | 10 +- .../mycompiler/myoperator/AndOp.html | 2 +- .../mycompiler/myoperator/DivideOp.html | 10 +- .../mycompiler/myoperator/EqualOp.html | 10 +- .../mycompiler/myoperator/GreaterEquOp.html | 10 +- .../mycompiler/myoperator/GreaterOp.html | 10 +- .../mycompiler/myoperator/LessEquOp.html | 10 +- .../mycompiler/myoperator/LessOp.html | 10 +- .../mycompiler/myoperator/LogOp.html | 46 +- .../mycompiler/myoperator/MinusOp.html | 10 +- .../mycompiler/myoperator/ModuloOp.html | 10 +- .../mycompiler/myoperator/MulOp.html | 2 +- .../mycompiler/myoperator/NotEqualOp.html | 10 +- .../mycompiler/myoperator/Operator.html | 8 +- .../mycompiler/myoperator/OrOp.html | 2 +- .../mycompiler/myoperator/PlusOp.html | 10 +- .../mycompiler/myoperator/RelOp.html | 2 +- .../mycompiler/myoperator/TimesOp.html | 10 +- .../myparser/ClassAndParameter.html | 10 +- .../myparser/InterfaceAndParameter.html | 10 +- .../mycompiler/myparser/InterfaceList.html | 12 +- .../mycompiler/myparser/JavaParser.html | 10 +- .../mycompiler/myparser/package-summary.html | 2 +- .../mycompiler/mystatement/ArgumentList.html | 18 +- .../mycompiler/mystatement/Assign.html | 32 +- .../mycompiler/mystatement/Binary.html | 48 +- .../mycompiler/mystatement/BinaryExpr.html | 4 +- .../mycompiler/mystatement/Block.html | 52 +- .../mycompiler/mystatement/BoolLiteral.html | 32 +- .../mycompiler/mystatement/CastExpr.html | 32 +- .../mycompiler/mystatement/CharLiteral.html | 32 +- .../mycompiler/mystatement/DoubleLiteral.html | 32 +- .../mycompiler/mystatement/EmptyStmt.html | 28 +- .../mycompiler/mystatement/Expr.html | 36 +- .../mycompiler/mystatement/ExprStmt.html | 2 +- .../mycompiler/mystatement/FloatLiteral.html | 32 +- .../mycompiler/mystatement/ForStmt.html | 22 +- .../mycompiler/mystatement/IfStmt.html | 30 +- .../mycompiler/mystatement/InstVar.html | 36 +- .../mycompiler/mystatement/InstanceOf.html | 32 +- .../mycompiler/mystatement/IntLiteral.html | 32 +- .../mystatement/LambdaExpression.html | 32 +- .../mycompiler/mystatement/Literal.html | 4 +- .../mystatement/LocalOrFieldVar.html | 32 +- .../mycompiler/mystatement/LocalVarDecl.html | 72 +- .../mycompiler/mystatement/LongLiteral.html | 32 +- .../mycompiler/mystatement/MethodCall.html | 72 +- .../mycompiler/mystatement/NegativeExpr.html | 40 +- .../mycompiler/mystatement/NewArray.html | 36 +- .../mycompiler/mystatement/NewClass.html | 32 +- .../mycompiler/mystatement/NotExpr.html | 40 +- .../mycompiler/mystatement/Null.html | 32 +- .../mycompiler/mystatement/PositivExpr.html | 32 +- .../mycompiler/mystatement/PostDecExpr.html | 32 +- .../mycompiler/mystatement/PostIncExpr.html | 32 +- .../mycompiler/mystatement/PreDecExpr.html | 32 +- .../mycompiler/mystatement/PreIncExpr.html | 32 +- .../mycompiler/mystatement/Receiver.html | 6 +- .../mycompiler/mystatement/Return.html | 22 +- .../mycompiler/mystatement/Statement.html | 18 +- .../mycompiler/mystatement/StringLiteral.html | 32 +- .../mycompiler/mystatement/This.html | 32 +- .../mycompiler/mystatement/UnaryExpr.html | 14 +- .../mycompiler/mystatement/WhileStmt.html | 30 +- .../mystatement/class-use/Assign.html | 2 +- .../mystatement/class-use/Block.html | 4 +- .../mystatement/class-use/Expr.html | 88 +-- .../mystatement/class-use/Statement.html | 14 +- .../mycompiler/mytest/LambdaTest.html | 10 +- .../mycompiler/mytype/BaseType.html | 2 +- .../mycompiler/mytype/BooleanType.html | 2 +- .../mytype/BoundedGenericTypeVar.html | 20 +- .../mycompiler/mytype/CRefTypeSet.html | 10 +- .../mycompiler/mytype/CharacterType.html | 2 +- .../mycompiler/mytype/DoubleType.html | 2 +- .../mytype/ExtendsWildcardType.html | 2 +- .../mycompiler/mytype/FloatType.html | 2 +- .../mytype/FreshExtendsWildcardType.html | 4 +- .../mytype/FreshSuperWildcardType.html | 4 +- .../mycompiler/mytype/FreshWildcardType.html | 20 +- .../mycompiler/mytype/GenericTypeVar.html | 18 +- .../mycompiler/mytype/IntegerType.html | 2 +- .../mycompiler/mytype/LongType.html | 2 +- doc/LambdaJavadoc/mycompiler/mytype/Pair.html | 8 +- .../mycompiler/mytype/ParaList.html | 14 +- .../mycompiler/mytype/RefType.html | 34 +- .../mycompiler/mytype/ReturnType.html | 2 +- .../mycompiler/mytype/SuperWildcardType.html | 2 +- doc/LambdaJavadoc/mycompiler/mytype/Type.html | 16 +- .../mycompiler/mytype/TypePlaceholder.html | 6 +- doc/LambdaJavadoc/mycompiler/mytype/Void.html | 4 +- .../mycompiler/mytype/WildcardType.html | 2 +- .../class-use/BoundedGenericTypeVar.html | 6 +- .../mytype/class-use/GenericTypeVar.html | 194 ++--- .../mycompiler/mytype/class-use/Pair.html | 134 ++-- .../mycompiler/mytype/class-use/RefType.html | 34 +- .../mycompiler/mytype/class-use/Type.html | 340 ++++----- .../mycompiler/mytype/package-tree.html | 2 +- .../CIntersectionType.html | 12 +- .../mytypereconstruction/CMultiplyTuple.html | 18 +- .../mytypereconstruction/CSupportData.html | 58 +- .../CTypeReconstructionResult.html | 40 +- .../class-use/CIntersectionType.html | 2 +- .../class-use/CMultiplyTuple.html | 4 +- .../class-use/CSupportData.html | 10 +- .../class-use/CTypeReconstructionResult.html | 30 +- .../set/CHashtableSet.html | 4 +- .../set/CMultiplyTupleSet.html | 10 +- .../set/CReconstructionTupleSet.html | 10 +- .../mytypereconstruction/set/CSet.html | 2 +- .../set/CSubstitutionSet.html | 16 +- .../mytypereconstruction/set/CTripleSet.html | 16 +- .../set/CTypeAssumptionSet.html | 4 +- .../mytypereconstruction/set/CVectorSet.html | 106 +-- .../set/IHashSetElement.html | 4 +- .../set/class-use/CMultiplyTupleSet.html | 4 +- .../set/class-use/CSet.html | 10 +- .../set/class-use/CSubstitutionSet.html | 8 +- .../set/class-use/CTripleSet.html | 6 +- .../set/class-use/CTypeAssumptionSet.html | 8 +- .../set/class-use/CVectorSet.html | 34 +- .../set/class-use/IHashSetKey.html | 2 +- .../set/package-frame.html | 2 +- .../set/package-summary.html | 4 +- .../set/package-tree.html | 2 +- .../mytypereconstruction/set/package-use.html | 10 +- .../CInstVarTypeAssumption.html | 10 +- .../CLocalVarTypeAssumption.html | 10 +- .../typeassumption/CMethodTypeAssumption.html | 22 +- .../typeassumption/CParaTypeAssumption.html | 10 +- .../typeassumption/CTypeAssumption.html | 18 +- .../class-use/CMethodTypeAssumption.html | 12 +- .../class-use/CParaTypeAssumption.html | 10 +- .../class-use/CMethodKey.html | 2 +- .../mytypereconstruction/unify/FC_TTO.html | 26 +- .../mytypereconstruction/unify/MUB.html | 8 +- .../mytypereconstruction/unify/Unify.html | 168 ++--- .../unify/class-use/FC_TTO.html | 38 +- .../test/expectationTypes/BlockExpect.html | 10 +- .../test/expectationTypes/ClassExpect.html | 10 +- .../test/expectationTypes/Expectation.html | 4 +- .../test/expectationTypes/MethodExpect.html | 30 +- .../test/expectationTypes/VarExpect.html | 20 +- .../class-use/BlockExpect.html | 4 +- .../test/notUsedAnymore/IResultValidator.html | 6 +- doc/LambdaJavadoc/overview-tree.html | 4 +- doc/LambdaJavadoc/serialized-form.html | 14 +- doc/LambdaJavadoc/typinferenz/Constraint.html | 4 +- .../typinferenz/ConstraintsSet.html | 4 +- .../typinferenz/FreshTypeVariable.html | 2 +- doc/LambdaJavadoc/typinferenz/FunN.html | 12 +- .../typinferenz/KarthesischesProdukt.html | 8 +- doc/LambdaJavadoc/typinferenz/ResultSet.html | 10 +- .../typinferenz/TypeAssumptions.html | 24 +- .../typinferenz/class-use/ConstraintsSet.html | 4 +- .../class-use/TypeAssumptions.html | 6 +- doc/OldStuff/JavaDoc/AddOp.html | 10 +- doc/OldStuff/JavaDoc/AndOp.html | 2 +- doc/OldStuff/JavaDoc/ArgumentList.html | 18 +- doc/OldStuff/JavaDoc/Assign.html | 22 +- doc/OldStuff/JavaDoc/AttributeInfo.html | 16 +- doc/OldStuff/JavaDoc/BaseType.html | 2 +- doc/OldStuff/JavaDoc/Binary.html | 38 +- doc/OldStuff/JavaDoc/BinaryExpr.html | 4 +- doc/OldStuff/JavaDoc/Block.html | 36 +- doc/OldStuff/JavaDoc/BoolLiteral.html | 22 +- doc/OldStuff/JavaDoc/BooleanType.html | 2 +- doc/OldStuff/JavaDoc/CastExpr.html | 22 +- doc/OldStuff/JavaDoc/CharLiteral.html | 22 +- doc/OldStuff/JavaDoc/CharacterType.html | 2 +- doc/OldStuff/JavaDoc/Class.html | 54 +- doc/OldStuff/JavaDoc/ClassBody.html | 88 +-- doc/OldStuff/JavaDoc/ClassFile.html | 96 +-- doc/OldStuff/JavaDoc/CodeAttribute.html | 94 +-- doc/OldStuff/JavaDoc/Constructor.html | 22 +- doc/OldStuff/JavaDoc/DeclId.html | 30 +- doc/OldStuff/JavaDoc/DivideOp.html | 10 +- doc/OldStuff/JavaDoc/EmptyStmt.html | 20 +- doc/OldStuff/JavaDoc/EqualOp.html | 10 +- doc/OldStuff/JavaDoc/ExceptionList.html | 4 +- doc/OldStuff/JavaDoc/Expr.html | 30 +- doc/OldStuff/JavaDoc/ExprStmt.html | 2 +- doc/OldStuff/JavaDoc/FieldDecl.html | 34 +- doc/OldStuff/JavaDoc/FieldInfo.html | 14 +- doc/OldStuff/JavaDoc/GreaterEquOp.html | 10 +- doc/OldStuff/JavaDoc/GreaterOp.html | 10 +- doc/OldStuff/JavaDoc/IfStmt.html | 28 +- doc/OldStuff/JavaDoc/InstVar.html | 22 +- doc/OldStuff/JavaDoc/InstVarDecl.html | 12 +- doc/OldStuff/JavaDoc/InstanceOf.html | 22 +- doc/OldStuff/JavaDoc/IntLiteral.html | 22 +- doc/OldStuff/JavaDoc/IntegerType.html | 2 +- doc/OldStuff/JavaDoc/JVMCode.html | 14 +- doc/OldStuff/JavaDoc/JavaCompiler.html | 6 +- doc/OldStuff/JavaDoc/JavaParser.html | 6 +- doc/OldStuff/JavaDoc/LessEquOp.html | 10 +- doc/OldStuff/JavaDoc/LessOp.html | 10 +- doc/OldStuff/JavaDoc/Literal.html | 4 +- doc/OldStuff/JavaDoc/LocalOrFieldVar.html | 22 +- doc/OldStuff/JavaDoc/LocalVarDecl.html | 54 +- doc/OldStuff/JavaDoc/LogOp.html | 46 +- doc/OldStuff/JavaDoc/Method.html | 32 +- doc/OldStuff/JavaDoc/MethodCall.html | 70 +- doc/OldStuff/JavaDoc/MethodInfo.html | 14 +- doc/OldStuff/JavaDoc/MinusOp.html | 10 +- doc/OldStuff/JavaDoc/Modifiers.html | 8 +- doc/OldStuff/JavaDoc/ModuloOp.html | 10 +- doc/OldStuff/JavaDoc/MulOp.html | 2 +- doc/OldStuff/JavaDoc/MyCompiler.html | 16 +- doc/OldStuff/JavaDoc/NegativeExpr.html | 30 +- doc/OldStuff/JavaDoc/NewArray.html | 26 +- doc/OldStuff/JavaDoc/NewClass.html | 22 +- doc/OldStuff/JavaDoc/NoReceiver.html | 2 +- doc/OldStuff/JavaDoc/NotEqualOp.html | 10 +- doc/OldStuff/JavaDoc/NotExpr.html | 30 +- doc/OldStuff/JavaDoc/Null.html | 22 +- doc/OldStuff/JavaDoc/Operator.html | 8 +- doc/OldStuff/JavaDoc/OrOp.html | 2 +- doc/OldStuff/JavaDoc/Pair.html | 8 +- doc/OldStuff/JavaDoc/ParaList.html | 8 +- doc/OldStuff/JavaDoc/ParameterList.html | 14 +- doc/OldStuff/JavaDoc/PlusOp.html | 10 +- doc/OldStuff/JavaDoc/PositivExpr.html | 22 +- doc/OldStuff/JavaDoc/PostDecExpr.html | 22 +- doc/OldStuff/JavaDoc/PostIncExpr.html | 22 +- doc/OldStuff/JavaDoc/PreDecExpr.html | 22 +- doc/OldStuff/JavaDoc/PreIncExpr.html | 22 +- doc/OldStuff/JavaDoc/Receiver.html | 6 +- doc/OldStuff/JavaDoc/RefType.html | 24 +- doc/OldStuff/JavaDoc/RelOp.html | 2 +- doc/OldStuff/JavaDoc/Return.html | 20 +- doc/OldStuff/JavaDoc/ReturnType.html | 2 +- .../JavaDoc/SCClassBodyException.html | 8 +- doc/OldStuff/JavaDoc/SCClassException.html | 10 +- doc/OldStuff/JavaDoc/SCException.html | 4 +- doc/OldStuff/JavaDoc/SCMethodException.html | 14 +- .../JavaDoc/SCStatementException.html | 8 +- doc/OldStuff/JavaDoc/SourceFile.html | 54 +- doc/OldStuff/JavaDoc/Statement.html | 28 +- doc/OldStuff/JavaDoc/StringLiteral.html | 22 +- doc/OldStuff/JavaDoc/This.html | 22 +- doc/OldStuff/JavaDoc/TimesOp.html | 10 +- doc/OldStuff/JavaDoc/Type.html | 6 +- doc/OldStuff/JavaDoc/TyploseVariable.html | 2 +- doc/OldStuff/JavaDoc/UnaryExpr.html | 14 +- doc/OldStuff/JavaDoc/UsedId.html | 40 +- doc/OldStuff/JavaDoc/Void.html | 4 +- doc/OldStuff/JavaDoc/WhileStmt.html | 28 +- .../JavaDoc/class-use/JVMCodeException.html | 256 +++---- .../class-use/SCClassBodyException.html | 10 +- .../JavaDoc/class-use/SCClassException.html | 4 +- .../JavaDoc/class-use/SCMethodException.html | 2 +- .../class-use/SCStatementException.html | 60 +- doc/OldStuff/JavaDoc/index-files/index-1.html | 6 +- .../JavaDoc/index-files/index-11.html | 2 +- .../JavaDoc/index-files/index-12.html | 8 +- .../JavaDoc/index-files/index-14.html | 8 +- .../JavaDoc/index-files/index-16.html | 16 +- .../JavaDoc/index-files/index-17.html | 4 +- .../JavaDoc/index-files/index-18.html | 118 +-- doc/OldStuff/JavaDoc/index-files/index-2.html | 2 +- .../JavaDoc/index-files/index-20.html | 2 +- .../JavaDoc/index-files/index-22.html | 2 +- doc/OldStuff/JavaDoc/index-files/index-3.html | 112 +-- doc/OldStuff/JavaDoc/index-files/index-7.html | 34 +- doc/OldStuff/JavaDoc/index-files/index-8.html | 2 +- doc/OldStuff/JavaDoc/index-files/index-9.html | 16 +- doc/OldStuff/JavaDoc/serialized-form.html | 10 +- doc/OldStuff/Rest/ClassDiagram.svg | 456 ++++++------ doc/OldStuff/Rest/Operator.svg | 36 +- doc/OldStuff/Rest/Rest.svg | 66 +- doc/OldStuff/Rest/Statement.svg | 172 ++--- examples/achim/Vector.jav | 4 +- examples/bajo1/Matrix.jav | 4 +- examples/bajo1/Test.jav | 2 +- examples/bajo1_usecases/Matrix.jav | 8 +- examples/bajo1_usecases/Matrix1.jav | 6 +- examples/bajo1_usecases/Matrix2.jav | 2 +- examples/feda/feda.jav | 2 +- examples/hoti/GenericsTest.jav | 2 +- examples/hoti/Import.jav | 4 +- examples/hoti/Matrix.jav | 8 +- examples/hoti/Simple2.jav | 4 +- examples/hoti/Test3.jav | 2 +- examples/hoti/VectorStack.jav | 4 +- examples/hoti/VectorTest.jav | 2 +- examples/lambda/general.jav | 2 +- examples/lambda/test1.jav | 2 +- examples/lambda/test2.jav | 2 +- examples/luar/WCParseTest.jav | 4 +- examples/luar/WCTest1.jav | 12 +- examples/luar/WCTest10.jav | 6 +- examples/luar/WCTest11.jav | 68 +- examples/luar/WCTest2.jav | 6 +- examples/luar/WCTest4.jav | 6 +- examples/luar/WCTest5.jav | 54 +- examples/luar/WCTest6.jav | 8 +- examples/luar/WCTest7.jav | 46 +- examples/luar/WCTest8.jav | 12 +- examples/luar/WCTest9.jav | 2 +- examples/mema_usecases/UsecaseOne.jav | 2 +- examples/pl_usecases/OL2.jav | 4 +- examples/pl_usecases/Probleme | 2 +- examples/pl_usecases/SMatrix.jav | 8 +- examples/pl_usecases/UnifyTest1.jav | 2 +- examples/pl_usecases/UsecaseFive_pl.jav | 4 +- examples/pl_usecases/UsecaseFour_pl.jav | 2 +- examples/pl_usecases/UsecaseOne_pl.jav | 4 +- examples/pl_usecases/UsecaseSeven_pl.jav | 4 +- examples/pl_usecases/UsecaseSix_pl.jav | 2 +- examples/pl_usecases/UsecaseTen_pl.jav | 4 +- examples/pl_usecases/UsecaseThree_pl.jav | 2 +- .../pl_usecases/UsecaseThree_pl.orig.java | 8 +- examples/pl_usecases/ZweiKlassen.jav | 4 +- examples/scju/Boxing.jav | 4 +- examples/scju/ClassGenerics.jav | 4 +- examples/scju/FieldGenerics.jav | 6 +- examples/scju/InterfaceGenerics.jav | 4 +- examples/scju/MethodGenerics.jav | 6 +- examples/scju/SimpleMethodCall.jav | 4 +- examples/scju/testPackage/Test.jav | 4 +- notizen/hoti/Notizen.txt | 2 +- notizen/pl/xxx | 26 +- .../JvmDisassembler/jvmDisassembler.java | 6 +- src/de/dhbwstuttgart/antlr/VisitorTest.java | 6 +- .../dhbwstuttgart/bytecode/AttributeInfo.java | 12 +- src/de/dhbwstuttgart/bytecode/ClassFile.java | 106 +-- .../dhbwstuttgart/bytecode/CodeAttribute.java | 124 ++-- src/de/dhbwstuttgart/bytecode/FieldInfo.java | 8 +- src/de/dhbwstuttgart/bytecode/JVMCode.java | 12 +- src/de/dhbwstuttgart/bytecode/MethodInfo.java | 8 +- .../dhbwstuttgart/bytecode/SignatureInfo.java | 4 +- .../dhbwstuttgart/core/AClassOrInterface.java | 12 +- .../dhbwstuttgart/core/ConsoleInterface.java | 6 +- src/de/dhbwstuttgart/core/MyCompiler.java | 52 +- src/de/dhbwstuttgart/core/MyCompilerAPI.java | 8 +- .../CTypeReconstructionException.java | 18 +- .../myexception/SCClassBodyException.java | 6 +- .../myexception/SCClassException.java | 6 +- .../myexception/SCException.java | 4 +- .../myexception/SCMethodException.java | 8 +- .../myexception/SCStatementException.java | 6 +- .../parser/BoundedClassIdentifierList.java | 8 +- .../parser/ClassAndParameter.java | 8 +- .../parser/GenericVarDeclarationList.java | 6 +- .../parser/InterfaceAndParameter.java | 8 +- .../dhbwstuttgart/parser/InterfaceList.java | 14 +- .../dhbwstuttgart/parser/JavaClassName.java | 10 +- src/de/dhbwstuttgart/parser/JavaParser.java | 84 +-- src/de/dhbwstuttgart/parser/JavaParser.jay | 78 +- .../dhbwstuttgart/parser/JavaParser_old.jay | 6 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 136 ++-- .../dhbwstuttgart/syntaxtree/ClassBody.java | 20 +- .../dhbwstuttgart/syntaxtree/ClassHelper.java | 4 +- src/de/dhbwstuttgart/syntaxtree/Constant.java | 4 +- .../dhbwstuttgart/syntaxtree/Constructor.java | 30 +- .../syntaxtree/ExceptionList.java | 4 +- src/de/dhbwstuttgart/syntaxtree/Field.java | 26 +- .../syntaxtree/FieldDeclaration.java | 14 +- .../syntaxtree/FormalParameter.java | 6 +- .../syntaxtree/GTVDeclarationContext.java | 2 +- src/de/dhbwstuttgart/syntaxtree/Generic.java | 2 +- .../syntaxtree/GenericDeclarationList.java | 14 +- .../syntaxtree/ImportDeclarations.java | 4 +- .../dhbwstuttgart/syntaxtree/Interface.java | 22 +- .../syntaxtree/InterfaceBody.java | 20 +- src/de/dhbwstuttgart/syntaxtree/Method.java | 40 +- .../syntaxtree/ParameterList.java | 10 +- .../dhbwstuttgart/syntaxtree/SourceFile.java | 240 +++---- .../syntaxtree/SyntaxTreeNode.java | 8 +- .../dhbwstuttgart/syntaxtree/misc/DeclId.java | 12 +- .../dhbwstuttgart/syntaxtree/misc/UsedId.java | 30 +- .../syntaxtree/modifier/Modifiers.java | 8 +- .../syntaxtree/operator/AddOp.java | 4 +- .../syntaxtree/operator/AndOp.java | 2 +- .../syntaxtree/operator/DivideOp.java | 4 +- .../syntaxtree/operator/EqualOp.java | 4 +- .../syntaxtree/operator/GreaterEquOp.java | 4 +- .../syntaxtree/operator/GreaterOp.java | 4 +- .../syntaxtree/operator/LessEquOp.java | 4 +- .../syntaxtree/operator/LessOp.java | 4 +- .../syntaxtree/operator/LogOp.java | 28 +- .../syntaxtree/operator/MinusOp.java | 4 +- .../syntaxtree/operator/ModuloOp.java | 4 +- .../syntaxtree/operator/MulOp.java | 2 +- .../syntaxtree/operator/NotEqualOp.java | 4 +- .../syntaxtree/operator/Operator.java | 8 +- .../syntaxtree/operator/PlusOp.java | 4 +- .../syntaxtree/operator/RelOp.java | 2 +- .../syntaxtree/operator/TimesOp.java | 4 +- .../syntaxtree/statement/ArgumentList.java | 10 +- .../syntaxtree/statement/Assign.java | 24 +- .../syntaxtree/statement/Binary.java | 14 +- .../syntaxtree/statement/Block.java | 20 +- .../syntaxtree/statement/BoolLiteral.java | 14 +- .../syntaxtree/statement/CastExpr.java | 10 +- .../syntaxtree/statement/CharLiteral.java | 14 +- .../syntaxtree/statement/DoubleLiteral.java | 12 +- .../syntaxtree/statement/EmptyStmt.java | 12 +- .../syntaxtree/statement/Expr.java | 14 +- .../syntaxtree/statement/ExprStmt.java | 2 +- .../syntaxtree/statement/FloatLiteral.java | 12 +- .../syntaxtree/statement/ForStmt.java | 12 +- .../syntaxtree/statement/IfStmt.java | 14 +- .../syntaxtree/statement/InstVar.java | 16 +- .../syntaxtree/statement/InstanceOf.java | 10 +- .../syntaxtree/statement/IntLiteral.java | 12 +- .../statement/LambdaExpression.java | 20 +- .../syntaxtree/statement/LocalOrFieldVar.java | 22 +- .../syntaxtree/statement/LocalVarDecl.java | 36 +- .../syntaxtree/statement/LongLiteral.java | 12 +- .../syntaxtree/statement/MethodCall.java | 18 +- .../syntaxtree/statement/NegativeExpr.java | 12 +- .../syntaxtree/statement/NewArray.java | 14 +- .../syntaxtree/statement/NewClass.java | 12 +- .../syntaxtree/statement/NotExpr.java | 12 +- .../syntaxtree/statement/Null.java | 12 +- .../syntaxtree/statement/PositivExpr.java | 12 +- .../syntaxtree/statement/PostDecExpr.java | 26 +- .../syntaxtree/statement/PostIncExpr.java | 26 +- .../syntaxtree/statement/PreDecExpr.java | 26 +- .../syntaxtree/statement/PreIncExpr.java | 26 +- .../syntaxtree/statement/Receiver.java | 2 +- .../syntaxtree/statement/Return.java | 10 +- .../syntaxtree/statement/Statement.java | 10 +- .../syntaxtree/statement/StringLiteral.java | 12 +- .../syntaxtree/statement/SuperCall.java | 2 +- .../syntaxtree/statement/This.java | 12 +- .../syntaxtree/statement/ThisCall.java | 6 +- .../syntaxtree/statement/UnaryExpr.java | 8 +- .../syntaxtree/statement/WhileStmt.java | 12 +- .../type/BoundedGenericTypeVar.java | 18 +- .../syntaxtree/type/CRefTypeSet.java | 8 +- .../syntaxtree/type/ExtendsWildcardType.java | 6 +- .../syntaxtree/type/FreshWildcardType.java | 12 +- .../syntaxtree/type/GenericTypeVar.java | 10 +- .../syntaxtree/type/ParaList.java | 12 +- .../syntaxtree/type/RefType.java | 40 +- .../syntaxtree/type/SuperWildcardType.java | 6 +- .../dhbwstuttgart/syntaxtree/type/Type.java | 20 +- .../syntaxtree/type/TypePlaceholder.java | 14 +- .../syntaxtree/type/WildcardType.java | 2 +- .../typeinference/ConstraintsSet.java | 43 +- src/de/dhbwstuttgart/typeinference/FunN.java | 18 +- .../typeinference/FunNInterface.java | 12 +- .../typeinference/FunNMethod.java | 8 +- .../typeinference/JavaCodeResult.java | 6 +- .../typeinference/KarthesischesProdukt.java | 37 +- .../typeinference/OderConstraint.java | 73 +- src/de/dhbwstuttgart/typeinference/Pair.java | 42 +- .../typeinference/ResultSet.java | 24 +- .../typeinference/SingleConstraint.java | 10 +- .../typeinference/TIPConstraints.java | 4 +- .../typeinference/TypeinferenceResultSet.java | 8 +- .../typeinference/UndConstraint.java | 18 +- .../assumptions/TypeAssumptions.java | 48 +- .../GenericTypeInsertPoint.java | 16 +- .../typedeployment/TypeInsertPoint.java | 2 +- .../typedeployment/TypeInsertSet.java | 16 +- .../typeinference/unify/CSubstitution.java | 4 +- .../typeinference/unify/CSubstitutionSet.java | 8 +- .../typeinference/unify/CVectorSet.java | 60 +- .../typeinference/unify/FC_TTO.java | 16 +- .../typeinference/unify/MUB.java | 12 +- .../typeinference/unify/ParallelUnify.java | 4 +- .../typeinference/unify/Unifier.java | 4 +- .../typeinference/unify/Unify.java | 670 +++++++++--------- test/bytecode/BytecodeTester.java | 8 +- test/bytecode/EmptyClassTest.java | 2 +- test/bytecode/GeneralTest.java | 4 +- test/mycompiler/test/blocks/TestIfStmt.jav | 4 +- test/mycompiler/test/blocks/TestIfStmt.java | 26 +- .../TestUndeterminedReturnNegative.java | 2 +- .../complexTypes/TestStandardLibMethod.jav | 4 +- .../complexTypes/TestStandardLibMethod.java | 8 +- .../test/expectationTypes/BlockExpect.java | 10 +- .../test/expectationTypes/ClassExpect.java | 10 +- .../test/expectationTypes/Expectation.java | 8 +- .../test/expectationTypes/MethodExpect.java | 32 +- .../test/expectationTypes/VarExpect.java | 26 +- ...TestAssignmentTwoGenericTypesNegative.java | 6 +- ...tClassesWithBoundedGenericsOfTwoTypes.java | 12 +- ...assesWithBoundedGenericsUsedInMethods.java | 6 +- ...estExtendedClassesWithBoundedGenerics.java | 8 +- .../test/generics/TestNestedGenerics.java | 6 +- .../TestNestedGenericsNonExistingType.java | 4 +- .../TestSimpleClassesWithBoundedGenerics.jav | 2 +- .../TestSimpleClassesWithBoundedGenerics.java | 10 +- ...pleClassesWithBoundedGenericsNegative.java | 4 +- .../TestSimpleClassesWithGenerics.java | 4 +- ...TestSimpleClassesWithGenericsNegative.java | 4 +- ...TestInferenceOwnTypeByMethodParameter.java | 6 +- .../TestInferenceStdTypeByReturnType.jav | 4 +- .../TestInferenceStdTypeByReturnType.java | 20 +- .../OverloadingGenericNotSameHierarchy.jav | 4 +- .../OverloadingGenericNotSameHierarchy.java | 8 +- .../OverloadingGenericSameHierarchy.java | 8 +- ...ngGenericTypeInferenceNotSameHierarchy.jav | 4 +- ...gGenericTypeInferenceNotSameHierarchy.java | 20 +- ...dingGenericTypeInferenceSameHierarchy.java | 20 +- .../staticAccess/TestNonStaticAccess.java | 2 +- .../staticAccess/TestStaticAccess.java | 2 +- .../test/lambda/BasicAssumptions.jav | 2 +- .../test/lambda/ConstructorTest.java | 6 +- .../test/lambda/GenericParameterTest.jav | 2 +- .../test/lambda/GenericVarTest.java | 2 +- .../test/lambda/OverloadingTest.java | 4 +- .../test/lambda/ParseMultipleFilesTest.java | 6 +- test/mycompiler/test/lambda/TestAssign.java | 2 +- test/mycompiler/test/lambda/TestFunN.jav | 2 +- test/mycompiler/test/lambda/TestWhile.java | 2 +- .../AbstractInferenceTestExtendedOLD.java | 28 +- .../AbstractInferenceTestOLD_2.java | 36 +- .../AbstractInferenceTestOld.java | 18 +- .../test/notUsedAnymore/IResultValidator.java | 4 +- .../TestAbstractInferenceTest.java | 52 +- .../test/notUsedAnymore/TestGenerics.jav | 2 +- .../test/notUsedAnymore/TestGenerics.java | 10 +- .../operators/TestOperatorArithmetic.java | 32 +- .../operators/TestOperatorComparison.java | 14 +- .../test/operators/TestOperatorIncrement.java | 14 +- .../test/trivial/TestClassMember.jav | 4 +- .../test/trivial/TestClassMember.java | 6 +- .../trivial/TestClassMemberAssignment.java | 2 +- ...estMethodEmptyParameterGenericExtends.java | 6 +- .../typeReconstructionTest/TrMakeFCTest.java | 34 +- .../TrSubUnifyTest.java | 154 ++-- .../typeReconstructionTest/TrUnifyTest.java | 40 +- test/parser/GeneralParserTest.java | 4 +- .../InsertSingleTypeTest.java | 4 +- .../KarthesischesProduktTest.java | 8 +- .../MartinTestCases/MatrixVectorMul.jav | 6 +- .../MartinTestCases/MatrixWhile.jav | 8 +- .../MartinTestCases/Matrix_lambda.jav | 4 +- .../plugindevelopment/MartinTestCases/OL2.jav | 2 +- .../MartinTestCases/Probleme | 2 +- .../MartinTestCases/SMatrix.jav | 8 +- .../MartinTestCases/Tester.java | 10 +- .../MartinTestCases/UnifyTest1.jav | 2 +- .../MartinTestCases/UsecaseFive_pl.jav | 6 +- .../MartinTestCases/UsecaseFour_pl.jav | 2 +- .../MartinTestCases/UsecaseOne_pl.jav | 4 +- .../MartinTestCases/UsecaseSeven_pl.jav | 4 +- .../MartinTestCases/UsecaseSix_pl.jav | 2 +- .../MartinTestCases/UsecaseTen_pl.jav | 4 +- .../MartinTestCases/UsecaseThree_pl.jav | 2 +- .../MartinTestCases/UsecaseThree_pl.orig.jav | 8 +- .../MartinTestCases/ZweiKlassen.jav | 4 +- .../jav/Lambda_usecases/MatrixVectorMul.jav | 6 +- .../jav/Lambda_usecases/Matrix_lambda.jav | 4 +- test/plugindevelopment/TRMEqualTest.java | 12 +- .../TypeInsertSetEqualTest.jav | 4 +- .../TypeInsertSetEqualTest.java | 6 +- test/plugindevelopment/TypeInsertTester.java | 4 +- .../plugindevelopment/TypeInsertTests/Add.jav | 6 +- .../TypeInsertTests/Add.java | 4 +- .../TypeInsertTests/BoundedGenericsTest.java | 4 +- .../TypeInsertTests/ConstructorTest.jav | 2 +- .../TypeInsertTests/ConstructorTest.java | 4 +- .../TypeInsertTests/FunNInsertTest.java | 4 +- .../TypeInsertTests/GenTypeTest.java | 4 +- .../GenericParaListInsertTest.java | 4 +- .../GenericParaListInsertTest2.java | 4 +- .../TypeInsertTests/GenericTypeVarTest.java | 4 +- .../TypeInsertTests/GenericTypeVarTest2.java | 4 +- .../TypeInsertTests/GenericVarInsertTest.java | 4 +- .../TypeInsertTests/GenericVarTest.jav | 4 +- .../TypeInsertTests/GenericVarTest.java | 4 +- .../TypeInsertTests/GenericVarTest2.java | 4 +- .../TypeInsertTests/GenericVarTest3.java | 4 +- .../plugindevelopment/TypeInsertTests/Id.java | 4 +- .../TypeInsertTests/ImportTest.jav | 4 +- .../TypeInsertTests/ImportTest.java | 4 +- .../TypeInsertTests/ImportTest2.jav | 2 +- .../TypeInsertTests/ImportTest2.java | 4 +- .../TypeInsertTests/IntTest.java | 4 +- .../TypeInsertTests/LambdaTest1.java | 4 +- .../TypeInsertTests/LambdaTest10.java | 4 +- .../TypeInsertTests/LambdaTest11.java | 4 +- .../TypeInsertTests/LambdaTest12.java | 4 +- .../TypeInsertTests/LambdaTest13.java | 4 +- .../TypeInsertTests/LambdaTest14.java | 4 +- .../TypeInsertTests/LambdaTest15.java | 4 +- .../TypeInsertTests/LambdaTest16.java | 4 +- .../TypeInsertTests/LambdaTest17.java | 4 +- .../TypeInsertTests/LambdaTest18.java | 4 +- .../TypeInsertTests/LambdaTest19.java | 4 +- .../TypeInsertTests/LambdaTest2.java | 4 +- .../TypeInsertTests/LambdaTest20.java | 4 +- .../TypeInsertTests/LambdaTest22.jav | 6 +- .../TypeInsertTests/LambdaTest23.jav | 4 +- .../TypeInsertTests/LambdaTest23.java | 6 +- .../TypeInsertTests/LambdaTest24.java | 4 +- .../TypeInsertTests/LambdaTest25.jav | 4 +- .../TypeInsertTests/LambdaTest25.java | 4 +- .../TypeInsertTests/LambdaTest26.java | 4 +- .../TypeInsertTests/LambdaTest27.java | 4 +- .../TypeInsertTests/LambdaTest2_2.java | 4 +- .../TypeInsertTests/LambdaTest3.java | 4 +- .../TypeInsertTests/LambdaTest4.java | 4 +- .../TypeInsertTests/LambdaTest5.java | 4 +- .../TypeInsertTests/LambdaTest6.java | 4 +- .../TypeInsertTests/LambdaTest7.java | 4 +- .../TypeInsertTests/LambdaTest8.java | 4 +- .../TypeInsertTests/LambdaTest9.java | 4 +- .../LargeSourceCodeTests/LambdaTest22.java | 4 +- .../LargeSourceCodeTests/Matrix.java | 4 +- .../TypedMatrixSimpleTest.java | 4 +- .../LargeSourceCodeTests/TypedMatrixTest.java | 4 +- .../TypeInsertTests/Matrix.jav | 6 +- .../TypeInsertTests/Matrix_simple.jav | 6 +- .../TypeInsertTests/Matrix_simple.java | 4 +- .../MultipleTypesInsertTester.java | 10 +- .../TypeInsertTests/MutlitpleTestCases.java | 6 +- .../plugindevelopment/TypeInsertTests/OL.java | 4 +- .../TypeInsertTests/OperatorTest.java | 4 +- .../TypeInsertTests/OverloadingExample.java | 4 +- .../TypeInsertTests/OverloadingInMethod.java | 4 +- .../TypeInsertTests/OverloadingInMethod2.java | 4 +- .../OverloadingInMethod2Simple.java | 4 +- .../OverloadingInsertTest.java | 4 +- .../TypeInsertTests/OverloadingRecursive.java | 4 +- .../TypeInsertTests/RelOpTest.java | 4 +- .../TypeInsertTests/ReursiveTest.java | 4 +- .../TypeInsertTests/ReursiveTest2.java | 4 +- .../TypeInsertTests/SuperTest.jav | 2 +- .../TypeInsertTests/SuperTest.java | 4 +- .../TypeInsertTests/ThisTest.jav | 2 +- .../TypeInsertTests/ThisTest.java | 4 +- .../TypeInsertTests/TypedMatrixSimpleTest.jav | 10 +- .../TypeInsertTests/TypedMatrixTest.jav | 10 +- .../WildcardTestForLambda.java | 4 +- .../WildcardTestForLambda2.java | 4 +- tools/JavaParser.jay | 6 +- .../setup.ini | 18 +- tools/skeleton | 2 +- 885 files changed, 9783 insertions(+), 9761 deletions(-) diff --git a/.classpath b/.classpath index 4f24f94b..45b378ef 100755 --- a/.classpath +++ b/.classpath @@ -5,5 +5,6 @@ + diff --git a/Papers/FMCO2005/main.tex b/Papers/FMCO2005/main.tex index b8ae8959..e6dd92b0 100755 --- a/Papers/FMCO2005/main.tex +++ b/Papers/FMCO2005/main.tex @@ -93,7 +93,7 @@ code traverse. \subsection{Type Unification} The implementation of the type unification \cite{TO04} contains as the main -datastructure a vector of type term pairs. The algorithm itself is +datastructure a Menge of type term pairs. The algorithm itself is implemented as an extension of the usual unification algorithm. Pairs of the form $a \olsub ty$ respectively $ty \olsub a$, where $a$ is a variable and $ty$ is a term but no variable, generate multiple solutions. diff --git a/bin/mycompiler/test/blocks/TestIfStmt.jav b/bin/mycompiler/test/blocks/TestIfStmt.jav index a59a4c0f..de6e7e12 100755 --- a/bin/mycompiler/test/blocks/TestIfStmt.jav +++ b/bin/mycompiler/test/blocks/TestIfStmt.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class TestIfStmt { @@ -14,7 +14,7 @@ public class TestIfStmt { public m2() { a; c; - a = new Vector(); + a = new Menge(); if (a.isEmpty()) { c="empty"; } diff --git a/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav b/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav index aef62902..3f01ac70 100755 --- a/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav +++ b/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav @@ -1,5 +1,5 @@ import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class TestStandardLibMethod { @@ -9,7 +9,7 @@ public class TestStandardLibMethod { a.put("2",-1); } - public m2(Vector> m){ + public m2(Menge> m){ k; k = 0; ret; diff --git a/doc/Javadoc/allclasses-frame.html b/doc/Javadoc/allclasses-frame.html index 9956c99f..aa6869e2 100755 --- a/doc/Javadoc/allclasses-frame.html +++ b/doc/Javadoc/allclasses-frame.html @@ -146,7 +146,7 @@ All Classes
CTypeReconstructionResult
-CVectorSet +CMengeSet
DeclId
diff --git a/doc/Javadoc/allclasses-noframe.html b/doc/Javadoc/allclasses-noframe.html index 6daa1e4a..9d64fed6 100755 --- a/doc/Javadoc/allclasses-noframe.html +++ b/doc/Javadoc/allclasses-noframe.html @@ -146,7 +146,7 @@ All Classes
CTypeReconstructionResult
-CVectorSet +CMengeSet
DeclId
diff --git a/doc/Javadoc/index-files/index-1.html b/doc/Javadoc/index-files/index-1.html index cc260d16..0b4199f7 100755 --- a/doc/Javadoc/index-files/index-1.html +++ b/doc/Javadoc/index-files/index-1.html @@ -93,7 +93,7 @@ Static variable in class mycompiler.myparser.aconst_null - Static variable in class mycompiler.mybytecode.JVMCode

  -
adapt(String, Type, Vector, Vector) - +
adapt(String, Type, Menge, Menge) - Method in class mycompiler.mytypereconstruction.unify.Unify
 
add_class(String, String, short) - @@ -147,7 +147,7 @@ Method in class mycompiler.mybytecode.add_local(String, Type) - Method in class mycompiler.mybytecode.CodeAttribute
  -
add_method(String, String, ParameterList, Type, Block, short, Vector) - +
add_method(String, String, ParameterList, Type, Block, short, Menge) - Method in class mycompiler.mybytecode.ClassFile
 
add_method_ref(String, String, String) - @@ -177,13 +177,13 @@ Method in class mycompiler.mytypereconstruction.set.addElement(E) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
addElement(E) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
addElement(E) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
addException(SCExcept) - Method in exception mycompiler.myexception.SCClassBodyException
  -
addException(Vector) - +
addException(Menge) - Method in exception mycompiler.myexception.SCClassException
 
addException(SCExcept) - @@ -192,7 +192,7 @@ Method in exception mycompiler.myexception.addFieldOrLocalVarAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
  -
addGenericTypeVars(String, Vector<GenericTypeVar>) - +
addGenericTypeVars(String, Menge<GenericTypeVar>) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
 
addMethodIntersectionType(CIntersectionType) - @@ -209,7 +209,7 @@ Method in class mycompiler.mytypereconstruction.typeassumption.addReplacementListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
addReplacementListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
  @@ -222,10 +222,10 @@ Method in class mycompiler.myparser.ALL_INFO - Static variable in class mycompiler.MyCompiler
  -
allGreater(RefType, Vector) - +
allGreater(RefType, Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
allSmaller(RefType, Vector) - +
allSmaller(RefType, Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
aload - diff --git a/doc/Javadoc/index-files/index-12.html b/doc/Javadoc/index-files/index-12.html index 67cd1be1..76886554 100755 --- a/doc/Javadoc/index-files/index-12.html +++ b/doc/Javadoc/index-files/index-12.html @@ -174,10 +174,10 @@ Constructor for class mycompiler.myoperator.lookupswitch - Static variable in class mycompiler.mybytecode.JVMCode
  -
loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Vector) - +
loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Menge) - Method in class mycompiler.myoperator.LogOp
  -
loop_codegen(ClassFile, CodeAttribute, int, boolean, Vector) - +
loop_codegen(ClassFile, CodeAttribute, int, boolean, Menge) - Method in class mycompiler.mystatement.WhileStmt
 
lor - diff --git a/doc/Javadoc/index-files/index-14.html b/doc/Javadoc/index-files/index-14.html index 4a02fb60..7377d4a0 100755 --- a/doc/Javadoc/index-files/index-14.html +++ b/doc/Javadoc/index-files/index-14.html @@ -114,10 +114,10 @@ Static method in class mycompiler.mybytecode.ndiv(String) - Static method in class mycompiler.mybytecode.JVMCode
  -
neg_codegen(ClassFile, CodeAttribute, Vector) - +
neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
  -
neg_codegen(ClassFile, CodeAttribute, Vector) - +
neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NegativeExpr
 
NegativeExpr - Class in mycompiler.mystatement
 
NegativeExpr() - @@ -158,18 +158,18 @@ Static variable in class mycompiler. 
NO_METHOD - Static variable in class mycompiler.mytypereconstruction.CSupportData -
Gibt Namensstring für den Classbody außerhalb einer Methode - für m_CurrentMethod. +
Gibt Namensstring f�r den Classbody au�erhalb einer Methode + f�r m_CurrentMethod.
nop - Static variable in class mycompiler.mybytecode.JVMCode
 
nor(String) - Static method in class mycompiler.mybytecode.JVMCode
  -
not_codegen(ClassFile, CodeAttribute, Vector) - +
not_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
  -
not_codegen(ClassFile, CodeAttribute, Vector) - +
not_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NotExpr
 
NOTEQUAL - diff --git a/doc/Javadoc/index-files/index-16.html b/doc/Javadoc/index-files/index-16.html index 7b32bb70..2b1317bb 100755 --- a/doc/Javadoc/index-files/index-16.html +++ b/doc/Javadoc/index-files/index-16.html @@ -90,7 +90,7 @@ Constructor for class mycompiler.mytype.Pair_isEquiv(Pair) - Method in class mycompiler.mytype.Pair
  -
para_check(Vector, boolean) - +
para_check(Menge, boolean) - Method in class mycompiler.myclass.Class
 
ParaList - Class in mycompiler.mytype
 
ParaList() - @@ -110,19 +110,19 @@ Variable in class mycompiler.myclass. 
parse(File) - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft die Parse-Methode.
parse(String) - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft die Parse-Methode.
parse(File) - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
parse(String) - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Parst einen String und baut den abstrakten Syntaxbaum auf.
PARSER_INFO - Static variable in class mycompiler.MyCompiler @@ -130,7 +130,7 @@ Static variable in class mycompiler.path - Variable in class mycompiler.myparser.JavaParser
  -
pi(int, String, String, Vector) - +
pi(int, String, String, Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
PLUSEQUAL - @@ -162,20 +162,20 @@ Constructor for class mycompiler.mystatement.print(String) - Static method in class mycompiler.mytypereconstruction.CHelper -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Gibt einen String aus.
print() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
 
printDebugInfo(String, int) - Static method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Von meinen Vorgängern eingesetzte Methode zur Ausgabe von +
Author: J�rg B�uerle
+ Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von diferenzierten Debug-Ausgaben. -
printMenge(String, Vector, int) - +
printMenge(String, Menge, int) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
printMengeUnifier(String, Vector<Vector<Pair>>, int) - +
printMengeUnifier(String, Menge<Menge<Pair>>, int) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
Private - Class in mycompiler.mymodifier
 
Private() - diff --git a/doc/Javadoc/index-files/index-17.html b/doc/Javadoc/index-files/index-17.html index a3cece5d..c0a2b299 100755 --- a/doc/Javadoc/index-files/index-17.html +++ b/doc/Javadoc/index-files/index-17.html @@ -80,14 +80,14 @@ function windowTitle()
Receiver - Class in mycompiler.mystatement
 
Receiver(Expr) - Constructor for class mycompiler.mystatement.Receiver -
Autor: Jörg Bäuerle +
Autor: J�rg B�uerle
RefType - Class in mycompiler.mytype
 
RefType() - Constructor for class mycompiler.mytype.RefType
 
RefType(String) - Constructor for class mycompiler.mytype.RefType
  -
RefType(String, Vector) - +
RefType(String, Menge) - Constructor for class mycompiler.mytype.RefType
 
RefType(RefType) - @@ -101,7 +101,7 @@ Static variable in class mycompiler.myparser.removeAllReplacementListeners() - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
removeAllReplacementListeners() - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
  @@ -114,42 +114,42 @@ Method in class mycompiler.mytypereconstruction.set.removeElement(E) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
removeElement(E) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
removeElement(E) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
removeMethodTypeAssumption(CMethodTypeAssumption) - Method in class mycompiler.mytypereconstruction.CIntersectionType
 
removeReplacementListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
removeReplacementListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
  -
replace_index(CodeAttribute, Vector, int, int) - +
replace_index(CodeAttribute, Menge, int, int) - Static method in class mycompiler.myoperator.LogOp
 
replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.FormalParameter -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.InstVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.Method -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.ExprStmt
 
replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.LocalVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
replaceType(CReplaceTypeEvent) - Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener
Tauscht einen Typ gegen einen anderen aus.
replaceWithType(Type) - Method in class mycompiler.mytype.TyploseVariable -
Diese Methode geht alle TypeReplacmentListener durch und tauscht über deren +
Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren Callback-Methode diesen Typ gegen den neuen aus.
resetBlockId() - Method in class mycompiler.mytypereconstruction.CSupportData diff --git a/doc/Javadoc/index-files/index-18.html b/doc/Javadoc/index-files/index-18.html index 4fd48103..d5700c16 100755 --- a/doc/Javadoc/index-files/index-18.html +++ b/doc/Javadoc/index-files/index-18.html @@ -84,118 +84,118 @@ Static variable in class mycompiler.mybytecode.sastore - Static variable in class mycompiler.mybytecode.JVMCode
  -
sc_check(Vector, boolean) - +
sc_check(Menge, boolean) - Method in class mycompiler.myclass.Class
  -
sc_check(Vector, boolean) - +
sc_check(Menge, boolean) - Method in class mycompiler.myclass.ClassBody
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Assign
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Binary
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Block
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.BoolLiteral
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.CastExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.CharLiteral
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.EmptyStmt
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Expr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.InstanceOf
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.InstVar
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.IntLiteral
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.LocalOrFieldVar
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.LocalVarDecl
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.MethodCall
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.NegativeExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.NewArray
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.NewClass
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.NotExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Null
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.PositivExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.PostDecExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.PostIncExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.PreDecExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.PreIncExpr
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Receiver
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.StringLiteral
  -
sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.This
 
sc_check(boolean) - Method in class mycompiler.SourceFile
  -
sc_check_for_extended_classes(Vector, Hashtable, boolean) - +
sc_check_for_extended_classes(Menge, Hashtable, boolean) - Method in class mycompiler.myclass.Class
  -
sc_check_get_Method(Vector, String, boolean, Hashtable, Hashtable) - +
sc_check_get_Method(Menge, String, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.MethodCall
  -
sc_check_method_kleiner(Vector, String, String, boolean) - +
sc_check_method_kleiner(Menge, String, String, boolean) - Method in class mycompiler.mystatement.MethodCall
  -
sc_check_uebergabe(Vector, Vector, boolean, int, Hashtable, Hashtable) - +
sc_check_uebergabe(Menge, Menge, boolean, int, Hashtable, Hashtable) - Method in class mycompiler.mystatement.MethodCall
 
sc_get_Formalparalist() - Method in class mycompiler.myclass.ParameterList
  -
sc_init_extended_fcts(Vector, Vector, String, String, boolean) - +
sc_init_extended_fcts(Menge, Menge, String, String, boolean) - Method in class mycompiler.mystatement.MethodCall
  -
sc_init_hashtable(Vector, String, String, boolean) - +
sc_init_hashtable(Menge, String, String, boolean) - Method in class mycompiler.myclass.ClassBody
  -
sc_init_hashtable_for_extended_classes(Vector, String, Hashtable, Vector, Hashtable, Hashtable, boolean) - +
sc_init_hashtable_for_extended_classes(Menge, String, Hashtable, Menge, Hashtable, Hashtable, boolean) - Method in class mycompiler.myclass.ClassBody
 
sc_init_parameterlist(boolean) - @@ -230,12 +230,12 @@ Static variable in class mycompiler. 
semanticCheck() - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Ruft über SourceFile.sc_check(false) +
Author: J�rg B�uerle
+ Ruft �ber SourceFile.sc_check(false) den alten Semantik-Check ohne Typrekonstruktion auf.
semanticCheck() - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Semantik-Check ohne Typrekonstruktion auf.
set_a(String) - Method in class mycompiler.mybytecode.Key @@ -267,16 +267,16 @@ Method in class mycompiler.mystatement.set_attribute_name_index(short) - Method in class mycompiler.mybytecode.Attribute
  -
set_attributes(Vector) - +
set_attributes(Menge) - Method in class mycompiler.mybytecode.ClassFile
  -
set_attributes(Vector) - +
set_attributes(Menge) - Method in class mycompiler.mybytecode.FieldInfo
  -
set_attributes(Vector) - +
set_attributes(Menge) - Method in class mycompiler.mybytecode.MethodInfo
  -
set_attributes_Vector(Vector) - +
set_attributes_Menge(Menge) - Method in class mycompiler.mybytecode.CodeAttribute
 
set_Block(Block) - @@ -333,7 +333,7 @@ Method in class mycompiler.mybytecode.set_code_short(int, int) - Method in class mycompiler.mybytecode.CodeAttribute
  -
set_constant_pool(Vector) - +
set_constant_pool(Menge) - Method in class mycompiler.mybytecode.ClassFile
 
set_constructor_founded(boolean) - @@ -363,13 +363,13 @@ Method in class mycompiler.mystatement.set_error(String) - Method in class mycompiler.myexception.SCExcept
  -
set_exception_table_Vector(Vector) - +
set_exception_table_Menge(Menge) - Method in class mycompiler.mybytecode.CodeAttribute
 
set_ExceptionList(ExceptionList) - Method in class mycompiler.myclass.Method
  -
set_exlist(Vector) - +
set_exlist(Menge) - Method in exception mycompiler.myexception.SCMethodException
 
set_Expr(Expr, Expr) - @@ -417,13 +417,13 @@ Method in class mycompiler.mystatement.set_Expr2(Expr) - Method in class mycompiler.mystatement.Binary
  -
set_Expr_Vector(Vector) - +
set_Expr_Menge(Menge) - Method in class mycompiler.mystatement.MethodCall
 
set_FieldDecl(FieldDecl) - Method in class mycompiler.myclass.ClassBody
  -
set_fields(Vector) - +
set_fields(Menge) - Method in class mycompiler.mybytecode.ClassFile
 
set_function(String) - @@ -441,7 +441,7 @@ Method in class mycompiler.myclass.set_info(byte[]) - Method in class mycompiler.mybytecode.AttributeInfo
  -
set_info(Vector) - +
set_info(Menge) - Method in class mycompiler.mybytecode.AttributeInfo
 
set_Int(int) - @@ -459,7 +459,7 @@ Method in class mycompiler.mybytecode.set_low_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Long_info
  -
set_methods(Vector) - +
set_methods(Menge) - Method in class mycompiler.mybytecode.ClassFile
 
set_Modifiers(Modifiers) - @@ -510,19 +510,19 @@ Method in class mycompiler.mystatement.set_ParaHash(Hashtable) - Method in class mycompiler.myclass.Class
  -
set_ParaList(Vector) - +
set_ParaList(Menge) - Method in class mycompiler.myclass.Class
  -
set_ParaList(Vector) - +
set_ParaList(Menge) - Method in class mycompiler.myclass.UsedId
  -
set_ParaList(Vector) - +
set_ParaList(Menge) - Method in class mycompiler.mystatement.LocalVarDecl
  -
set_ParaList(Vector) - +
set_ParaList(Menge) - Method in class mycompiler.mytype.RefType
  -
set_Paratyp(Vector) - +
set_Paratyp(Menge) - Method in class mycompiler.myclass.DeclId
 
set_Receiver(Receiver) - @@ -537,7 +537,7 @@ Method in class mycompiler.myexception.set_Statement(Statement) - Method in class mycompiler.mystatement.Block
  -
set_Statement_Vector(Vector) - +
set_Statement_Menge(Menge) - Method in class mycompiler.mystatement.Block
 
set_Status(Status) - @@ -579,7 +579,7 @@ Method in class mycompiler.mystatement.set_Type(RefType) - Method in class mycompiler.mystatement.InstanceOf
  -
set_Typen(Vector) - +
set_Typen(Menge) - Method in class mycompiler.myclass.UsedId
 
set_UnaryMinus(UnaryMinus) - @@ -618,7 +618,7 @@ Method in class mycompiler.myclass.set_Wert(ExprStmt) - Method in class mycompiler.myclass.DeclId
  -
setA(Vector<CTypeReconstructionResult>) - +
setA(Menge<CTypeReconstructionResult>) - Method in class mycompiler.mytypereconstruction.CSupportData
 
setAssumedType(Type) - @@ -626,17 +626,17 @@ Method in class mycompiler.mytypereconstruction.typeassumption.setAssumptionSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setAssumptionSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setAssumSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
 
setBlockId(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
  -
setBlockIdList(Vector<Integer>) - +
setBlockIdList(Menge<Integer>) - Method in class mycompiler.mytypereconstruction.CSupportData
 
setClassName(String) - @@ -656,16 +656,16 @@ Method in class mycompiler.mytypereconstruction.setDebugLevel(int) - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Setzt den Debug-Level
setDebugLevel(int) - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Setzt den Debug-Level -
setDeclIdVector(Vector) - +
setDeclIdMenge(Menge) - Method in class mycompiler.myclass.FieldDecl
  -
setDeclidVector(Vector) - +
setDeclidMenge(Menge) - Method in class mycompiler.mystatement.LocalVarDecl
 
setFieldAndLocalVarAssumptions(Hashtable<CTypeAssumptionKey, CTypeAssumption>) - @@ -704,13 +704,13 @@ Method in class mycompiler.mytypereconstruction.typeassumption.setMethodParaCount(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
  -
setMethodTypeAssumptions(Vector<CMethodTypeAssumption>) - +
setMethodTypeAssumptions(Menge<CMethodTypeAssumption>) - Method in class mycompiler.mytypereconstruction.CIntersectionType
 
setName(String) - Method in class mycompiler.mytype.RefType
  -
setParalist(Vector) - +
setParalist(Menge) - Method in class mycompiler.mytype.ParaList
 
setParameterList(ParameterList) - @@ -718,48 +718,48 @@ Method in class mycompiler.myclass. 
setResultType(Type) - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
-
setResultTypes(Vector<Type>) - +
Author: J�rg B�uerle
+
setResultTypes(Menge<Type>) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setReturnType(Type) - Method in class mycompiler.myclass.Method -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
setSubSet(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
 
setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
 
setType(Type) - Method in class mycompiler.myclass.FormalParameter -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
setType(Type) - Method in class mycompiler.myclass.InstVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
setType(Type) - Method in class mycompiler.mystatement.ExprStmt -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
setType(Type) - Method in class mycompiler.mystatement.LocalVarDecl
 
setType(Type) - Method in class mycompiler.mystatement.NewArray -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setType(Type) - Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
setTypeVar(TyploseVariable) - Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: Jörg Bäuerle
-
setVector(Vector<E>) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
Author: J�rg B�uerle
+
setMenge(Menge<E>) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
shallowCopy() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult @@ -842,7 +842,7 @@ Method in class mycompiler.mytypereconstruction.typeassumption.sub(CSubstitution) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  -
sub_unify(Vector, FC_TTO) - +
sub_unify(Menge, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
Subst(Pair, int, TyploseVariable, Type, boolean) - @@ -851,7 +851,7 @@ Static method in class mycompiler.mytypereconstruction.unify.SubstHashtable(RefType, Hashtable) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
SubstHashtable2VectorPair(Hashtable) - +
SubstHashtable2MengePair(Hashtable) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
subtract(CSet<E>) - @@ -860,8 +860,8 @@ Method in class mycompiler.mytypereconstruction.set.subtract(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
subtract(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
subtract(CSet<E>) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
SUPER - Static variable in class mycompiler.myparser.JavaParser diff --git a/doc/Javadoc/index-files/index-19.html b/doc/Javadoc/index-files/index-19.html index bfa48177..c109e409 100755 --- a/doc/Javadoc/index-files/index-19.html +++ b/doc/Javadoc/index-files/index-19.html @@ -107,8 +107,8 @@ Static variable in class mycompiler.myparser.time() - Static method in class mycompiler.mytypereconstruction.CHelper -
Author: Jörg Bäuerle
- Liefert die aktuelle Zeit in Langformat zurück. +
Author: J�rg B�uerle
+ Liefert die aktuelle Zeit in Langformat zur�ck.
TIMESEQUAL - Static variable in class mycompiler.myparser.JavaParser
  @@ -129,10 +129,10 @@ Method in class mycompiler.mytype. 
toString() - Method in class mycompiler.mytype.Type -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
toString() - Method in class mycompiler.mytypereconstruction.CIntersectionType -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
toString() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
  @@ -156,57 +156,57 @@ Method in class mycompiler.mytypereconstruction.typeassumption.toString() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.AddOp -
Implementierung der Algorithmen 5.44 und 5.45 von Martin Plümicke +
Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.EqualOp -
Implementierung des Algorithmus 5.53 von Martin Plümicke +
Implementierung des Algorithmus 5.53 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.LogOp

Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.MulOp -
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Plümicke +
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.NotEqualOp -
Implementierung des Algorithmus 5.54 von Martin Plümicke +
Implementierung des Algorithmus 5.54 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.Operator
 
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.RelOp -
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Plümicke +
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Assign -
Implementierung des Algorithmus 5.30 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.30 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Binary
 
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.BoolLiteral -
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CastExpr -
Implementierung des Algorithmus 5.43 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.43 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CharLiteral -
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Expr @@ -216,42 +216,42 @@ Method in class mycompiler.mystatement.TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstVar -
Implementierung des Algorithmus 5.38 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.38 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.IntLiteral -
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Literal -
Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LocalOrFieldVar -
Implementierung des Algorithmus 5.37 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.37 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.33 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.33 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NegativeExpr -
Implementierung des Algorithmus 5.41 von Martin Plümicke +
Implementierung des Algorithmus 5.41 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewArray -
Implementierung des Algorithmus 5.32 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.32 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewClass -
Implementierung des Algorithmus 5.31 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.31 von Martin Pl�micke +
Author: J�rg B�uerle
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NotExpr -
Implementierung des Algorithmus 5.42 von Martin Plümicke +
Implementierung des Algorithmus 5.42 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Null
  @@ -276,33 +276,33 @@ Method in class mycompiler.mystatement.TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.This -
Implementierung des Algorithmus 5.35 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.35 von Martin Pl�micke +
Author: J�rg B�uerle
TRInstVar(CTriple, CSupportData) - Method in class mycompiler.mystatement.InstVar -
Implementierung des Algorithmus 5.38-1 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.38-1 von Martin Pl�micke +
Author: J�rg B�uerle
TRMCallApp(CMultiplyTuple, String, String, int, boolean, CSupportData) - Static method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.34 von Martin Plümicke +
Implementierung des Algorithmus 5.34 von Martin Pl�micke
TRMultiply(CMultiplyTuple, Expr, CSupportData) - Method in class mycompiler.mystatement.Expr -
(siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +
(siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle
TRProg(CSupportData) - Method in class mycompiler.myclass.Class -
Ausgangspunkt für den Typrekonstruktionsalgorithmus. +
Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Assign -
Implementierung des Algorithmus 5.25 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.25 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Binary
 
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Block -
Implementierung des Algorithmus 5.20 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.20 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.BoolLiteral
  @@ -317,7 +317,7 @@ Method in class mycompiler.mystatement.TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.IfStmt -
Implementierung des Algorithmus 5.21 von Martin Plümicke +
Implementierung des Algorithmus 5.21 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstanceOf @@ -333,12 +333,12 @@ Method in class mycompiler.mystatement.TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LocalVarDecl -
Implementierung des Algorithmus 5.24 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.24 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.27 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.27 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NegativeExpr
  @@ -347,8 +347,8 @@ Method in class mycompiler.mystatement.TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewClass -
Implementierung des Algorithmus 5.26 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.26 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NotExpr
  @@ -372,8 +372,8 @@ Method in class mycompiler.mystatement.TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Return -
Implementierung des Algorithmus 5.22 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.22 von Martin Pl�micke +
Author: J�rg B�uerle
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Statement
  @@ -385,17 +385,17 @@ Method in class mycompiler.mystatement.TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.WhileStmt -
Implementierung des Algorithmus 5.23 von Martin Plümicke +
Implementierung des Algorithmus 5.23 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" ersetzt werden. -
TRStatements(CSubstitutionSet, CTypeAssumptionSet, Vector<Statement>, int, CTypeAssumptionSet, CSupportData) - +
TRStatements(CSubstitutionSet, CTypeAssumptionSet, Menge<Statement>, int, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Block -
Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle -
TRTuple(CMultiplyTuple, Vector<Expr>, CSupportData) - +
Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle +
TRTuple(CMultiplyTuple, Menge<Expr>, CSupportData) - Method in class mycompiler.mystatement.Expr -
(siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +
(siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle
TRY - Static variable in class mycompiler.myparser.JavaParser
  @@ -428,16 +428,16 @@ Method in class mycompiler.mystatement.typeReconstruction() - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf.
typeReconstruction() - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf.
typeReconstruction() - Method in class mycompiler.SourceFile -
Tyrekonstruktionsalgorithmus: ruft für jede Klasse den Algorithmus TRProg auf. -
TyploseVariable - Class in mycompiler.mytype
Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
+
Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. +
TyploseVariable - Class in mycompiler.mytype
Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ.
diff --git a/doc/Javadoc/index-files/index-2.html b/doc/Javadoc/index-files/index-2.html index e17282b5..2b69234d 100755 --- a/doc/Javadoc/index-files/index-2.html +++ b/doc/Javadoc/index-files/index-2.html @@ -80,17 +80,17 @@ function windowTitle()
backdoorCreate(String) - Static method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen wird.
backdoorFresh() - Static method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, um neue typlose Variablen zu erzeugen.
backdoorSetName(String) - Method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, - um den Namen einer typlosen Variablen zu verändern. +
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, + um den Namen einer typlosen Variablen zu ver�ndern.
baload - Static variable in class mycompiler.mybytecode.JVMCode
  @@ -142,7 +142,7 @@ Static variable in class mycompiler.mybytecode.bSubst - Variable in class mycompiler.mytype.Pair
  -
build(ClassFile, CodeAttribute, Expr, Vector, boolean, boolean, boolean, Vector) - +
build(ClassFile, CodeAttribute, Expr, Menge, boolean, boolean, boolean, Menge) - Static method in class mycompiler.myoperator.LogOp
 
bytes_to_int(Byte, Byte, Byte, Byte) - diff --git a/doc/Javadoc/index-files/index-20.html b/doc/Javadoc/index-files/index-20.html index 3e272230..de61bf7b 100755 --- a/doc/Javadoc/index-files/index-20.html +++ b/doc/Javadoc/index-files/index-20.html @@ -99,7 +99,7 @@ Constructor for class mycompiler.mytypereconstruction.unify.unify(Type, Type, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
unify(Vector<Pair>, FC_TTO) - +
unify(Menge<Pair>, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
unite(CSet<E>) - @@ -108,8 +108,8 @@ Method in class mycompiler.mytypereconstruction.set.unite(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
unite(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
unite(CSet<E>) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
UNSIGNEDSHIFTRIGHT - Static variable in class mycompiler.myparser.JavaParser diff --git a/doc/Javadoc/index-files/index-21.html b/doc/Javadoc/index-files/index-21.html index 3f82560d..734cea23 100755 --- a/doc/Javadoc/index-files/index-21.html +++ b/doc/Javadoc/index-files/index-21.html @@ -87,7 +87,7 @@ Method in class mycompiler.myparser.varSubst(RefType, Hashtable) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
VectorPair2SubstHashtableVectorPair(Vector<Pair>) - +
MengePair2SubstHashtableMengePair(Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
VOID - diff --git a/doc/Javadoc/index-files/index-3.html b/doc/Javadoc/index-files/index-3.html index e661f3a5..3e116698 100755 --- a/doc/Javadoc/index-files/index-3.html +++ b/doc/Javadoc/index-files/index-3.html @@ -81,7 +81,7 @@ function windowTitle()
calculate_access_flags() - Method in class mycompiler.mymodifier.Modifiers
  -
call_sc_check(Vector, Hashtable, boolean, Hashtable) - +
call_sc_check(Menge, Hashtable, boolean, Hashtable) - Method in class mycompiler.myclass.Method
 
caload - @@ -116,8 +116,8 @@ Constructor for class mycompiler.mystatement.CHashtableSet<E extends IHashSetElement> - Class in mycompiler.mytypereconstruction.set
 
CHashtableSet() - Constructor for class mycompiler.mytypereconstruction.set.CHashtableSet -
Author: Jörg Bäuerle
-
check_anz(Type, Vector, Vector) - +
Author: J�rg B�uerle
+
check_anz(Type, Menge, Menge) - Method in class mycompiler.mystatement.LocalVarDecl
 
checkcast - @@ -132,8 +132,8 @@ Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CInstVarTypeAssumption(String, String, Type, int) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
  -
CIntersectionType - Class in mycompiler.mytypereconstruction
Ein CIntersectionType gruppiert alle Typmöglichkeiten einer - bestimmten Methode, die über den CMethodKey eindeutig definiert ist.
CIntersectionType(String, String, int) - +
CIntersectionType - Class in mycompiler.mytypereconstruction
Ein CIntersectionType gruppiert alle Typm�glichkeiten einer + bestimmten Methode, die �ber den CMethodKey eindeutig definiert ist.
CIntersectionType(String, String, int) - Constructor for class mycompiler.mytypereconstruction.CIntersectionType
 
CIntersectionType(CMethodTypeAssumption) - @@ -165,32 +165,32 @@ Method in class mycompiler.mytype. 
clone() - Method in class mycompiler.mytype.BooleanType -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.CharacterType -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.GenericTypeVar -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.IntegerType -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.RefType
 
clone() - Method in class mycompiler.mytype.ReturnType -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.Type -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytype.TyploseVariable
Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener über die zentrale Instanz in der Registry laufen muss. + Listener �ber die zentrale Instanz in der Registry laufen muss.
clone() - Method in class mycompiler.mytype.Void -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
  @@ -214,10 +214,10 @@ Method in class mycompiler.mytypereconstruction.typeassumption.clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  @@ -234,10 +234,10 @@ Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CMethodTypeAssumption(String, String, Type, int) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
  -
CMultiplyTuple - Class in mycompiler.mytypereconstruction
Container-Klasse für Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CMultiplyTuple() - +
CMultiplyTuple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CMultiplyTuple() - Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
-
CMultiplyTuple(CSubstitutionSet, Vector<Type>, CTypeAssumptionSet) - +
Author: J�rg B�uerle
+
CMultiplyTuple(CSubstitutionSet, Menge<Type>, CTypeAssumptionSet) - Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple
 
CMultiplyTupleSet - Class in mycompiler.mytypereconstruction.set
 
CMultiplyTupleSet() - @@ -309,157 +309,157 @@ Method in class mycompiler.mybytecode.codegen(boolean) - Method in class mycompiler.myclass.Class
  -
codegen(ClassFile, Vector) - +
codegen(ClassFile, Menge) - Method in class mycompiler.myclass.ClassBody
  -
codegen(ClassFile, Vector) - +
codegen(ClassFile, Menge) - Method in class mycompiler.myclass.Constructor
  -
codegen(ClassFile, Vector) - +
codegen(ClassFile, Menge) - Method in class mycompiler.myclass.FieldDecl
 
codegen(ClassFile, CodeAttribute) - Method in class mycompiler.myclass.FormalParameter
  -
codegen(ClassFile, Vector) - +
codegen(ClassFile, Menge) - Method in class mycompiler.myclass.InstVarDecl
  -
codegen(ClassFile, Vector) - +
codegen(ClassFile, Menge) - Method in class mycompiler.myclass.Method
 
codegen(ClassFile, CodeAttribute) - Method in class mycompiler.myclass.ParameterList
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.AddOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.DivideOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.EqualOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.GreaterEquOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.GreaterOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LessEquOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LessOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LogOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.MinusOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.ModuloOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.NotEqualOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.Operator
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.PlusOp
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.TimesOp
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.ArgumentList
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Assign
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Block
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.BoolLiteral
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.CastExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.CharLiteral
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.EmptyStmt
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.IfStmt
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.InstanceOf
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.InstVar
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.IntLiteral
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LocalOrFieldVar
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LocalVarDecl
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.MethodCall
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NegativeExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NewArray
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NewClass
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NotExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Null
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PositivExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PostDecExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PostIncExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PreDecExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PreIncExpr
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Return
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Statement
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.StringLiteral
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.This
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.UnaryExpr
 
codegen(ClassFile, CodeAttribute, String, boolean) - @@ -468,27 +468,27 @@ Method in class mycompiler.mystatement.codegen(ClassFile, CodeAttribute, boolean) - Method in class mycompiler.mystatement.UnaryNot
  -
codegen(ClassFile, CodeAttribute, Vector) - +
codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.WhileStmt
 
codegen(boolean) - Method in class mycompiler.SourceFile
  -
codegen_InstVarDecl(ClassFile, Type, Vector) - +
codegen_InstVarDecl(ClassFile, Type, Menge) - Method in class mycompiler.myclass.DeclId
  -
codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Vector) - +
codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Menge) - Method in class mycompiler.myclass.DeclId
 
codeGeneration() - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. +
Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
codeGeneration() - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. -
complete_parahashtable(Vector, UsedId, Hashtable, boolean) - +
Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum. +
complete_parahashtable(Menge, UsedId, Hashtable, boolean) - Method in class mycompiler.myclass.ClassBody
 
complete_paralist(boolean) - @@ -572,12 +572,12 @@ Method in class mycompiler.mytypereconstruction.set.contains(E) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
contains(E) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
contains(E) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
containsListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
containsListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
  @@ -590,10 +590,10 @@ Method in class mycompiler.mytype.copyType(Type) - Static method in class mycompiler.mytype.Pair
  -
copyVectorPair(Vector<Pair>) - +
copyMengePair(Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
copyVectorVectorPair(Vector<Vector<Pair>>) - +
copyMengeMengePair(Menge<Menge<Pair>>) - Method in class mycompiler.mytypereconstruction.unify.Unify
 
CParaTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CParaTypeAssumption(String, String, int, String, Type, int) - @@ -605,7 +605,7 @@ Constructor for class mycompiler.mybytecode.createNotImplementedException() - Static method in exception mycompiler.myexception.CTypeReconstructionException
  -
CReconstructionTuple - Class in mycompiler.mytypereconstruction
Container-Klasse für Ergebniswerte des Algorithmus TRStart.
CReconstructionTuple() - +
CReconstructionTuple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte des Algorithmus TRStart.
CReconstructionTuple() - Constructor for class mycompiler.mytypereconstruction.CReconstructionTuple
 
CReconstructionTuple(CSubstitutionSet, CTypeAssumptionSet) - @@ -620,7 +620,7 @@ Constructor for class mycompiler.mytypereconstruction.replacementlistener.CSet<E> - Class in mycompiler.mytypereconstruction.set
 
CSet() - Constructor for class mycompiler.mytypereconstruction.set.CSet
  -
CSimpleTest - Class in mycompiler.mytest
Testklasse für die Compiler-API
CSimpleTest() - +
CSimpleTest - Class in mycompiler.mytest
Testklasse f�r die Compiler-API
CSimpleTest() - Constructor for class mycompiler.mytest.CSimpleTest
 
CSubstitution - Class in mycompiler.mytypereconstruction
Implementierung einer Typsubstitution.
CSubstitution() - @@ -635,32 +635,32 @@ Constructor for class mycompiler.mytypereconstruction.CSubstitutionSet - Class in mycompiler.mytypereconstruction.set
 
CSubstitutionSet() - Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet
  -
CSubstitutionSet(Vector<Pair>) - +
CSubstitutionSet(Menge<Pair>) - Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet
  -
CSupportData - Class in mycompiler.mytypereconstruction
Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
CSupportData(FC_TTO, Vector<CTypeReconstructionResult>, String) - +
CSupportData - Class in mycompiler.mytypereconstruction
Container-Klasse f�r bestimmte Hilfsdaten, die beim + Typrekonstruktionsalgorithmus ben�tigt und deshalb + rekursiv weiter gereicht werden.
CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String) - Constructor for class mycompiler.mytypereconstruction.CSupportData
  -
CSupportData(FC_TTO, Vector<CTypeReconstructionResult>, String, String, int, Vector<Integer>, int) - +
CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String, String, int, Menge<Integer>, int) - Constructor for class mycompiler.mytypereconstruction.CSupportData
  -
CTriple - Class in mycompiler.mytypereconstruction
Container-Klasse für Ergebniswerte der Algorithmen TRStmt und TRExp.
CTriple() - +
CTriple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte der Algorithmen TRStmt und TRExp.
CTriple() - Constructor for class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
CTriple(CSubstitutionSet, Type, CTypeAssumptionSet) - Constructor for class mycompiler.mytypereconstruction.CTriple
 
CTripleSet - Class in mycompiler.mytypereconstruction.set
 
CTripleSet() - Constructor for class mycompiler.mytypereconstruction.set.CTripleSet
  -
CTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
Diese Klasse repräsentiert eine Typannahme und bildet einen +
CTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
Diese Klasse repr�sentiert eine Typannahme und bildet einen Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen Typ ab.
CTypeAssumption(String, String, Type, int) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  -
CTypeAssumptionKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, +
CTypeAssumptionKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
Diese Klasse modelliert einen eindeutigen Schl�ssel f�r eine Typannahme, die in einem CTypeAssumptionSet abgelegt wird.
CTypeAssumptionKey() - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
  @@ -670,12 +670,12 @@ Constructor for class mycompiler.mytypereconstruction.set.CTypeReconstructionException - Exception in mycompiler.myexception
 
CTypeReconstructionException(String) - Constructor for exception mycompiler.myexception.CTypeReconstructionException
  -
CTypeReconstructionResult - Class in mycompiler.mytypereconstruction
Diese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination +
CTypeReconstructionResult - Class in mycompiler.mytypereconstruction
Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche Typkombination aller Klassen und deren Methoden sowie lokalen Variablen.
CTypeReconstructionResult() - Constructor for class mycompiler.mytypereconstruction.CTypeReconstructionResult
  -
CVectorSet<E> - Class in mycompiler.mytypereconstruction.set
 
CVectorSet() - -Constructor for class mycompiler.mytypereconstruction.set.CVectorSet +
CMengeSet<E> - Class in mycompiler.mytypereconstruction.set
 
CMengeSet() - +Constructor for class mycompiler.mytypereconstruction.set.CMengeSet
 

diff --git a/doc/Javadoc/index-files/index-5.html b/doc/Javadoc/index-files/index-5.html index 146376a0..a0a853e8 100755 --- a/doc/Javadoc/index-files/index-5.html +++ b/doc/Javadoc/index-files/index-5.html @@ -101,37 +101,37 @@ Method in class mycompiler.mybytecode.equals(Object) - Method in class mycompiler.mytype.BaseType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.BooleanType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.CharacterType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.GenericTypeVar -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.IntegerType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.Pair -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.RefType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.ReturnType -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.Type -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.TyploseVariable -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytype.Void -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equals(Object) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
  @@ -150,27 +150,27 @@ Method in class mycompiler.mytypereconstruction.set.equals(Object) - Method in class mycompiler.mytypereconstruction.set.CSet
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
equals(Object) - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
equals(Object) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
 
equals(Object) - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  @@ -186,11 +186,11 @@ Constructor for class mycompiler.mybytecode.execute() - Method in class mycompiler.mytypereconstruction.CSubstitution
Sucht die eindeutige Instanz der TyplosenVariable in der Registry der - TyplosenVariablen des Syntaxbaumes und führt die Typsubstitution im + TyplosenVariablen des Syntaxbaumes und f�hrt die Typsubstitution im Syntaxbaum durch.
execute() - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet -
Führt jede einzelne CSubstitution aus. +
F�hrt jede einzelne CSubstitution aus.
expr - Variable in class mycompiler.mystatement.ArgumentList
  diff --git a/doc/Javadoc/index-files/index-6.html b/doc/Javadoc/index-files/index-6.html index cdc499b5..5a79ebb9 100755 --- a/doc/Javadoc/index-files/index-6.html +++ b/doc/Javadoc/index-files/index-6.html @@ -96,7 +96,7 @@ Static variable in class mycompiler.mybytecode.fastore - Static variable in class mycompiler.mybytecode.JVMCode
  -
FC_TTO - Class in mycompiler.mytypereconstruction.unify
Hilfsklasse für den Unifizierungsalgorithmus
FC_TTO(Vector, Vector) - +
FC_TTO - Class in mycompiler.mytypereconstruction.unify
Hilfsklasse f�r den Unifizierungsalgorithmus
FC_TTO(Menge, Menge) - Constructor for class mycompiler.mytypereconstruction.unify.FC_TTO
 
fcmpg - @@ -137,7 +137,7 @@ Static variable in class mycompiler.myparser.fireReplaceTypeEvent(CReplaceTypeEvent) - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
fireReplaceTypeEvent(CReplaceTypeEvent) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
  diff --git a/doc/Javadoc/index-files/index-7.html b/doc/Javadoc/index-files/index-7.html index 7f949688..a66d77be 100755 --- a/doc/Javadoc/index-files/index-7.html +++ b/doc/Javadoc/index-files/index-7.html @@ -123,7 +123,7 @@ Method in class mycompiler.mybytecode.get_attributes_length() - Method in class mycompiler.mybytecode.CodeAttribute
  -
get_attributes_Vector() - +
get_attributes_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
 
get_Block() - @@ -171,28 +171,28 @@ Method in class mycompiler.myexception.get_code_length() - Method in class mycompiler.mybytecode.CodeAttribute
  -
get_code_Vector() - +
get_code_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
  -
get_codegen_ArgumentList(Vector) - +
get_codegen_ArgumentList(Menge) - Method in class mycompiler.mystatement.ArgumentList
 
get_codegen_Array_Type() - Method in class mycompiler.mystatement.NewArray
  -
get_codegen_Param_Type(Vector) - +
get_codegen_Param_Type(Menge) - Method in class mycompiler.myclass.Constructor
  -
get_codegen_Param_Type(Vector) - +
get_codegen_Param_Type(Menge) - Method in class mycompiler.myclass.Method
  -
get_codegen_ParameterList(Vector) - +
get_codegen_ParameterList(Menge) - Method in class mycompiler.myclass.ParameterList
  -
get_codegen_Type(String, Vector) - +
get_codegen_Type(String, Menge) - Static method in class mycompiler.mybytecode.JVMCode
  -
get_codegen_Type(Vector) - +
get_codegen_Type(Menge) - Method in class mycompiler.mytype.Type
 
get_codegen_UsedId() - @@ -201,7 +201,7 @@ Method in class mycompiler.myclass.get_codegen_UsedId() - Method in class mycompiler.mystatement.InstVar
  -
get_Command(Vector) - +
get_Command(Menge) - Static method in class mycompiler.mybytecode.JVMCode
 
get_constant_pool() - @@ -222,7 +222,7 @@ Method in class mycompiler.mybytecode.get_descriptor_index() - Method in class mycompiler.mybytecode.MethodInfo
  -
get_exception_table_Vector() - +
get_exception_table_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
 
get_ExceptionList() - @@ -249,7 +249,7 @@ Method in class mycompiler.mystatement.get_Expr2() - Method in class mycompiler.mystatement.Binary
  -
get_FieldDeclVector() - +
get_FieldDeclMenge() - Method in class mycompiler.myclass.ClassBody
 
get_fields() - @@ -279,13 +279,13 @@ Method in class mycompiler.mybytecode.get_info() - Method in class mycompiler.mybytecode.AttributeInfo
  -
get_info_Vector() - +
get_info_Menge() - Method in class mycompiler.mybytecode.AttributeInfo
  -
get_key_vector() - +
get_key_Menge() - Method in class mycompiler.mybytecode.ClassFile
  -
get_local_Vector() - +
get_local_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
 
get_low_bytes() - @@ -429,7 +429,7 @@ Method in class mycompiler.mybytecode.get_name_index() - Method in class mycompiler.mybytecode.MethodInfo
  -
get_Name_Vector() - +
get_Name_Menge() - Method in class mycompiler.mystatement.Expr
 
get_nType(String) - @@ -498,7 +498,7 @@ Method in class mycompiler.mystatement.get_Type_Paralist() - Method in class mycompiler.myclass.Method
  -
get_Type_Vector() - +
get_Type_Menge() - Method in class mycompiler.mystatement.Expr
 
get_Typen() - @@ -527,17 +527,17 @@ Method in class mycompiler.mytypereconstruction.getAPI() - Static method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Stellt eine neue Instanz der CompilerAPI zur Verfügung. +
Author: J�rg B�uerle
+ Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
getAssumedType() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
 
getAssumptionSet() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getAssumptionSet() - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getAssumSet() - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
  @@ -556,8 +556,8 @@ Method in class mycompiler.mytypereconstruction.set.getCardinality() - Method in class mycompiler.mytypereconstruction.set.CSet
  -
getCardinality() - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
getCardinality() - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
getClassIterator() - Method in class mycompiler.SourceFile @@ -583,10 +583,10 @@ Method in class mycompiler.mytypereconstruction.getCurrentMethodParaCount() - Method in class mycompiler.mytypereconstruction.CSupportData
  -
getDeclIdVector() - +
getDeclIdMenge() - Method in class mycompiler.myclass.FieldDecl
  -
getDeclidVector() - +
getDeclidMenge() - Method in class mycompiler.mystatement.LocalVarDecl
 
getElement(IHashSetKey) - @@ -612,16 +612,16 @@ Method in interface mycompiler.mytypereconstruction.set.getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  @@ -643,12 +643,12 @@ Method in class mycompiler.mytypereconstruction.set.getIterator() - Method in class mycompiler.mytypereconstruction.set.CSet
  -
getIterator() - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
getIterator() - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
getKeyString() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getLexem() - Method in class mycompiler.myparser.Token
  @@ -657,7 +657,7 @@ Method in class mycompiler.myclass. 
getLineNumber() - Method in class mycompiler.myclass.FormalParameter -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getLineNumber() - Method in class mycompiler.myclass.InstVarDecl
  @@ -669,7 +669,7 @@ Method in class mycompiler.myparser. 
getLineNumber() - Method in class mycompiler.mystatement.LocalVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getLineNumber() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
  @@ -714,19 +714,19 @@ Method in class mycompiler.mytypereconstruction.typeassumption.getParaAssumptions() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getParaCount() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getParalist() - Method in class mycompiler.mytype.ParaList
 
getParameterCount() - Method in class mycompiler.myclass.Method -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getParameterCount() - Method in class mycompiler.myclass.ParameterList -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getParameterList() - Method in class mycompiler.myclass.Method
  @@ -735,19 +735,19 @@ Method in class mycompiler.mytype. 
getReplacementListeners() - Method in class mycompiler.mytype.TyploseVariable -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getReplacementListeners() - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
 
getResultType() - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getResultTypeIterator() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
 
getResultTypes() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getReturnType() - Method in class mycompiler.myclass.Method
  @@ -759,21 +759,21 @@ Method in class mycompiler.mytypereconstruction.getSubstitutions() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getSubstitutions() - Method in class mycompiler.mytypereconstruction.CTriple -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getSubstitutions() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
 
getSyntaxTree() - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaume zurück. +
Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaume zur�ck.
getSyntaxTree() - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaum zurück. +
Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaum zur�ck.
getTA1Copy() - Method in class mycompiler.mytype.Pair
  @@ -797,28 +797,28 @@ Method in class mycompiler.mystatement.getType() - Method in class mycompiler.mystatement.NewArray -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getType() - Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
getTypeLineNumber() - Method in class mycompiler.myclass.FormalParameter -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getTypeLineNumber() - Method in class mycompiler.myclass.InstVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getTypeLineNumber() - Method in class mycompiler.myclass.Method -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getTypeLineNumber() - Method in class mycompiler.mystatement.ExprStmt -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getTypeLineNumber() - Method in class mycompiler.mystatement.LocalVarDecl -

Author: Jörg Bäuerle +

Author: J�rg B�uerle
getTypeLineNumber() - Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener -
Gibt die Zeilennummer zurück, in der eine TyploseVariable +
Gibt die Zeilennummer zur�ck, in der eine TyploseVariable angelegt worden ist.
getTypeName() - Method in class mycompiler.myclass.FieldDecl @@ -840,9 +840,9 @@ Method in class mycompiler.mytype. 
getTypeVar() - Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: Jörg Bäuerle
-
getVector() - -Method in class mycompiler.mytypereconstruction.set.CVectorSet +
Author: J�rg B�uerle
+
getMenge() - +Method in class mycompiler.mytypereconstruction.set.CMengeSet
 
goto_ - Static variable in class mycompiler.mybytecode.JVMCode diff --git a/doc/Javadoc/index-files/index-8.html b/doc/Javadoc/index-files/index-8.html index a5913c3b..b0808f7f 100755 --- a/doc/Javadoc/index-files/index-8.html +++ b/doc/Javadoc/index-files/index-8.html @@ -101,8 +101,8 @@ Variable in class mycompiler.mytype. 
hashCode() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: Jörg Bäuerle
-
hasSolvedForm(Vector) - +
Author: J�rg B�uerle
+
hasSolvedForm(Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  diff --git a/doc/Javadoc/index-files/index-9.html b/doc/Javadoc/index-files/index-9.html index d43f7c54..0e56710c 100755 --- a/doc/Javadoc/index-files/index-9.html +++ b/doc/Javadoc/index-files/index-9.html @@ -159,7 +159,7 @@ Method in class mycompiler.myoperator.if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.LessOp
  -
if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Vector) - +
if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Menge) - Method in class mycompiler.myoperator.LogOp
 
if_codegen(ClassFile, CodeAttribute, String, boolean) - @@ -168,7 +168,7 @@ Method in class mycompiler.myoperator.if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.RelOp
  -
if_codegen(ClassFile, CodeAttribute, boolean, Vector) - +
if_codegen(ClassFile, CodeAttribute, boolean, Menge) - Method in class mycompiler.mystatement.IfStmt
 
if_codegen(ClassFile, CodeAttribute, boolean) - @@ -266,13 +266,13 @@ Static variable in class mycompiler.mybytecode.init() - Method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Initialisiert den Compiler
init() - Method in interface mycompiler.MyCompilerAPI -
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Initialisiert den Compiler -
init_parahashtable(Vector, boolean) - +
init_parahashtable(Menge, boolean) - Method in class mycompiler.myclass.ClassBody
 
INSTANCEOF - @@ -323,14 +323,14 @@ Static variable in class mycompiler.mybytecode.irem - Static variable in class mycompiler.mybytecode.JVMCode
  -
IReplaceTypeEventProvider - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface für ein Objekt, das ReplaceTypeEvents zur Verfügung stellt und +
IReplaceTypeEventProvider - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface f�r ein Objekt, das ReplaceTypeEvents zur Verf�gung stellt und es TypeReplacementListenern erlaubt, sich zu registrieren.
ireturn - Static variable in class mycompiler.mybytecode.JVMCode
  -
is_declared(Type, Vector) - +
is_declared(Type, Menge) - Method in class mycompiler.myclass.ClassBody
  -
is_declared(Type, Vector) - +
is_declared(Type, Menge) - Method in class mycompiler.mystatement.LocalVarDecl
 
is_Equiv(RefType, Hashtable) - @@ -348,13 +348,13 @@ Static variable in class mycompiler.mybytecode.ishr - Static variable in class mycompiler.mybytecode.JVMCode
  -
isInFC(RefType, RefType, Vector) - +
isInFC(RefType, RefType, Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
 
isInFCrechtsUnify(RefType, RefType, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
  -
isInVector(Vector) - +
isInMenge(Menge) - Method in class mycompiler.mytype.Pair
 
isRealSubClass(String, String, FC_TTO) - @@ -378,7 +378,7 @@ Static variable in class mycompiler.mybytecode.istore_3 - Static variable in class mycompiler.mybytecode.JVMCode
  -
istParameterOK(Vector, Vector) - +
istParameterOK(Menge, Menge) - Method in class mycompiler.myclass.ClassBody
 
isTV(int) - @@ -393,7 +393,7 @@ Method in class mycompiler.mytypereconstruction.typeassumption.isub - Static variable in class mycompiler.mybytecode.JVMCode
  -
ITypeReplacementListener - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface für einen TypeReplacementListener, der es ermöglicht, +
ITypeReplacementListener - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface f�r einen TypeReplacementListener, der es erm�glicht, einen Typ gegen einen anderen auszutauschen.
iushr - Static variable in class mycompiler.mybytecode.JVMCode
  diff --git a/doc/Javadoc/mycompiler/MyCompiler.html b/doc/Javadoc/mycompiler/MyCompiler.html index 71455db9..922cea6f 100755 --- a/doc/Javadoc/mycompiler/MyCompiler.html +++ b/doc/Javadoc/mycompiler/MyCompiler.html @@ -208,8 +208,8 @@ java.lang.Object codeGeneration()
-          Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. +          Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum. @@ -217,8 +217,8 @@ java.lang.Object getAPI()
-          Author: Jörg Bäuerle
- Stellt eine neue Instanz der CompilerAPI zur Verfügung. +          Author: J�rg B�uerle
+ Stellt eine neue Instanz der CompilerAPI zur Verf�gung. @@ -226,8 +226,8 @@ java.lang.Object getSyntaxTree()
-          Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaume zurück. +          Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaume zur�ck. @@ -235,7 +235,7 @@ java.lang.Object init()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Initialisiert den Compiler @@ -244,8 +244,8 @@ java.lang.Object main(java.lang.String[] args)
-          Author: Jörg Bäuerle
- Die Main-Funktion, über die der Compiler auch per Konsole gestartet +          Author: J�rg B�uerle
+ Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet werden kann. @@ -254,7 +254,7 @@ java.lang.Object parse(java.io.File file)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft die Parse-Methode. @@ -263,7 +263,7 @@ java.lang.Object parse(java.lang.String srcCode)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft die Parse-Methode. @@ -273,8 +273,8 @@ java.lang.Object int nLevel)
-          Author: Jörg Bäuerle
- Von meinen Vorgängern eingesetzte Methode zur Ausgabe von +          Author: J�rg B�uerle
+ Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von diferenzierten Debug-Ausgaben. @@ -283,8 +283,8 @@ java.lang.Object semanticCheck()
-          Author: Jörg Bäuerle
- Ruft über SourceFile.sc_check(false) +          Author: J�rg B�uerle
+ Ruft �ber SourceFile.sc_check(false) den alten Semantik-Check ohne Typrekonstruktion auf. @@ -293,16 +293,16 @@ java.lang.Object setDebugLevel(int debugLevel)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Setzt den Debug-Level - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. @@ -442,8 +442,8 @@ getAPI
 public static MyCompilerAPI getAPI()
-
Author: Jörg Bäuerle
- Stellt eine neue Instanz der CompilerAPI zur Verfügung. +
Author: J�rg B�uerle
+ Stellt eine neue Instanz der CompilerAPI zur Verf�gung. Diese Methode sollte von der IDE aus aufgerufen werden, um eine Quellcode-Datei zu kompilieren.

@@ -463,8 +463,8 @@ printDebugInfo public static void printDebugInfo(java.lang.String str1, int nLevel)

-
Author: Jörg Bäuerle
- Von meinen Vorgängern eingesetzte Methode zur Ausgabe von +
Author: J�rg B�uerle
+ Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von diferenzierten Debug-Ausgaben.

@@ -481,7 +481,7 @@ init
 public void init()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Initialisiert den Compiler

@@ -498,7 +498,7 @@ setDebugLevel
 public boolean setDebugLevel(int debugLevel)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Setzt den Debug-Level

@@ -506,7 +506,7 @@ public boolean setDebugLevel(int debugLevel)
Parameters:
debugLevel - Debug-Level -
Returns:
true wenn ein korrekter Wert übergeben worden ist, false sonst.
+
Returns:
true wenn ein korrekter Wert �bergeben worden ist, false sonst.

@@ -519,7 +519,7 @@ public void parse(java.io.File file) java.io.IOException, JavaParser.yyException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft die Parse-Methode.

@@ -529,7 +529,7 @@ public void parse(java.io.File file)
Parameters:
file - Die Quellcode-Datei
Throws:
java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert. -
java.io.IOException - Wenn was schief läuft. +
java.io.IOException - Wenn was schief l�uft.
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
@@ -542,7 +542,7 @@ public void parse(java.lang.String srcCode) throws java.io.IOException, JavaParser.yyException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft die Parse-Methode.

@@ -551,7 +551,7 @@ public void parse(java.lang.String srcCode)
Parameters:
srcCode - Der zu parsende Quellcode
Throws: -
java.io.IOException - Wenn was schief läuft. +
java.io.IOException - Wenn was schief l�uft.
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
@@ -564,8 +564,8 @@ public void semanticCheck() throws java.lang.NullPointerException, SCException
-
Author: Jörg Bäuerle
- Ruft über SourceFile.sc_check(false) +
Author: J�rg B�uerle
+ Ruft �ber SourceFile.sc_check(false) den alten Semantik-Check ohne Typrekonstruktion auf.

@@ -583,11 +583,11 @@ public void semanticCheck()

typeReconstruction

-public java.util.Vector<CTypeReconstructionResult> typeReconstruction()
+public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
                                                                throws java.lang.NullPointerException,
                                                                       CTypeReconstructionException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf.

@@ -595,7 +595,7 @@ public java.util.Vector<CTypeReconstructionException - Wenn ein Fehler bei der Typrekonstruktion auftritt.
@@ -609,17 +609,17 @@ getSyntaxTree public SourceFile getSyntaxTree() throws java.lang.NullPointerException
-
Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaume zurück. +
Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaume zur�ck.

Specified by:
getSyntaxTree in interface MyCompilerAPI
-
Returns:
Die Syntaxbäume +
Returns:
Die Syntaxb�ume
Throws: -
java.lang.NullPointerException - Wenn noch keine Syntaxbäume berechnet worden sind.
+
java.lang.NullPointerException - Wenn noch keine Syntaxb�ume berechnet worden sind.

@@ -630,8 +630,8 @@ codeGeneration public void codeGeneration() throws java.lang.NullPointerException
-
Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. +
Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum.

Specified by:
codeGeneration in interface MyCompilerAPI
@@ -649,8 +649,8 @@ main
 public static void main(java.lang.String[] args)
-
Author: Jörg Bäuerle
- Die Main-Funktion, über die der Compiler auch per Konsole gestartet +
Author: J�rg B�uerle
+ Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet werden kann.

diff --git a/doc/Javadoc/mycompiler/MyCompilerAPI.html b/doc/Javadoc/mycompiler/MyCompilerAPI.html index 705eae25..1d8b6a33 100755 --- a/doc/Javadoc/mycompiler/MyCompilerAPI.html +++ b/doc/Javadoc/mycompiler/MyCompilerAPI.html @@ -108,7 +108,7 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der
Version:
$Date: 2005/06/28 19:19:09 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -128,8 +128,8 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der codeGeneration()
-          Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. +          Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum. @@ -137,8 +137,8 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der getSyntaxTree()
-          Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaum zurück. +          Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaum zur�ck. @@ -146,7 +146,7 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der init()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Initialisiert den Compiler @@ -155,7 +155,7 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der parse(java.io.File file)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf. @@ -164,7 +164,7 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der parse(java.lang.String srcCode)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Parst einen String und baut den abstrakten Syntaxbaum auf. @@ -173,7 +173,7 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der semanticCheck()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Semantik-Check ohne Typrekonstruktion auf. @@ -182,16 +182,16 @@ Schnittstellen-Klasse zum Compiler. Diese Klasse soll der setDebugLevel(int debugLevel)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Setzt den Debug-Level - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. @@ -213,7 +213,7 @@ init
 void init()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Initialisiert den Compiler

@@ -227,12 +227,12 @@ setDebugLevel
 boolean setDebugLevel(int debugLevel)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Setzt den Debug-Level

Parameters:
debugLevel - Debug-Level -
Returns:
true wenn ein korrekter Wert übergeben worden ist, false sonst.
+
Returns:
true wenn ein korrekter Wert �bergeben worden ist, false sonst.

@@ -245,14 +245,14 @@ void parse(java.io.File file) java.io.IOException, JavaParser.yyException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.

Parameters:
file - Die Quellcode-Datei
Throws:
java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert. -
java.io.IOException - Wenn was schief läuft. +
java.io.IOException - Wenn was schief l�uft.
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
@@ -265,13 +265,13 @@ void parse(java.lang.String srcCode) throws java.io.IOException, JavaParser.yyException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Parst einen String und baut den abstrakten Syntaxbaum auf.

Parameters:
srcCode - Der zu parsende Quellcode
Throws: -
java.io.IOException - Wenn was schief läuft. +
java.io.IOException - Wenn was schief l�uft.
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
@@ -284,9 +284,9 @@ void semanticCheck() throws java.lang.NullPointerException, SCException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Semantik-Check ohne Typrekonstruktion auf. Diese Methode sollte nicht mehr verwendet werden. - Es wird nicht gewährleistet, dass sie korrekt arbeitet.
+ Es wird nicht gew�hrleistet, dass sie korrekt arbeitet.
Stattdessen sollte besser die Methode \code{typeReconstruction()} verwendet werden.

@@ -301,16 +301,16 @@ void semanticCheck()

typeReconstruction

-java.util.Vector<CTypeReconstructionResult> typeReconstruction()
+de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
                                                                throws java.lang.NullPointerException,
                                                                       CTypeReconstructionException
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf.

-
Returns:
Die Menge aller möglichen Typkombinationen +
Returns:
Die Menge aller m�glichen Typkombinationen
Throws:
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist.
CTypeReconstructionException - Wenn ein Fehler bei der Typrekonstruktion auftritt.
@@ -324,12 +324,12 @@ getSyntaxTree SourceFile getSyntaxTree() throws java.lang.NullPointerException
-
Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaum zurück. +
Author: J�rg B�uerle
+ Liefert den geparsten Syntaxbaum zur�ck.

-
Returns:
Die Syntaxbäume +
Returns:
Die Syntaxb�ume
Throws:
java.lang.NullPointerException - Wenn noch kein Syntaxbaum berechnet worden ist.
@@ -342,8 +342,8 @@ codeGeneration void codeGeneration() throws java.lang.NullPointerException
-
Author: Jörg Bäuerle
- Generiert den Bytecode und das Class-File für den Syntaxbaum. +
Author: J�rg B�uerle
+ Generiert den Bytecode und das Class-File f�r den Syntaxbaum.

Parameters:
syntaxTree - Der Syntaxbaum diff --git a/doc/Javadoc/mycompiler/SourceFile.html b/doc/Javadoc/mycompiler/SourceFile.html index 06e513ea..d64b478c 100755 --- a/doc/Javadoc/mycompiler/SourceFile.html +++ b/doc/Javadoc/mycompiler/SourceFile.html @@ -111,7 +111,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge KlassenVektor
@@ -185,11 +185,11 @@ java.lang.Object - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
typeReconstruction()
-          Tyrekonstruktionsalgorithmus: ruft für jede Klasse den Algorithmus TRProg auf. +          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.   @@ -217,7 +217,7 @@ java.lang.Object

KlassenVektor

-public java.util.Vector KlassenVektor
+public de.dhbwstuttgart.typeinference.Menge KlassenVektor
@@ -300,20 +300,20 @@ public

typeReconstruction

-public java.util.Vector<CTypeReconstructionResult> typeReconstruction()
+public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
                                                                throws CTypeReconstructionException
-
Tyrekonstruktionsalgorithmus: ruft für jede Klasse den Algorithmus TRProg auf. - Dessen Ergebnismenge A, die Menge aller Typannahmen, für eine Klasse dient als - Eingabe für TRProg der nächsten Klasse. Am Ende enthält A alle möglichen - Typkombinationen für alle Klassen zusammen. -
Author: Jörg Bäuerle +
Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. + Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als + Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen + Typkombinationen f�r alle Klassen zusammen. +
Author: J�rg B�uerle

-
Returns:
Liste aller möglichen Typkombinationen +
Returns:
Liste aller m�glichen Typkombinationen
Throws: -
CTypeReconstructionException - Wenn was schief läuft
+
CTypeReconstructionException - Wenn was schief l�uft

diff --git a/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html b/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html index e5ab06d0..f2b8aec8 100755 --- a/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html +++ b/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html @@ -146,8 +146,8 @@ java.lang.Object - java.util.Vector -get_info_Vector() + de.dhbwstuttgart.typeinference.Menge +get_info_Menge()
            @@ -171,7 +171,7 @@ java.lang.Object  void -set_info(java.util.Vector t) +set_info(de.dhbwstuttgart.typeinference.Menge t)
            @@ -236,10 +236,10 @@ public byte[] get_info()

-

-get_info_Vector

+

+get_info_Menge

-public java.util.Vector get_info_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_info_Menge()
@@ -272,10 +272,10 @@ public void set_info(byte[] t)

-

+

set_info

-public void set_info(java.util.Vector t)
+public void set_info(de.dhbwstuttgart.typeinference.Menge t)
diff --git a/doc/Javadoc/mycompiler/mybytecode/ClassFile.html b/doc/Javadoc/mycompiler/mybytecode/ClassFile.html index 7cd59ce2..9915c070 100755 --- a/doc/Javadoc/mycompiler/mybytecode/ClassFile.html +++ b/doc/Javadoc/mycompiler/mybytecode/ClassFile.html @@ -243,13 +243,13 @@ java.lang.Object  void -add_method(java.lang.String name, +add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -272,7 +272,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -280,7 +280,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_class_block()
@@ -297,7 +297,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_constant_pool()
@@ -313,7 +313,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_fields()
@@ -321,15 +321,15 @@ java.lang.Object - java.util.Vector -get_key_vector() + de.dhbwstuttgart.typeinference.Menge +get_key_Menge()
            - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_methods()
@@ -370,7 +370,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
            @@ -378,7 +378,7 @@ java.lang.Object  void -set_constant_pool(java.util.Vector t) +set_constant_pool(de.dhbwstuttgart.typeinference.Menge t)
            @@ -394,7 +394,7 @@ java.lang.Object  void -set_fields(java.util.Vector t) +set_fields(de.dhbwstuttgart.typeinference.Menge t)
            @@ -402,7 +402,7 @@ java.lang.Object  void -set_methods(java.util.Vector t) +set_methods(de.dhbwstuttgart.typeinference.Menge t)
            @@ -605,7 +605,7 @@ public void add_class(java.lang.String name,

-

+

add_method

 public void add_method(java.lang.String name,
@@ -614,7 +614,7 @@ public void add_method(java.lang.String name,
                        Type type,
                        Block block,
                        short acc_flag,
-                       java.util.Vector paralist)
+                       de.dhbwstuttgart.typeinference.Menge paralist)
                 throws JVMCodeException
@@ -667,10 +667,10 @@ public int add_field_ref(java.lang.String name,

-

+

set_constant_pool

-public void set_constant_pool(java.util.Vector t)
+public void set_constant_pool(de.dhbwstuttgart.typeinference.Menge t)
@@ -711,10 +711,10 @@ public void set_super_class(short t)

-

+

set_fields

-public void set_fields(java.util.Vector t)
+public void set_fields(de.dhbwstuttgart.typeinference.Menge t)
@@ -722,10 +722,10 @@ public void set_fields(java.util.Vector t)

-

+

set_methods

-public void set_methods(java.util.Vector t)
+public void set_methods(de.dhbwstuttgart.typeinference.Menge t)
@@ -733,10 +733,10 @@ public void set_methods(java.util.Vector t)

-

+

set_attributes

-public void set_attributes(java.util.Vector t)
+public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
@@ -780,7 +780,7 @@ public void add_classblock_Element(

get_constant_pool

-public java.util.Vector get_constant_pool()
+public de.dhbwstuttgart.typeinference.Menge get_constant_pool()
@@ -824,7 +824,7 @@ public short get_super_class()

get_fields

-public java.util.Vector get_fields()
+public de.dhbwstuttgart.typeinference.Menge get_fields()
@@ -835,7 +835,7 @@ public java.util.Vector get_fields()

get_methods

-public java.util.Vector get_methods()
+public de.dhbwstuttgart.typeinference.Menge get_methods()
@@ -846,7 +846,7 @@ public java.util.Vector get_methods()

get_attributes

-public java.util.Vector get_attributes()
+public de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -854,10 +854,10 @@ public java.util.Vector get_attributes()

-

-get_key_vector

+

+get_key_Menge

-public java.util.Vector get_key_vector()
+public de.dhbwstuttgart.typeinference.Menge get_key_Menge()
@@ -902,7 +902,7 @@ public short get_constant_pool_element(byte b,

get_class_block

-public java.util.Vector get_class_block()
+public de.dhbwstuttgart.typeinference.Menge get_class_block()
diff --git a/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html b/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html index 54e25649..31d11a27 100755 --- a/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html +++ b/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html @@ -196,8 +196,8 @@ java.lang.Object - java.util.Vector -get_attributes_Vector() + de.dhbwstuttgart.typeinference.Menge +get_attributes_Menge()
            @@ -212,16 +212,16 @@ java.lang.Object - java.util.Vector -get_code_Vector() + de.dhbwstuttgart.typeinference.Menge +get_code_Menge()
            - java.util.Vector -get_exception_table_Vector() + de.dhbwstuttgart.typeinference.Menge +get_exception_table_Menge()
            @@ -236,8 +236,8 @@ java.lang.Object - java.util.Vector -get_local_Vector() + de.dhbwstuttgart.typeinference.Menge +get_local_Menge()
            @@ -253,7 +253,7 @@ java.lang.Object  void -set_attributes_Vector(java.util.Vector t) +set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t)
            @@ -279,7 +279,7 @@ java.lang.Object  void -set_exception_table_Vector(java.util.Vector t) +set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t)
            @@ -334,10 +334,10 @@ public CodeAttribute(java.lang.String class_name, -

-get_code_Vector

+

+get_code_Menge

-public java.util.Vector get_code_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_code_Menge()
@@ -345,10 +345,10 @@ public java.util.Vector get_code_Vector()

-

-get_exception_table_Vector

+

+get_exception_table_Menge

-public java.util.Vector get_exception_table_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_exception_table_Menge()
@@ -356,10 +356,10 @@ public java.util.Vector get_exception_table_Vector()

-

-get_attributes_Vector

+

+get_attributes_Menge

-public java.util.Vector get_attributes_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_attributes_Menge()
@@ -367,10 +367,10 @@ public java.util.Vector get_attributes_Vector()

-

-get_local_Vector

+

+get_local_Menge

-public java.util.Vector get_local_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_local_Menge()
@@ -519,10 +519,10 @@ public int get_attributes_length()

-

-set_exception_table_Vector

+

+set_exception_table_Menge

-public void set_exception_table_Vector(java.util.Vector t)
+public void set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t)
@@ -530,10 +530,10 @@ public void set_exception_table_Vector(java.util.Vector t)

-

-set_attributes_Vector

+

+set_attributes_Menge

-public void set_attributes_Vector(java.util.Vector t)
+public void set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t)
diff --git a/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html b/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html index 6c7f37fc..474df3c3 100755 --- a/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html +++ b/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html @@ -145,7 +145,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -202,7 +202,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
            @@ -356,7 +356,7 @@ public short get_descriptor_index()

get_attributes

-public java.util.Vector get_attributes()
+public de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -430,10 +430,10 @@ public void set_descriptor_index(short t)

-

+

set_attributes

-public void set_attributes(java.util.Vector t)
+public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
diff --git a/doc/Javadoc/mycompiler/mybytecode/JVMCode.html b/doc/Javadoc/mycompiler/mybytecode/JVMCode.html index 253fc85e..2b94eb7d 100755 --- a/doc/Javadoc/mycompiler/mybytecode/JVMCode.html +++ b/doc/Javadoc/mycompiler/mybytecode/JVMCode.html @@ -1894,8 +1894,8 @@ java.lang.Object static java.lang.String -get_codegen_Type(java.lang.String type, - java.util.Vector paralist) +get_codegen_Type(java.lang.String type, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1903,7 +1903,7 @@ java.lang.Object static void -get_Command(java.util.Vector b) +get_Command(de.dhbwstuttgart.typeinference.Menge b)
            @@ -4685,11 +4685,11 @@ public static int get_nType(java.lang.String type)

-

+

get_codegen_Type

 public static java.lang.String get_codegen_Type(java.lang.String type,
-                                                java.util.Vector paralist)
+ de.dhbwstuttgart.typeinference.Menge paralist)
@@ -4697,10 +4697,10 @@ public static java.lang.String get_codegen_Type(java.lang.String typ

-

+

get_Command

-public static void get_Command(java.util.Vector b)
+public static void get_Command(de.dhbwstuttgart.typeinference.Menge b)
                         throws JVMCodeException
diff --git a/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html b/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html index d2433692..06128bc9 100755 --- a/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html +++ b/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html @@ -145,7 +145,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -178,7 +178,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
            @@ -275,7 +275,7 @@ public short get_descriptor_index()

get_attributes

-public java.util.Vector get_attributes()
+public de.dhbwstuttgart.typeinference.Menge get_attributes()
@@ -316,10 +316,10 @@ public void set_descriptor_index(short t)

-

+

set_attributes

-public void set_attributes(java.util.Vector t)
+public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html b/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html index a6e26ab4..baad597a 100755 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html +++ b/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html @@ -309,9 +309,9 @@ Uses of  void -DeclId.codegen_InstVarDecl(ClassFile classfile, +DeclId.codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -319,10 +319,10 @@ Uses of  void -DeclId.codegen_LocalVarDecl(ClassFile classfile, +DeclId.codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -348,8 +348,8 @@ Uses of  void -Method.codegen(ClassFile classfile, - java.util.Vector paralist) +Method.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -357,8 +357,8 @@ Uses of  void -InstVarDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +InstVarDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -366,8 +366,8 @@ Uses of abstract  void -FieldDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +FieldDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -375,8 +375,8 @@ Uses of  void -Constructor.codegen(ClassFile classfile, - java.util.Vector paralist) +Constructor.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -384,8 +384,8 @@ Uses of  void -ClassBody.codegen(ClassFile classfile, - java.util.Vector paralist) +ClassBody.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -410,14 +410,14 @@ Uses of static void -LogOp.build(ClassFile classfile, +LogOp.build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -425,11 +425,11 @@ Uses of  void -TimesOp.codegen(ClassFile classfile, +TimesOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -437,11 +437,11 @@ Uses of  void -PlusOp.codegen(ClassFile classfile, +PlusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -449,11 +449,11 @@ Uses of abstract  void -Operator.codegen(ClassFile classfile, +Operator.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -461,11 +461,11 @@ Uses of  void -NotEqualOp.codegen(ClassFile classfile, +NotEqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -473,11 +473,11 @@ Uses of  void -ModuloOp.codegen(ClassFile classfile, +ModuloOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -485,11 +485,11 @@ Uses of  void -MinusOp.codegen(ClassFile classfile, +MinusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -497,11 +497,11 @@ Uses of  void -LogOp.codegen(ClassFile classfile, +LogOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -509,11 +509,11 @@ Uses of  void -LessOp.codegen(ClassFile classfile, +LessOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -521,11 +521,11 @@ Uses of  void -LessEquOp.codegen(ClassFile classfile, +LessEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -533,11 +533,11 @@ Uses of  void -GreaterOp.codegen(ClassFile classfile, +GreaterOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -545,11 +545,11 @@ Uses of  void -GreaterEquOp.codegen(ClassFile classfile, +GreaterEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -557,11 +557,11 @@ Uses of  void -EqualOp.codegen(ClassFile classfile, +EqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -569,11 +569,11 @@ Uses of  void -DivideOp.codegen(ClassFile classfile, +DivideOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -581,11 +581,11 @@ Uses of abstract  void -AddOp.codegen(ClassFile classfile, +AddOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -593,13 +593,13 @@ Uses of  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -684,12 +684,12 @@ Uses of  void -LogOp.loop_codegen(ClassFile classfile, +LogOp.loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -735,9 +735,9 @@ Uses of  void -WhileStmt.codegen(ClassFile classfile, +WhileStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -745,9 +745,9 @@ Uses of abstract  void -UnaryExpr.codegen(ClassFile classfile, +UnaryExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -755,9 +755,9 @@ Uses of  void -This.codegen(ClassFile classfile, +This.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -765,9 +765,9 @@ Uses of  void -StringLiteral.codegen(ClassFile classfile, +StringLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -775,9 +775,9 @@ Uses of abstract  void -Statement.codegen(ClassFile classfile, +Statement.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -785,9 +785,9 @@ Uses of  void -Return.codegen(ClassFile classfile, +Return.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -795,9 +795,9 @@ Uses of  void -PreIncExpr.codegen(ClassFile classfile, +PreIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -805,9 +805,9 @@ Uses of  void -PreDecExpr.codegen(ClassFile classfile, +PreDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -815,9 +815,9 @@ Uses of  void -PostIncExpr.codegen(ClassFile classfile, +PostIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -825,9 +825,9 @@ Uses of  void -PostDecExpr.codegen(ClassFile classfile, +PostDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -835,9 +835,9 @@ Uses of  void -PositivExpr.codegen(ClassFile classfile, +PositivExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -845,9 +845,9 @@ Uses of  void -Null.codegen(ClassFile classfile, +Null.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -855,9 +855,9 @@ Uses of  void -NotExpr.codegen(ClassFile classfile, +NotExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -865,9 +865,9 @@ Uses of  void -NewClass.codegen(ClassFile classfile, +NewClass.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -875,9 +875,9 @@ Uses of  void -NewArray.codegen(ClassFile classfile, +NewArray.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -885,9 +885,9 @@ Uses of  void -NegativeExpr.codegen(ClassFile classfile, +NegativeExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -895,9 +895,9 @@ Uses of  void -MethodCall.codegen(ClassFile classfile, +MethodCall.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -905,9 +905,9 @@ Uses of  void -LocalVarDecl.codegen(ClassFile classfile, +LocalVarDecl.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -915,9 +915,9 @@ Uses of  void -LocalOrFieldVar.codegen(ClassFile classfile, +LocalOrFieldVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -925,9 +925,9 @@ Uses of  void -IntLiteral.codegen(ClassFile classfile, +IntLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -935,9 +935,9 @@ Uses of  void -InstVar.codegen(ClassFile classfile, +InstVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -945,9 +945,9 @@ Uses of  void -InstanceOf.codegen(ClassFile classfile, +InstanceOf.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -955,9 +955,9 @@ Uses of  void -IfStmt.codegen(ClassFile classfile, +IfStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -965,9 +965,9 @@ Uses of  void -EmptyStmt.codegen(ClassFile classfile, +EmptyStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -975,9 +975,9 @@ Uses of  void -CharLiteral.codegen(ClassFile classfile, +CharLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -985,9 +985,9 @@ Uses of  void -CastExpr.codegen(ClassFile classfile, +CastExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -995,9 +995,9 @@ Uses of  void -BoolLiteral.codegen(ClassFile classfile, +BoolLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1005,9 +1005,9 @@ Uses of  void -Block.codegen(ClassFile classfile, +Block.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1015,9 +1015,9 @@ Uses of  void -Binary.codegen(ClassFile classfile, +Binary.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1025,9 +1025,9 @@ Uses of  void -Assign.codegen(ClassFile classfile, +Assign.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1035,9 +1035,9 @@ Uses of  void -ArgumentList.codegen(ClassFile classfile, +ArgumentList.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1055,10 +1055,10 @@ Uses of  void -IfStmt.if_codegen(ClassFile classfile, +IfStmt.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1066,11 +1066,11 @@ Uses of  void -WhileStmt.loop_codegen(ClassFile classfile, +WhileStmt.loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1078,9 +1078,9 @@ Uses of  void -NegativeExpr.neg_codegen(ClassFile classfile, +NegativeExpr.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1088,9 +1088,9 @@ Uses of  void -Binary.neg_codegen(ClassFile classfile, +Binary.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1098,9 +1098,9 @@ Uses of  void -NotExpr.not_codegen(ClassFile classfile, +NotExpr.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1108,9 +1108,9 @@ Uses of  void -Binary.not_codegen(ClassFile classfile, +Binary.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html index 68b45fb4..1d4935ec 100755 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html +++ b/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html @@ -117,10 +117,10 @@ Uses of  void -DeclId.codegen_LocalVarDecl(ClassFile classfile, +DeclId.codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -163,14 +163,14 @@ Uses of static void -LogOp.build(ClassFile classfile, +LogOp.build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -178,11 +178,11 @@ Uses of  void -TimesOp.codegen(ClassFile classfile, +TimesOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -190,11 +190,11 @@ Uses of  void -PlusOp.codegen(ClassFile classfile, +PlusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -202,11 +202,11 @@ Uses of abstract  void -Operator.codegen(ClassFile classfile, +Operator.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -214,11 +214,11 @@ Uses of  void -NotEqualOp.codegen(ClassFile classfile, +NotEqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -226,11 +226,11 @@ Uses of  void -ModuloOp.codegen(ClassFile classfile, +ModuloOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -238,11 +238,11 @@ Uses of  void -MinusOp.codegen(ClassFile classfile, +MinusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -250,11 +250,11 @@ Uses of  void -LogOp.codegen(ClassFile classfile, +LogOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -262,11 +262,11 @@ Uses of  void -LessOp.codegen(ClassFile classfile, +LessOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -274,11 +274,11 @@ Uses of  void -LessEquOp.codegen(ClassFile classfile, +LessEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -286,11 +286,11 @@ Uses of  void -GreaterOp.codegen(ClassFile classfile, +GreaterOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -298,11 +298,11 @@ Uses of  void -GreaterEquOp.codegen(ClassFile classfile, +GreaterEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -310,11 +310,11 @@ Uses of  void -EqualOp.codegen(ClassFile classfile, +EqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -322,11 +322,11 @@ Uses of  void -DivideOp.codegen(ClassFile classfile, +DivideOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -334,11 +334,11 @@ Uses of abstract  void -AddOp.codegen(ClassFile classfile, +AddOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -346,13 +346,13 @@ Uses of  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -437,12 +437,12 @@ Uses of  void -LogOp.loop_codegen(ClassFile classfile, +LogOp.loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -450,8 +450,8 @@ Uses of static void -LogOp.replace_index(CodeAttribute code, - java.util.Vector indices, +LogOp.replace_index(CodeAttribute code, + de.dhbwstuttgart.typeinference.Menge indices, int else_index, int then_index) @@ -499,9 +499,9 @@ Uses of  void -WhileStmt.codegen(ClassFile classfile, +WhileStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -509,9 +509,9 @@ Uses of abstract  void -UnaryExpr.codegen(ClassFile classfile, +UnaryExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -519,9 +519,9 @@ Uses of  void -This.codegen(ClassFile classfile, +This.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -529,9 +529,9 @@ Uses of  void -StringLiteral.codegen(ClassFile classfile, +StringLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -539,9 +539,9 @@ Uses of abstract  void -Statement.codegen(ClassFile classfile, +Statement.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -549,9 +549,9 @@ Uses of  void -Return.codegen(ClassFile classfile, +Return.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -559,9 +559,9 @@ Uses of  void -PreIncExpr.codegen(ClassFile classfile, +PreIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -569,9 +569,9 @@ Uses of  void -PreDecExpr.codegen(ClassFile classfile, +PreDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -579,9 +579,9 @@ Uses of  void -PostIncExpr.codegen(ClassFile classfile, +PostIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -589,9 +589,9 @@ Uses of  void -PostDecExpr.codegen(ClassFile classfile, +PostDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -599,9 +599,9 @@ Uses of  void -PositivExpr.codegen(ClassFile classfile, +PositivExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -609,9 +609,9 @@ Uses of  void -Null.codegen(ClassFile classfile, +Null.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -619,9 +619,9 @@ Uses of  void -NotExpr.codegen(ClassFile classfile, +NotExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -629,9 +629,9 @@ Uses of  void -NewClass.codegen(ClassFile classfile, +NewClass.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -639,9 +639,9 @@ Uses of  void -NewArray.codegen(ClassFile classfile, +NewArray.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -649,9 +649,9 @@ Uses of  void -NegativeExpr.codegen(ClassFile classfile, +NegativeExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -659,9 +659,9 @@ Uses of  void -MethodCall.codegen(ClassFile classfile, +MethodCall.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -669,9 +669,9 @@ Uses of  void -LocalVarDecl.codegen(ClassFile classfile, +LocalVarDecl.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -679,9 +679,9 @@ Uses of  void -LocalOrFieldVar.codegen(ClassFile classfile, +LocalOrFieldVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -689,9 +689,9 @@ Uses of  void -IntLiteral.codegen(ClassFile classfile, +IntLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -699,9 +699,9 @@ Uses of  void -InstVar.codegen(ClassFile classfile, +InstVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -709,9 +709,9 @@ Uses of  void -InstanceOf.codegen(ClassFile classfile, +InstanceOf.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -719,9 +719,9 @@ Uses of  void -IfStmt.codegen(ClassFile classfile, +IfStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -729,9 +729,9 @@ Uses of  void -EmptyStmt.codegen(ClassFile classfile, +EmptyStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -739,9 +739,9 @@ Uses of  void -CharLiteral.codegen(ClassFile classfile, +CharLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -749,9 +749,9 @@ Uses of  void -CastExpr.codegen(ClassFile classfile, +CastExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -759,9 +759,9 @@ Uses of  void -BoolLiteral.codegen(ClassFile classfile, +BoolLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -769,9 +769,9 @@ Uses of  void -Block.codegen(ClassFile classfile, +Block.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -779,9 +779,9 @@ Uses of  void -Binary.codegen(ClassFile classfile, +Binary.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -789,9 +789,9 @@ Uses of  void -Assign.codegen(ClassFile classfile, +Assign.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -799,9 +799,9 @@ Uses of  void -ArgumentList.codegen(ClassFile classfile, +ArgumentList.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -819,10 +819,10 @@ Uses of  void -IfStmt.if_codegen(ClassFile classfile, +IfStmt.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -830,11 +830,11 @@ Uses of  void -WhileStmt.loop_codegen(ClassFile classfile, +WhileStmt.loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -842,9 +842,9 @@ Uses of  void -NegativeExpr.neg_codegen(ClassFile classfile, +NegativeExpr.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -852,9 +852,9 @@ Uses of  void -Binary.neg_codegen(ClassFile classfile, +Binary.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -862,9 +862,9 @@ Uses of  void -NotExpr.not_codegen(ClassFile classfile, +NotExpr.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -872,9 +872,9 @@ Uses of  void -Binary.not_codegen(ClassFile classfile, +Binary.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            diff --git a/doc/Javadoc/mycompiler/myclass/Class.html b/doc/Javadoc/mycompiler/myclass/Class.html index c93ad0ba..6893f34e 100755 --- a/doc/Javadoc/mycompiler/myclass/Class.html +++ b/doc/Javadoc/mycompiler/myclass/Class.html @@ -119,7 +119,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge vParaOrg
@@ -161,7 +161,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge complete_paralist(boolean ext)
@@ -209,7 +209,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -225,7 +225,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
@@ -242,7 +242,7 @@ java.lang.Object  void -para_check(java.util.Vector classlist, +para_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
@@ -251,7 +251,7 @@ java.lang.Object  void -sc_check_for_extended_classes(java.util.Vector classlist, +sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable childhash, boolean ext) @@ -261,7 +261,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
@@ -302,7 +302,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector para) +set_ParaList(de.dhbwstuttgart.typeinference.Menge para)
            @@ -325,11 +325,11 @@ java.lang.Object - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> TRProg(CSupportData supportData)
-          Ausgangspunkt für den Typrekonstruktionsalgorithmus. +          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.   @@ -367,7 +367,7 @@ public

vParaOrg

-public java.util.Vector vParaOrg
+public de.dhbwstuttgart.typeinference.Menge vParaOrg
@@ -400,10 +400,10 @@ public Class() -

+

para_check

-public void para_check(java.util.Vector classlist,
+public void para_check(de.dhbwstuttgart.typeinference.Menge classlist,
                        boolean ext)
                 throws SCClassException
@@ -418,7 +418,7 @@ public void para_check(java.util.Vector classlist,

complete_paralist

-public java.util.Vector complete_paralist(boolean ext)
+public de.dhbwstuttgart.typeinference.Menge complete_paralist(boolean ext)
@@ -426,10 +426,10 @@ public java.util.Vector complete_paralist(boolean ext)

-

+

sc_check

-public void sc_check(java.util.Vector classlist,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                      boolean ext)
               throws SCClassException
@@ -441,10 +441,10 @@ public void sc_check(java.util.Vector classlist,

-

+

sc_check_for_extended_classes

-public void sc_check_for_extended_classes(java.util.Vector classlist,
+public void sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
                                           java.util.Hashtable childhash,
                                           boolean ext)
@@ -589,10 +589,10 @@ public boolean does_Class_extend()

-

+

set_ParaList

-public void set_ParaList(java.util.Vector para)
+public void set_ParaList(de.dhbwstuttgart.typeinference.Menge para)
@@ -603,7 +603,7 @@ public void set_ParaList(java.util.Vector para)

get_ParaList

-public java.util.Vector get_ParaList()
+public de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -614,7 +614,7 @@ public java.util.Vector get_ParaList()

get_vParaOrg

-public java.util.Vector get_vParaOrg()
+public de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
@@ -647,18 +647,18 @@ public java.util.Hashtable get_ParaHash()

TRProg

-public java.util.Vector<CTypeReconstructionResult> TRProg(CSupportData supportData)
+public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> TRProg(CSupportData supportData)
                                                    throws CTypeReconstructionException
-
Ausgangspunkt für den Typrekonstruktionsalgorithmus. Hier werden zunächst +
Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe - für den Algorithmus dienen.
- (siehe Algorithmus 5.17 TRProg, Martin Plümicke) -
Author: Jörg Bäuerle + f�r den Algorithmus dienen.
+ (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) +
Author: J�rg B�uerle

Parameters:
supportData - -
Returns:
Liste aller bisher berechneten, möglichen Typkombinationen +
Returns:
Liste aller bisher berechneten, m�glichen Typkombinationen
Throws:
CTypeReconstructionException
diff --git a/doc/Javadoc/mycompiler/myclass/ClassBody.html b/doc/Javadoc/mycompiler/myclass/ClassBody.html index d32046b5..93b9422e 100755 --- a/doc/Javadoc/mycompiler/myclass/ClassBody.html +++ b/doc/Javadoc/mycompiler/myclass/ClassBody.html @@ -146,8 +146,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -155,7 +155,7 @@ java.lang.Object  java.util.Hashtable -complete_parahashtable(java.util.Vector classlist, +complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, UsedId superclassid, java.util.Hashtable childhash, boolean ext) @@ -165,8 +165,8 @@ java.lang.Object - java.util.Vector -get_FieldDeclVector() + de.dhbwstuttgart.typeinference.Menge +get_FieldDeclMenge()
            @@ -182,7 +182,7 @@ java.lang.Object  java.util.Hashtable -init_parahashtable(java.util.Vector paralist, +init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist, boolean ext)
@@ -191,8 +191,8 @@ java.lang.Object  boolean -is_declared(Type t, - java.util.Vector classlist) +is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -200,8 +200,8 @@ java.lang.Object  void -istParameterOK(java.util.Vector Parameter, - java.util.Vector KlassenVektor) +istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
            @@ -209,7 +209,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
@@ -218,10 +218,10 @@ java.lang.Object  void -sc_init_hashtable_for_extended_classes(java.util.Vector classlist, +sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String strSuperKlassenName, java.util.Hashtable childhash, - java.util.Vector paralist, + de.dhbwstuttgart.typeinference.Menge paralist, java.util.Hashtable parahash, java.util.Hashtable kill, boolean ext) @@ -232,7 +232,7 @@ java.lang.Object  void -sc_init_hashtable(java.util.Vector KlassenVektor, +sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, java.lang.String strSuperKlassenName, java.lang.String classname, boolean ext) @@ -307,10 +307,10 @@ public ClassBody() -

+

sc_init_hashtable

-public void sc_init_hashtable(java.util.Vector KlassenVektor,
+public void sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor,
                               java.lang.String strSuperKlassenName,
                               java.lang.String classname,
                               boolean ext)
@@ -324,13 +324,13 @@ public void sc_init_hashtable(java.util.Vector KlassenVektor,
 

-

+

sc_init_hashtable_for_extended_classes

-public void sc_init_hashtable_for_extended_classes(java.util.Vector classlist,
+public void sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
                                                    java.lang.String strSuperKlassenName,
                                                    java.util.Hashtable childhash,
-                                                   java.util.Vector paralist,
+                                                   de.dhbwstuttgart.typeinference.Menge paralist,
                                                    java.util.Hashtable parahash,
                                                    java.util.Hashtable kill,
                                                    boolean ext)
@@ -341,10 +341,10 @@ public void sc_init_hashtable_for_extended_classes(java.util.Vector 

-

+

sc_check

-public void sc_check(java.util.Vector classlist,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                      boolean ext)
               throws SCClassBodyException
@@ -356,10 +356,10 @@ public void sc_check(java.util.Vector classlist,

-

+

init_parahashtable

-public java.util.Hashtable init_parahashtable(java.util.Vector paralist,
+public java.util.Hashtable init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist,
                                               boolean ext)
@@ -368,10 +368,10 @@ public java.util.Hashtable init_parahashtable(java.util.Vector paral

-

+

complete_parahashtable

-public java.util.Hashtable complete_parahashtable(java.util.Vector classlist,
+public java.util.Hashtable complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist,
                                                   UsedId superclassid,
                                                   java.util.Hashtable childhash,
                                                   boolean ext)
@@ -385,11 +385,11 @@ public java.util.Hashtable complete_parahashtable(java.util.Vector c
 

-

+

codegen

 public void codegen(ClassFile classfile,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
@@ -411,10 +411,10 @@ public java.util.Hashtable get_hash()

-

-get_FieldDeclVector

+

+get_FieldDeclMenge

-public java.util.Vector get_FieldDeclVector()
+public de.dhbwstuttgart.typeinference.Menge get_FieldDeclMenge()
@@ -433,11 +433,11 @@ public void set_FieldDecl(

+

is_declared

 public boolean is_declared(Type t,
-                           java.util.Vector classlist)
+                           de.dhbwstuttgart.typeinference.Menge classlist)
                     throws SCClassBodyException
@@ -448,11 +448,11 @@ public boolean is_declared(
-

+

istParameterOK

-public void istParameterOK(java.util.Vector Parameter,
-                           java.util.Vector KlassenVektor)
+public void istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
diff --git a/doc/Javadoc/mycompiler/myclass/Constructor.html b/doc/Javadoc/mycompiler/myclass/Constructor.html index f94e9f06..94305535 100755 --- a/doc/Javadoc/mycompiler/myclass/Constructor.html +++ b/doc/Javadoc/mycompiler/myclass/Constructor.html @@ -161,8 +161,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -170,7 +170,7 @@ java.lang.Object  java.lang.String -get_codegen_Param_Type(java.util.Vector paralist) +get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -182,7 +182,7 @@ java.lang.Object Methods inherited from class mycompiler.myclass.Method -call_sc_check, get_Block, get_ExceptionList, get_Method_Name, get_Type_Paralist, getLineNumber, getParameterCount, getParameterList, getReturnType, getTypeLineNumber, getTypeName, replaceType, sc_init_parameterlist, set_Block, set_ExceptionList, set_Modifiers, setLineNumber, setParameterList, setReturnType +call_sc_check, get_Block, get_ExceptionList, get_Method_Name, get_Type_Paralist, getLineNumber, getParameterCount, getParameterList, getReturnType, getTypeLineNumber, getTypeName, replaceType, sc_init_parameterlist, set_Block, set_ExceptionList, set_Modifiers, setLineNumber, setParameterList, setReturnType   @@ -191,7 +191,7 @@ java.lang.Object Methods inherited from class mycompiler.myclass.FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -233,13 +233,13 @@ public Constructor() -

+

get_codegen_Param_Type

-public java.lang.String get_codegen_Param_Type(java.util.Vector paralist)
+public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
-
Overrides:
get_codegen_Param_Type in class Method
+
Overrides:
get_codegen_Param_Type in class Method
@@ -247,15 +247,15 @@ public java.lang.String get_codegen_Param_Type(java.util.Vector para

-

+

codegen

 public void codegen(ClassFile classfile,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Overrides:
codegen in class Method
+
Overrides:
codegen in class Method
diff --git a/doc/Javadoc/mycompiler/myclass/DeclId.html b/doc/Javadoc/mycompiler/myclass/DeclId.html index 52981055..e2eb1418 100755 --- a/doc/Javadoc/mycompiler/myclass/DeclId.html +++ b/doc/Javadoc/mycompiler/myclass/DeclId.html @@ -135,7 +135,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge paratyp
@@ -176,9 +176,9 @@ java.lang.Object  void -codegen_InstVarDecl(ClassFile classfile, +codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -186,10 +186,10 @@ java.lang.Object  void -codegen_LocalVarDecl(ClassFile classfile, +codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -220,7 +220,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Paratyp()
@@ -269,7 +269,7 @@ java.lang.Object  void -set_Paratyp(java.util.Vector p) +set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
            @@ -346,7 +346,7 @@ public java.lang.String name

paratyp

-public java.util.Vector paratyp
+public de.dhbwstuttgart.typeinference.Menge paratyp
@@ -387,10 +387,10 @@ public DeclId(java.lang.String name) -

+

set_Paratyp

-public void set_Paratyp(java.util.Vector p)
+public void set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
@@ -401,7 +401,7 @@ public void set_Paratyp(java.util.Vector p)

get_Paratyp

-public java.util.Vector get_Paratyp()
+public de.dhbwstuttgart.typeinference.Menge get_Paratyp()
@@ -497,12 +497,12 @@ public void set_ListType(
-

+

codegen_InstVarDecl

 public void codegen_InstVarDecl(ClassFile classfile,
                                 Type type,
-                                java.util.Vector paralist)
+                                de.dhbwstuttgart.typeinference.Menge paralist)
                          throws JVMCodeException
@@ -513,13 +513,13 @@ public void codegen_InstVarDecl(

+

codegen_LocalVarDecl

 public void codegen_LocalVarDecl(ClassFile classfile,
                                  CodeAttribute code,
                                  Type type,
-                                 java.util.Vector paralist)
+                                 de.dhbwstuttgart.typeinference.Menge paralist)
                           throws JVMCodeException
diff --git a/doc/Javadoc/mycompiler/myclass/FieldDecl.html b/doc/Javadoc/mycompiler/myclass/FieldDecl.html index 400e7c1d..360a9692 100755 --- a/doc/Javadoc/mycompiler/myclass/FieldDecl.html +++ b/doc/Javadoc/mycompiler/myclass/FieldDecl.html @@ -114,7 +114,7 @@ java.lang.Object -protected  java.util.Vector +protected  de.dhbwstuttgart.typeinference.Menge declid
@@ -149,15 +149,15 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Name()
@@ -165,8 +165,8 @@ java.lang.Object - java.util.Vector -getDeclIdVector() + de.dhbwstuttgart.typeinference.Menge +getDeclIdMenge()
            @@ -190,7 +190,7 @@ java.lang.Object  void -setDeclIdVector(java.util.Vector vDeclId) +setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId)
            @@ -221,7 +221,7 @@ java.lang.Object

declid

-protected java.util.Vector declid
+protected de.dhbwstuttgart.typeinference.Menge declid
@@ -265,11 +265,11 @@ public abstract java.lang.String getTypeName()

-

+

codegen

 public abstract void codegen(ClassFile classfile,
-                             java.util.Vector paralist)
+                             de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
@@ -294,7 +294,7 @@ public void set_DeclId(

get_Name

-public java.util.Vector get_Name()
+public de.dhbwstuttgart.typeinference.Menge get_Name()
@@ -302,10 +302,10 @@ public java.util.Vector get_Name()

-

-getDeclIdVector

+

+getDeclIdMenge

-public java.util.Vector getDeclIdVector()
+public de.dhbwstuttgart.typeinference.Menge getDeclIdMenge()
@@ -313,10 +313,10 @@ public java.util.Vector getDeclIdVector()

-

-setDeclIdVector

+

+setDeclIdMenge

-public void setDeclIdVector(java.util.Vector vDeclId)
+public void setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId)
diff --git a/doc/Javadoc/mycompiler/myclass/InstVarDecl.html b/doc/Javadoc/mycompiler/myclass/InstVarDecl.html index e3808ddd..864507a9 100755 --- a/doc/Javadoc/mycompiler/myclass/InstVarDecl.html +++ b/doc/Javadoc/mycompiler/myclass/InstVarDecl.html @@ -151,8 +151,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -179,7 +179,7 @@ java.lang.Object getTypeLineNumber()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -195,7 +195,7 @@ java.lang.Object replaceType(CReplaceTypeEvent e)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -203,7 +203,7 @@ java.lang.Object setType(Type t)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -212,7 +212,7 @@ java.lang.Object Methods inherited from class mycompiler.myclass.FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -259,7 +259,7 @@ setType
 public void setType(Type t)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

@@ -298,15 +298,15 @@ public java.lang.String getTypeName()

-

+

codegen

 public void codegen(ClassFile classfile,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class FieldDecl
+
Specified by:
codegen in class FieldDecl
@@ -335,7 +335,7 @@ replaceType
 public void replaceType(CReplaceTypeEvent e)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
replaceType in interface ITypeReplacementListener
@@ -351,7 +351,7 @@ getTypeLineNumber
 public int getTypeLineNumber()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
getTypeLineNumber in interface ITypeReplacementListener
diff --git a/doc/Javadoc/mycompiler/myclass/Method.html b/doc/Javadoc/mycompiler/myclass/Method.html index 90b4640e..3b44ca92 100755 --- a/doc/Javadoc/mycompiler/myclass/Method.html +++ b/doc/Javadoc/mycompiler/myclass/Method.html @@ -162,7 +162,7 @@ java.lang.Object  void -call_sc_check(java.util.Vector classlist, +call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable classhash, boolean ext, java.util.Hashtable parach) @@ -173,8 +173,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -190,7 +190,7 @@ java.lang.Object  java.lang.String -get_codegen_Param_Type(java.util.Vector paralist) +get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -213,7 +213,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge
get_Type_Paralist()
@@ -233,7 +233,7 @@ java.lang.Object getParameterCount()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -257,7 +257,7 @@ java.lang.Object getTypeLineNumber()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -273,7 +273,7 @@ java.lang.Object replaceType(CReplaceTypeEvent e)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -329,7 +329,7 @@ java.lang.Object setReturnType(Type type)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -338,7 +338,7 @@ java.lang.Object Methods inherited from class mycompiler.myclass.FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -399,10 +399,10 @@ public Method() -

+

call_sc_check

-public void call_sc_check(java.util.Vector classlist,
+public void call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                           java.util.Hashtable classhash,
                           boolean ext,
                           java.util.Hashtable parach)
@@ -466,7 +466,7 @@ setReturnType
 
 public void setReturnType(Type type)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

@@ -552,7 +552,7 @@ getParameterCount
 public int getParameterCount()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

@@ -592,10 +592,10 @@ public

+

get_codegen_Param_Type

-public java.lang.String get_codegen_Param_Type(java.util.Vector paralist)
+public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
@@ -623,7 +623,7 @@ public java.lang.String get_Method_Name()

get_Type_Paralist

-public java.util.Vector get_Type_Paralist()
+public de.dhbwstuttgart.typeinference.Menge get_Type_Paralist()
@@ -634,15 +634,15 @@ public java.util.Vector get_Type_Paralist()

-

+

codegen

 public void codegen(ClassFile classfile,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class FieldDecl
+
Specified by:
codegen in class FieldDecl
@@ -685,7 +685,7 @@ replaceType
 public void replaceType(CReplaceTypeEvent e)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
replaceType in interface ITypeReplacementListener
@@ -701,7 +701,7 @@ getTypeLineNumber
 public int getTypeLineNumber()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
getTypeLineNumber in interface ITypeReplacementListener
diff --git a/doc/Javadoc/mycompiler/myclass/ParameterList.html b/doc/Javadoc/mycompiler/myclass/ParameterList.html index 9a7a6e01..77f5e4f4 100755 --- a/doc/Javadoc/mycompiler/myclass/ParameterList.html +++ b/doc/Javadoc/mycompiler/myclass/ParameterList.html @@ -111,7 +111,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge
formalparameter
@@ -163,7 +163,7 @@ java.lang.Object  java.lang.String -get_codegen_ParameterList(java.util.Vector paralist) +get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -174,11 +174,11 @@ java.lang.Object getParameterCount()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
- java.util.Vector + de.dhbwstuttgart.typeinference.Menge
sc_get_Formalparalist()
@@ -228,7 +228,7 @@ public boolean hamaDebug

formalparameter

-public java.util.Vector formalparameter
+public de.dhbwstuttgart.typeinference.Menge formalparameter
@@ -272,10 +272,10 @@ public void set_AddParameter(

+

get_codegen_ParameterList

-public java.lang.String get_codegen_ParameterList(java.util.Vector paralist)
+public java.lang.String get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
@@ -286,7 +286,7 @@ public java.lang.String get_codegen_ParameterList(java.util.Vector p

sc_get_Formalparalist

-public java.util.Vector sc_get_Formalparalist()
+public de.dhbwstuttgart.typeinference.Menge sc_get_Formalparalist()
@@ -311,7 +311,7 @@ getParameterCount
 public int getParameterCount()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

diff --git a/doc/Javadoc/mycompiler/myclass/UsedId.html b/doc/Javadoc/mycompiler/myclass/UsedId.html index 3e9acd65..b38f0253 100755 --- a/doc/Javadoc/mycompiler/myclass/UsedId.html +++ b/doc/Javadoc/mycompiler/myclass/UsedId.html @@ -111,7 +111,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge name
@@ -119,7 +119,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge vParaOrg
@@ -169,7 +169,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Name()
@@ -177,7 +177,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -185,7 +185,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Typen()
@@ -193,7 +193,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
@@ -210,7 +210,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector pl) +set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
            @@ -218,7 +218,7 @@ java.lang.Object  void -set_Typen(java.util.Vector t) +set_Typen(de.dhbwstuttgart.typeinference.Menge t)
            @@ -249,7 +249,7 @@ java.lang.Object

name

-public java.util.Vector name
+public de.dhbwstuttgart.typeinference.Menge name
@@ -259,7 +259,7 @@ public java.util.Vector name

vParaOrg

-public java.util.Vector vParaOrg
+public de.dhbwstuttgart.typeinference.Menge vParaOrg
@@ -306,7 +306,7 @@ public void set_Name(java.lang.String name)

get_Name

-public java.util.Vector get_Name()
+public de.dhbwstuttgart.typeinference.Menge get_Name()
@@ -325,10 +325,10 @@ public java.lang.String get_Name_1Element()

-

+

set_Typen

-public void set_Typen(java.util.Vector t)
+public void set_Typen(de.dhbwstuttgart.typeinference.Menge t)
@@ -336,10 +336,10 @@ public void set_Typen(java.util.Vector t)

-

+

set_ParaList

-public void set_ParaList(java.util.Vector pl)
+public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
@@ -350,7 +350,7 @@ public void set_ParaList(java.util.Vector pl)

get_ParaList

-public java.util.Vector get_ParaList()
+public de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -361,7 +361,7 @@ public java.util.Vector get_ParaList()

get_vParaOrg

-public java.util.Vector get_vParaOrg()
+public de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
@@ -372,7 +372,7 @@ public java.util.Vector get_vParaOrg()

get_Typen

-public java.util.Vector get_Typen()
+public de.dhbwstuttgart.typeinference.Menge get_Typen()
diff --git a/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html b/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html index 9ab20be6..28695fd0 100755 --- a/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html +++ b/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html @@ -113,13 +113,13 @@ Uses of  void -ClassFile.add_method(java.lang.String name, +ClassFile.add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            diff --git a/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html b/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html index 88f3fa91..d35cb926 100755 --- a/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html +++ b/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html @@ -133,7 +133,7 @@ Uses of  java.util.Hashtable -ClassBody.complete_parahashtable(java.util.Vector classlist, +ClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, UsedId superclassid, java.util.Hashtable childhash, boolean ext) diff --git a/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html b/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html index ea0cdba5..62630d08 100755 --- a/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html +++ b/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html @@ -143,7 +143,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_exlist()
@@ -212,7 +212,7 @@ public void addException(

get_exlist

-public java.util.Vector get_exlist()
+public de.dhbwstuttgart.typeinference.Menge get_exlist()
diff --git a/doc/Javadoc/mycompiler/myexception/SCClassException.html b/doc/Javadoc/mycompiler/myexception/SCClassException.html index 98b27a2d..13f331dd 100755 --- a/doc/Javadoc/mycompiler/myexception/SCClassException.html +++ b/doc/Javadoc/mycompiler/myexception/SCClassException.html @@ -144,7 +144,7 @@ java.lang.Object  void -addException(java.util.Vector v) +addException(de.dhbwstuttgart.typeinference.Menge v)
            @@ -206,10 +206,10 @@ public SCClassException() -

+

addException

-public void addException(java.util.Vector v)
+public void addException(de.dhbwstuttgart.typeinference.Menge v)
diff --git a/doc/Javadoc/mycompiler/myexception/SCMethodException.html b/doc/Javadoc/mycompiler/myexception/SCMethodException.html index 016a2ce7..4665db93 100755 --- a/doc/Javadoc/mycompiler/myexception/SCMethodException.html +++ b/doc/Javadoc/mycompiler/myexception/SCMethodException.html @@ -135,7 +135,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_exlist()
@@ -144,7 +144,7 @@ java.lang.Object  void -set_exlist(java.util.Vector list) +set_exlist(de.dhbwstuttgart.typeinference.Menge list)
            @@ -201,7 +201,7 @@ public SCMethodException()

get_exlist

-public java.util.Vector get_exlist()
+public de.dhbwstuttgart.typeinference.Menge get_exlist()
@@ -209,10 +209,10 @@ public java.util.Vector get_exlist()

-

+

set_exlist

-public void set_exlist(java.util.Vector list)
+public void set_exlist(de.dhbwstuttgart.typeinference.Menge list)
diff --git a/doc/Javadoc/mycompiler/myexception/SCStatementException.html b/doc/Javadoc/mycompiler/myexception/SCStatementException.html index 1da9faa7..167fa6cf 100755 --- a/doc/Javadoc/mycompiler/myexception/SCStatementException.html +++ b/doc/Javadoc/mycompiler/myexception/SCStatementException.html @@ -143,7 +143,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_exlist()
@@ -201,7 +201,7 @@ public SCStatementException()

get_exlist

-public java.util.Vector get_exlist()
+public de.dhbwstuttgart.typeinference.Menge get_exlist()
diff --git a/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html b/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html index 4e66c437..80e61f35 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html @@ -128,28 +128,28 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> SourceFile.typeReconstruction()
-          Tyrekonstruktionsalgorithmus: ruft für jede Klasse den Algorithmus TRProg auf. +          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> MyCompilerAPI.typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> MyCompiler.typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. @@ -171,11 +171,11 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> Class.TRProg(CSupportData supportData)
-          Ausgangspunkt für den Typrekonstruktionsalgorithmus. +          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.   @@ -247,8 +247,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.22 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.22 von Martin Pl�micke +
Author: J�rg B�uerle @@ -258,22 +258,22 @@ Uses of CSupportData supportData)

-          Implementierung des Algorithmus 5.20 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.20 von Martin Pl�micke +
Author: J�rg B�uerle  CTripleSet -Block.TRStatements(CSubstitutionSet sigma, +Block.TRStatements(CSubstitutionSet sigma, CTypeAssumptionSet V, - java.util.Vector<Statement> statementList, + de.dhbwstuttgart.typeinference.Menge<Statement> statementList, int index, CTypeAssumptionSet V_start, CSupportData supportData)
-          Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -299,7 +299,7 @@ Uses of CSubstitutionSet.execute()
-          Führt jede einzelne CSubstitution aus. +          F�hrt jede einzelne CSubstitution aus.   @@ -350,7 +350,7 @@ Uses of Constructors in mycompiler.mytypereconstruction.set that throw CTypeReconstructionException
-CSubstitutionSet(java.util.Vector<Pair> unifiers) +CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers)
            diff --git a/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html b/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html index 6145c418..785525b3 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html @@ -131,13 +131,13 @@ Uses of  void -ClassFile.add_method(java.lang.String name, +ClassFile.add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -198,7 +198,7 @@ Uses of static void -JVMCode.get_Command(java.util.Vector b) +JVMCode.get_Command(de.dhbwstuttgart.typeinference.Menge b)
            @@ -411,9 +411,9 @@ Uses of  void -DeclId.codegen_InstVarDecl(ClassFile classfile, +DeclId.codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -421,10 +421,10 @@ Uses of  void -DeclId.codegen_LocalVarDecl(ClassFile classfile, +DeclId.codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -440,8 +440,8 @@ Uses of  void -Method.codegen(ClassFile classfile, - java.util.Vector paralist) +Method.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -449,8 +449,8 @@ Uses of  void -InstVarDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +InstVarDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -458,8 +458,8 @@ Uses of abstract  void -FieldDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +FieldDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -467,8 +467,8 @@ Uses of  void -Constructor.codegen(ClassFile classfile, - java.util.Vector paralist) +Constructor.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -476,8 +476,8 @@ Uses of  void -ClassBody.codegen(ClassFile classfile, - java.util.Vector paralist) +ClassBody.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -502,14 +502,14 @@ Uses of static void -LogOp.build(ClassFile classfile, +LogOp.build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -517,11 +517,11 @@ Uses of  void -TimesOp.codegen(ClassFile classfile, +TimesOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -529,11 +529,11 @@ Uses of  void -PlusOp.codegen(ClassFile classfile, +PlusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -541,11 +541,11 @@ Uses of abstract  void -Operator.codegen(ClassFile classfile, +Operator.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -553,11 +553,11 @@ Uses of  void -NotEqualOp.codegen(ClassFile classfile, +NotEqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -565,11 +565,11 @@ Uses of  void -ModuloOp.codegen(ClassFile classfile, +ModuloOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -577,11 +577,11 @@ Uses of  void -MinusOp.codegen(ClassFile classfile, +MinusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -589,11 +589,11 @@ Uses of  void -LogOp.codegen(ClassFile classfile, +LogOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -601,11 +601,11 @@ Uses of  void -LessOp.codegen(ClassFile classfile, +LessOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -613,11 +613,11 @@ Uses of  void -LessEquOp.codegen(ClassFile classfile, +LessEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -625,11 +625,11 @@ Uses of  void -GreaterOp.codegen(ClassFile classfile, +GreaterOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -637,11 +637,11 @@ Uses of  void -GreaterEquOp.codegen(ClassFile classfile, +GreaterEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -649,11 +649,11 @@ Uses of  void -EqualOp.codegen(ClassFile classfile, +EqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -661,11 +661,11 @@ Uses of  void -DivideOp.codegen(ClassFile classfile, +DivideOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -673,11 +673,11 @@ Uses of abstract  void -AddOp.codegen(ClassFile classfile, +AddOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -685,13 +685,13 @@ Uses of  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -776,12 +776,12 @@ Uses of  void -LogOp.loop_codegen(ClassFile classfile, +LogOp.loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -789,8 +789,8 @@ Uses of static void -LogOp.replace_index(CodeAttribute code, - java.util.Vector indices, +LogOp.replace_index(CodeAttribute code, + de.dhbwstuttgart.typeinference.Menge indices, int else_index, int then_index) @@ -838,9 +838,9 @@ Uses of  void -WhileStmt.codegen(ClassFile classfile, +WhileStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -848,9 +848,9 @@ Uses of abstract  void -UnaryExpr.codegen(ClassFile classfile, +UnaryExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -858,9 +858,9 @@ Uses of  void -This.codegen(ClassFile classfile, +This.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -868,9 +868,9 @@ Uses of  void -StringLiteral.codegen(ClassFile classfile, +StringLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -878,9 +878,9 @@ Uses of abstract  void -Statement.codegen(ClassFile classfile, +Statement.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -888,9 +888,9 @@ Uses of  void -Return.codegen(ClassFile classfile, +Return.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -898,9 +898,9 @@ Uses of  void -PreIncExpr.codegen(ClassFile classfile, +PreIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -908,9 +908,9 @@ Uses of  void -PreDecExpr.codegen(ClassFile classfile, +PreDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -918,9 +918,9 @@ Uses of  void -PostIncExpr.codegen(ClassFile classfile, +PostIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -928,9 +928,9 @@ Uses of  void -PostDecExpr.codegen(ClassFile classfile, +PostDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -938,9 +938,9 @@ Uses of  void -PositivExpr.codegen(ClassFile classfile, +PositivExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -948,9 +948,9 @@ Uses of  void -Null.codegen(ClassFile classfile, +Null.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -958,9 +958,9 @@ Uses of  void -NotExpr.codegen(ClassFile classfile, +NotExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -968,9 +968,9 @@ Uses of  void -NewClass.codegen(ClassFile classfile, +NewClass.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -978,9 +978,9 @@ Uses of  void -NewArray.codegen(ClassFile classfile, +NewArray.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -988,9 +988,9 @@ Uses of  void -NegativeExpr.codegen(ClassFile classfile, +NegativeExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -998,9 +998,9 @@ Uses of  void -MethodCall.codegen(ClassFile classfile, +MethodCall.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1008,9 +1008,9 @@ Uses of  void -LocalVarDecl.codegen(ClassFile classfile, +LocalVarDecl.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1018,9 +1018,9 @@ Uses of  void -LocalOrFieldVar.codegen(ClassFile classfile, +LocalOrFieldVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1028,9 +1028,9 @@ Uses of  void -IntLiteral.codegen(ClassFile classfile, +IntLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1038,9 +1038,9 @@ Uses of  void -InstVar.codegen(ClassFile classfile, +InstVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1048,9 +1048,9 @@ Uses of  void -InstanceOf.codegen(ClassFile classfile, +InstanceOf.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1058,9 +1058,9 @@ Uses of  void -IfStmt.codegen(ClassFile classfile, +IfStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1068,9 +1068,9 @@ Uses of  void -EmptyStmt.codegen(ClassFile classfile, +EmptyStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1078,9 +1078,9 @@ Uses of  void -CharLiteral.codegen(ClassFile classfile, +CharLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1088,9 +1088,9 @@ Uses of  void -CastExpr.codegen(ClassFile classfile, +CastExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1098,9 +1098,9 @@ Uses of  void -BoolLiteral.codegen(ClassFile classfile, +BoolLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1108,9 +1108,9 @@ Uses of  void -Block.codegen(ClassFile classfile, +Block.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1118,9 +1118,9 @@ Uses of  void -Binary.codegen(ClassFile classfile, +Binary.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1128,9 +1128,9 @@ Uses of  void -Assign.codegen(ClassFile classfile, +Assign.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1138,9 +1138,9 @@ Uses of  void -ArgumentList.codegen(ClassFile classfile, +ArgumentList.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1166,10 +1166,10 @@ Uses of  void -IfStmt.if_codegen(ClassFile classfile, +IfStmt.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1177,11 +1177,11 @@ Uses of  void -WhileStmt.loop_codegen(ClassFile classfile, +WhileStmt.loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1189,9 +1189,9 @@ Uses of  void -NegativeExpr.neg_codegen(ClassFile classfile, +NegativeExpr.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1199,9 +1199,9 @@ Uses of  void -Binary.neg_codegen(ClassFile classfile, +Binary.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1209,9 +1209,9 @@ Uses of  void -NotExpr.not_codegen(ClassFile classfile, +NotExpr.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -1219,9 +1219,9 @@ Uses of  void -Binary.not_codegen(ClassFile classfile, +Binary.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html index 31273f32..741e40e9 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html @@ -109,7 +109,7 @@ Uses of  java.util.Hashtable -ClassBody.complete_parahashtable(java.util.Vector classlist, +ClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, UsedId superclassid, java.util.Hashtable childhash, boolean ext) @@ -120,8 +120,8 @@ Uses of  boolean -ClassBody.is_declared(Type t, - java.util.Vector classlist) +ClassBody.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -129,7 +129,7 @@ Uses of  void -ClassBody.sc_check(java.util.Vector classlist, +ClassBody.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
@@ -138,7 +138,7 @@ Uses of  void -ClassBody.sc_init_hashtable(java.util.Vector KlassenVektor, +ClassBody.sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, java.lang.String strSuperKlassenName, java.lang.String classname, boolean ext) diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html index 0ec0ca73..04290529 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html @@ -113,7 +113,7 @@ Uses of  void -Class.para_check(java.util.Vector classlist, +Class.para_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
@@ -122,7 +122,7 @@ Uses of  void -Class.sc_check(java.util.Vector classlist, +Class.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCException.html index 3f56b24f..8bc83536 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/SCException.html @@ -128,7 +128,7 @@ Uses of semanticCheck()

-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Semantik-Check ohne Typrekonstruktion auf. @@ -137,8 +137,8 @@ Uses of semanticCheck()

-          Author: Jörg Bäuerle
- Ruft über SourceFile.sc_check(false) +          Author: J�rg B�uerle
+ Ruft �ber SourceFile.sc_check(false) den alten Semantik-Check ohne Typrekonstruktion auf. @@ -186,10 +186,10 @@ Uses of static int -Unify.pi(int n, +Unify.pi(int n, java.lang.String C, java.lang.String D, - java.util.Vector tto) + de.dhbwstuttgart.typeinference.Menge tto)
            diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html index 63c8fd28..94e540a0 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html @@ -109,7 +109,7 @@ Uses of  void -Method.call_sc_check(java.util.Vector classlist, +Method.call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable classhash, boolean ext, java.util.Hashtable parach) diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html index 60fe7258..34a4526c 100755 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html +++ b/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html @@ -109,9 +109,9 @@ Uses of  void -LocalVarDecl.check_anz(Type type, - java.util.Vector paralist, - java.util.Vector classlist) +LocalVarDecl.check_anz(Type type, + de.dhbwstuttgart.typeinference.Menge paralist, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -119,8 +119,8 @@ Uses of  void -LocalVarDecl.is_declared(Type t, - java.util.Vector classlist) +LocalVarDecl.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -128,7 +128,7 @@ Uses of  void -MethodCall.sc_check_get_Method(java.util.Vector classlist, +MethodCall.sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, boolean ext, java.util.Hashtable parach, @@ -140,8 +140,8 @@ Uses of  void -MethodCall.sc_check_uebergabe(java.util.Vector classlist, - java.util.Vector method, +MethodCall.sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, + de.dhbwstuttgart.typeinference.Menge method, boolean ext, int paranum, java.util.Hashtable parach, @@ -153,7 +153,7 @@ Uses of  void -This.sc_check(java.util.Vector classname, +This.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -166,7 +166,7 @@ Uses of  void -Receiver.sc_check(java.util.Vector classname, +Receiver.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -179,7 +179,7 @@ Uses of  void -PreIncExpr.sc_check(java.util.Vector classname, +PreIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -192,7 +192,7 @@ Uses of  void -PreDecExpr.sc_check(java.util.Vector classname, +PreDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -205,7 +205,7 @@ Uses of  void -PostIncExpr.sc_check(java.util.Vector classname, +PostIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -218,7 +218,7 @@ Uses of  void -PostDecExpr.sc_check(java.util.Vector classname, +PostDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -231,7 +231,7 @@ Uses of  void -NotExpr.sc_check(java.util.Vector classname, +NotExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -244,7 +244,7 @@ Uses of  void -NewClass.sc_check(java.util.Vector classname, +NewClass.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -257,7 +257,7 @@ Uses of  void -NegativeExpr.sc_check(java.util.Vector classname, +NegativeExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -270,7 +270,7 @@ Uses of  void -MethodCall.sc_check(java.util.Vector classname, +MethodCall.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -283,7 +283,7 @@ Uses of  void -LocalVarDecl.sc_check(java.util.Vector classname, +LocalVarDecl.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -296,7 +296,7 @@ Uses of  void -LocalOrFieldVar.sc_check(java.util.Vector classname, +LocalOrFieldVar.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -309,7 +309,7 @@ Uses of  void -InstanceOf.sc_check(java.util.Vector classname, +InstanceOf.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -322,7 +322,7 @@ Uses of abstract  void -Expr.sc_check(java.util.Vector classname, +Expr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -335,7 +335,7 @@ Uses of  void -CastExpr.sc_check(java.util.Vector classname, +CastExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -348,7 +348,7 @@ Uses of  void -Block.sc_check(java.util.Vector classname, +Block.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -361,7 +361,7 @@ Uses of  void -Binary.sc_check(java.util.Vector classname, +Binary.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -374,7 +374,7 @@ Uses of  void -Assign.sc_check(java.util.Vector classname, +Assign.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, diff --git a/doc/Javadoc/mycompiler/mymodifier/Modifiers.html b/doc/Javadoc/mycompiler/mymodifier/Modifiers.html index 34cb95f8..2ee0088e 100755 --- a/doc/Javadoc/mycompiler/mymodifier/Modifiers.html +++ b/doc/Javadoc/mycompiler/mymodifier/Modifiers.html @@ -111,7 +111,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge modifier
@@ -153,7 +153,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_modifiers()
@@ -185,7 +185,7 @@ java.lang.Object

modifier

-public java.util.Vector modifier
+public de.dhbwstuttgart.typeinference.Menge modifier
@@ -221,7 +221,7 @@ public Modifiers()

get_modifiers

-public java.util.Vector get_modifiers()
+public de.dhbwstuttgart.typeinference.Menge get_modifiers()
diff --git a/doc/Javadoc/mycompiler/myoperator/AddOp.html b/doc/Javadoc/mycompiler/myoperator/AddOp.html index 6145141a..2225e776 100755 --- a/doc/Javadoc/mycompiler/myoperator/AddOp.html +++ b/doc/Javadoc/mycompiler/myoperator/AddOp.html @@ -133,11 +133,11 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -151,9 +151,9 @@ java.lang.Object CSupportData supportData)

-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Plümicke +          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!   @@ -195,18 +195,18 @@ public AddOp() -

+

codegen

 public abstract void codegen(ClassFile classfile,
                              CodeAttribute code,
                              Expr expr,
                              boolean neg,
-                             java.util.Vector paralist)
+                             de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
@@ -224,10 +224,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung der Algorithmen 5.44 und 5.45 von Martin Plümicke +
Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/AndOp.html b/doc/Javadoc/mycompiler/myoperator/AndOp.html index 96b550df..80f5f63b 100755 --- a/doc/Javadoc/mycompiler/myoperator/AndOp.html +++ b/doc/Javadoc/mycompiler/myoperator/AndOp.html @@ -135,7 +135,7 @@ java.lang.Object Methods inherited from class mycompiler.myoperator.LogOp -build, codegen, if_codegen, loop_codegen, replace_index, TRExp +build, codegen, if_codegen, loop_codegen, replace_index, TRExp   diff --git a/doc/Javadoc/mycompiler/myoperator/DivideOp.html b/doc/Javadoc/mycompiler/myoperator/DivideOp.html index 2a8c8fe8..cbd691eb 100755 --- a/doc/Javadoc/mycompiler/myoperator/DivideOp.html +++ b/doc/Javadoc/mycompiler/myoperator/DivideOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,18 +189,18 @@ public DivideOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean neg,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/EqualOp.html b/doc/Javadoc/mycompiler/myoperator/EqualOp.html index ed1d03bd..2520c19c 100755 --- a/doc/Javadoc/mycompiler/myoperator/EqualOp.html +++ b/doc/Javadoc/mycompiler/myoperator/EqualOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -160,9 +160,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.53 von Martin Plümicke +          Implementierung des Algorithmus 5.53 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!   @@ -204,18 +204,18 @@ public EqualOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
@@ -253,10 +253,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.53 von Martin Plümicke +
Implementierung des Algorithmus 5.53 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! +
Author: J�rg B�uerle

Overrides:
TRExp in class RelOp
diff --git a/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html b/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html index fb0cfd99..e0d55bed 100755 --- a/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html +++ b/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -200,18 +200,18 @@ public GreaterEquOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/GreaterOp.html b/doc/Javadoc/mycompiler/myoperator/GreaterOp.html index d7cc8158..b3a77108 100755 --- a/doc/Javadoc/mycompiler/myoperator/GreaterOp.html +++ b/doc/Javadoc/mycompiler/myoperator/GreaterOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -200,18 +200,18 @@ public GreaterOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/LessEquOp.html b/doc/Javadoc/mycompiler/myoperator/LessEquOp.html index ed06d864..f3b2dac9 100755 --- a/doc/Javadoc/mycompiler/myoperator/LessEquOp.html +++ b/doc/Javadoc/mycompiler/myoperator/LessEquOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -200,18 +200,18 @@ public LessEquOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/LessOp.html b/doc/Javadoc/mycompiler/myoperator/LessOp.html index 24e6c91f..1eba811b 100755 --- a/doc/Javadoc/mycompiler/myoperator/LessOp.html +++ b/doc/Javadoc/mycompiler/myoperator/LessOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -200,18 +200,18 @@ public LessOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/LogOp.html b/doc/Javadoc/mycompiler/myoperator/LogOp.html index 6a88643b..c6fab74d 100755 --- a/doc/Javadoc/mycompiler/myoperator/LogOp.html +++ b/doc/Javadoc/mycompiler/myoperator/LogOp.html @@ -133,14 +133,14 @@ java.lang.Object static void -build(ClassFile classfile, +build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -148,11 +148,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -160,13 +160,13 @@ java.lang.Object  void -if_codegen(ClassFile classfile, +if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -174,12 +174,12 @@ java.lang.Object  void -loop_codegen(ClassFile classfile, +loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -187,8 +187,8 @@ java.lang.Object static void -replace_index(CodeAttribute code, - java.util.Vector indices, +replace_index(CodeAttribute code, + de.dhbwstuttgart.typeinference.Menge indices, int else_index, int then_index) @@ -205,7 +205,7 @@ java.lang.Object
          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!   @@ -247,18 +247,18 @@ public LogOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
@@ -268,7 +268,7 @@ public void codegen(
-

+

if_codegen

 public void if_codegen(ClassFile classfile,
@@ -277,7 +277,7 @@ public void if_codegen(Expr expr,
                        Statement then_block,
                        Statement else_block,
-                       java.util.Vector paralist)
+                       de.dhbwstuttgart.typeinference.Menge paralist)
                 throws JVMCodeException
@@ -288,7 +288,7 @@ public void if_codegen(

+

loop_codegen

 public void loop_codegen(ClassFile classfile,
@@ -296,7 +296,7 @@ public void loop_codegen(Expr expr,
                          int breakpoint,
                          boolean not,
-                         java.util.Vector paralist)
+                         de.dhbwstuttgart.typeinference.Menge paralist)
                   throws JVMCodeException
@@ -307,17 +307,17 @@ public void loop_codegen(

+

build

 public static void build(ClassFile classfile,
                          CodeAttribute code,
                          Expr expr,
-                         java.util.Vector indices,
+                         de.dhbwstuttgart.typeinference.Menge indices,
                          boolean not,
                          boolean ex2,
                          boolean and,
-                         java.util.Vector paralist)
+                         de.dhbwstuttgart.typeinference.Menge paralist)
                   throws JVMCodeException
@@ -328,11 +328,11 @@ public static void build(

+

replace_index

 public static void replace_index(CodeAttribute code,
-                                 java.util.Vector indices,
+                                 de.dhbwstuttgart.typeinference.Menge indices,
                                  int else_index,
                                  int then_index)
                           throws JVMCodeException
@@ -354,8 +354,8 @@ public CSupportData supportData)

Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/MinusOp.html b/doc/Javadoc/mycompiler/myoperator/MinusOp.html index 1c01b76e..51c0f86e 100755 --- a/doc/Javadoc/mycompiler/myoperator/MinusOp.html +++ b/doc/Javadoc/mycompiler/myoperator/MinusOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,18 +189,18 @@ public MinusOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean neg,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class AddOp
+
Specified by:
codegen in class AddOp
diff --git a/doc/Javadoc/mycompiler/myoperator/ModuloOp.html b/doc/Javadoc/mycompiler/myoperator/ModuloOp.html index 51feeccc..17d425d2 100755 --- a/doc/Javadoc/mycompiler/myoperator/ModuloOp.html +++ b/doc/Javadoc/mycompiler/myoperator/ModuloOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,18 +189,18 @@ public ModuloOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean neg,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/MulOp.html b/doc/Javadoc/mycompiler/myoperator/MulOp.html index ea83ecc4..95f8a9e9 100755 --- a/doc/Javadoc/mycompiler/myoperator/MulOp.html +++ b/doc/Javadoc/mycompiler/myoperator/MulOp.html @@ -139,9 +139,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Plümicke +          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!   @@ -150,7 +150,7 @@ java.lang.Object Methods inherited from class mycompiler.myoperator.Operator -codegen +codegen   @@ -200,10 +200,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Plümicke +
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html b/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html index 8a406734..99b23df1 100755 --- a/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html +++ b/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -160,9 +160,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.54 von Martin Plümicke +          Implementierung des Algorithmus 5.54 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!   @@ -204,18 +204,18 @@ public NotEqualOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean not,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
@@ -253,10 +253,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.54 von Martin Plümicke +
Implementierung des Algorithmus 5.54 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! +
Author: J�rg B�uerle

Overrides:
TRExp in class RelOp
diff --git a/doc/Javadoc/mycompiler/myoperator/Operator.html b/doc/Javadoc/mycompiler/myoperator/Operator.html index c2bf7008..8f7e0655 100755 --- a/doc/Javadoc/mycompiler/myoperator/Operator.html +++ b/doc/Javadoc/mycompiler/myoperator/Operator.html @@ -132,11 +132,11 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -192,14 +192,14 @@ public Operator() -

+

codegen

 public abstract void codegen(ClassFile classfile,
                              CodeAttribute code,
                              Expr expr,
                              boolean neg_not,
-                             java.util.Vector paralist)
+                             de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
diff --git a/doc/Javadoc/mycompiler/myoperator/OrOp.html b/doc/Javadoc/mycompiler/myoperator/OrOp.html index e88efcb8..7c0516a2 100755 --- a/doc/Javadoc/mycompiler/myoperator/OrOp.html +++ b/doc/Javadoc/mycompiler/myoperator/OrOp.html @@ -135,7 +135,7 @@ java.lang.Object Methods inherited from class mycompiler.myoperator.LogOp -build, codegen, if_codegen, loop_codegen, replace_index, TRExp +build, codegen, if_codegen, loop_codegen, replace_index, TRExp   diff --git a/doc/Javadoc/mycompiler/myoperator/PlusOp.html b/doc/Javadoc/mycompiler/myoperator/PlusOp.html index 22b5b6b1..4eb4f0b1 100755 --- a/doc/Javadoc/mycompiler/myoperator/PlusOp.html +++ b/doc/Javadoc/mycompiler/myoperator/PlusOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,18 +189,18 @@ public PlusOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean neg,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class AddOp
+
Specified by:
codegen in class AddOp
diff --git a/doc/Javadoc/mycompiler/myoperator/RelOp.html b/doc/Javadoc/mycompiler/myoperator/RelOp.html index 61bdb2d2..b5ea1ec3 100755 --- a/doc/Javadoc/mycompiler/myoperator/RelOp.html +++ b/doc/Javadoc/mycompiler/myoperator/RelOp.html @@ -150,9 +150,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Plümicke +          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!   @@ -161,7 +161,7 @@ java.lang.Object Methods inherited from class mycompiler.myoperator.Operator -codegen +codegen   @@ -228,10 +228,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Plümicke +
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Operator
diff --git a/doc/Javadoc/mycompiler/myoperator/TimesOp.html b/doc/Javadoc/mycompiler/myoperator/TimesOp.html index c652eeb7..6f2a0996 100755 --- a/doc/Javadoc/mycompiler/myoperator/TimesOp.html +++ b/doc/Javadoc/mycompiler/myoperator/TimesOp.html @@ -131,11 +131,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,18 +189,18 @@ public TimesOp() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
                     Expr expr,
                     boolean neg,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Operator
+
Specified by:
codegen in class Operator
diff --git a/doc/Javadoc/mycompiler/myparser/JavaParser.html b/doc/Javadoc/mycompiler/myparser/JavaParser.html index 91848396..a5c61812 100755 --- a/doc/Javadoc/mycompiler/myparser/JavaParser.html +++ b/doc/Javadoc/mycompiler/myparser/JavaParser.html @@ -451,7 +451,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge path
@@ -863,7 +863,7 @@ java.lang.Object

path

-public java.util.Vector path
+public de.dhbwstuttgart.typeinference.Menge path
@@ -1696,7 +1696,7 @@ public void yyerror(java.lang.String message, Can be overwritten to control message format.

-
Parameters:
message - text to be displayed.
expected - vector of acceptable tokens, if available.
+
Parameters:
message - text to be displayed.
expected - Menge of acceptable tokens, if available.

diff --git a/doc/Javadoc/mycompiler/mystatement/ArgumentList.html b/doc/Javadoc/mycompiler/mystatement/ArgumentList.html index 71b25ede..c948ca2e 100755 --- a/doc/Javadoc/mycompiler/mystatement/ArgumentList.html +++ b/doc/Javadoc/mycompiler/mystatement/ArgumentList.html @@ -111,7 +111,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge expr
@@ -146,9 +146,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -156,7 +156,7 @@ java.lang.Object  java.lang.String -get_codegen_ArgumentList(java.util.Vector paralist) +get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -195,7 +195,7 @@ java.lang.Object

expr

-public java.util.Vector expr
+public de.dhbwstuttgart.typeinference.Menge expr
@@ -228,12 +228,12 @@ public ArgumentList() -

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
@@ -244,10 +244,10 @@ public void codegen(
-

+

get_codegen_ArgumentList

-public java.lang.String get_codegen_ArgumentList(java.util.Vector paralist)
+public java.lang.String get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
diff --git a/doc/Javadoc/mycompiler/mystatement/Assign.html b/doc/Javadoc/mycompiler/mystatement/Assign.html index f2b57573..e33a32fc 100755 --- a/doc/Javadoc/mycompiler/mystatement/Assign.html +++ b/doc/Javadoc/mycompiler/mystatement/Assign.html @@ -178,9 +178,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -196,7 +196,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -223,8 +223,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.30 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.30 von Martin Pl�micke +
Author: J�rg B�uerle @@ -234,8 +234,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.25 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.25 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -244,7 +244,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -336,10 +336,10 @@ public void set_Expr(
-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -348,7 +348,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -372,16 +372,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -398,8 +398,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.30 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.30 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
@@ -418,8 +418,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.25 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.25 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/Binary.html b/doc/Javadoc/mycompiler/mystatement/Binary.html index 6219edab..cdb5c196 100755 --- a/doc/Javadoc/mycompiler/mystatement/Binary.html +++ b/doc/Javadoc/mycompiler/mystatement/Binary.html @@ -187,9 +187,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -229,9 +229,9 @@ java.lang.Object  void -neg_codegen(ClassFile classfile, +neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -239,9 +239,9 @@ java.lang.Object  void -not_codegen(ClassFile classfile, +not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -249,7 +249,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -318,7 +318,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -408,10 +408,10 @@ public Binary() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -420,7 +420,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -510,16 +510,16 @@ public

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -529,12 +529,12 @@ public void codegen(
-

+

not_codegen

 public void not_codegen(ClassFile classfile,
                         CodeAttribute code,
-                        java.util.Vector paralist)
+                        de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
@@ -545,12 +545,12 @@ public void not_codegen(

+

neg_codegen

 public void neg_codegen(ClassFile classfile,
                         CodeAttribute code,
-                        java.util.Vector paralist)
+                        de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
diff --git a/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html b/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html index fa6315ce..01c790b0 100755 --- a/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html @@ -169,7 +169,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple   @@ -187,7 +187,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Statement -codegen, TRStatement +codegen, TRStatement   diff --git a/doc/Javadoc/mycompiler/mystatement/Block.html b/doc/Javadoc/mycompiler/mystatement/Block.html index 361dd784..29fde11c 100755 --- a/doc/Javadoc/mycompiler/mystatement/Block.html +++ b/doc/Javadoc/mycompiler/mystatement/Block.html @@ -112,7 +112,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge statements
@@ -147,16 +147,16 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            - java.util.Vector + de.dhbwstuttgart.typeinference.Menge
get_Statement()
@@ -165,7 +165,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -178,7 +178,7 @@ java.lang.Object  void -set_Statement_Vector(java.util.Vector v) +set_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v)
            @@ -199,22 +199,22 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.20 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.20 von Martin Pl�micke +
Author: J�rg B�uerle  CTripleSet -TRStatements(CSubstitutionSet sigma, +TRStatements(CSubstitutionSet sigma, CTypeAssumptionSet V, - java.util.Vector<Statement> statementList, + de.dhbwstuttgart.typeinference.Menge<Statement> statementList, int index, CTypeAssumptionSet V_start, CSupportData supportData)
-          Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -242,7 +242,7 @@ java.lang.Object

statements

-public java.util.Vector statements
+public de.dhbwstuttgart.typeinference.Menge statements
@@ -275,10 +275,10 @@ public Block() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -300,7 +300,7 @@ public void sc_check(java.util.Vector classname,
 

get_Statement

-public java.util.Vector get_Statement()
+public de.dhbwstuttgart.typeinference.Menge get_Statement()
@@ -319,10 +319,10 @@ public void set_Statement(

-set_Statement_Vector

+

+set_Statement_Menge

-public void set_Statement_Vector(java.util.Vector v)
+public void set_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v)
@@ -330,16 +330,16 @@ public void set_Statement_Vector(java.util.Vector v)

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -357,8 +357,8 @@ public CSupportData supportData) throws CTypeReconstructionException
-
Implementierung des Algorithmus 5.20 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.20 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
@@ -372,19 +372,19 @@ public
-

+

TRStatements

 public CTripleSet TRStatements(CSubstitutionSet sigma,
                                CTypeAssumptionSet V,
-                               java.util.Vector<Statement> statementList,
+                               de.dhbwstuttgart.typeinference.Menge<Statement> statementList,
                                int index,
                                CTypeAssumptionSet V_start,
                                CSupportData supportData)
                         throws CTypeReconstructionException
-
Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle

Parameters:
sigma -
V -
statementList -
index -
V_start -
supportData - diff --git a/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html b/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html index 14a0c39d..5e7fac44 100755 --- a/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html +++ b/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -207,7 +207,7 @@ java.lang.Object CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -278,10 +278,10 @@ public BoolLiteral() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -289,7 +289,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -322,16 +322,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -364,13 +364,13 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype BooleanType zurückzugeben, wird ein RefType - zurückgegeben.
- Diese Methode kann später entfernt werden, sodass automatisch die Methode der Super-Klasse + Anstatt den Basetype BooleanType zur�ckzugeben, wird ein RefType + zur�ckgegeben.
+ Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse verwendet wird. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Overrides:
TRExp in class Literal
diff --git a/doc/Javadoc/mycompiler/mystatement/CastExpr.html b/doc/Javadoc/mycompiler/mystatement/CastExpr.html index 76ba4a2d..f0068f85 100755 --- a/doc/Javadoc/mycompiler/mystatement/CastExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/CastExpr.html @@ -154,9 +154,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -172,7 +172,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -206,8 +206,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.43 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.43 von Martin Pl�micke +
Author: J�rg B�uerle @@ -226,7 +226,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_UsedId, TRMultiply, TRTuple   @@ -277,10 +277,10 @@ public CastExpr() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -289,7 +289,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -338,16 +338,16 @@ public void set_Expr(
-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -364,8 +364,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.43 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.43 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/CharLiteral.html b/doc/Javadoc/mycompiler/mystatement/CharLiteral.html index cf23523c..d86147c1 100755 --- a/doc/Javadoc/mycompiler/mystatement/CharLiteral.html +++ b/doc/Javadoc/mycompiler/mystatement/CharLiteral.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -207,7 +207,7 @@ java.lang.Object CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -278,10 +278,10 @@ public CharLiteral() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -289,7 +289,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -322,16 +322,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -364,13 +364,13 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype CharacterType zurückzugeben, wird ein RefType - zurückgegeben.
- Diese Methode kann später entfernt werden, sodass automatisch die Methode der Super-Klasse + Anstatt den Basetype CharacterType zur�ckzugeben, wird ein RefType + zur�ckgegeben.
+ Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse verwendet wird. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Overrides:
TRExp in class Literal
diff --git a/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html b/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html index 85f66a38..208b7098 100755 --- a/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html +++ b/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html @@ -130,9 +130,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -140,7 +140,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -200,10 +200,10 @@ public EmptyStmt() -

+

sc_check

-public void sc_check(java.util.Vector classlist,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -219,16 +219,16 @@ public void sc_check(java.util.Vector classlist,
 

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/Expr.html b/doc/Javadoc/mycompiler/mystatement/Expr.html index 2ebf1d90..48215bd9 100755 --- a/doc/Javadoc/mycompiler/mystatement/Expr.html +++ b/doc/Javadoc/mycompiler/mystatement/Expr.html @@ -162,8 +162,8 @@ java.lang.Object - java.util.Vector -get_Name_Vector() + de.dhbwstuttgart.typeinference.Menge +get_Name_Menge()
            @@ -178,8 +178,8 @@ java.lang.Object - java.util.Vector -get_Type_Vector() + de.dhbwstuttgart.typeinference.Menge +get_Type_Menge()
            @@ -195,7 +195,7 @@ java.lang.Object abstract  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -239,19 +239,19 @@ java.lang.Object CSupportData supportData)
-          (siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle  CMultiplyTupleSet -TRTuple(CMultiplyTuple result, - java.util.Vector<Expr> terms, +TRTuple(CMultiplyTuple result, + de.dhbwstuttgart.typeinference.Menge<Expr> terms, CSupportData supportData)
-          (siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle   @@ -269,7 +269,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Statement -codegen, TRStatement +codegen, TRStatement   @@ -363,10 +363,10 @@ public

-get_Name_Vector

+

+get_Name_Menge

-public java.util.Vector get_Name_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_Name_Menge()
@@ -374,10 +374,10 @@ public java.util.Vector get_Name_Vector()

-

-get_Type_Vector

+

+get_Type_Menge

-public java.util.Vector get_Type_Vector()
+public de.dhbwstuttgart.typeinference.Menge get_Type_Menge()
@@ -385,10 +385,10 @@ public java.util.Vector get_Type_Vector()

-

+

sc_check

-public abstract void sc_check(java.util.Vector classname,
+public abstract void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                               java.util.Hashtable ch,
                               java.util.Hashtable bh,
                               boolean ext,
@@ -434,15 +434,15 @@ public abstract 

+

TRTuple

 public CMultiplyTupleSet TRTuple(CMultiplyTuple result,
-                                 java.util.Vector<Expr> terms,
+                                 de.dhbwstuttgart.typeinference.Menge<Expr> terms,
                                  CSupportData supportData)
-
(siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +
(siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle

Parameters:
result -
terms -
supportData - @@ -458,8 +458,8 @@ public Expr t, CSupportData supportData)
-
(siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +
(siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle

Parameters:
tuple -
t -
supportData - diff --git a/doc/Javadoc/mycompiler/mystatement/ExprStmt.html b/doc/Javadoc/mycompiler/mystatement/ExprStmt.html index 25bc2d34..14f2d049 100755 --- a/doc/Javadoc/mycompiler/mystatement/ExprStmt.html +++ b/doc/Javadoc/mycompiler/mystatement/ExprStmt.html @@ -164,7 +164,7 @@ java.lang.Object getTypeLineNumber()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -188,7 +188,7 @@ java.lang.Object setType(Type t)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -197,7 +197,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Statement -codegen, TRStatement +codegen, TRStatement   @@ -291,7 +291,7 @@ setType
 public void setType(Type t)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

@@ -309,7 +309,7 @@ public void replaceType(ITypeReplacementListener
Tauscht einen Typ gegen einen anderen aus. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
replaceType in interface ITypeReplacementListener
@@ -325,7 +325,7 @@ getTypeLineNumber
 public int getTypeLineNumber()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
getTypeLineNumber in interface ITypeReplacementListener
diff --git a/doc/Javadoc/mycompiler/mystatement/IfStmt.html b/doc/Javadoc/mycompiler/mystatement/IfStmt.html index 9858d9a4..3e630499 100755 --- a/doc/Javadoc/mycompiler/mystatement/IfStmt.html +++ b/doc/Javadoc/mycompiler/mystatement/IfStmt.html @@ -171,9 +171,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,10 +181,10 @@ java.lang.Object  void -if_codegen(ClassFile classfile, +if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -221,7 +221,7 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.21 von Martin Plümicke +          Implementierung des Algorithmus 5.21 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen. @@ -346,16 +346,16 @@ public void set_Else_block(

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -365,13 +365,13 @@ public void codegen(
-

+

if_codegen

 public void if_codegen(ClassFile classfile,
                        CodeAttribute code,
                        boolean not,
-                       java.util.Vector paralist)
+                       de.dhbwstuttgart.typeinference.Menge paralist)
                 throws JVMCodeException
@@ -389,9 +389,9 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.21 von Martin Plümicke +
Implementierung des Algorithmus 5.21 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/InstVar.html b/doc/Javadoc/mycompiler/mystatement/InstVar.html index 0dc06a41..335a7f5b 100755 --- a/doc/Javadoc/mycompiler/mystatement/InstVar.html +++ b/doc/Javadoc/mycompiler/mystatement/InstVar.html @@ -136,9 +136,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -162,7 +162,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -180,8 +180,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.38 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.38 von Martin Pl�micke +
Author: J�rg B�uerle @@ -190,8 +190,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.38-1 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke +
Author: J�rg B�uerle @@ -210,7 +210,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -262,10 +262,10 @@ public InstVar(java.lang.String n, -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -273,7 +273,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -306,16 +306,16 @@ public java.lang.String get_codegen_UsedId()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -348,8 +348,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.38 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.38 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
@@ -367,8 +367,8 @@ TRInstVar public CTripleSet TRInstVar(CTriple triple, CSupportData supportData)
-
Implementierung des Algorithmus 5.38-1 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.38-1 von Martin Pl�micke +
Author: J�rg B�uerle

Parameters:
triple -
supportData - diff --git a/doc/Javadoc/mycompiler/mystatement/InstanceOf.html b/doc/Javadoc/mycompiler/mystatement/InstanceOf.html index f4d328c2..504719db 100755 --- a/doc/Javadoc/mycompiler/mystatement/InstanceOf.html +++ b/doc/Javadoc/mycompiler/mystatement/InstanceOf.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -234,7 +234,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -307,10 +307,10 @@ public void set_Type(
-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -319,7 +319,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -343,16 +343,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/IntLiteral.html b/doc/Javadoc/mycompiler/mystatement/IntLiteral.html index 469ebe3a..e83c773d 100755 --- a/doc/Javadoc/mycompiler/mystatement/IntLiteral.html +++ b/doc/Javadoc/mycompiler/mystatement/IntLiteral.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -207,7 +207,7 @@ java.lang.Object CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -289,10 +289,10 @@ public void set_Int(int i)

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -300,7 +300,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -322,16 +322,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -364,13 +364,13 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype IntegerType zurückzugeben, wird ein RefType - zurückgegeben.
- Diese Methode kann später entfernt werden, sodass automatisch die Methode der Super-Klasse + Anstatt den Basetype IntegerType zur�ckzugeben, wird ein RefType + zur�ckgegeben.
+ Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse verwendet wird. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Overrides:
TRExp in class Literal
diff --git a/doc/Javadoc/mycompiler/mystatement/Literal.html b/doc/Javadoc/mycompiler/mystatement/Literal.html index 351be4e6..acdd432c 100755 --- a/doc/Javadoc/mycompiler/mystatement/Literal.html +++ b/doc/Javadoc/mycompiler/mystatement/Literal.html @@ -170,8 +170,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -180,7 +180,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -198,7 +198,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Statement -codegen, TRStatement +codegen, TRStatement   @@ -247,8 +247,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html b/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html index e2bd0665..a3c54ada 100755 --- a/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html +++ b/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html @@ -168,9 +168,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -186,7 +186,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -212,8 +212,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.37 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.37 von Martin Pl�micke +
Author: J�rg B�uerle @@ -232,7 +232,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple   @@ -291,10 +291,10 @@ public LocalOrFieldVar(java.lang.String n) -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -303,7 +303,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -341,16 +341,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -367,8 +367,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.37 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.37 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html b/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html index fdb2fb86..8a96a099 100755 --- a/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html +++ b/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html @@ -133,9 +133,9 @@ java.lang.Object  void -check_anz(Type type, - java.util.Vector paralist, - java.util.Vector classlist) +check_anz(Type type, + de.dhbwstuttgart.typeinference.Menge paralist, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -143,9 +143,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -160,8 +160,8 @@ java.lang.Object - java.util.Vector -getDeclidVector() + de.dhbwstuttgart.typeinference.Menge
+getDeclidMenge()
            @@ -172,7 +172,7 @@ java.lang.Object getLineNumber()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -188,13 +188,13 @@ java.lang.Object getTypeLineNumber()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle  void -is_declared(Type t, - java.util.Vector classlist) +is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -205,12 +205,12 @@ java.lang.Object replaceType(CReplaceTypeEvent e)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -231,7 +231,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector pl) +set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
            @@ -239,7 +239,7 @@ java.lang.Object  void -setDeclidVector(java.util.Vector declid) +setDeclidMenge(de.dhbwstuttgart.typeinference.Menge declid)
            @@ -260,8 +260,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.24 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.24 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -359,10 +359,10 @@ public java.lang.String get_Name()

-

+

set_ParaList

-public void set_ParaList(java.util.Vector pl)
+public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
@@ -373,10 +373,10 @@ public void set_ParaList(java.util.Vector pl)

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -395,11 +395,11 @@ public void sc_check(java.util.Vector classname,
 

-

+

is_declared

 public void is_declared(Type t,
-                        java.util.Vector classlist)
+                        de.dhbwstuttgart.typeinference.Menge classlist)
                  throws SCStatementException
@@ -413,12 +413,12 @@ public void is_declared(
-

+

check_anz

 public void check_anz(Type type,
-                      java.util.Vector paralist,
-                      java.util.Vector classlist)
+                      de.dhbwstuttgart.typeinference.Menge paralist,
+                      de.dhbwstuttgart.typeinference.Menge classlist)
                throws SCStatementException
@@ -432,16 +432,16 @@ public void check_anz(

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -451,10 +451,10 @@ public void codegen(
-

-getDeclidVector

+

+getDeclidMenge

-public java.util.Vector getDeclidVector()
+public de.dhbwstuttgart.typeinference.Menge getDeclidMenge()
@@ -465,10 +465,10 @@ public java.util.Vector getDeclidVector()

-

-setDeclidVector

+

+setDeclidMenge

-public void setDeclidVector(java.util.Vector declid)
+public void setDeclidMenge(de.dhbwstuttgart.typeinference.Menge declid)
@@ -484,7 +484,7 @@ getLineNumber
 public int getLineNumber()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

@@ -501,7 +501,7 @@ replaceType
 public void replaceType(CReplaceTypeEvent e)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
replaceType in interface ITypeReplacementListener
@@ -517,7 +517,7 @@ getTypeLineNumber
 public int getTypeLineNumber()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
getTypeLineNumber in interface ITypeReplacementListener
@@ -536,8 +536,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.24 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.24 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/MethodCall.html b/doc/Javadoc/mycompiler/mystatement/MethodCall.html index 08c1d44e..bdafeb9c 100755 --- a/doc/Javadoc/mycompiler/mystatement/MethodCall.html +++ b/doc/Javadoc/mycompiler/mystatement/MethodCall.html @@ -170,9 +170,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -188,7 +188,7 @@ java.lang.Object  void -sc_check_get_Method(java.util.Vector classlist, +sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, boolean ext, java.util.Hashtable parach, @@ -200,7 +200,7 @@ java.lang.Object  boolean -sc_check_method_kleiner(java.util.Vector classlist, +sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String ist, java.lang.String soll, boolean ext) @@ -211,8 +211,8 @@ java.lang.Object  void -sc_check_uebergabe(java.util.Vector classlist, - java.util.Vector method, +sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, + de.dhbwstuttgart.typeinference.Menge method, boolean ext, int paranum, java.util.Hashtable parach, @@ -224,7 +224,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -237,8 +237,8 @@ java.lang.Object  void -sc_init_extended_fcts(java.util.Vector method, - java.util.Vector classlist, +sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method, + de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, java.lang.String classname, boolean ext) @@ -257,7 +257,7 @@ java.lang.Object  void -set_Expr_Vector(java.util.Vector v) +set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v)
            @@ -286,8 +286,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.33 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.33 von Martin Pl�micke +
Author: J�rg B�uerle @@ -300,7 +300,7 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.34 von Martin Plümicke +          Implementierung des Algorithmus 5.34 von Martin Pl�micke @@ -310,8 +310,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.27 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.27 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -320,7 +320,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple   @@ -396,10 +396,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -408,7 +408,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -418,10 +418,10 @@ public void sc_check(java.util.Vector classname,

-

+

sc_check_get_Method

-public void sc_check_get_Method(java.util.Vector classlist,
+public void sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist,
                                 java.lang.String methodname,
                                 boolean ext,
                                 java.util.Hashtable parach,
@@ -436,11 +436,11 @@ public void sc_check_get_Method(java.util.Vector classlist,
 

-

+

sc_check_uebergabe

-public void sc_check_uebergabe(java.util.Vector classlist,
-                               java.util.Vector method,
+public void sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist,
+                               de.dhbwstuttgart.typeinference.Menge method,
                                boolean ext,
                                int paranum,
                                java.util.Hashtable parach,
@@ -455,10 +455,10 @@ public void sc_check_uebergabe(java.util.Vector classlist,
 

-

+

sc_check_method_kleiner

-public boolean sc_check_method_kleiner(java.util.Vector classlist,
+public boolean sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist,
                                        java.lang.String ist,
                                        java.lang.String soll,
                                        boolean ext)
@@ -469,11 +469,11 @@ public boolean sc_check_method_kleiner(java.util.Vector classlist,

-

+

sc_init_extended_fcts

-public void sc_init_extended_fcts(java.util.Vector method,
-                                  java.util.Vector classlist,
+public void sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method,
+                                  de.dhbwstuttgart.typeinference.Menge classlist,
                                   java.lang.String methodname,
                                   java.lang.String classname,
                                   boolean ext)
@@ -509,10 +509,10 @@ public void set_UsedId(
-

-set_Expr_Vector

+

+set_Expr_Menge

-public void set_Expr_Vector(java.util.Vector v)
+public void set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v)
@@ -531,16 +531,16 @@ public void add_Expr(
-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -557,8 +557,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.27 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.27 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
@@ -577,8 +577,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.33 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.33 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
@@ -600,7 +600,7 @@ public static CSupportData supportData)
-
Implementierung des Algorithmus 5.34 von Martin Plümicke +
Implementierung des Algorithmus 5.34 von Martin Pl�micke

Parameters:
multiTuple -
classOrIdentifierName -
methodName -
paraCount -
isConstructorCall -
supportData - diff --git a/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html b/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html index aade6654..bc303cb8 100755 --- a/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,9 +181,9 @@ java.lang.Object  void -neg_codegen(ClassFile classfile, +neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -191,7 +191,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -225,9 +225,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.41 von Martin Plümicke +          Implementierung des Algorithmus 5.41 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! @@ -246,7 +246,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -311,10 +311,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -323,7 +323,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -355,16 +355,16 @@ public void set_Expr(
-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -374,12 +374,12 @@ public void codegen(
-

+

neg_codegen

 public void neg_codegen(ClassFile classfile,
                         CodeAttribute code,
-                        java.util.Vector paralist)
+                        de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
@@ -397,10 +397,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.41 von Martin Plümicke +
Implementierung des Algorithmus 5.41 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/NewArray.html b/doc/Javadoc/mycompiler/mystatement/NewArray.html index 33987a03..34905ab3 100755 --- a/doc/Javadoc/mycompiler/mystatement/NewArray.html +++ b/doc/Javadoc/mycompiler/mystatement/NewArray.html @@ -153,9 +153,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -182,12 +182,12 @@ java.lang.Object getType()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
 void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object setType(Type type)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -213,8 +213,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.32 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.32 von Martin Pl�micke +
Author: J�rg B�uerle @@ -233,7 +233,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -289,7 +289,7 @@ getType
 public Type getType()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
getType in class ExprStmt
@@ -306,7 +306,7 @@ setType
 public void setType(Type type)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
setType in class ExprStmt
@@ -331,10 +331,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable bh,
                      java.util.Hashtable ch,
                      boolean ext,
@@ -342,7 +342,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -364,16 +364,16 @@ public int get_codegen_Array_Type()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -390,8 +390,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.32 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.32 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/NewClass.html b/doc/Javadoc/mycompiler/mystatement/NewClass.html index a1e9f5a3..f69e5072 100755 --- a/doc/Javadoc/mycompiler/mystatement/NewClass.html +++ b/doc/Javadoc/mycompiler/mystatement/NewClass.html @@ -162,9 +162,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -180,7 +180,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -214,8 +214,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.31 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.31 von Martin Pl�micke +
Author: J�rg B�uerle @@ -225,8 +225,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.26 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.26 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -235,7 +235,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple   @@ -314,10 +314,10 @@ public void set_UsedId(
-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable bh,
                      java.util.Hashtable ch,
                      boolean ext,
@@ -326,7 +326,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -347,16 +347,16 @@ public void set_ArgumentList(

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -373,8 +373,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.26 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.26 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
@@ -393,8 +393,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.31 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.31 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/NotExpr.html b/doc/Javadoc/mycompiler/mystatement/NotExpr.html index 8fe15d82..4f29b0d0 100755 --- a/doc/Javadoc/mycompiler/mystatement/NotExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/NotExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,9 +189,9 @@ java.lang.Object  void -not_codegen(ClassFile classfile, +not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -199,7 +199,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -233,9 +233,9 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.42 von Martin Plümicke +          Implementierung des Algorithmus 5.42 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! @@ -254,7 +254,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -305,10 +305,10 @@ public NotExpr() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -317,7 +317,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -374,16 +374,16 @@ public void set_Expr(
-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -393,12 +393,12 @@ public void codegen(
-

+

not_codegen

 public void not_codegen(ClassFile classfile,
                         CodeAttribute code,
-                        java.util.Vector paralist)
+                        de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
@@ -416,10 +416,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.42 von Martin Plümicke +
Implementierung des Algorithmus 5.42 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: Jörg Bäuerle + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/Null.html b/doc/Javadoc/mycompiler/mystatement/Null.html index aa3b7b9f..c6bacb9d 100755 --- a/doc/Javadoc/mycompiler/mystatement/Null.html +++ b/doc/Javadoc/mycompiler/mystatement/Null.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -199,8 +199,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle @@ -219,7 +219,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -284,10 +284,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -295,7 +295,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -303,16 +303,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -346,8 +346,8 @@ public CSupportData supportData)
Description copied from class: Literal
-
Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle

Overrides:
TRExp in class Literal
diff --git a/doc/Javadoc/mycompiler/mystatement/PositivExpr.html b/doc/Javadoc/mycompiler/mystatement/PositivExpr.html index 433a794f..551d8d0a 100755 --- a/doc/Javadoc/mycompiler/mystatement/PositivExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/PositivExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -234,7 +234,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -321,10 +321,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -332,7 +332,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -340,16 +340,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
diff --git a/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html b/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html index ffb8e2c7..9a5def62 100755 --- a/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -303,10 +303,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -315,7 +315,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -325,16 +325,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -353,7 +353,7 @@ public
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType ausgetauscht werden. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html b/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html index 773024a4..4a3e0d13 100755 --- a/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -303,10 +303,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -315,7 +315,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -325,16 +325,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -353,7 +353,7 @@ public
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType ausgetauscht werden. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html b/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html index c47b5870..6633b6bc 100755 --- a/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -303,10 +303,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -315,7 +315,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -325,16 +325,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -353,7 +353,7 @@ public
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType ausgetauscht werden. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html b/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html index 31454623..f20ea58e 100755 --- a/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -303,10 +303,10 @@ public java.lang.String get_Name()

-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -315,7 +315,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -325,16 +325,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class UnaryExpr
+
Specified by:
codegen in class UnaryExpr
@@ -353,7 +353,7 @@ public
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType ausgetauscht werden. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/Receiver.html b/doc/Javadoc/mycompiler/mystatement/Receiver.html index 71b11b43..167b6ceb 100755 --- a/doc/Javadoc/mycompiler/mystatement/Receiver.html +++ b/doc/Javadoc/mycompiler/mystatement/Receiver.html @@ -114,7 +114,7 @@ java.lang.Object Receiver(Expr expr)
-          Autor: Jörg Bäuerle +          Autor: J�rg B�uerle   @@ -145,7 +145,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -191,7 +191,7 @@ Receiver
 public Receiver(Expr expr)
-
Autor: Jörg Bäuerle +
Autor: J�rg B�uerle

Parameters:
expr -
@@ -207,10 +207,10 @@ public Receiver(

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
diff --git a/doc/Javadoc/mycompiler/mystatement/Return.html b/doc/Javadoc/mycompiler/mystatement/Return.html
index b5921c4c..8e90667b 100755
--- a/doc/Javadoc/mycompiler/mystatement/Return.html
+++ b/doc/Javadoc/mycompiler/mystatement/Return.html
@@ -130,9 +130,9 @@ java.lang.Object
 
 
  void
-codegen(ClassFile classfile,
+codegen(ClassFile classfile,
         CodeAttribute code,
-        java.util.Vector paralist)
+        de.dhbwstuttgart.typeinference.Menge paralist)
 
 
            @@ -161,8 +161,8 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.22 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.22 von Martin Pl�micke +
Author: J�rg B�uerle   @@ -226,16 +226,16 @@ public java.lang.String get_Type()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -253,8 +253,8 @@ public CSupportData supportData) throws CTypeReconstructionException
-
Implementierung des Algorithmus 5.22 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.22 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/Statement.html b/doc/Javadoc/mycompiler/mystatement/Statement.html index a22aa64b..aaf843a9 100755 --- a/doc/Javadoc/mycompiler/mystatement/Statement.html +++ b/doc/Javadoc/mycompiler/mystatement/Statement.html @@ -132,9 +132,9 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -189,12 +189,12 @@ public Statement() -

+

codegen

 public abstract void codegen(ClassFile classfile,
                              CodeAttribute code,
-                             java.util.Vector paralist)
+                             de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
diff --git a/doc/Javadoc/mycompiler/mystatement/StringLiteral.html b/doc/Javadoc/mycompiler/mystatement/StringLiteral.html index 96b1aa11..b82f9eb4 100755 --- a/doc/Javadoc/mycompiler/mystatement/StringLiteral.html +++ b/doc/Javadoc/mycompiler/mystatement/StringLiteral.html @@ -163,9 +163,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -181,7 +181,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -225,7 +225,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple   @@ -276,10 +276,10 @@ public StringLiteral() -

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -287,7 +287,7 @@ public void sc_check(java.util.Vector classname,
                      java.util.Hashtable parabh)
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -320,16 +320,16 @@ public java.lang.String get_Name()

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/This.html b/doc/Javadoc/mycompiler/mystatement/This.html index 527c364f..ae64deb7 100755 --- a/doc/Javadoc/mycompiler/mystatement/This.html +++ b/doc/Javadoc/mycompiler/mystatement/This.html @@ -162,9 +162,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -180,7 +180,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -214,8 +214,8 @@ java.lang.Object CSupportData supportData)
-          Implementierung des Algorithmus 5.35 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.35 von Martin Pl�micke +
Author: J�rg B�uerle @@ -234,7 +234,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, TRMultiply, TRTuple +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple   @@ -310,10 +310,10 @@ public void set_UsedId(
-

+

sc_check

-public void sc_check(java.util.Vector classname,
+public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                      java.util.Hashtable ch,
                      java.util.Hashtable bh,
                      boolean ext,
@@ -322,7 +322,7 @@ public void sc_check(java.util.Vector classname,
               throws SCStatementException
-
Specified by:
sc_check in class Expr
+
Specified by:
sc_check in class Expr
@@ -332,16 +332,16 @@ public void sc_check(java.util.Vector classname,

-

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -372,8 +372,8 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.35 von Martin Plümicke -
Author: Jörg Bäuerle +
Implementierung des Algorithmus 5.35 von Martin Pl�micke +
Author: J�rg B�uerle

Specified by:
TRExp in class Expr
diff --git a/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html b/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html index ed04f82e..29980f5b 100755 --- a/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html +++ b/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html @@ -165,9 +165,9 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -179,7 +179,7 @@ java.lang.Object Methods inherited from class mycompiler.mystatement.Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple   @@ -239,16 +239,16 @@ public UnaryExpr() -

+

codegen

 public abstract void codegen(ClassFile classfile,
                              CodeAttribute code,
-                             java.util.Vector paralist)
+                             de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/WhileStmt.html b/doc/Javadoc/mycompiler/mystatement/WhileStmt.html index c4252a89..2f89bd4b 100755 --- a/doc/Javadoc/mycompiler/mystatement/WhileStmt.html +++ b/doc/Javadoc/mycompiler/mystatement/WhileStmt.html @@ -130,9 +130,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -140,11 +140,11 @@ java.lang.Object  void -loop_codegen(ClassFile classfile, +loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -173,7 +173,7 @@ java.lang.Object CSupportData supportData)

-          Implementierung des Algorithmus 5.23 von Martin Plümicke +          Implementierung des Algorithmus 5.23 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" ersetzt werden. @@ -239,16 +239,16 @@ public void set_Loop_block(

+

codegen

 public void codegen(ClassFile classfile,
                     CodeAttribute code,
-                    java.util.Vector paralist)
+                    de.dhbwstuttgart.typeinference.Menge paralist)
              throws JVMCodeException
-
Specified by:
codegen in class Statement
+
Specified by:
codegen in class Statement
@@ -258,14 +258,14 @@ public void codegen(
-

+

loop_codegen

 public void loop_codegen(ClassFile classfile,
                          CodeAttribute code,
                          int breakpoint,
                          boolean not,
-                         java.util.Vector paralist)
+                         de.dhbwstuttgart.typeinference.Menge paralist)
                   throws JVMCodeException
@@ -283,10 +283,10 @@ public CTypeAssumptionSet V, CSupportData supportData)
-
Implementierung des Algorithmus 5.23 von Martin Plümicke +
Implementierung des Algorithmus 5.23 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" ersetzt werden. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Specified by:
TRStatement in class Statement
diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Block.html b/doc/Javadoc/mycompiler/mystatement/class-use/Block.html index d6b86803..5dfcd7ce 100755 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Block.html +++ b/doc/Javadoc/mycompiler/mystatement/class-use/Block.html @@ -113,13 +113,13 @@ Uses of  void -ClassFile.add_method(java.lang.String name, +ClassFile.add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html b/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html index ca4da134..782d2f60 100755 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html +++ b/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html @@ -113,14 +113,14 @@ Uses of static void -LogOp.build(ClassFile classfile, +LogOp.build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -128,11 +128,11 @@ Uses of  void -TimesOp.codegen(ClassFile classfile, +TimesOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -140,11 +140,11 @@ Uses of  void -PlusOp.codegen(ClassFile classfile, +PlusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -152,11 +152,11 @@ Uses of abstract  void -Operator.codegen(ClassFile classfile, +Operator.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -164,11 +164,11 @@ Uses of  void -NotEqualOp.codegen(ClassFile classfile, +NotEqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -176,11 +176,11 @@ Uses of  void -ModuloOp.codegen(ClassFile classfile, +ModuloOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -188,11 +188,11 @@ Uses of  void -MinusOp.codegen(ClassFile classfile, +MinusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -200,11 +200,11 @@ Uses of  void -LogOp.codegen(ClassFile classfile, +LogOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -212,11 +212,11 @@ Uses of  void -LessOp.codegen(ClassFile classfile, +LessOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -224,11 +224,11 @@ Uses of  void -LessEquOp.codegen(ClassFile classfile, +LessEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -236,11 +236,11 @@ Uses of  void -GreaterOp.codegen(ClassFile classfile, +GreaterOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -248,11 +248,11 @@ Uses of  void -GreaterEquOp.codegen(ClassFile classfile, +GreaterEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -260,11 +260,11 @@ Uses of  void -EqualOp.codegen(ClassFile classfile, +EqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -272,11 +272,11 @@ Uses of  void -DivideOp.codegen(ClassFile classfile, +DivideOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -284,11 +284,11 @@ Uses of abstract  void -AddOp.codegen(ClassFile classfile, +AddOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -296,13 +296,13 @@ Uses of  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -310,12 +310,12 @@ Uses of  void -LogOp.loop_codegen(ClassFile classfile, +LogOp.loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -778,8 +778,8 @@ Uses of CSupportData supportData)
-          (siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle   @@ -792,13 +792,13 @@ Uses of  CMultiplyTupleSet -Expr.TRTuple(CMultiplyTuple result, - java.util.Vector<Expr> terms, +Expr.TRTuple(CMultiplyTuple result, + de.dhbwstuttgart.typeinference.Menge<Expr> terms, CSupportData supportData)
-          (siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle   @@ -812,7 +812,7 @@ Uses of Receiver(Expr expr)

-          Autor: Jörg Bäuerle +          Autor: J�rg B�uerle   diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html b/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html index fec62bb8..72a37b10 100755 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html +++ b/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html @@ -113,13 +113,13 @@ Uses of  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -480,16 +480,16 @@ Uses of  CTripleSet -Block.TRStatements(CSubstitutionSet sigma, +Block.TRStatements(CSubstitutionSet sigma, CTypeAssumptionSet V, - java.util.Vector<Statement> statementList, + de.dhbwstuttgart.typeinference.Menge<Statement> statementList, int index, CTypeAssumptionSet V_start, CSupportData supportData)
-          Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle   diff --git a/doc/Javadoc/mycompiler/mytype/BaseType.html b/doc/Javadoc/mycompiler/mytype/BaseType.html index 97c560fd..5c4c8c2d 100755 --- a/doc/Javadoc/mycompiler/mytype/BaseType.html +++ b/doc/Javadoc/mycompiler/mytype/BaseType.html @@ -160,7 +160,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -168,7 +168,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -177,7 +177,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -232,7 +232,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class Type
@@ -250,7 +250,7 @@ clone public abstract BaseType clone()
Description copied from class: Type
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class Type
diff --git a/doc/Javadoc/mycompiler/mytype/BooleanType.html b/doc/Javadoc/mycompiler/mytype/BooleanType.html index b6d99f73..611f6e92 100755 --- a/doc/Javadoc/mycompiler/mytype/BooleanType.html +++ b/doc/Javadoc/mycompiler/mytype/BooleanType.html @@ -152,7 +152,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -160,7 +160,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -169,7 +169,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -216,7 +216,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class BaseType
@@ -233,7 +233,7 @@ clone
 public BooleanType clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
clone in class BaseType
diff --git a/doc/Javadoc/mycompiler/mytype/CharacterType.html b/doc/Javadoc/mycompiler/mytype/CharacterType.html index 4a17101b..08b29928 100755 --- a/doc/Javadoc/mycompiler/mytype/CharacterType.html +++ b/doc/Javadoc/mycompiler/mytype/CharacterType.html @@ -152,7 +152,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -160,7 +160,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -169,7 +169,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -216,7 +216,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class BaseType
@@ -233,7 +233,7 @@ clone
 public CharacterType clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
clone in class BaseType
diff --git a/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html b/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html index 93bd2174..d4c45402 100755 --- a/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html +++ b/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html @@ -103,7 +103,7 @@ java.lang.Object
Version:
$Date: 2005/06/28 19:19:06 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -157,7 +157,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -165,7 +165,7 @@ java.lang.Object equals(java.lang.Object obj)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -174,7 +174,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -221,7 +221,7 @@ clone
 public GenericTypeVar clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class Type
@@ -238,7 +238,7 @@ equals
 public boolean equals(java.lang.Object obj)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
equals in class Type
diff --git a/doc/Javadoc/mycompiler/mytype/IntegerType.html b/doc/Javadoc/mycompiler/mytype/IntegerType.html index 59885dce..0f6b13de 100755 --- a/doc/Javadoc/mycompiler/mytype/IntegerType.html +++ b/doc/Javadoc/mycompiler/mytype/IntegerType.html @@ -152,7 +152,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -160,7 +160,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -169,7 +169,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -216,7 +216,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class BaseType
@@ -233,7 +233,7 @@ clone
 public IntegerType clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
clone in class BaseType
diff --git a/doc/Javadoc/mycompiler/mytype/Pair.html b/doc/Javadoc/mycompiler/mytype/Pair.html index 09a66e63..afd2c0ea 100755 --- a/doc/Javadoc/mycompiler/mytype/Pair.html +++ b/doc/Javadoc/mycompiler/mytype/Pair.html @@ -207,7 +207,7 @@ java.lang.Object equals(java.lang.Object obj)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -236,7 +236,7 @@ java.lang.Object  boolean -isInVector(java.util.Vector V) +isInMenge(de.dhbwstuttgart.typeinference.Menge V)
            @@ -448,10 +448,10 @@ public boolean Pair_isEquiv(
-

-isInVector

+

+isInMenge

-public boolean isInVector(java.util.Vector V)
+public boolean isInMenge(de.dhbwstuttgart.typeinference.Menge V)
@@ -464,7 +464,7 @@ equals
 public boolean equals(java.lang.Object obj)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
equals in class java.lang.Object
diff --git a/doc/Javadoc/mycompiler/mytype/ParaList.html b/doc/Javadoc/mycompiler/mytype/ParaList.html index 31670a29..16bcee90 100755 --- a/doc/Javadoc/mycompiler/mytype/ParaList.html +++ b/doc/Javadoc/mycompiler/mytype/ParaList.html @@ -111,7 +111,7 @@ java.lang.Object -protected  java.util.Vector +protected  de.dhbwstuttgart.typeinference.Menge
paralist
@@ -161,7 +161,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -169,7 +169,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge
getParalist()
@@ -178,7 +178,7 @@ java.lang.Object  void -setParalist(java.util.Vector paralist) +setParalist(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -209,7 +209,7 @@ java.lang.Object

paralist

-protected java.util.Vector paralist
+protected de.dhbwstuttgart.typeinference.Menge paralist
@@ -245,7 +245,7 @@ public ParaList()

get_ParaList

-public java.util.Vector get_ParaList()
+public de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -278,7 +278,7 @@ public java.lang.Object get_firstElement()

getParalist

-public java.util.Vector getParalist()
+public de.dhbwstuttgart.typeinference.Menge getParalist()
@@ -286,10 +286,10 @@ public java.util.Vector getParalist()

-

+

setParalist

-public void setParalist(java.util.Vector paralist)
+public void setParalist(de.dhbwstuttgart.typeinference.Menge paralist)
diff --git a/doc/Javadoc/mycompiler/mytype/RefType.html b/doc/Javadoc/mycompiler/mytype/RefType.html index 3fcd98d7..e08137d7 100755 --- a/doc/Javadoc/mycompiler/mytype/RefType.html +++ b/doc/Javadoc/mycompiler/mytype/RefType.html @@ -151,8 +151,8 @@ java.lang.Object             -RefType(java.lang.String s, - java.util.Vector parameter) +RefType(java.lang.String s, + de.dhbwstuttgart.typeinference.Menge parameter)
            @@ -181,7 +181,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -189,7 +189,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -202,7 +202,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -252,7 +252,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector v) +set_ParaList(de.dhbwstuttgart.typeinference.Menge v)
            @@ -288,7 +288,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, set_UsedId, toString +get_codegen_Type, get_Name, get_UsedId, set_UsedId, toString   @@ -329,11 +329,11 @@ public RefType(java.lang.String s)

-

+

RefType

 public RefType(java.lang.String s,
-               java.util.Vector parameter)
+ de.dhbwstuttgart.typeinference.Menge parameter)

@@ -408,10 +408,10 @@ public java.lang.String getName()

-

+

set_ParaList

-public void set_ParaList(java.util.Vector v)
+public void set_ParaList(de.dhbwstuttgart.typeinference.Menge v)
@@ -422,7 +422,7 @@ public void set_ParaList(java.util.Vector v)

get_ParaList

-public java.util.Vector get_ParaList()
+public de.dhbwstuttgart.typeinference.Menge get_ParaList()
@@ -506,7 +506,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class Type
@@ -524,7 +524,7 @@ clone public RefType clone()
Description copied from class: Type
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class Type
diff --git a/doc/Javadoc/mycompiler/mytype/ReturnType.html b/doc/Javadoc/mycompiler/mytype/ReturnType.html index b870b62d..6ae00aa0 100755 --- a/doc/Javadoc/mycompiler/mytype/ReturnType.html +++ b/doc/Javadoc/mycompiler/mytype/ReturnType.html @@ -151,7 +151,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -159,7 +159,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -168,7 +168,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -215,7 +215,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class Type
@@ -232,7 +232,7 @@ clone
 public ReturnType clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class Type
diff --git a/doc/Javadoc/mycompiler/mytype/Type.html b/doc/Javadoc/mycompiler/mytype/Type.html index 3ea912b6..97f79e21 100755 --- a/doc/Javadoc/mycompiler/mytype/Type.html +++ b/doc/Javadoc/mycompiler/mytype/Type.html @@ -174,7 +174,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -182,12 +182,12 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
 java.lang.String -get_codegen_Type(java.util.Vector paralist) +get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -230,7 +230,7 @@ java.lang.Object toString()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -368,10 +368,10 @@ public java.lang.String get_Name()

-

+

get_codegen_Type

-public java.lang.String get_codegen_Type(java.util.Vector paralist)
+public java.lang.String get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
@@ -417,7 +417,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class java.lang.Object
@@ -434,7 +434,7 @@ clone
 public Type clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class java.lang.Object
@@ -451,7 +451,7 @@ toString
 public java.lang.String toString()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
toString in class java.lang.Object
diff --git a/doc/Javadoc/mycompiler/mytype/TyploseVariable.html b/doc/Javadoc/mycompiler/mytype/TyploseVariable.html index 289e7fed..32acf65a 100755 --- a/doc/Javadoc/mycompiler/mytype/TyploseVariable.html +++ b/doc/Javadoc/mycompiler/mytype/TyploseVariable.html @@ -102,7 +102,7 @@ java.lang.Object

-Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ. +Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ. Jede TyploseVariable besitzt einen eindeutigen Namen aus einem Namenspool und ist in einer zentralen Registry, d.h. einer Hashtable abgelegt.

@@ -112,7 +112,7 @@ Repr

Version:
$Date: 2005/06/28 19:19:06 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -150,7 +150,7 @@ Repr addReplacementListener(ITypeReplacementListener listener)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -158,7 +158,7 @@ Repr backdoorCreate(java.lang.String name)
-          Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen wird. @@ -168,7 +168,7 @@ Repr backdoorFresh()
-          Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, um neue typlose Variablen zu erzeugen. @@ -177,8 +177,8 @@ Repr backdoorSetName(java.lang.String varName)
-          Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, - um den Namen einer typlosen Variablen zu verändern. +          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, + um den Namen einer typlosen Variablen zu ver�ndern. @@ -187,7 +187,7 @@ Repr
          Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener über die zentrale Instanz in der Registry laufen muss. + Listener �ber die zentrale Instanz in der Registry laufen muss. @@ -195,7 +195,7 @@ Repr containsListener(ITypeReplacementListener listener)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -203,7 +203,7 @@ Repr deleteRegistry()
-          Löscht die komplette Registry von TyplosenVariablen. +          L�scht die komplette Registry von TyplosenVariablen. @@ -211,7 +211,7 @@ Repr equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -219,7 +219,7 @@ Repr fireReplaceTypeEvent(CReplaceTypeEvent e)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -239,7 +239,7 @@ Repr - java.util.Vector<java.lang.Integer> + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getLineNumbers()
@@ -251,7 +251,7 @@ Repr getReplacementListeners()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -259,7 +259,7 @@ Repr removeAllReplacementListeners()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -267,7 +267,7 @@ Repr removeReplacementListener(ITypeReplacementListener listener)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -275,7 +275,7 @@ Repr replaceWithType(Type newType)
-          Diese Methode geht alle TypeReplacmentListener durch und tauscht über deren +          Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren Callback-Methode diesen Typ gegen den neuen aus. @@ -285,7 +285,7 @@ Repr Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String +get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String   @@ -316,7 +316,7 @@ getInstance public static TyploseVariable getInstance(java.lang.String name)
Statische Methode, um einen typlose Variable aus der Registry zu holen. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

@@ -336,7 +336,7 @@ public static equals in class Type
@@ -370,7 +370,7 @@ addReplacementListener
 public void addReplacementListener(ITypeReplacementListener listener)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
addReplacementListener in interface IReplaceTypeEventProvider
@@ -386,7 +386,7 @@ containsListener
 public boolean containsListener(ITypeReplacementListener listener)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
containsListener in interface IReplaceTypeEventProvider
@@ -403,7 +403,7 @@ removeReplacementListener
 public void removeReplacementListener(ITypeReplacementListener listener)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
removeReplacementListener in interface IReplaceTypeEventProvider
@@ -419,7 +419,7 @@ removeAllReplacementListeners
 public void removeAllReplacementListeners()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
removeAllReplacementListeners in interface IReplaceTypeEventProvider
@@ -435,7 +435,7 @@ fireReplaceTypeEvent
 public void fireReplaceTypeEvent(CReplaceTypeEvent e)
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
fireReplaceTypeEvent in interface IReplaceTypeEventProvider
@@ -451,7 +451,7 @@ getReplacementListeners
 public java.util.Iterator<ITypeReplacementListener> getReplacementListeners()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
getReplacementListeners in interface IReplaceTypeEventProvider
@@ -468,9 +468,9 @@ replaceWithType
 public void replaceWithType(Type newType)
-
Diese Methode geht alle TypeReplacmentListener durch und tauscht über deren +
Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren Callback-Methode diesen Typ gegen den neuen aus. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

@@ -484,7 +484,7 @@ public void replaceWithType(

getLineNumbers

-public java.util.Vector<java.lang.Integer> getLineNumbers()
+public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getLineNumbers()
@@ -500,9 +500,9 @@ deleteRegistry
 public static void deleteRegistry()
-
Löscht die komplette Registry von TyplosenVariablen. Sollte nur und ausschließlich von +
L�scht die komplette Registry von TyplosenVariablen. Sollte nur und ausschlie�lich von MyCompiler.init() aufgerufen werden!!! -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

@@ -519,11 +519,11 @@ clone public TyploseVariable clone()
Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener über die zentrale Instanz in der Registry laufen muss.
- Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich über diese Kopie - registrieren, werden später nicht über Statusänderungen benachrichtigt, d.h. ihre TyplosenVariablen + Listener �ber die zentrale Instanz in der Registry laufen muss.
+ Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich �ber diese Kopie + registrieren, werden sp�ter nicht �ber Status�nderungen benachrichtigt, d.h. ihre TyplosenVariablen werden nicht substituiert. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Overrides:
clone in class Type
@@ -540,10 +540,10 @@ backdoorFresh
 public static TyploseVariable backdoorFresh()
-
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, um neue typlose Variablen zu erzeugen. Die erzeugten Variablen werden nicht registriert und - sind völlig losgelöst vom abstrakten Syntaxbaum. -
Author: Jörg Bäuerle + sind v�llig losgel�st vom abstrakten Syntaxbaum. +
Author: J�rg B�uerle

@@ -560,13 +560,13 @@ backdoorSetName
 public void backdoorSetName(java.lang.String varName)
-
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, - um den Namen einer typlosen Variablen zu verändern.
+
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, + um den Namen einer typlosen Variablen zu ver�ndern.
ACHTUNG: Diese TyploseVariable darf nicht Teil des abstrakten Syntaxbaumes sein!!! - Es muss sicher gestellt werden, dass die betreffende TyploseVariable nicht über die Methode - fresh(), sondern über backdoorCreate() oder backdoorClone() + Es muss sicher gestellt werden, dass die betreffende TyploseVariable nicht �ber die Methode + fresh(), sondern �ber backdoorCreate() oder backdoorClone() erzeugt worden ist. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

@@ -582,10 +582,10 @@ backdoorCreate
 public static TyploseVariable backdoorCreate(java.lang.String name)
-
Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, +
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen - wird. Die erzeugte Variablen ist somit völlig losgelöst vom abstrakten Syntaxbaum. -
Author: Jörg Bäuerle + wird. Die erzeugte Variablen ist somit v�llig losgel�st vom abstrakten Syntaxbaum. +
Author: J�rg B�uerle

diff --git a/doc/Javadoc/mycompiler/mytype/Void.html b/doc/Javadoc/mycompiler/mytype/Void.html index c018508b..6e790507 100755 --- a/doc/Javadoc/mycompiler/mytype/Void.html +++ b/doc/Javadoc/mycompiler/mytype/Void.html @@ -152,7 +152,7 @@ java.lang.Object clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -160,7 +160,7 @@ java.lang.Object equals(java.lang.Object obj)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -185,7 +185,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.RefType -add_Parameter, Equiv2Equal, get_ParaList, getName, getParaN, getTypeName, is_Equiv, isTV, set_ParaList, setName, Type2Key, Type2String +add_Parameter, Equiv2Equal, get_ParaList, getName, getParaN, getTypeName, is_Equiv, isTV, set_ParaList, setName, Type2Key, Type2String   @@ -194,7 +194,7 @@ java.lang.Object Methods inherited from class mycompiler.mytype.Type -get_codegen_Type, get_UsedId, set_UsedId, toString +get_codegen_Type, get_UsedId, set_UsedId, toString   @@ -266,7 +266,7 @@ equals
 public boolean equals(java.lang.Object obj)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Overrides:
equals in class RefType
@@ -283,7 +283,7 @@ clone
 public Void clone()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
clone in class RefType
diff --git a/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html b/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html index 477d3717..d53a5086 100755 --- a/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html +++ b/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html @@ -116,7 +116,7 @@ Uses of clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -137,7 +137,7 @@ Uses of - java.util.Hashtable<java.lang.String,java.util.Vector<GenericTypeVar>> + java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>>
CTypeReconstructionResult.getGenericsTable()
@@ -154,8 +154,8 @@ Uses of  void -CTypeReconstructionResult.addGenericTypeVars(java.lang.String className, - java.util.Vector<GenericTypeVar> typeVarList) +CTypeReconstructionResult.addGenericTypeVars(java.lang.String className, + de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList)
            diff --git a/doc/Javadoc/mycompiler/mytype/class-use/Pair.html b/doc/Javadoc/mycompiler/mytype/class-use/Pair.html index 121257a2..4bba3729 100755 --- a/doc/Javadoc/mycompiler/mytype/class-use/Pair.html +++ b/doc/Javadoc/mycompiler/mytype/class-use/Pair.html @@ -183,7 +183,7 @@ Uses of Constructor parameters in mycompiler.mytypereconstruction.set with type arguments of type Pair
-CSubstitutionSet(java.util.Vector<Pair> unifiers) +CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers)
            @@ -208,9 +208,9 @@ Uses of static Pair -Unify.isInFC(RefType R1, +Unify.isInFC(RefType R1, RefType R2, - java.util.Vector FC) + de.dhbwstuttgart.typeinference.Menge FC)
            @@ -235,23 +235,23 @@ Uses of -static java.util.Vector<Pair> -Unify.copyVectorPair(java.util.Vector<Pair> vp) +static de.dhbwstuttgart.typeinference.Menge<Pair> +Unify.copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp)
            - java.util.Vector<java.util.Vector<Pair>> -Unify.copyVectorVectorPair(java.util.Vector<java.util.Vector<Pair>> vp) + de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp)
            -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.instanceSmaller(Pair P, FC_TTO fc_tto) @@ -260,15 +260,15 @@ Uses of -static java.util.Vector<Pair> -Unify.SubstHashtable2VectorPair(java.util.Hashtable ht) +static de.dhbwstuttgart.typeinference.Menge<Pair> +Unify.SubstHashtable2MengePair(java.util.Hashtable ht)
            -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.unify(Type ty1, Type ty2, FC_TTO fc_tto) @@ -278,8 +278,8 @@ Uses of -static java.util.Vector<java.util.Vector<Pair>> -Unify.unify(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto)
@@ -295,7 +295,7 @@ Uses of -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.instanceSmaller(Pair P, FC_TTO fc_tto) @@ -324,16 +324,16 @@ Uses of -static java.util.Vector<Pair> -Unify.copyVectorPair(java.util.Vector<Pair> vp) +static de.dhbwstuttgart.typeinference.Menge<Pair> +Unify.copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp)
            - java.util.Vector<java.util.Vector<Pair>> -Unify.copyVectorVectorPair(java.util.Vector<java.util.Vector<Pair>> vp) + de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp)
            @@ -341,8 +341,8 @@ Uses of static void -Unify.printMengeUnifier(java.lang.String strMenge, - java.util.Vector<java.util.Vector<Pair>> Uni, +Unify.printMengeUnifier(java.lang.String strMenge, + de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni, int nDebug)
@@ -350,8 +350,8 @@ Uses of -static java.util.Vector<java.util.Vector<Pair>> -Unify.unify(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto)
@@ -360,7 +360,7 @@ Uses of static java.util.Hashtable -Unify.VectorPair2SubstHashtableVectorPair(java.util.Vector<Pair> v) +Unify.MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v)
            diff --git a/doc/Javadoc/mycompiler/mytype/class-use/RefType.html b/doc/Javadoc/mycompiler/mytype/class-use/RefType.html index 5c5a4dd5..291d70e1 100755 --- a/doc/Javadoc/mycompiler/mytype/class-use/RefType.html +++ b/doc/Javadoc/mycompiler/mytype/class-use/RefType.html @@ -251,18 +251,18 @@ Uses of -static java.util.Vector<RefType> -Unify.allGreater(RefType ty, - java.util.Vector FC) +static de.dhbwstuttgart.typeinference.Menge<RefType> +Unify.allGreater(RefType ty, + de.dhbwstuttgart.typeinference.Menge FC)
            -static java.util.Vector<RefType> -Unify.allSmaller(RefType ty, - java.util.Vector FC) +static de.dhbwstuttgart.typeinference.Menge<RefType> +Unify.allSmaller(RefType ty, + de.dhbwstuttgart.typeinference.Menge FC)
            @@ -277,18 +277,18 @@ Uses of -static java.util.Vector<RefType> -Unify.allGreater(RefType ty, - java.util.Vector FC) +static de.dhbwstuttgart.typeinference.Menge<RefType> +Unify.allGreater(RefType ty, + de.dhbwstuttgart.typeinference.Menge FC)
            -static java.util.Vector<RefType> -Unify.allSmaller(RefType ty, - java.util.Vector FC) +static de.dhbwstuttgart.typeinference.Menge<RefType> +Unify.allSmaller(RefType ty, + de.dhbwstuttgart.typeinference.Menge FC)
            @@ -296,9 +296,9 @@ Uses of static Pair -Unify.isInFC(RefType R1, +Unify.isInFC(RefType R1, RefType R2, - java.util.Vector FC) + de.dhbwstuttgart.typeinference.Menge FC)
            diff --git a/doc/Javadoc/mycompiler/mytype/class-use/Type.html b/doc/Javadoc/mycompiler/mytype/class-use/Type.html index 562f2077..044ff29c 100755 --- a/doc/Javadoc/mycompiler/mytype/class-use/Type.html +++ b/doc/Javadoc/mycompiler/mytype/class-use/Type.html @@ -162,13 +162,13 @@ Uses of  void -ClassFile.add_method(java.lang.String name, +ClassFile.add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -225,9 +225,9 @@ Uses of  void -DeclId.codegen_InstVarDecl(ClassFile classfile, +DeclId.codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -235,10 +235,10 @@ Uses of  void -DeclId.codegen_LocalVarDecl(ClassFile classfile, +DeclId.codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
            @@ -246,8 +246,8 @@ Uses of  boolean -ClassBody.is_declared(Type t, - java.util.Vector classlist) +ClassBody.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -266,7 +266,7 @@ Uses of setReturnType(Type type)

-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -274,7 +274,7 @@ Uses of setType(Type t)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -282,7 +282,7 @@ Uses of setType(Type t)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -323,7 +323,7 @@ Uses of getType()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -352,9 +352,9 @@ Uses of  void -LocalVarDecl.check_anz(Type type, - java.util.Vector paralist, - java.util.Vector classlist) +LocalVarDecl.check_anz(Type type, + de.dhbwstuttgart.typeinference.Menge paralist, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -362,8 +362,8 @@ Uses of  void -LocalVarDecl.is_declared(Type t, - java.util.Vector classlist) +LocalVarDecl.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
            @@ -390,7 +390,7 @@ Uses of setType(Type type)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -406,7 +406,7 @@ Uses of setType(Type t)
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -487,7 +487,7 @@ Uses of TyploseVariable
-          Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ. +          Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ. @@ -535,7 +535,7 @@ Uses of clone()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -583,7 +583,7 @@ Uses of replaceWithType(Type newType)
-          Diese Methode geht alle TypeReplacmentListener durch und tauscht über deren +          Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren Callback-Methode diesen Typ gegen den neuen aus. @@ -641,7 +641,7 @@ Uses of getResultType()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -649,7 +649,7 @@ Uses of getType()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -669,11 +669,11 @@ Uses of - java.util.Vector<Type> + de.dhbwstuttgart.typeinference.Menge<Type>
CMultiplyTuple.getResultTypes()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -689,7 +689,7 @@ Uses of setResultType(Type resultType)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -697,7 +697,7 @@ Uses of setType(Type type)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -710,10 +710,10 @@ Uses of  void -CMultiplyTuple.setResultTypes(java.util.Vector<Type> resultTypes) +CMultiplyTuple.setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
  @@ -747,8 +747,8 @@ Uses of Constructor parameters in mycompiler.mytypereconstruction with type arguments of type Type
-CMultiplyTuple(CSubstitutionSet substitutions, - java.util.Vector<Type> resultTypes, +CMultiplyTuple(CSubstitutionSet substitutions, + de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, CTypeAssumptionSet assumptionSet)
@@ -936,11 +936,11 @@ Uses of - java.util.Vector -Unify.adapt(java.lang.String strTV, + de.dhbwstuttgart.typeinference.Menge
+Unify.adapt(java.lang.String strTV, Type T, - java.util.Vector vRFC, - java.util.Vector vRE) + de.dhbwstuttgart.typeinference.Menge vRFC, + de.dhbwstuttgart.typeinference.Menge vRE)
            @@ -959,7 +959,7 @@ Uses of -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.unify(Type ty1, Type ty2, FC_TTO fc_tto) diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html b/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html index 4ac41b92..d0a02497 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html @@ -98,13 +98,13 @@ java.lang.Object

-Ein CIntersectionType gruppiert alle Typmöglichkeiten einer - bestimmten Methode, die über den CMethodKey eindeutig definiert ist.

- Bei der bisherigen Implementierung enthält IntersectionType jedoch nur eine - einzige Typmöglichkeit, d.h. der Vector m_MethodTypeAssumptions - enthält stets nur ein einziges Element.
- Der Grund hierfür ist in der Kopplung der Typannahmen für die einzelnen Methoden, d.h. der - Typkombinationen, begründet. Diese Kopplung von Methoden wird bisher über die getrennten Mengen +Ein CIntersectionType gruppiert alle Typm�glichkeiten einer + bestimmten Methode, die �ber den CMethodKey eindeutig definiert ist.

+ Bei der bisherigen Implementierung enth�lt IntersectionType jedoch nur eine + einzige Typm�glichkeit, d.h. der Menge m_MethodTypeAssumptions + enth�lt stets nur ein einziges Element.
+ Der Grund hierf�r ist in der Kopplung der Typannahmen f�r die einzelnen Methoden, d.h. der + Typkombinationen, begr�ndet. Diese Kopplung von Methoden wird bisher �ber die getrennten Mengen von CTypeReconstructionResults realisiert.

@@ -113,7 +113,7 @@ Ein CIntersectionType gruppiert alle Typm

Version:
$Date: 2005/06/28 19:19:10 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -169,7 +169,7 @@ Ein CIntersectionType gruppiert alle Typm - java.util.Vector<CMethodTypeAssumption> + de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodTypeAssumptions()
@@ -194,7 +194,7 @@ Ein CIntersectionType gruppiert alle Typm  void -setMethodTypeAssumptions(java.util.Vector<CMethodTypeAssumption> methodTypeAssumptions) +setMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions)
            @@ -205,7 +205,7 @@ Ein CIntersectionType gruppiert alle Typm toString()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle   @@ -282,7 +282,7 @@ public void setIntersectionTypeKey(

getMethodTypeAssumptions

-public java.util.Vector<CMethodTypeAssumption> getMethodTypeAssumptions()
+public de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodTypeAssumptions()
@@ -290,10 +290,10 @@ public java.util.Vector<

+

setMethodTypeAssumptions

-public void setMethodTypeAssumptions(java.util.Vector<CMethodTypeAssumption> methodTypeAssumptions)
+public void setMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions)
@@ -328,7 +328,7 @@ toString
 public java.lang.String toString()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Overrides:
toString in class java.lang.Object
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html index cf40a4d0..19851c53 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html @@ -98,8 +98,8 @@ java.lang.Object

-Container-Klasse für Ergebniswerte der Algorithmen TRTuple und TRMultiply. - (siehe Algorithmen 5.28 ff, Martin Plümicke) +Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply. + (siehe Algorithmen 5.28 ff, Martin Pl�micke)

@@ -107,7 +107,7 @@ Container-Klasse f

Version:
$Date: 2005/06/28 19:19:10 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -125,11 +125,11 @@ Container-Klasse f CMultiplyTuple()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
-CMultiplyTuple(CSubstitutionSet substitutions, - java.util.Vector<Type> resultTypes, +CMultiplyTuple(CSubstitutionSet substitutions, + de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, CTypeAssumptionSet assumptionSet)
@@ -167,7 +167,7 @@ Container-Klasse f getAssumptionSet()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -179,11 +179,11 @@ Container-Klasse f - java.util.Vector<Type> + de.dhbwstuttgart.typeinference.Menge<Type> getResultTypes()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -191,7 +191,7 @@ Container-Klasse f getSubstitutions()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -199,15 +199,15 @@ Container-Klasse f setAssumptionSet(CTypeAssumptionSet assumptionSet)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
 void -setResultTypes(java.util.Vector<Type> resultTypes) +setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -215,7 +215,7 @@ Container-Klasse f setSubstitutions(CSubstitutionSet substitutions)
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
@@ -253,16 +253,16 @@ CMultiplyTuple
 public CMultiplyTuple()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle


-

+

CMultiplyTuple

 public CMultiplyTuple(CSubstitutionSet substitutions,
-                      java.util.Vector<Type> resultTypes,
+                      de.dhbwstuttgart.typeinference.Menge<Type> resultTypes,
                       CTypeAssumptionSet assumptionSet)
@@ -282,7 +282,7 @@ getAssumptionSet
 public CTypeAssumptionSet getAssumptionSet()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

@@ -296,7 +296,7 @@ setAssumptionSet
 public void setAssumptionSet(CTypeAssumptionSet assumptionSet)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Parameters:
assumptionSet - The AssumptionSet to set.
@@ -307,9 +307,9 @@ public void setAssumptionSet(

getResultTypes

-public java.util.Vector<Type> getResultTypes()
+public de.dhbwstuttgart.typeinference.Menge<Type> getResultTypes()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

@@ -329,12 +329,12 @@ public java.util.Iterator<

+

setResultTypes

-public void setResultTypes(java.util.Vector<Type> resultTypes)
+public void setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Parameters:
resultType - The ResultType to set.
@@ -347,7 +347,7 @@ getSubstitutions
 public CSubstitutionSet getSubstitutions()
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

@@ -361,7 +361,7 @@ setSubstitutions
 public void setSubstitutions(CSubstitutionSet substitutions)
-
Author: Jörg Bäuerle
+
Author: J�rg B�uerle

Parameters:
substitution - The Substitutions to set.
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html b/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html index fd1f34a2..af8fdb24 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html @@ -98,8 +98,8 @@ java.lang.Object

-Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb +Container-Klasse f�r bestimmte Hilfsdaten, die beim + Typrekonstruktionsalgorithmus ben�tigt und deshalb rekursiv weiter gereicht werden.

@@ -108,7 +108,7 @@ Container-Klasse f

Version:
$Date: 2005/06/28 19:19:10 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -127,8 +127,8 @@ Container-Klasse f NO_METHOD
-          Gibt Namensstring für den Classbody außerhalb einer Methode - für m_CurrentMethod. +          Gibt Namensstring f�r den Classbody au�erhalb einer Methode + f�r m_CurrentMethod.   @@ -141,20 +141,20 @@ Container-Klasse f Constructor Summary -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass)
            -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass, java.lang.String currentMethod, int currentMethodParaCount, - java.util.Vector<java.lang.Integer> blockIdList, + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, int blockDepth)
@@ -188,7 +188,7 @@ Container-Klasse f - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
getA()
@@ -204,7 +204,7 @@ Container-Klasse f - java.util.Vector<java.lang.Integer> + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getBlockIdList()
@@ -277,7 +277,7 @@ Container-Klasse f  void -setA(java.util.Vector<CTypeReconstructionResult> A) +setA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A)
            @@ -285,7 +285,7 @@ Container-Klasse f  void -setBlockIdList(java.util.Vector<java.lang.Integer> blockId) +setBlockIdList(de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockId)
            @@ -358,8 +358,8 @@ NO_METHOD
 public static final java.lang.String NO_METHOD
-
Gibt Namensstring für den Classbody außerhalb einer Methode - für m_CurrentMethod. +
Gibt Namensstring f�r den Classbody au�erhalb einer Methode + f�r m_CurrentMethod.

See Also:
Constant Field Values
@@ -375,25 +375,25 @@ public static final java.lang.String NO_METHOD -

+

CSupportData

 public CSupportData(FC_TTO finiteClosure,
-                    java.util.Vector<CTypeReconstructionResult> A,
+                    de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
                     java.lang.String currentClass)

-

+

CSupportData

 public CSupportData(FC_TTO finiteClosure,
-                    java.util.Vector<CTypeReconstructionResult> A,
+                    de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
                     java.lang.String currentClass,
                     java.lang.String currentMethod,
                     int currentMethodParaCount,
-                    java.util.Vector<java.lang.Integer> blockIdList,
+                    de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList,
                     int blockDepth)
@@ -433,7 +433,7 @@ public void setFiniteClosure(

getA

-public java.util.Vector<CTypeReconstructionResult> getA()
+public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> getA()
@@ -441,10 +441,10 @@ public java.util.Vector<

+

setA

-public void setA(java.util.Vector<CTypeReconstructionResult> A)
+public void setA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A)
@@ -521,7 +521,7 @@ public void setCurrentMethodParaCount(int currentMethodParaCount)

getBlockIdList

-public java.util.Vector<java.lang.Integer> getBlockIdList()
+public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getBlockIdList()
@@ -529,10 +529,10 @@ public java.util.Vector<java.lang.Integer> getBlockIdList()

-

+

setBlockIdList

-public void setBlockIdList(java.util.Vector<java.lang.Integer> blockId)
+public void setBlockIdList(de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockId)
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html b/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html index 55f19726..1658819d 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html @@ -98,11 +98,11 @@ java.lang.Object

-Diese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination +Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche Typkombination aller Klassen und deren Methoden sowie lokalen Variablen. Eine Instanz dieser Klasse - steht für genau eine mögliche Typkombination.
- Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus über die Compiler-API - zurückgegeben. + steht f�r genau eine m�gliche Typkombination.
+ Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die Compiler-API + zur�ckgegeben.

@@ -110,7 +110,7 @@ Diese Container-Klasse kapselt alle Ergebniswerte f

Version:
$Date: 2005/06/28 19:19:10 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -167,8 +167,8 @@ Diese Container-Klasse kapselt alle Ergebniswerte f  void -addGenericTypeVars(java.lang.String className, - java.util.Vector<GenericTypeVar> typeVarList) +addGenericTypeVars(java.lang.String className, + de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList)
            @@ -183,7 +183,7 @@ Diese Container-Klasse kapselt alle Ergebniswerte f - java.util.Vector<java.lang.String> + de.dhbwstuttgart.typeinference.Menge<java.lang.String> getClassNameList()
@@ -199,7 +199,7 @@ Diese Container-Klasse kapselt alle Ergebniswerte f - java.util.Hashtable<java.lang.String,java.util.Vector<GenericTypeVar>> + java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>>
getGenericsTable()
@@ -406,7 +406,7 @@ public void addClassName(java.lang.String className)

getClassNameList

-public java.util.Vector<java.lang.String> getClassNameList()
+public de.dhbwstuttgart.typeinference.Menge<java.lang.String> getClassNameList()
@@ -414,11 +414,11 @@ public java.util.Vector<java.lang.String> getClassNameList()

-

+

addGenericTypeVars

 public void addGenericTypeVars(java.lang.String className,
-                               java.util.Vector<GenericTypeVar> typeVarList)
+ de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList)
@@ -429,7 +429,7 @@ public void addGenericTypeVars(java.lang.String className,

getGenericsTable

-public java.util.Hashtable<java.lang.String,java.util.Vector<GenericTypeVar>> getGenericsTable()
+public java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>> getGenericsTable()
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html index 575d379c..86b15e2b 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html @@ -121,7 +121,7 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.34 von Martin Plümicke +          Implementierung des Algorithmus 5.34 von Martin Pl�micke @@ -131,19 +131,19 @@ Uses of CSupportData supportData)

-          (siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle  CMultiplyTupleSet -Expr.TRTuple(CMultiplyTuple result, - java.util.Vector<Expr> terms, +Expr.TRTuple(CMultiplyTuple result, + de.dhbwstuttgart.typeinference.Menge<Expr> terms, CSupportData supportData)
-          (siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle   diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html index 02e95e72..31b958b6 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html @@ -120,11 +120,11 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
Class.TRProg(CSupportData supportData)
-          Ausgangspunkt für den Typrekonstruktionsalgorithmus. +          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.   @@ -152,9 +152,9 @@ Uses of CSupportData supportData)

-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Plümicke +          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! @@ -176,9 +176,9 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.54 von Martin Plümicke +          Implementierung des Algorithmus 5.54 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! @@ -189,9 +189,9 @@ Uses of CSupportData supportData)

-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Plümicke +          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! @@ -203,7 +203,7 @@ Uses of           
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! @@ -214,9 +214,9 @@ Uses of
CSupportData supportData)
-          Implementierung des Algorithmus 5.53 von Martin Plümicke +          Implementierung des Algorithmus 5.53 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! @@ -227,9 +227,9 @@ Uses of CSupportData supportData)
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Plümicke +          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!   @@ -256,8 +256,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.35 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.35 von Martin Pl�micke +
Author: J�rg B�uerle @@ -331,9 +331,9 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.42 von Martin Plümicke +          Implementierung des Algorithmus 5.42 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!! + der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! @@ -343,8 +343,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.31 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.31 von Martin Pl�micke +
Author: J�rg B�uerle @@ -354,8 +354,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.32 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.32 von Martin Pl�micke +
Author: J�rg B�uerle @@ -365,9 +365,9 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.41 von Martin Plümicke +          Implementierung des Algorithmus 5.41 von Martin Pl�micke
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!! + der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! @@ -377,8 +377,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.33 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.33 von Martin Pl�micke +
Author: J�rg B�uerle @@ -388,8 +388,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.37 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.37 von Martin Pl�micke +
Author: J�rg B�uerle @@ -399,8 +399,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.40 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.40 von Martin Pl�micke +
Author: J�rg B�uerle @@ -410,7 +410,7 @@ Uses of CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -421,8 +421,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.38 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.38 von Martin Pl�micke +
Author: J�rg B�uerle @@ -452,7 +452,7 @@ Uses of CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -463,8 +463,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.43 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.43 von Martin Pl�micke +
Author: J�rg B�uerle @@ -474,7 +474,7 @@ Uses of CSupportData supportData)
-          Workaround: Überschreibt Methode TRExp aus der Super-Klasse Literal, weil +          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. @@ -495,8 +495,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.30 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.30 von Martin Pl�micke +
Author: J�rg B�uerle @@ -505,8 +505,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.38-1 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke +
Author: J�rg B�uerle @@ -519,7 +519,7 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.34 von Martin Plümicke +          Implementierung des Algorithmus 5.34 von Martin Pl�micke @@ -529,8 +529,8 @@ Uses of CSupportData supportData)
-          (siehe Algorithmus 5.29 TRMultiply, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) +
Author: J�rg B�uerle @@ -540,7 +540,7 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.23 von Martin Plümicke +          Implementierung des Algorithmus 5.23 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" ersetzt werden. @@ -582,8 +582,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.22 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.22 von Martin Pl�micke +
Author: J�rg B�uerle @@ -663,8 +663,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.26 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.26 von Martin Pl�micke +
Author: J�rg B�uerle @@ -694,8 +694,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.27 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.27 von Martin Pl�micke +
Author: J�rg B�uerle @@ -705,8 +705,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.24 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.24 von Martin Pl�micke +
Author: J�rg B�uerle @@ -756,7 +756,7 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.21 von Martin Plümicke +          Implementierung des Algorithmus 5.21 von Martin Pl�micke
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen. @@ -807,8 +807,8 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.20 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.20 von Martin Pl�micke +
Author: J�rg B�uerle @@ -828,33 +828,33 @@ Uses of CSupportData supportData)
-          Implementierung des Algorithmus 5.25 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.25 von Martin Pl�micke +
Author: J�rg B�uerle  CTripleSet -Block.TRStatements(CSubstitutionSet sigma, +Block.TRStatements(CSubstitutionSet sigma, CTypeAssumptionSet V, - java.util.Vector<Statement> statementList, + de.dhbwstuttgart.typeinference.Menge<Statement> statementList, int index, CTypeAssumptionSet V_start, CSupportData supportData)
-          Implementierung des Algorithmus 5.19 von Martin Plümicke -
Author: Jörg Bäuerle +          Implementierung des Algorithmus 5.19 von Martin Pl�micke +
Author: J�rg B�uerle  CMultiplyTupleSet -Expr.TRTuple(CMultiplyTuple result, - java.util.Vector<Expr> terms, +Expr.TRTuple(CMultiplyTuple result, + de.dhbwstuttgart.typeinference.Menge<Expr> terms, CSupportData supportData)
-          (siehe Algorithmus 5.28 TRTuple, Martin Plümicke) -
Author: Jörg Bäuerle +          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) +
Author: J�rg B�uerle   diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html index d20e8d28..9a795cee 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html @@ -116,28 +116,28 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
SourceFile.typeReconstruction()
-          Tyrekonstruktionsalgorithmus: ruft für jede Klasse den Algorithmus TRProg auf. +          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>
MyCompilerAPI.typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> MyCompiler.typeReconstruction()
-          Author: Jörg Bäuerle
+          Author: J�rg B�uerle
Ruft den Typrekonstruktionsalgorithmus auf. @@ -159,11 +159,11 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> Class.TRProg(CSupportData supportData)
-          Ausgangspunkt für den Typrekonstruktionsalgorithmus. +          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.   @@ -200,7 +200,7 @@ Uses of - java.util.Vector<CTypeReconstructionResult> + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> CSupportData.getA()
@@ -217,7 +217,7 @@ Uses of  void -CSupportData.setA(java.util.Vector<CTypeReconstructionResult> A) +CSupportData.setA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A)
            @@ -231,20 +231,20 @@ Uses of Constructor parameters in mycompiler.mytypereconstruction with type arguments of type CTypeReconstructionResult -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass)
            -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass, java.lang.String currentMethod, int currentMethodParaCount, - java.util.Vector<java.lang.Integer> blockIdList, + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, int blockDepth)
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html index 7bd9b215..2331c954 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html @@ -91,12 +91,12 @@ Class CMultiplyTupleSet
 java.lang.Object
   extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CVectorSet<CMultiplyTuple>
+      extended by mycompiler.mytypereconstruction.set.CMengeSet<CMultiplyTuple>
           extended by mycompiler.mytypereconstruction.set.CMultiplyTupleSet
 

-
public class CMultiplyTupleSet
extends CVectorSet<CMultiplyTuple>
+
public class CMultiplyTupleSet
extends CMengeSet<CMultiplyTuple>

@@ -104,7 +104,7 @@ java.lang.Object

Version:
$Date: 2005/06/28 19:19:08 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -151,13 +151,13 @@ java.lang.Object             -  - + - +
Methods inherited from class mycompiler.mytypereconstruction.set.CVectorSetMethods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getVector, removeElement, setVector, subtract, uniteaddElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
  diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html index 0a7df9b0..49802c57 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html @@ -91,12 +91,12 @@ Class CReconstructionTupleSet
 java.lang.Object
   extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CVectorSet<CReconstructionTuple>
+      extended by mycompiler.mytypereconstruction.set.CMengeSet<CReconstructionTuple>
           extended by mycompiler.mytypereconstruction.set.CReconstructionTupleSet
 

-
public class CReconstructionTupleSet
extends CVectorSet<CReconstructionTuple>
+
public class CReconstructionTupleSet
extends CMengeSet<CReconstructionTuple>

@@ -104,7 +104,7 @@ java.lang.Object

Version:
$Date: 2005/06/28 19:19:08 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -140,7 +140,7 @@ java.lang.Object deepCopy()
-          
Author: Jörg Bäuerle +          
Author: J�rg B�uerle @@ -151,13 +151,13 @@ java.lang.Object             -  - + - +
Methods inherited from class mycompiler.mytypereconstruction.set.CVectorSetMethods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getVector, removeElement, setVector, subtract, uniteaddElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
  @@ -227,7 +227,7 @@ deepCopy
 public CReconstructionTupleSet deepCopy()
-

Author: Jörg Bäuerle +

Author: J�rg B�uerle

Specified by:
deepCopy in class CSet<CReconstructionTuple>
diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html index ea786e43..b6bd68c4 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html @@ -93,7 +93,7 @@ java.lang.Object extended by mycompiler.mytypereconstruction.set.CSet<E>
-
Direct Known Subclasses:
CHashtableSet, CVectorSet
+
Direct Known Subclasses:
CHashtableSet, CMengeSet

@@ -105,7 +105,7 @@ java.lang.Object
Version:
$date
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html index e89abe69..ccb68b2a 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html @@ -91,12 +91,12 @@ Class CSubstitutionSet
 java.lang.Object
   extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CVectorSet<CSubstitution>
+      extended by mycompiler.mytypereconstruction.set.CMengeSet<CSubstitution>
           extended by mycompiler.mytypereconstruction.set.CSubstitutionSet
 

-
public class CSubstitutionSet
extends CVectorSet<CSubstitution>
+
public class CSubstitutionSet
extends CMengeSet<CSubstitution>

@@ -104,7 +104,7 @@ java.lang.Object

Version:
$Date: 2005/06/28 19:19:08 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -125,7 +125,7 @@ java.lang.Object             -CSubstitutionSet(java.util.Vector<Pair> unifiers) +CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers)
            @@ -162,7 +162,7 @@ java.lang.Object execute()
-          Führt jede einzelne CSubstitution aus. +          F�hrt jede einzelne CSubstitution aus. @@ -173,13 +173,13 @@ java.lang.Object             -  - + - +
Methods inherited from class mycompiler.mytypereconstruction.set.CVectorSetMethods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getVector, removeElement, setVector, subtract, uniteaddElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
  @@ -221,10 +221,10 @@ public CSubstitutionSet()

-

+

CSubstitutionSet

-public CSubstitutionSet(java.util.Vector<Pair> unifiers)
+public CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers)
                  throws CTypeReconstructionException
@@ -277,7 +277,7 @@ applyUnifier public void applyUnifier(CSubstitutionSet unifier)
Wendet den Unifier auf die rechten Seiten alle Substitutionen an. -
Author: Jörg Bäuerle +
Author: J�rg B�uerle

Parameters:
unifier -
@@ -291,8 +291,8 @@ execute public void execute() throws CTypeReconstructionException
-
Führt jede einzelne CSubstitution aus. -
Author: Jörg Bäuerle +
F�hrt jede einzelne CSubstitution aus. +
Author: J�rg B�uerle

diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html index 8f91ea77..2bad0309 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html @@ -91,12 +91,12 @@ Class CTripleSet
 java.lang.Object
   extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CVectorSet<CTriple>
+      extended by mycompiler.mytypereconstruction.set.CMengeSet<CTriple>
           extended by mycompiler.mytypereconstruction.set.CTripleSet
 

-
public class CTripleSet
extends CVectorSet<CTriple>
+
public class CTripleSet
extends CMengeSet<CTriple>

@@ -104,7 +104,7 @@ java.lang.Object

Version:
$Date: 2005/06/28 19:19:08 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -151,13 +151,13 @@ java.lang.Object             -  - + - +
Methods inherited from class mycompiler.mytypereconstruction.set.CVectorSetMethods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getVector, removeElement, setVector, subtract, uniteaddElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
  diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html index 74cff54e..6e4c6cbe 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html @@ -53,7 +53,7 @@ function windowTitle()  PREV CLASS  - NEXT CLASSNEXT CLASS
FRAMES    NO FRAMES   @@ -104,7 +104,7 @@ java.lang.Object
Version:
$Date: 2005/06/28 19:19:08 $
Author:
-
Jörg Bäuerle
+
J�rg B�uerle

@@ -285,7 +285,7 @@ public  PREV CLASS  - NEXT CLASSNEXT CLASS
FRAMES    NO FRAMES   diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html index f1c03135..e56a1bf7 100755 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html +++ b/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html @@ -4,17 +4,17 @@ -CVectorSet +CMengeSet - +


-
public abstract class CVectorSet<E>
+
public abstract class CMengeSet<E>
 extends CSet<E>
Version:
$Date: 2013/09/22 20:12:59 $
@@ -133,7 +133,7 @@ extends Constructor and Description -CVectorSet()  +CMengeSet()  @@ -152,48 +152,48 @@ extends void -addAll(CVectorSet<E> set)  +addAll(CMengeSet<E> set)  void -addElement(E element)  +addElement(E element)  boolean -contains(E element)  +contains(E element)  boolean -equals(java.lang.Object obj)  +equals(java.lang.Object obj)  int -getCardinality()  +getCardinality()  -java.util.Iterator<E> -getIterator()  +java.util.Iterator<E> +getIterator()  -java.util.Vector<E> -getVector()  +de.dhbwstuttgart.typeinference.Menge<E> +getMenge()  void -removeElement(E element)  +removeElement(E element)  void -setVector(java.util.Vector<E> elements)  +setMenge(de.dhbwstuttgart.typeinference.Menge<E> elements)  void -subtract(CSet<E> anotherSet)  +subtract(CSet<E> anotherSet)  void -unite(CSet<E> anotherSet) -
F�gt ein CVectorSet an!
+unite(CSet<E> anotherSet) +
F�gt ein CMengeSet an!
@@ -232,13 +232,13 @@ extends +
  • -

    CVectorSet

    -
    public CVectorSet()
    +

    CMengeSet

    +
    public CMengeSet()
@@ -257,10 +257,10 @@ extends
  • addElement

    -
    public void addElement(E element)
    +
    public void addElement(E element)
    Specified by:
    -
    addElement in class CSet<E>
    +
    addElement in class CSet<E>
  • @@ -272,20 +272,20 @@ extends
  • removeElement

    -
    public void removeElement(E element)
    +
    public void removeElement(E element)
    Specified by:
    -
    removeElement in class CSet<E>
    +
    removeElement in class CSet<E>
  • - + @@ -294,29 +294,29 @@ extends
  • getIterator

    -
    public java.util.Iterator<E> getIterator()
    +
    public java.util.Iterator<E> getIterator()
    Specified by:
    -
    getIterator in class CSet<E>
    +
    getIterator in class CSet<E>
  • - +
    • -

      getVector

      -
      public java.util.Vector<E> getVector()
      +

      getMenge

      +
      public de.dhbwstuttgart.typeinference.Menge<E> getMenge()
    - +
    • -

      setVector

      -
      public void setVector(java.util.Vector<E> elements)
      +

      setMenge

      +
      public void setMenge(de.dhbwstuttgart.typeinference.Menge<E> elements)
    @@ -325,13 +325,13 @@ extends
  • unite

    -
    public void unite(CSet<E> anotherSet)
    -
    F�gt ein CVectorSet an! +
    public void unite(CSet<E> anotherSet)
    +
    F�gt ein CMengeSet an! Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente �bernommen)
    Specified by:
    -
    unite in class CSet<E>
    -
    Parameters:
    anotherSet - Das hinzuzuf�gende CVectorSet (CSet wird ignoriert)
    +
    unite in class CSet<E>
    +
    Parameters:
    anotherSet - Das hinzuzuf�gende CMengeSet (CSet wird ignoriert)
  • @@ -340,10 +340,10 @@ extends
  • subtract

    -
    public void subtract(CSet<E> anotherSet)
    +
    public void subtract(CSet<E> anotherSet)
    Specified by:
    -
    subtract in class CSet<E>
    +
    subtract in class CSet<E>
  • @@ -355,10 +355,10 @@ extends
  • contains

    -
    public boolean contains(E element)
    +
    public boolean contains(E element)
    Specified by:
    -
    contains in class CSet<E>
    +
    contains in class CSet<E>
  • @@ -371,7 +371,7 @@ extends equals
     in class CSet<E>
    +
    equals in class CSet<E>
    @@ -384,7 +384,7 @@ extends getCardinality in class CSet<E>
    +
    getCardinality in class CSet<E>
    @@ -405,7 +405,7 @@ extends Overview
  • Package
  • -
  • Use
  • +
  • Use
  • Tree
  • Deprecated
  • Index
  • @@ -418,8 +418,8 @@ extends Next Class -
  • mycompiler.mytypereconstruction.set.CVectorSet<E> +
  • mycompiler.mytypereconstruction.set.CMengeSet<E> @@ -314,7 +314,7 @@ extends
  • getParaAssumptions

    -
    public java.util.Vector<CParaTypeAssumption> getParaAssumptions()
    +
    public de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> getParaAssumptions()
    Author: Jrg Buerle
    Returns:
    Returns the m_ParaAssumptions.
  • diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html index 46e2a038..51a539cb 100755 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html +++ b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html @@ -129,7 +129,7 @@ extends Constructor and Description -CParaTypeAssumption(java.lang.String className, +CParaTypeAssumption(java.lang.String className, java.lang.String methodName, int methodParaCount, int methodOverloadedID, @@ -137,7 +137,7 @@ extends Type assumedType, int lineNumber, int offset, - java.util.Vector<java.lang.Integer> Offsetvektor)  + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> Offsetvektor)  @@ -198,7 +198,7 @@ extends CTypeAssumption -addOffset, equals, getAssumedType, getClassName, getIdentifier, getLineNumber, getOffset, getOffsetVector, isPlaceholderVariable, setAssumedType, setClassName, setIdentifier, setLineNumber, setOffset, sub, sub, toString +addOffset, equals, getAssumedType, getClassName, getIdentifier, getLineNumber, getOffset, getOffsetMenge, isPlaceholderVariable, setAssumedType, setClassName, setIdentifier, setLineNumber, setOffset, sub, sub, toString
    - +
    • unifyOld

      -
      public static java.util.Vector<java.util.Vector<Pair>> unifyOld(java.util.Vector<Pair> E,
      +
      public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unifyOld(de.dhbwstuttgart.typeinference.Menge<Pair> E,
                                                       FC_TTO fc_tto)
    @@ -376,12 +376,12 @@ extends java.lang.Object
    • unifyWC

      -
      public static java.util.Vector<java.util.Vector<Pair>> unifyWC(Type ty1,
      +
      public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unifyWC(Type ty1,
                                                      Type ty2,
                                                      FC_TTO fc_tto)
      Einstieg in die Unifizierung mit Wildcards
      Parameters:
      ty1 - - Typ 1 der Unifizierung
      ty2 - - Typ 2 der Unifizierung
      fc_tto - - Hilfsklasse mit FC
      -
      Returns:
      Vector> - Ergebnispaare
      +
      Returns:
      Menge> - Ergebnispaare
    @@ -390,24 +390,24 @@ extends java.lang.Object
    - +
    • unify

      -
      public static java.util.Vector<java.util.Vector<Pair>> unify(java.util.Vector<Pair> E,
      +
      public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
                                                    FC_TTO fc_tto)
      Einstieg in die Unifizierung mit Wildcards
      -
      Parameters:
      E - - Vector von Paaren die unifiziert werden sollen
      fc_tto - - Hilfsklasse mit FC
      -
      Returns:
      Vector> - Ergebnispaare +
      Parameters:
      E - - Menge von Paaren die unifiziert werden sollen
      fc_tto - - Hilfsklasse mit FC
      +
      Returns:
      Menge> - Ergebnispaare Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] oder alle Elemente in der Form [A <. B, C <. D, ..., E
      MatchException
    - +
    • sub_unify

      -
      public static java.util.Vector<Pair> sub_unify(java.util.Vector<Pair> E,
      +
      public static de.dhbwstuttgart.typeinference.Menge<Pair> sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
                                      FC_TTO fc_tto)
    - +
    • sub_unify

      -
      public static java.util.Vector<Pair> sub_unify(java.util.Vector<Pair> E,
      +
      public static de.dhbwstuttgart.typeinference.Menge<Pair> sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
                                      FC_TTO fc_tto,
                                      boolean useSubst)
    • @@ -474,40 +474,40 @@ extends java.lang.Object boolean allowTPH)
    - +
    • -

      SubstHashtable2VectorPair

      -
      public static java.util.Vector<Pair> SubstHashtable2VectorPair(java.util.Hashtable ht)
      +

      SubstHashtable2MengePair

      +
      public static de.dhbwstuttgart.typeinference.Menge<Pair> SubstHashtable2MengePair(java.util.Hashtable ht)
    - +
    • -

      VectorPair2SubstHashtableVectorPair

      -
      public static java.util.Hashtable<java.lang.String,Type> VectorPair2SubstHashtableVectorPair(java.util.Vector<Pair> v)
      +

      MengePair2SubstHashtableMengePair

      +
      public static java.util.Hashtable<java.lang.String,Type> MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v)
    - +
    • -

      copyVectorPair

      -
      public static java.util.Vector<Pair> copyVectorPair(java.util.Vector<Pair> vp)
      +

      copyMengePair

      +
      public static de.dhbwstuttgart.typeinference.Menge<Pair> copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp)
    - +
    • -

      copyVectorVectorPair

      -
      public static java.util.Vector<java.util.Vector<Pair>> copyVectorVectorPair(java.util.Vector<java.util.Vector<Pair>> vp)
      +

      copyMengeMengePair

      +
      public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp)
    @@ -516,41 +516,41 @@ extends java.lang.Object - +
    • allSmaller

      -
      public static java.util.Vector<RefType> allSmaller(RefType ty,
      -                                   java.util.Vector<Pair> FC)
      +
      public static de.dhbwstuttgart.typeinference.Menge<RefType> allSmaller(RefType ty,
      +                                   de.dhbwstuttgart.typeinference.Menge<Pair> FC)
    - + - +
    • allGreater

      -
      public static java.util.Vector<RefType> allGreater(RefType ty,
      -                                   java.util.Vector<Pair> FC)
      +
      public static de.dhbwstuttgart.typeinference.Menge<RefType> allGreater(RefType ty,
      +                                   de.dhbwstuttgart.typeinference.Menge<Pair> FC)
    - +
      @@ -558,7 +558,7 @@ extends java.lang.Object

      isInFC

      public static Pair isInFC(RefType R1,
                 RefType R2,
      -          java.util.Vector<Pair> FC)
      + de.dhbwstuttgart.typeinference.Menge<Pair> FC)
    @@ -626,7 +626,7 @@ extends java.lang.Object FC_TTO fc_tto) - +
      @@ -635,41 +635,41 @@ extends java.lang.Object
      public static int pi(int n,
            java.lang.String C,
            java.lang.String D,
      -     java.util.Vector tto)
      +     de.dhbwstuttgart.typeinference.Menge tto)
                     throws SCException
      Throws:
      SCException
    - +
    • printMengeUnifier

      public static void printMengeUnifier(java.lang.String strMenge,
      -                     java.util.Vector<java.util.Vector<Pair>> Uni,
      +                     de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni,
                            int nDebug)
    - +
    • printMenge

      public static void printMenge(java.lang.String strMenge,
      -              java.util.Vector<Pair> E,
      +              de.dhbwstuttgart.typeinference.Menge<Pair> E,
                     int nDebug)
    - +
    • hasSolvedForm

      -
      public static boolean hasSolvedForm(java.util.Vector<Pair> E)
      +
      public static boolean hasSolvedForm(de.dhbwstuttgart.typeinference.Menge<Pair> E)
    diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html index 1dc661e7..f1480e12 100755 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html +++ b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html @@ -149,20 +149,20 @@ -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass, - java.util.Vector<GenericTypeVar> currentClassPara)  + de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> currentClassPara)  -CSupportData(FC_TTO finiteClosure, - java.util.Vector<CTypeReconstructionResult> A, +CSupportData(FC_TTO finiteClosure, + de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, java.lang.String currentClass, - java.util.Vector<GenericTypeVar> currentClassPara, + de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> currentClassPara, java.lang.String currentMethod, int currentMethodParaCount, int currentMethodOverloadedID, - java.util.Vector<java.lang.Integer> blockIdList, + de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, int blockDepth)  @@ -180,7 +180,7 @@ -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.instanceSmaller(Pair P, FC_TTO fc_tto)  @@ -197,13 +197,13 @@ FC_TTO fc_tto)  -static java.util.Vector<Pair> -Unify.sub_unify(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<Pair> +Unify.sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto)  -static java.util.Vector<Pair> -Unify.sub_unify(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<Pair> +Unify.sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto, boolean useSubst)  @@ -214,7 +214,7 @@ FC_TTO fc_tto)  -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.unify(Type ty1, Type ty2, FC_TTO fc_tto) @@ -222,26 +222,26 @@ -static java.util.Vector<java.util.Vector<Pair>> -Unify.unify(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto)
    Einstieg in die Unifizierung mit Wildcards
    -static java.util.Vector<java.util.Vector<Pair>> -Unify.unifyOld(java.util.Vector<Pair> E, +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> +Unify.unifyOld(de.dhbwstuttgart.typeinference.Menge<Pair> E, FC_TTO fc_tto)  -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.unifyWC(Pair P, FC_TTO fc_tto)
    Einstieg in die Unifizierung mit Wildcards
    -static java.util.Vector<java.util.Vector<Pair>> +static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Unify.unifyWC(Type ty1, Type ty2, FC_TTO fc_tto) diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html index ca5bd18a..0b687ad4 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html @@ -155,7 +155,7 @@ implements getBlockID()  -java.util.Vector<BlockExpect> +de.dhbwstuttgart.typeinference.Menge<BlockExpect> getContainedBlocks()  @@ -168,7 +168,7 @@ implements void -setContainedBlocks(java.util.Vector<BlockExpect> containedBlocks)  +setContainedBlocks(de.dhbwstuttgart.typeinference.Menge<BlockExpect> containedBlocks)  void @@ -273,16 +273,16 @@ implements
  • getContainedBlocks

    -
    public java.util.Vector<BlockExpect> getContainedBlocks()
    +
    public de.dhbwstuttgart.typeinference.Menge<BlockExpect> getContainedBlocks()
  • - +
    • setContainedBlocks

      -
      public void setContainedBlocks(java.util.Vector<BlockExpect> containedBlocks)
      +
      public void setContainedBlocks(de.dhbwstuttgart.typeinference.Menge<BlockExpect> containedBlocks)
    diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html index 0e15c68e..ce897ff0 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html @@ -154,7 +154,7 @@ implements addMethod(MethodExpect method)  -java.util.Vector<GenericTypeVar> +de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()  @@ -171,7 +171,7 @@ implements void -setGenerics(java.util.Vector<GenericTypeVar> generics)  +setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)  void @@ -292,16 +292,16 @@ implements
  • getGenerics

    -
    public java.util.Vector<GenericTypeVar> getGenerics()
    +
    public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()
  • - +
    • setGenerics

      -
      public void setGenerics(java.util.Vector<GenericTypeVar> generics)
      +
      public void setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)
    diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html index 9448f677..d21b4dca 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html @@ -155,7 +155,7 @@ implements getClasses()  -java.util.Vector<java.lang.Exception> +de.dhbwstuttgart.typeinference.Menge<java.lang.Exception> getExceptions()  @@ -246,7 +246,7 @@ implements
  • getExceptions

    -
    public java.util.Vector<java.lang.Exception> getExceptions()
    +
    public de.dhbwstuttgart.typeinference.Menge<java.lang.Exception> getExceptions()
  • diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html index 8e6f2b0e..aac440db 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html @@ -180,7 +180,7 @@ implements getBlock()  -java.util.Vector<GenericTypeVar> +de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()  @@ -200,11 +200,11 @@ implements getParameter()  -java.util.Vector<Type> +de.dhbwstuttgart.typeinference.Menge<Type> getReturntypes()  -java.util.Vector<Type> +de.dhbwstuttgart.typeinference.Menge<Type> getReturntypesCopy()  @@ -217,7 +217,7 @@ implements void -setGenerics(java.util.Vector<GenericTypeVar> generics)  +setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)  void @@ -233,11 +233,11 @@ implements void -setReturntypes(java.util.Vector<Type> returntypes)  +setReturntypes(de.dhbwstuttgart.typeinference.Menge<Type> returntypes)  void -setReturntypesCopy(java.util.Vector<Type> returntypesCopy)  +setReturntypesCopy(de.dhbwstuttgart.typeinference.Menge<Type> returntypesCopy)  boolean @@ -398,16 +398,16 @@ implements
  • getReturntypes

    -
    public java.util.Vector<Type> getReturntypes()
    +
    public de.dhbwstuttgart.typeinference.Menge<Type> getReturntypes()
  • - +
    • setReturntypes

      -
      public void setReturntypes(java.util.Vector<Type> returntypes)
      +
      public void setReturntypes(de.dhbwstuttgart.typeinference.Menge<Type> returntypes)
    @@ -416,16 +416,16 @@ implements
  • getGenerics

    -
    public java.util.Vector<GenericTypeVar> getGenerics()
    +
    public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()
  • - +
    • setGenerics

      -
      public void setGenerics(java.util.Vector<GenericTypeVar> generics)
      +
      public void setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)
    @@ -488,16 +488,16 @@ implements
  • getReturntypesCopy

    -
    public java.util.Vector<Type> getReturntypesCopy()
    +
    public de.dhbwstuttgart.typeinference.Menge<Type> getReturntypesCopy()
  • - +
    • setReturntypesCopy

      -
      public void setReturntypesCopy(java.util.Vector<Type> returntypesCopy)
      +
      public void setReturntypesCopy(de.dhbwstuttgart.typeinference.Menge<Type> returntypesCopy)
    diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html index 823865d8..c0d0dfe9 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html @@ -154,11 +154,11 @@ implements addExpectedType(Type type)  -java.util.Vector<Type> +de.dhbwstuttgart.typeinference.Menge<Type> getExpectedType()  -java.util.Vector<Type> +de.dhbwstuttgart.typeinference.Menge<Type> getExpectedTypeCopy()  @@ -171,11 +171,11 @@ implements void -setExpectedType(java.util.Vector<Type> expectedType)  +setExpectedType(de.dhbwstuttgart.typeinference.Menge<Type> expectedType)  void -setExpectedTypeCopy(java.util.Vector<Type> expectedTypeCopy)  +setExpectedTypeCopy(de.dhbwstuttgart.typeinference.Menge<Type> expectedTypeCopy)  void @@ -276,16 +276,16 @@ implements
  • getExpectedType

    -
    public java.util.Vector<Type> getExpectedType()
    +
    public de.dhbwstuttgart.typeinference.Menge<Type> getExpectedType()
  • - +
    • setExpectedType

      -
      public void setExpectedType(java.util.Vector<Type> expectedType)
      +
      public void setExpectedType(de.dhbwstuttgart.typeinference.Menge<Type> expectedType)
    @@ -312,16 +312,16 @@ implements
  • getExpectedTypeCopy

    -
    public java.util.Vector<Type> getExpectedTypeCopy()
    +
    public de.dhbwstuttgart.typeinference.Menge<Type> getExpectedTypeCopy()
  • - +
    • setExpectedTypeCopy

      -
      public void setExpectedTypeCopy(java.util.Vector<Type> expectedTypeCopy)
      +
      public void setExpectedTypeCopy(de.dhbwstuttgart.typeinference.Menge<Type> expectedTypeCopy)
    diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html index e8601f49..9aa7f0cc 100755 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html +++ b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html @@ -109,7 +109,7 @@ -java.util.Vector<BlockExpect> +de.dhbwstuttgart.typeinference.Menge<BlockExpect> BlockExpect.getContainedBlocks()  @@ -140,7 +140,7 @@ void -BlockExpect.setContainedBlocks(java.util.Vector<BlockExpect> containedBlocks)  +BlockExpect.setContainedBlocks(de.dhbwstuttgart.typeinference.Menge<BlockExpect> containedBlocks)  diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html index 4c3c0d21..3a769c45 100755 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html +++ b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html @@ -109,7 +109,7 @@ void -checkResults(java.util.Vector<CTypeReconstructionResult> resultSet)  +checkResults(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> resultSet)  @@ -126,13 +126,13 @@

    Method Detail

    - + diff --git a/doc/LambdaJavadoc/overview-tree.html b/doc/LambdaJavadoc/overview-tree.html index 8612c4b4..71e00b63 100755 --- a/doc/LambdaJavadoc/overview-tree.html +++ b/doc/LambdaJavadoc/overview-tree.html @@ -112,7 +112,7 @@
    diff --git a/doc/OldStuff/JavaDoc/AndOp.html b/doc/OldStuff/JavaDoc/AndOp.html index ff787c89..f9e20861 100755 --- a/doc/OldStuff/JavaDoc/AndOp.html +++ b/doc/OldStuff/JavaDoc/AndOp.html @@ -120,7 +120,7 @@ java.lang.Object Methods inherited from class LogOp -build, codegen, if_codegen, loop_codegen, replace_index +build, codegen, if_codegen, loop_codegen, replace_index   diff --git a/doc/OldStuff/JavaDoc/ArgumentList.html b/doc/OldStuff/JavaDoc/ArgumentList.html index 18ea085c..24546b02 100755 --- a/doc/OldStuff/JavaDoc/ArgumentList.html +++ b/doc/OldStuff/JavaDoc/ArgumentList.html @@ -99,7 +99,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge expr
    @@ -134,9 +134,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -144,7 +144,7 @@ java.lang.Object  java.lang.String -get_codegen_ArgumentList(java.util.Vector paralist) +get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -183,7 +183,7 @@ java.lang.Object

    expr

    -public java.util.Vector expr
    +public de.dhbwstuttgart.typeinference.Menge expr
    @@ -216,12 +216,12 @@ public ArgumentList() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    @@ -231,10 +231,10 @@ public void codegen(ClassFile classfile,

    -

    +

    get_codegen_ArgumentList

    -public java.lang.String get_codegen_ArgumentList(java.util.Vector paralist)
    +public java.lang.String get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
    diff --git a/doc/OldStuff/JavaDoc/Assign.html b/doc/OldStuff/JavaDoc/Assign.html index 40d04ba9..cd740ac9 100755 --- a/doc/OldStuff/JavaDoc/Assign.html +++ b/doc/OldStuff/JavaDoc/Assign.html @@ -166,9 +166,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -184,7 +184,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -210,7 +210,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -228,7 +228,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -311,10 +311,10 @@ public void set_Expr(Expr expr1,

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -323,7 +323,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -346,16 +346,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/AttributeInfo.html b/doc/OldStuff/JavaDoc/AttributeInfo.html index 9a33a48e..6b860df5 100755 --- a/doc/OldStuff/JavaDoc/AttributeInfo.html +++ b/doc/OldStuff/JavaDoc/AttributeInfo.html @@ -161,8 +161,8 @@ java.lang.Object - java.util.Vector -get_info_Vector() + de.dhbwstuttgart.typeinference.Menge +get_info_Menge()
                @@ -186,7 +186,7 @@ java.lang.Object  void -set_info(java.util.Vector t) +set_info(de.dhbwstuttgart.typeinference.Menge t)
                @@ -270,10 +270,10 @@ public byte[] get_info()

    -

    -get_info_Vector

    +

    +get_info_Menge

    -public java.util.Vector get_info_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_info_Menge()
    @@ -306,10 +306,10 @@ public void set_info(byte[] t)

    -

    +

    set_info

    -public void set_info(java.util.Vector t)
    +public void set_info(de.dhbwstuttgart.typeinference.Menge t)
    diff --git a/doc/OldStuff/JavaDoc/BaseType.html b/doc/OldStuff/JavaDoc/BaseType.html index fdd26fca..35214d37 100755 --- a/doc/OldStuff/JavaDoc/BaseType.html +++ b/doc/OldStuff/JavaDoc/BaseType.html @@ -137,7 +137,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/Binary.html b/doc/OldStuff/JavaDoc/Binary.html index ab57d935..a37ca8f0 100755 --- a/doc/OldStuff/JavaDoc/Binary.html +++ b/doc/OldStuff/JavaDoc/Binary.html @@ -176,9 +176,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -218,9 +218,9 @@ java.lang.Object  void -neg_codegen(ClassFile classfile, +neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -228,9 +228,9 @@ java.lang.Object  void -not_codegen(ClassFile classfile, +not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -238,7 +238,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -287,7 +287,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -305,7 +305,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -386,10 +386,10 @@ public Binary() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -398,7 +398,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -487,16 +487,16 @@ public Expr get_Expr2()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    @@ -505,12 +505,12 @@ public void codegen(ClassFile classfile,

    -

    +

    not_codegen

     public void not_codegen(ClassFile classfile,
                             CodeAttribute code,
    -                        java.util.Vector paralist)
    +                        de.dhbwstuttgart.typeinference.Menge paralist)
                      throws JVMCodeException
    @@ -520,12 +520,12 @@ public void not_codegen(ClassFile classfile,

    -

    +

    neg_codegen

     public void neg_codegen(ClassFile classfile,
                             CodeAttribute code,
    -                        java.util.Vector paralist)
    +                        de.dhbwstuttgart.typeinference.Menge paralist)
                      throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/BinaryExpr.html b/doc/OldStuff/JavaDoc/BinaryExpr.html index 28ec97c3..59927aaa 100755 --- a/doc/OldStuff/JavaDoc/BinaryExpr.html +++ b/doc/OldStuff/JavaDoc/BinaryExpr.html @@ -150,7 +150,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId   @@ -168,7 +168,7 @@ java.lang.Object Methods inherited from class Statement -codegen, print_rec, print_rec, print_rec, print_rec +codegen, print_rec, print_rec, print_rec, print_rec   diff --git a/doc/OldStuff/JavaDoc/Block.html b/doc/OldStuff/JavaDoc/Block.html index 49873456..65a96c5e 100755 --- a/doc/OldStuff/JavaDoc/Block.html +++ b/doc/OldStuff/JavaDoc/Block.html @@ -133,7 +133,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge statements
    @@ -168,16 +168,16 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Statement()
    @@ -186,7 +186,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -199,7 +199,7 @@ java.lang.Object  void -set_Statement_Vector(java.util.Vector v) +set_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v)
                @@ -219,7 +219,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -247,7 +247,7 @@ java.lang.Object

    statements

    -public java.util.Vector statements
    +public de.dhbwstuttgart.typeinference.Menge statements
    @@ -320,10 +320,10 @@ public Block() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -332,7 +332,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -344,7 +344,7 @@ public void sc_check(java.util.Vector classname,

    get_Statement

    -public java.util.Vector get_Statement()
    +public de.dhbwstuttgart.typeinference.Menge get_Statement()
    @@ -363,10 +363,10 @@ public void set_Statement(Statement s)

    -

    -set_Statement_Vector

    +

    +set_Statement_Menge

    -public void set_Statement_Vector(java.util.Vector v)
    +public void set_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v)
    @@ -374,16 +374,16 @@ public void set_Statement_Vector(java.util.Vector v)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/BoolLiteral.html b/doc/OldStuff/JavaDoc/BoolLiteral.html index 24e5906b..e00cc596 100755 --- a/doc/OldStuff/JavaDoc/BoolLiteral.html +++ b/doc/OldStuff/JavaDoc/BoolLiteral.html @@ -162,9 +162,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -180,7 +180,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -205,7 +205,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -223,7 +223,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -284,10 +284,10 @@ BoolLiteral -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -295,7 +295,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/BooleanType.html b/doc/OldStuff/JavaDoc/BooleanType.html index 03d32003..d11d5e4d 100755 --- a/doc/OldStuff/JavaDoc/BooleanType.html +++ b/doc/OldStuff/JavaDoc/BooleanType.html @@ -136,7 +136,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/CastExpr.html b/doc/OldStuff/JavaDoc/CastExpr.html index 7f702a2c..662bf39e 100755 --- a/doc/OldStuff/JavaDoc/CastExpr.html +++ b/doc/OldStuff/JavaDoc/CastExpr.html @@ -159,9 +159,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -177,7 +177,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -210,7 +210,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_UsedId   @@ -228,7 +228,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -299,10 +299,10 @@ public CastExpr() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -311,7 +311,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -359,16 +359,16 @@ public void set_Expr(Expr ex)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/CharLiteral.html b/doc/OldStuff/JavaDoc/CharLiteral.html index 26bb098a..ad5e28e7 100755 --- a/doc/OldStuff/JavaDoc/CharLiteral.html +++ b/doc/OldStuff/JavaDoc/CharLiteral.html @@ -162,9 +162,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -180,7 +180,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -205,7 +205,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -223,7 +223,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -284,10 +284,10 @@ CharLiteral -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -295,7 +295,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/CharacterType.html b/doc/OldStuff/JavaDoc/CharacterType.html index e7f06dab..b258e69d 100755 --- a/doc/OldStuff/JavaDoc/CharacterType.html +++ b/doc/OldStuff/JavaDoc/CharacterType.html @@ -136,7 +136,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/Class.html b/doc/OldStuff/JavaDoc/Class.html index c769b46d..1ab8d527 100755 --- a/doc/OldStuff/JavaDoc/Class.html +++ b/doc/OldStuff/JavaDoc/Class.html @@ -139,7 +139,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge paralist
    @@ -163,7 +163,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge vParaOrg
    @@ -205,7 +205,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge complete_paralist(boolean ext)
    @@ -253,7 +253,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -278,7 +278,7 @@ java.lang.Object  void -para_check(java.util.Vector classlist, +para_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    @@ -304,8 +304,8 @@ java.lang.Object (package private) static void -print_rec(java.lang.String st, - java.util.Vector v) +print_rec(java.lang.String st, + de.dhbwstuttgart.typeinference.Menge v)
                @@ -313,7 +313,7 @@ java.lang.Object (package private) static void -print_rec(java.util.Vector v) +print_rec(de.dhbwstuttgart.typeinference.Menge v)
                @@ -321,7 +321,7 @@ java.lang.Object  void -sc_check_for_extended_classes(java.util.Vector classlist, +sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable childhash, boolean ext) @@ -331,7 +331,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    @@ -372,7 +372,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector para) +set_ParaList(de.dhbwstuttgart.typeinference.Menge para)
                @@ -479,7 +479,7 @@ private Block class_block

    paralist

    -private java.util.Vector paralist
    +private de.dhbwstuttgart.typeinference.Menge paralist
    @@ -499,7 +499,7 @@ private java.util.Hashtable parahash

    vParaOrg

    -public java.util.Vector vParaOrg
    +public de.dhbwstuttgart.typeinference.Menge vParaOrg
    @@ -532,10 +532,10 @@ public Class() -

    +

    para_check

    -public void para_check(java.util.Vector classlist,
    +public void para_check(de.dhbwstuttgart.typeinference.Menge classlist,
                            boolean ext)
                     throws SCClassException
    @@ -549,7 +549,7 @@ public void para_check(java.util.Vector classlist,

    complete_paralist

    -public java.util.Vector complete_paralist(boolean ext)
    +public de.dhbwstuttgart.typeinference.Menge complete_paralist(boolean ext)
    @@ -557,10 +557,10 @@ public java.util.Vector complete_paralist(boolean ext)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classlist,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                          boolean ext)
                   throws SCClassException
    @@ -571,10 +571,10 @@ public void sc_check(java.util.Vector classlist,

    -

    +

    sc_check_for_extended_classes

    -public void sc_check_for_extended_classes(java.util.Vector classlist,
    +public void sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
                                               java.util.Hashtable childhash,
                                               boolean ext)
    @@ -718,10 +718,10 @@ public boolean does_Class_extend()

    -

    +

    set_ParaList

    -public void set_ParaList(java.util.Vector para)
    +public void set_ParaList(de.dhbwstuttgart.typeinference.Menge para)
    @@ -732,7 +732,7 @@ public void set_ParaList(java.util.Vector para)

    get_ParaList

    -public java.util.Vector get_ParaList()
    +public de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -773,10 +773,10 @@ static void print_rec(java.util.Hashtable ht)

    -

    +

    print_rec

    -static void print_rec(java.util.Vector v)
    +static void print_rec(de.dhbwstuttgart.typeinference.Menge v)
    @@ -796,11 +796,11 @@ static void print_rec(java.lang.String st,

    -

    +

    print_rec

     static void print_rec(java.lang.String st,
    -                      java.util.Vector v)
    + de.dhbwstuttgart.typeinference.Menge v)
    diff --git a/doc/OldStuff/JavaDoc/ClassBody.html b/doc/OldStuff/JavaDoc/ClassBody.html index 5b1855a9..f7062dc3 100755 --- a/doc/OldStuff/JavaDoc/ClassBody.html +++ b/doc/OldStuff/JavaDoc/ClassBody.html @@ -99,7 +99,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge fielddecl
    @@ -158,8 +158,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -167,7 +167,7 @@ java.lang.Object  java.util.Hashtable -complete_parahashtable(java.util.Vector classlist, +complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, UsedId superclassid, java.util.Hashtable childhash, boolean ext) @@ -177,8 +177,8 @@ java.lang.Object - java.util.Vector -get_FieldDeclVector() + de.dhbwstuttgart.typeinference.Menge +get_FieldDeclMenge()
                @@ -194,7 +194,7 @@ java.lang.Object  java.util.Hashtable -init_parahashtable(java.util.Vector paralist, +init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist, boolean ext)
    @@ -203,8 +203,8 @@ java.lang.Object  boolean -is_declared(Type t, - java.util.Vector classlist) +is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
                @@ -212,8 +212,8 @@ java.lang.Object  void -istParameterOK(java.util.Vector Parameter, - java.util.Vector KlassenVektor) +istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
                @@ -238,8 +238,8 @@ java.lang.Object (package private) static void -print_rec(java.lang.String st, - java.util.Vector v) +print_rec(java.lang.String st, + de.dhbwstuttgart.typeinference.Menge v)
                @@ -247,7 +247,7 @@ java.lang.Object (package private) static void -print_rec(java.util.Vector v) +print_rec(de.dhbwstuttgart.typeinference.Menge v)
                @@ -255,7 +255,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    @@ -264,10 +264,10 @@ java.lang.Object  void -sc_init_hashtable_for_extended_classes(java.util.Vector classlist, +sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String strSuperKlassenName, java.util.Hashtable childhash, - java.util.Vector paralist, + de.dhbwstuttgart.typeinference.Menge paralist, java.util.Hashtable parahash, java.util.Hashtable kill, boolean ext) @@ -278,7 +278,7 @@ java.lang.Object  void -sc_init_hashtable(java.util.Vector KlassenVektor, +sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, java.lang.String strSuperKlassenName, java.lang.String classname, boolean ext) @@ -320,7 +320,7 @@ java.lang.Object

    fielddecl

    -private java.util.Vector fielddecl
    +private de.dhbwstuttgart.typeinference.Menge fielddecl
    @@ -383,10 +383,10 @@ public ClassBody() -

    +

    sc_init_hashtable

    -public void sc_init_hashtable(java.util.Vector KlassenVektor,
    +public void sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor,
                                   java.lang.String strSuperKlassenName,
                                   java.lang.String classname,
                                   boolean ext)
    @@ -399,13 +399,13 @@ public void sc_init_hashtable(java.util.Vector KlassenVektor,
     

    -

    +

    sc_init_hashtable_for_extended_classes

    -public void sc_init_hashtable_for_extended_classes(java.util.Vector classlist,
    +public void sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
                                                        java.lang.String strSuperKlassenName,
                                                        java.util.Hashtable childhash,
    -                                                   java.util.Vector paralist,
    +                                                   de.dhbwstuttgart.typeinference.Menge paralist,
                                                        java.util.Hashtable parahash,
                                                        java.util.Hashtable kill,
                                                        boolean ext)
    @@ -416,10 +416,10 @@ public void sc_init_hashtable_for_extended_classes(java.util.Vector 

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classlist,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                          boolean ext)
                   throws SCClassBodyException
    @@ -430,10 +430,10 @@ public void sc_check(java.util.Vector classlist,

    -

    +

    init_parahashtable

    -public java.util.Hashtable init_parahashtable(java.util.Vector paralist,
    +public java.util.Hashtable init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist,
                                                   boolean ext)
    @@ -442,10 +442,10 @@ public java.util.Hashtable init_parahashtable(java.util.Vector paral

    -

    +

    complete_parahashtable

    -public java.util.Hashtable complete_parahashtable(java.util.Vector classlist,
    +public java.util.Hashtable complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist,
                                                       UsedId superclassid,
                                                       java.util.Hashtable childhash,
                                                       boolean ext)
    @@ -458,11 +458,11 @@ public java.util.Hashtable complete_parahashtable(java.util.Vector c
     

    -

    +

    codegen

     public void codegen(ClassFile classfile,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    @@ -483,10 +483,10 @@ public java.util.Hashtable get_hash()

    -

    -get_FieldDeclVector

    +

    +get_FieldDeclMenge

    -public java.util.Vector get_FieldDeclVector()
    +public de.dhbwstuttgart.typeinference.Menge get_FieldDeclMenge()
    @@ -505,11 +505,11 @@ public void set_FieldDecl(FieldDecl i)

    -

    +

    is_declared

     public boolean is_declared(Type t,
    -                           java.util.Vector classlist)
    +                           de.dhbwstuttgart.typeinference.Menge classlist)
                         throws SCClassBodyException
    @@ -530,10 +530,10 @@ static void print_rec(java.util.Hashtable ht)

    -

    +

    print_rec

    -static void print_rec(java.util.Vector v)
    +static void print_rec(de.dhbwstuttgart.typeinference.Menge v)
    @@ -553,11 +553,11 @@ static void print_rec(java.lang.String st,

    -

    +

    print_rec

     static void print_rec(java.lang.String st,
    -                      java.util.Vector v)
    + de.dhbwstuttgart.typeinference.Menge v)
    @@ -565,11 +565,11 @@ static void print_rec(java.lang.String st,

    -

    +

    istParameterOK

    -public void istParameterOK(java.util.Vector Parameter,
    -                           java.util.Vector KlassenVektor)
    +public void istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
    diff --git a/doc/OldStuff/JavaDoc/ClassFile.html b/doc/OldStuff/JavaDoc/ClassFile.html index bfc58670..082cefa1 100755 --- a/doc/OldStuff/JavaDoc/ClassFile.html +++ b/doc/OldStuff/JavaDoc/ClassFile.html @@ -107,7 +107,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge attributes
    @@ -115,7 +115,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge class_block
    @@ -131,7 +131,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge constant_pool
    @@ -147,7 +147,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge fields
    @@ -163,7 +163,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge interfaces
    @@ -171,8 +171,8 @@ java.lang.Object -private  java.util.Vector -key_vector +private  de.dhbwstuttgart.typeinference.Menge +key_Menge
                @@ -195,7 +195,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge methods
    @@ -367,13 +367,13 @@ java.lang.Object  void -add_method(java.lang.String name, +add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -396,7 +396,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -404,7 +404,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_class_block()
    @@ -421,7 +421,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_constant_pool()
    @@ -437,7 +437,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_fields()
    @@ -445,15 +445,15 @@ java.lang.Object - java.util.Vector -get_key_vector() + de.dhbwstuttgart.typeinference.Menge +get_key_Menge()
                - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_methods()
    @@ -494,7 +494,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
                @@ -502,7 +502,7 @@ java.lang.Object  void -set_constant_pool(java.util.Vector t) +set_constant_pool(de.dhbwstuttgart.typeinference.Menge t)
                @@ -518,7 +518,7 @@ java.lang.Object  void -set_fields(java.util.Vector t) +set_fields(de.dhbwstuttgart.typeinference.Menge t)
                @@ -526,7 +526,7 @@ java.lang.Object  void -set_methods(java.util.Vector t) +set_methods(de.dhbwstuttgart.typeinference.Menge t)
                @@ -657,7 +657,7 @@ private static short major_version

    constant_pool

    -private java.util.Vector constant_pool
    +private de.dhbwstuttgart.typeinference.Menge constant_pool
    @@ -697,7 +697,7 @@ private short super_class

    fields

    -private java.util.Vector fields
    +private de.dhbwstuttgart.typeinference.Menge fields
    @@ -707,7 +707,7 @@ private java.util.Vector fields

    methods

    -private java.util.Vector methods
    +private de.dhbwstuttgart.typeinference.Menge methods
    @@ -717,7 +717,7 @@ private java.util.Vector methods

    attributes

    -private java.util.Vector attributes
    +private de.dhbwstuttgart.typeinference.Menge attributes
    @@ -727,17 +727,17 @@ private java.util.Vector attributes

    interfaces

    -private java.util.Vector interfaces
    +private de.dhbwstuttgart.typeinference.Menge interfaces

    -

    -key_vector

    +

    +key_Menge

    -private java.util.Vector key_vector
    +private de.dhbwstuttgart.typeinference.Menge key_Menge
    @@ -747,7 +747,7 @@ private java.util.Vector key_vector

    class_block

    -private java.util.Vector class_block
    +private de.dhbwstuttgart.typeinference.Menge class_block
    @@ -899,7 +899,7 @@ public void add_class(java.lang.String name,

    -

    +

    add_method

     public void add_method(java.lang.String name,
    @@ -908,7 +908,7 @@ public void add_method(java.lang.String name,
                            Type type,
                            Block block,
                            short acc_flag,
    -                       java.util.Vector paralist)
    +                       de.dhbwstuttgart.typeinference.Menge paralist)
                     throws JVMCodeException
    @@ -959,10 +959,10 @@ public int add_field_ref(java.lang.String name,

    -

    +

    set_constant_pool

    -public void set_constant_pool(java.util.Vector t)
    +public void set_constant_pool(de.dhbwstuttgart.typeinference.Menge t)
    @@ -1003,10 +1003,10 @@ public void set_super_class(short t)

    -

    +

    set_fields

    -public void set_fields(java.util.Vector t)
    +public void set_fields(de.dhbwstuttgart.typeinference.Menge t)
    @@ -1014,10 +1014,10 @@ public void set_fields(java.util.Vector t)

    -

    +

    set_methods

    -public void set_methods(java.util.Vector t)
    +public void set_methods(de.dhbwstuttgart.typeinference.Menge t)
    @@ -1025,10 +1025,10 @@ public void set_methods(java.util.Vector t)

    -

    +

    set_attributes

    -public void set_attributes(java.util.Vector t)
    +public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
    @@ -1072,7 +1072,7 @@ public void add_classblock_Element(Assign a)

    get_constant_pool

    -public java.util.Vector get_constant_pool()
    +public de.dhbwstuttgart.typeinference.Menge get_constant_pool()
    @@ -1116,7 +1116,7 @@ public short get_super_class()

    get_fields

    -public java.util.Vector get_fields()
    +public de.dhbwstuttgart.typeinference.Menge get_fields()
    @@ -1127,7 +1127,7 @@ public java.util.Vector get_fields()

    get_methods

    -public java.util.Vector get_methods()
    +public de.dhbwstuttgart.typeinference.Menge get_methods()
    @@ -1138,7 +1138,7 @@ public java.util.Vector get_methods()

    get_attributes

    -public java.util.Vector get_attributes()
    +public de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -1146,10 +1146,10 @@ public java.util.Vector get_attributes()

    -

    -get_key_vector

    +

    +get_key_Menge

    -public java.util.Vector get_key_vector()
    +public de.dhbwstuttgart.typeinference.Menge get_key_Menge()
    @@ -1194,7 +1194,7 @@ public short get_constant_pool_element(byte b,

    get_class_block

    -public java.util.Vector get_class_block()
    +public de.dhbwstuttgart.typeinference.Menge get_class_block()
    diff --git a/doc/OldStuff/JavaDoc/CodeAttribute.html b/doc/OldStuff/JavaDoc/CodeAttribute.html index a1a27622..015b4c13 100755 --- a/doc/OldStuff/JavaDoc/CodeAttribute.html +++ b/doc/OldStuff/JavaDoc/CodeAttribute.html @@ -101,7 +101,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge attributes
    @@ -109,15 +109,15 @@ java.lang.Object -private  java.util.Vector -code_vector +private  de.dhbwstuttgart.typeinference.Menge +code_Menge
                -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exception_tables
    @@ -125,16 +125,16 @@ java.lang.Object -private  java.util.Vector -local_name_vector +private  de.dhbwstuttgart.typeinference.Menge +local_name_Menge
                -private  java.util.Vector -local_type_vector +private  de.dhbwstuttgart.typeinference.Menge +local_type_Menge
                @@ -253,8 +253,8 @@ java.lang.Object - java.util.Vector -get_attributes_Vector() + de.dhbwstuttgart.typeinference.Menge +get_attributes_Menge()
                @@ -269,16 +269,16 @@ java.lang.Object - java.util.Vector -get_code_Vector() + de.dhbwstuttgart.typeinference.Menge +get_code_Menge()
                - java.util.Vector -get_exception_table_Vector() + de.dhbwstuttgart.typeinference.Menge +get_exception_table_Menge()
                @@ -293,8 +293,8 @@ java.lang.Object - java.util.Vector -get_local_Vector() + de.dhbwstuttgart.typeinference.Menge +get_local_Menge()
                @@ -310,7 +310,7 @@ java.lang.Object  void -set_attributes_Vector(java.util.Vector t) +set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t)
                @@ -336,7 +336,7 @@ java.lang.Object  void -set_exception_table_Vector(java.util.Vector t) +set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t)
                @@ -373,10 +373,10 @@ java.lang.Object -

    -code_vector

    +

    +code_Menge

    -private java.util.Vector code_vector
    +private de.dhbwstuttgart.typeinference.Menge code_Menge
    @@ -386,7 +386,7 @@ private java.util.Vector code_vector

    exception_tables

    -private java.util.Vector exception_tables
    +private de.dhbwstuttgart.typeinference.Menge exception_tables
    @@ -396,27 +396,27 @@ private java.util.Vector exception_tables

    attributes

    -private java.util.Vector attributes
    +private de.dhbwstuttgart.typeinference.Menge attributes

    -

    -local_name_vector

    +

    +local_name_Menge

    -private java.util.Vector local_name_vector
    +private de.dhbwstuttgart.typeinference.Menge local_name_Menge

    -

    -local_type_vector

    +

    +local_type_Menge

    -private java.util.Vector local_type_vector
    +private de.dhbwstuttgart.typeinference.Menge local_type_Menge
    @@ -450,10 +450,10 @@ CodeAttribute -

    -get_code_Vector

    +

    +get_code_Menge

    -public java.util.Vector get_code_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_code_Menge()
    @@ -461,10 +461,10 @@ public java.util.Vector get_code_Vector()

    -

    -get_exception_table_Vector

    +

    +get_exception_table_Menge

    -public java.util.Vector get_exception_table_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_exception_table_Menge()
    @@ -472,10 +472,10 @@ public java.util.Vector get_exception_table_Vector()

    -

    -get_attributes_Vector

    +

    +get_attributes_Menge

    -public java.util.Vector get_attributes_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_attributes_Menge()
    @@ -483,10 +483,10 @@ public java.util.Vector get_attributes_Vector()

    -

    -get_local_Vector

    +

    +get_local_Menge

    -public java.util.Vector get_local_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_local_Menge()
    @@ -634,10 +634,10 @@ public int get_attributes_length()

    -

    -set_exception_table_Vector

    +

    +set_exception_table_Menge

    -public void set_exception_table_Vector(java.util.Vector t)
    +public void set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t)
    @@ -645,10 +645,10 @@ public void set_exception_table_Vector(java.util.Vector t)

    -

    -set_attributes_Vector

    +

    +set_attributes_Menge

    -public void set_attributes_Vector(java.util.Vector t)
    +public void set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t)
    diff --git a/doc/OldStuff/JavaDoc/Constructor.html b/doc/OldStuff/JavaDoc/Constructor.html index 23ce5165..df3ea937 100755 --- a/doc/OldStuff/JavaDoc/Constructor.html +++ b/doc/OldStuff/JavaDoc/Constructor.html @@ -148,8 +148,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -157,7 +157,7 @@ java.lang.Object  java.lang.String -get_codegen_Param_Type(java.util.Vector paralist) +get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -169,7 +169,7 @@ java.lang.Object Methods inherited from class Method -call_sc_check, get_Block, get_ExceptionList, get_Method_Name, get_ParaList, get_ReturnType, get_Type_Paralist, get_Type, sc_init_parameterlist, set_Block, set_ExceptionList, set_Modifiers, set_ParaList, set_ReturnType +call_sc_check, get_Block, get_ExceptionList, get_Method_Name, get_ParaList, get_ReturnType, get_Type_Paralist, get_Type, sc_init_parameterlist, set_Block, set_ExceptionList, set_Modifiers, set_ParaList, set_ReturnType   @@ -178,7 +178,7 @@ java.lang.Object Methods inherited from class FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -223,13 +223,13 @@ public Constructor() -

    +

    get_codegen_Param_Type

    -public java.lang.String get_codegen_Param_Type(java.util.Vector paralist)
    +public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
    -
    Overrides:
    get_codegen_Param_Type in class Method
    +
    Overrides:
    get_codegen_Param_Type in class Method
    @@ -237,15 +237,15 @@ public java.lang.String get_codegen_Param_Type(java.util.Vector para

    -

    +

    codegen

     public void codegen(ClassFile classfile,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Overrides:
    codegen in class Method
    +
    Overrides:
    codegen in class Method
    diff --git a/doc/OldStuff/JavaDoc/DeclId.html b/doc/OldStuff/JavaDoc/DeclId.html index 23f99823..1ff757e7 100755 --- a/doc/OldStuff/JavaDoc/DeclId.html +++ b/doc/OldStuff/JavaDoc/DeclId.html @@ -123,7 +123,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge paratyp
    @@ -172,9 +172,9 @@ java.lang.Object  void -codegen_InstVarDecl(ClassFile classfile, +codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -182,10 +182,10 @@ java.lang.Object  void -codegen_LocalVarDecl(ClassFile classfile, +codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -216,7 +216,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Paratyp()
    @@ -257,7 +257,7 @@ java.lang.Object  void -set_Paratyp(java.util.Vector p) +set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
                @@ -336,7 +336,7 @@ private ExprStmt wert

    paratyp

    -public java.util.Vector paratyp
    +public de.dhbwstuttgart.typeinference.Menge paratyp
    @@ -377,10 +377,10 @@ public DeclId(java.lang.String name) -

    +

    set_Paratyp

    -public void set_Paratyp(java.util.Vector p)
    +public void set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
    @@ -391,7 +391,7 @@ public void set_Paratyp(java.util.Vector p)

    get_Paratyp

    -public java.util.Vector get_Paratyp()
    +public de.dhbwstuttgart.typeinference.Menge get_Paratyp()
    @@ -487,12 +487,12 @@ public void set_ListType(Type t)

    -

    +

    codegen_InstVarDecl

     public void codegen_InstVarDecl(ClassFile classfile,
                                     Type type,
    -                                java.util.Vector paralist)
    +                                de.dhbwstuttgart.typeinference.Menge paralist)
                              throws JVMCodeException
    @@ -502,13 +502,13 @@ public void codegen_InstVarDecl(ClassFile classfile,

    -

    +

    codegen_LocalVarDecl

     public void codegen_LocalVarDecl(ClassFile classfile,
                                      CodeAttribute code,
                                      Type type,
    -                                 java.util.Vector paralist)
    +                                 de.dhbwstuttgart.typeinference.Menge paralist)
                               throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/DivideOp.html b/doc/OldStuff/JavaDoc/DivideOp.html index a3a4e30e..8d62a2c8 100755 --- a/doc/OldStuff/JavaDoc/DivideOp.html +++ b/doc/OldStuff/JavaDoc/DivideOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -175,18 +175,18 @@ public DivideOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean neg,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/EmptyStmt.html b/doc/OldStuff/JavaDoc/EmptyStmt.html index 0e9eecbf..b587621e 100755 --- a/doc/OldStuff/JavaDoc/EmptyStmt.html +++ b/doc/OldStuff/JavaDoc/EmptyStmt.html @@ -121,9 +121,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -131,7 +131,7 @@ java.lang.Object  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -148,7 +148,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -193,10 +193,10 @@ public EmptyStmt() -

    +

    sc_check

    -public void sc_check(java.util.Vector classlist,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -204,7 +204,7 @@ public void sc_check(java.util.Vector classlist,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -212,16 +212,16 @@ public void sc_check(java.util.Vector classlist,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/EqualOp.html b/doc/OldStuff/JavaDoc/EqualOp.html index 53a38520..0284a099 100755 --- a/doc/OldStuff/JavaDoc/EqualOp.html +++ b/doc/OldStuff/JavaDoc/EqualOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public EqualOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/ExceptionList.html b/doc/OldStuff/JavaDoc/ExceptionList.html index 8c21de5c..c390a072 100755 --- a/doc/OldStuff/JavaDoc/ExceptionList.html +++ b/doc/OldStuff/JavaDoc/ExceptionList.html @@ -99,7 +99,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge reftype
    @@ -165,7 +165,7 @@ java.lang.Object

    reftype

    -private java.util.Vector reftype
    +private de.dhbwstuttgart.typeinference.Menge reftype
    diff --git a/doc/OldStuff/JavaDoc/Expr.html b/doc/OldStuff/JavaDoc/Expr.html index 122fb06d..6c72f438 100755 --- a/doc/OldStuff/JavaDoc/Expr.html +++ b/doc/OldStuff/JavaDoc/Expr.html @@ -149,8 +149,8 @@ java.lang.Object - java.util.Vector -get_Name_Vector() + de.dhbwstuttgart.typeinference.Menge +get_Name_Menge()
                @@ -165,8 +165,8 @@ java.lang.Object - java.util.Vector -get_Type_Vector() + de.dhbwstuttgart.typeinference.Menge +get_Type_Menge()
                @@ -182,7 +182,7 @@ java.lang.Object abstract  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -224,7 +224,7 @@ java.lang.Object Methods inherited from class Statement -codegen, print_rec, print_rec, print_rec, print_rec +codegen, print_rec, print_rec, print_rec, print_rec   @@ -318,10 +318,10 @@ public UsedId get_UsedId()

    -

    -get_Name_Vector

    +

    +get_Name_Menge

    -public java.util.Vector get_Name_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_Name_Menge()
    @@ -329,10 +329,10 @@ public java.util.Vector get_Name_Vector()

    -

    -get_Type_Vector

    +

    +get_Type_Menge

    -public java.util.Vector get_Type_Vector()
    +public de.dhbwstuttgart.typeinference.Menge get_Type_Menge()
    @@ -340,10 +340,10 @@ public java.util.Vector get_Type_Vector()

    -

    +

    sc_check

    -public abstract void sc_check(java.util.Vector classname,
    +public abstract void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                                   java.util.Hashtable ch,
                                   java.util.Hashtable bh,
                                   boolean ext,
    @@ -352,7 +352,7 @@ public abstract void sc_check(java.util.Vector classname,
                            throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    diff --git a/doc/OldStuff/JavaDoc/ExprStmt.html b/doc/OldStuff/JavaDoc/ExprStmt.html index d89ffce6..21f6d8b4 100755 --- a/doc/OldStuff/JavaDoc/ExprStmt.html +++ b/doc/OldStuff/JavaDoc/ExprStmt.html @@ -151,7 +151,7 @@ java.lang.Object Methods inherited from class Statement -codegen, print_rec, print_rec, print_rec, print_rec, sc_check +codegen, print_rec, print_rec, print_rec, print_rec, sc_check   diff --git a/doc/OldStuff/JavaDoc/FieldDecl.html b/doc/OldStuff/JavaDoc/FieldDecl.html index e04d411f..2c4cbad9 100755 --- a/doc/OldStuff/JavaDoc/FieldDecl.html +++ b/doc/OldStuff/JavaDoc/FieldDecl.html @@ -102,7 +102,7 @@ java.lang.Object -protected  java.util.Vector +protected  de.dhbwstuttgart.typeinference.Menge declid
    @@ -137,15 +137,15 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Name()
    @@ -161,8 +161,8 @@ java.lang.Object - java.util.Vector -getDeclIdVector() + de.dhbwstuttgart.typeinference.Menge +getDeclIdMenge()
                @@ -178,7 +178,7 @@ java.lang.Object  void -setDeclIdVector(java.util.Vector vDeclId) +setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId)
                @@ -209,7 +209,7 @@ java.lang.Object

    declid

    -protected java.util.Vector declid
    +protected de.dhbwstuttgart.typeinference.Menge declid
    @@ -253,11 +253,11 @@ public abstract java.lang.String get_Type()

    -

    +

    codegen

     public abstract void codegen(ClassFile classfile,
    -                             java.util.Vector paralist)
    +                             de.dhbwstuttgart.typeinference.Menge paralist)
                           throws JVMCodeException
    @@ -281,7 +281,7 @@ public void set_DeclId(DeclId did)

    get_Name

    -public java.util.Vector get_Name()
    +public de.dhbwstuttgart.typeinference.Menge get_Name()
    @@ -289,10 +289,10 @@ public java.util.Vector get_Name()

    -

    -getDeclIdVector

    +

    +getDeclIdMenge

    -public java.util.Vector getDeclIdVector()
    +public de.dhbwstuttgart.typeinference.Menge getDeclIdMenge()
    @@ -300,10 +300,10 @@ public java.util.Vector getDeclIdVector()

    -

    -setDeclIdVector

    +

    +setDeclIdMenge

    -public void setDeclIdVector(java.util.Vector vDeclId)
    +public void setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId)
    diff --git a/doc/OldStuff/JavaDoc/FieldInfo.html b/doc/OldStuff/JavaDoc/FieldInfo.html index b35f5404..85cbb0a7 100755 --- a/doc/OldStuff/JavaDoc/FieldInfo.html +++ b/doc/OldStuff/JavaDoc/FieldInfo.html @@ -107,7 +107,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge attributes
    @@ -198,7 +198,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -255,7 +255,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
                @@ -386,7 +386,7 @@ private short descriptor_index

    attributes

    -private java.util.Vector attributes
    +private de.dhbwstuttgart.typeinference.Menge attributes
    @@ -488,7 +488,7 @@ public short get_descriptor_index()

    get_attributes

    -public java.util.Vector get_attributes()
    +public de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -562,10 +562,10 @@ public void set_descriptor_index(short t)

    -

    +

    set_attributes

    -public void set_attributes(java.util.Vector t)
    +public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
    diff --git a/doc/OldStuff/JavaDoc/GreaterEquOp.html b/doc/OldStuff/JavaDoc/GreaterEquOp.html index f48d6130..5d424be0 100755 --- a/doc/OldStuff/JavaDoc/GreaterEquOp.html +++ b/doc/OldStuff/JavaDoc/GreaterEquOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public GreaterEquOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/GreaterOp.html b/doc/OldStuff/JavaDoc/GreaterOp.html index 2496f953..2ca943e8 100755 --- a/doc/OldStuff/JavaDoc/GreaterOp.html +++ b/doc/OldStuff/JavaDoc/GreaterOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public GreaterOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/IfStmt.html b/doc/OldStuff/JavaDoc/IfStmt.html index 9cd9c908..5ae03d8c 100755 --- a/doc/OldStuff/JavaDoc/IfStmt.html +++ b/doc/OldStuff/JavaDoc/IfStmt.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -170,10 +170,10 @@ java.lang.Object  void -if_codegen(ClassFile classfile, +if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -181,7 +181,7 @@ java.lang.Object (package private)  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -222,7 +222,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -346,10 +346,10 @@ void set_Else_block(Statement blk)

    -

    +

    sc_check

    -void sc_check(java.util.Vector classname,
    +void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                   java.util.Hashtable ch,
                   java.util.Hashtable bh,
                   boolean ext,
    @@ -358,7 +358,7 @@ void sc_check(java.util.Vector classname,
             throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -367,16 +367,16 @@ void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    @@ -385,13 +385,13 @@ public void codegen(ClassFile classfile,

    -

    +

    if_codegen

     public void if_codegen(ClassFile classfile,
                            CodeAttribute code,
                            boolean not,
    -                       java.util.Vector paralist)
    +                       de.dhbwstuttgart.typeinference.Menge paralist)
                     throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/InstVar.html b/doc/OldStuff/JavaDoc/InstVar.html index 9bebf3d1..d61dd5b7 100755 --- a/doc/OldStuff/JavaDoc/InstVar.html +++ b/doc/OldStuff/JavaDoc/InstVar.html @@ -157,9 +157,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -183,7 +183,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -200,7 +200,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -218,7 +218,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -300,10 +300,10 @@ public InstVar(java.lang.String n, -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -311,7 +311,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -344,16 +344,16 @@ public java.lang.String get_codegen_UsedId()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/InstVarDecl.html b/doc/OldStuff/JavaDoc/InstVarDecl.html index f7ff996e..9a26d263 100755 --- a/doc/OldStuff/JavaDoc/InstVarDecl.html +++ b/doc/OldStuff/JavaDoc/InstVarDecl.html @@ -145,8 +145,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -174,7 +174,7 @@ java.lang.Object Methods inherited from class FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -260,15 +260,15 @@ public java.lang.String get_Type()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class FieldDecl
    +
    Specified by:
    codegen in class FieldDecl
    diff --git a/doc/OldStuff/JavaDoc/InstanceOf.html b/doc/OldStuff/JavaDoc/InstanceOf.html index 40f2e48a..b9dee65f 100755 --- a/doc/OldStuff/JavaDoc/InstanceOf.html +++ b/doc/OldStuff/JavaDoc/InstanceOf.html @@ -178,9 +178,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -196,7 +196,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -229,7 +229,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -247,7 +247,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -350,10 +350,10 @@ public void set_Type(RefType typ)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -362,7 +362,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -385,16 +385,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/IntLiteral.html b/doc/OldStuff/JavaDoc/IntLiteral.html index 214e654f..525b069f 100755 --- a/doc/OldStuff/JavaDoc/IntLiteral.html +++ b/doc/OldStuff/JavaDoc/IntLiteral.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -293,10 +293,10 @@ public void set_Int(int i)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -304,7 +304,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -326,16 +326,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/IntegerType.html b/doc/OldStuff/JavaDoc/IntegerType.html index 16cd7847..4fad72b0 100755 --- a/doc/OldStuff/JavaDoc/IntegerType.html +++ b/doc/OldStuff/JavaDoc/IntegerType.html @@ -136,7 +136,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/JVMCode.html b/doc/OldStuff/JavaDoc/JVMCode.html index f1f76e51..6755f568 100755 --- a/doc/OldStuff/JavaDoc/JVMCode.html +++ b/doc/OldStuff/JavaDoc/JVMCode.html @@ -1882,8 +1882,8 @@ java.lang.Object static java.lang.String -get_codegen_Type(java.lang.String type, - java.util.Vector paralist) +get_codegen_Type(java.lang.String type, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1891,7 +1891,7 @@ java.lang.Object static void -get_Command(java.util.Vector b) +get_Command(de.dhbwstuttgart.typeinference.Menge b)
                @@ -4651,11 +4651,11 @@ public static int get_nType(java.lang.String type)

    -

    +

    get_codegen_Type

     public static java.lang.String get_codegen_Type(java.lang.String type,
    -                                                java.util.Vector paralist)
    + de.dhbwstuttgart.typeinference.Menge paralist)
    @@ -4663,10 +4663,10 @@ public static java.lang.String get_codegen_Type(java.lang.String typ

    -

    +

    get_Command

    -public static void get_Command(java.util.Vector b)
    +public static void get_Command(de.dhbwstuttgart.typeinference.Menge b)
                             throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/JavaCompiler.html b/doc/OldStuff/JavaDoc/JavaCompiler.html index 3118364e..fedc204a 100755 --- a/doc/OldStuff/JavaDoc/JavaCompiler.html +++ b/doc/OldStuff/JavaDoc/JavaCompiler.html @@ -436,7 +436,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge path
    @@ -862,7 +862,7 @@ java.lang.Object

    path

    -public java.util.Vector path
    +public de.dhbwstuttgart.typeinference.Menge path
    @@ -1706,7 +1706,7 @@ public void yyerror(java.lang.String message, Can be overwritten to control message format.

    -
    Parameters:
    message - text to be displayed.
    expected - vector of acceptable tokens, if available.
    +
    Parameters:
    message - text to be displayed.
    expected - Menge of acceptable tokens, if available.

    diff --git a/doc/OldStuff/JavaDoc/JavaParser.html b/doc/OldStuff/JavaDoc/JavaParser.html index e3cac255..31c32e38 100755 --- a/doc/OldStuff/JavaDoc/JavaParser.html +++ b/doc/OldStuff/JavaDoc/JavaParser.html @@ -437,7 +437,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge path
    @@ -857,7 +857,7 @@ java.lang.Object

    path

    -public java.util.Vector path
    +public de.dhbwstuttgart.typeinference.Menge path
    @@ -1690,7 +1690,7 @@ public void yyerror(java.lang.String message, Can be overwritten to control message format.

    -
    Parameters:
    message - text to be displayed.
    expected - vector of acceptable tokens, if available.
    +
    Parameters:
    message - text to be displayed.
    expected - Menge of acceptable tokens, if available.

    diff --git a/doc/OldStuff/JavaDoc/LessEquOp.html b/doc/OldStuff/JavaDoc/LessEquOp.html index 0f0041f2..1cbb9301 100755 --- a/doc/OldStuff/JavaDoc/LessEquOp.html +++ b/doc/OldStuff/JavaDoc/LessEquOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public LessEquOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/LessOp.html b/doc/OldStuff/JavaDoc/LessOp.html index 411e0c8e..294cfe53 100755 --- a/doc/OldStuff/JavaDoc/LessOp.html +++ b/doc/OldStuff/JavaDoc/LessOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public LessOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/Literal.html b/doc/OldStuff/JavaDoc/Literal.html index 30d40129..d2922d16 100755 --- a/doc/OldStuff/JavaDoc/Literal.html +++ b/doc/OldStuff/JavaDoc/Literal.html @@ -150,7 +150,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId   @@ -168,7 +168,7 @@ java.lang.Object Methods inherited from class Statement -codegen, print_rec, print_rec, print_rec, print_rec +codegen, print_rec, print_rec, print_rec, print_rec   diff --git a/doc/OldStuff/JavaDoc/LocalOrFieldVar.html b/doc/OldStuff/JavaDoc/LocalOrFieldVar.html index 044c0833..f2b40f13 100755 --- a/doc/OldStuff/JavaDoc/LocalOrFieldVar.html +++ b/doc/OldStuff/JavaDoc/LocalOrFieldVar.html @@ -156,9 +156,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -174,7 +174,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -199,7 +199,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type   @@ -217,7 +217,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -270,10 +270,10 @@ public LocalOrFieldVar(java.lang.String n) -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -282,7 +282,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -319,16 +319,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/LocalVarDecl.html b/doc/OldStuff/JavaDoc/LocalVarDecl.html index fabfcee5..b32b655e 100755 --- a/doc/OldStuff/JavaDoc/LocalVarDecl.html +++ b/doc/OldStuff/JavaDoc/LocalVarDecl.html @@ -101,7 +101,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge declid
    @@ -117,7 +117,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge paralist
    @@ -160,9 +160,9 @@ java.lang.Object  void -check_anz(Type type, - java.util.Vector paralist, - java.util.Vector classlist) +check_anz(Type type, + de.dhbwstuttgart.typeinference.Menge paralist, + de.dhbwstuttgart.typeinference.Menge classlist)
                @@ -170,9 +170,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -188,8 +188,8 @@ java.lang.Object  void -is_declared(Type t, - java.util.Vector classlist) +is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
                @@ -197,7 +197,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -218,7 +218,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector pl) +set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
                @@ -238,7 +238,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -266,7 +266,7 @@ java.lang.Object

    declid

    -public java.util.Vector declid
    +public de.dhbwstuttgart.typeinference.Menge declid
    @@ -286,7 +286,7 @@ private Type type

    paralist

    -private java.util.Vector paralist
    +private de.dhbwstuttgart.typeinference.Menge paralist
    @@ -362,10 +362,10 @@ public java.lang.String get_Name()

    -

    +

    set_ParaList

    -public void set_ParaList(java.util.Vector pl)
    +public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
    @@ -373,10 +373,10 @@ public void set_ParaList(java.util.Vector pl)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -385,7 +385,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -394,11 +394,11 @@ public void sc_check(java.util.Vector classname,

    -

    +

    is_declared

     public void is_declared(Type t,
    -                        java.util.Vector classlist)
    +                        de.dhbwstuttgart.typeinference.Menge classlist)
                      throws SCStatementException
    @@ -408,12 +408,12 @@ public void is_declared(Type t,

    -

    +

    check_anz

     public void check_anz(Type type,
    -                      java.util.Vector paralist,
    -                      java.util.Vector classlist)
    +                      de.dhbwstuttgart.typeinference.Menge paralist,
    +                      de.dhbwstuttgart.typeinference.Menge classlist)
                    throws SCStatementException
    @@ -423,16 +423,16 @@ public void check_anz(Type type,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/LogOp.html b/doc/OldStuff/JavaDoc/LogOp.html index 5de70a5b..b4cd4da7 100755 --- a/doc/OldStuff/JavaDoc/LogOp.html +++ b/doc/OldStuff/JavaDoc/LogOp.html @@ -124,14 +124,14 @@ java.lang.Object static void -build(ClassFile classfile, +build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -139,11 +139,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -151,13 +151,13 @@ java.lang.Object  void -if_codegen(ClassFile classfile, +if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -165,12 +165,12 @@ java.lang.Object  void -loop_codegen(ClassFile classfile, +loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,8 +178,8 @@ java.lang.Object static void -replace_index(CodeAttribute code, - java.util.Vector indices, +replace_index(CodeAttribute code, + de.dhbwstuttgart.typeinference.Menge indices, int else_index, int then_index) @@ -229,18 +229,18 @@ public LogOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    @@ -249,7 +249,7 @@ public void codegen(ClassFile classfile,

    -

    +

    if_codegen

     public void if_codegen(ClassFile classfile,
    @@ -258,7 +258,7 @@ public void if_codegen(ClassFile classfile,
                            Expr expr,
                            Statement then_block,
                            Statement else_block,
    -                       java.util.Vector paralist)
    +                       de.dhbwstuttgart.typeinference.Menge paralist)
                     throws JVMCodeException
    @@ -268,7 +268,7 @@ public void if_codegen(ClassFile classfile,

    -

    +

    loop_codegen

     public void loop_codegen(ClassFile classfile,
    @@ -276,7 +276,7 @@ public void loop_codegen(ClassFile classfile,
                              Expr expr,
                              int breakpoint,
                              boolean not,
    -                         java.util.Vector paralist)
    +                         de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
    @@ -286,17 +286,17 @@ public void loop_codegen(ClassFile classfile,

    -

    +

    build

     public static void build(ClassFile classfile,
                              CodeAttribute code,
                              Expr expr,
    -                         java.util.Vector indices,
    +                         de.dhbwstuttgart.typeinference.Menge indices,
                              boolean not,
                              boolean ex2,
                              boolean and,
    -                         java.util.Vector paralist)
    +                         de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
    @@ -306,11 +306,11 @@ public static void build(ClassFile classfile,

    -

    +

    replace_index

     public static void replace_index(CodeAttribute code,
    -                                 java.util.Vector indices,
    +                                 de.dhbwstuttgart.typeinference.Menge indices,
                                      int else_index,
                                      int then_index)
                               throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/Method.html b/doc/OldStuff/JavaDoc/Method.html index ea6e25b5..468dbde0 100755 --- a/doc/OldStuff/JavaDoc/Method.html +++ b/doc/OldStuff/JavaDoc/Method.html @@ -136,7 +136,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge types_in_parameterlist
    @@ -180,7 +180,7 @@ java.lang.Object  void -call_sc_check(java.util.Vector classlist, +call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable classhash, boolean ext, java.util.Hashtable parach) @@ -191,8 +191,8 @@ java.lang.Object  void -codegen(ClassFile classfile, - java.util.Vector paralist) +codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -208,7 +208,7 @@ java.lang.Object  java.lang.String -get_codegen_Param_Type(java.util.Vector paralist) +get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -247,7 +247,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Type_Paralist()
    @@ -316,7 +316,7 @@ java.lang.Object Methods inherited from class FieldDecl -get_Name, getDeclIdVector, set_DeclId, setDeclIdVector +get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge   @@ -384,7 +384,7 @@ private Type returntype

    types_in_parameterlist

    -private java.util.Vector types_in_parameterlist
    +private de.dhbwstuttgart.typeinference.Menge types_in_parameterlist
    @@ -417,10 +417,10 @@ public Method() -

    +

    call_sc_check

    -public void call_sc_check(java.util.Vector classlist,
    +public void call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                               java.util.Hashtable classhash,
                               boolean ext,
                               java.util.Hashtable parach)
    @@ -557,10 +557,10 @@ public Type get_ReturnType()

    -

    +

    get_codegen_Param_Type

    -public java.lang.String get_codegen_Param_Type(java.util.Vector paralist)
    +public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
    @@ -582,7 +582,7 @@ public java.lang.String get_Method_Name()

    get_Type_Paralist

    -public java.util.Vector get_Type_Paralist()
    +public de.dhbwstuttgart.typeinference.Menge get_Type_Paralist()
    @@ -590,15 +590,15 @@ public java.util.Vector get_Type_Paralist()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class FieldDecl
    +
    Specified by:
    codegen in class FieldDecl
    diff --git a/doc/OldStuff/JavaDoc/MethodCall.html b/doc/OldStuff/JavaDoc/MethodCall.html index 0eda333e..00f67e75 100755 --- a/doc/OldStuff/JavaDoc/MethodCall.html +++ b/doc/OldStuff/JavaDoc/MethodCall.html @@ -137,7 +137,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exprtypes
    @@ -145,7 +145,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge finde_method
    @@ -222,9 +222,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -240,7 +240,7 @@ java.lang.Object  void -sc_check_get_Method(java.util.Vector classlist, +sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, boolean ext, java.util.Hashtable parach, @@ -252,7 +252,7 @@ java.lang.Object  boolean -sc_check_method_kleiner(java.util.Vector classlist, +sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String ist, java.lang.String soll, boolean ext) @@ -263,8 +263,8 @@ java.lang.Object  void -sc_check_uebergabe(java.util.Vector classlist, - java.util.Vector method, +sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, + de.dhbwstuttgart.typeinference.Menge method, boolean ext, int paranum, java.util.Hashtable parach, @@ -276,7 +276,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -289,8 +289,8 @@ java.lang.Object  void -sc_init_extended_fcts(java.util.Vector method, - java.util.Vector classlist, +sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method, + de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, java.lang.String classname, boolean ext) @@ -309,7 +309,7 @@ java.lang.Object  void -set_Expr_Vector(java.util.Vector v) +set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v)
                @@ -337,7 +337,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type   @@ -355,7 +355,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -403,7 +403,7 @@ private ArgumentList arglist

    exprtypes

    -private java.util.Vector exprtypes
    +private de.dhbwstuttgart.typeinference.Menge exprtypes
    @@ -443,7 +443,7 @@ private java.util.Hashtable uebernachdurch

    finde_method

    -private java.util.Vector finde_method
    +private de.dhbwstuttgart.typeinference.Menge finde_method
    @@ -511,10 +511,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -523,7 +523,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -532,10 +532,10 @@ public void sc_check(java.util.Vector classname,

    -

    +

    sc_check_get_Method

    -public void sc_check_get_Method(java.util.Vector classlist,
    +public void sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist,
                                     java.lang.String methodname,
                                     boolean ext,
                                     java.util.Hashtable parach,
    @@ -549,11 +549,11 @@ public void sc_check_get_Method(java.util.Vector classlist,
     

    -

    +

    sc_check_uebergabe

    -public void sc_check_uebergabe(java.util.Vector classlist,
    -                               java.util.Vector method,
    +public void sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist,
    +                               de.dhbwstuttgart.typeinference.Menge method,
                                    boolean ext,
                                    int paranum,
                                    java.util.Hashtable parach,
    @@ -567,10 +567,10 @@ public void sc_check_uebergabe(java.util.Vector classlist,
     

    -

    +

    sc_check_method_kleiner

    -public boolean sc_check_method_kleiner(java.util.Vector classlist,
    +public boolean sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist,
                                            java.lang.String ist,
                                            java.lang.String soll,
                                            boolean ext)
    @@ -581,11 +581,11 @@ public boolean sc_check_method_kleiner(java.util.Vector classlist,

    -

    +

    sc_init_extended_fcts

    -public void sc_init_extended_fcts(java.util.Vector method,
    -                                  java.util.Vector classlist,
    +public void sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method,
    +                                  de.dhbwstuttgart.typeinference.Menge classlist,
                                       java.lang.String methodname,
                                       java.lang.String classname,
                                       boolean ext)
    @@ -621,10 +621,10 @@ public void set_UsedId(UsedId u)

    -

    -set_Expr_Vector

    +

    +set_Expr_Menge

    -public void set_Expr_Vector(java.util.Vector v)
    +public void set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v)
    @@ -643,16 +643,16 @@ public void add_Expr(Expr e)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/MethodInfo.html b/doc/OldStuff/JavaDoc/MethodInfo.html index ef2a8953..f7335700 100755 --- a/doc/OldStuff/JavaDoc/MethodInfo.html +++ b/doc/OldStuff/JavaDoc/MethodInfo.html @@ -107,7 +107,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge attributes
    @@ -174,7 +174,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -207,7 +207,7 @@ java.lang.Object  void -set_attributes(java.util.Vector t) +set_attributes(de.dhbwstuttgart.typeinference.Menge t)
                @@ -284,7 +284,7 @@ private short descriptor_index

    attributes

    -private java.util.Vector attributes
    +private de.dhbwstuttgart.typeinference.Menge attributes
    @@ -353,7 +353,7 @@ public short get_descriptor_index()

    get_attributes

    -public java.util.Vector get_attributes()
    +public de.dhbwstuttgart.typeinference.Menge get_attributes()
    @@ -394,10 +394,10 @@ public void set_descriptor_index(short t)

    -

    +

    set_attributes

    -public void set_attributes(java.util.Vector t)
    +public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
    diff --git a/doc/OldStuff/JavaDoc/MinusOp.html b/doc/OldStuff/JavaDoc/MinusOp.html index 53c5f8b4..9e0cb612 100755 --- a/doc/OldStuff/JavaDoc/MinusOp.html +++ b/doc/OldStuff/JavaDoc/MinusOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -175,18 +175,18 @@ public MinusOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean neg,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class AddOp
    +
    Specified by:
    codegen in class AddOp
    diff --git a/doc/OldStuff/JavaDoc/Modifiers.html b/doc/OldStuff/JavaDoc/Modifiers.html index 3ce4ff82..99928a6c 100755 --- a/doc/OldStuff/JavaDoc/Modifiers.html +++ b/doc/OldStuff/JavaDoc/Modifiers.html @@ -99,7 +99,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge modifier
    @@ -141,7 +141,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_modifiers()
    @@ -173,7 +173,7 @@ java.lang.Object

    modifier

    -public java.util.Vector modifier
    +public de.dhbwstuttgart.typeinference.Menge modifier
    @@ -209,7 +209,7 @@ public Modifiers()

    get_modifiers

    -public java.util.Vector get_modifiers()
    +public de.dhbwstuttgart.typeinference.Menge get_modifiers()
    diff --git a/doc/OldStuff/JavaDoc/ModuloOp.html b/doc/OldStuff/JavaDoc/ModuloOp.html index 64de752e..c18a317e 100755 --- a/doc/OldStuff/JavaDoc/ModuloOp.html +++ b/doc/OldStuff/JavaDoc/ModuloOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -175,18 +175,18 @@ public ModuloOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean neg,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/MulOp.html b/doc/OldStuff/JavaDoc/MulOp.html index 7245885a..05180462 100755 --- a/doc/OldStuff/JavaDoc/MulOp.html +++ b/doc/OldStuff/JavaDoc/MulOp.html @@ -121,7 +121,7 @@ java.lang.Object Methods inherited from class Operator -codegen +codegen   diff --git a/doc/OldStuff/JavaDoc/MyCompiler.html b/doc/OldStuff/JavaDoc/MyCompiler.html index f05824dc..4553836e 100755 --- a/doc/OldStuff/JavaDoc/MyCompiler.html +++ b/doc/OldStuff/JavaDoc/MyCompiler.html @@ -452,7 +452,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge path
    @@ -810,8 +810,8 @@ java.lang.Object static void -wandleTV2RefType(java.util.Vector Parameter, - java.util.Vector KlassenVektor) +wandleTV2RefType(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
                @@ -916,7 +916,7 @@ public static int nDebug2

    path

    -public java.util.Vector path
    +public de.dhbwstuttgart.typeinference.Menge path
    @@ -1749,11 +1749,11 @@ public static void main(java.lang.String[] args)

    -

    +

    wandleTV2RefType

    -public static void wandleTV2RefType(java.util.Vector Parameter,
    -                                    java.util.Vector KlassenVektor)
    +public static void wandleTV2RefType(de.dhbwstuttgart.typeinference.Menge Parameter, + de.dhbwstuttgart.typeinference.Menge KlassenVektor)
    @@ -1784,7 +1784,7 @@ public void yyerror(java.lang.String message, Can be overwritten to control message format.

    -
    Parameters:
    message - text to be displayed.
    expected - vector of acceptable tokens, if available.
    +
    Parameters:
    message - text to be displayed.
    expected - Menge of acceptable tokens, if available.

    diff --git a/doc/OldStuff/JavaDoc/NegativeExpr.html b/doc/OldStuff/JavaDoc/NegativeExpr.html index 4e0dfc3a..29971f70 100755 --- a/doc/OldStuff/JavaDoc/NegativeExpr.html +++ b/doc/OldStuff/JavaDoc/NegativeExpr.html @@ -168,9 +168,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,9 +186,9 @@ java.lang.Object  void -neg_codegen(ClassFile classfile, +neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -196,7 +196,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -229,7 +229,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -247,7 +247,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -332,10 +332,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -344,7 +344,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -375,16 +375,16 @@ public void set_Expr(Expr ex)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    @@ -393,12 +393,12 @@ public void codegen(ClassFile classfile,

    -

    +

    neg_codegen

     public void neg_codegen(ClassFile classfile,
                             CodeAttribute code,
    -                        java.util.Vector paralist)
    +                        de.dhbwstuttgart.typeinference.Menge paralist)
                      throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/NewArray.html b/doc/OldStuff/JavaDoc/NewArray.html index a4f12dfe..7d959a01 100755 --- a/doc/OldStuff/JavaDoc/NewArray.html +++ b/doc/OldStuff/JavaDoc/NewArray.html @@ -105,7 +105,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge expr
    @@ -157,9 +157,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -183,7 +183,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -200,7 +200,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -218,7 +218,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -256,7 +256,7 @@ private Type type

    expr

    -private java.util.Vector expr
    +private de.dhbwstuttgart.typeinference.Menge expr
    @@ -303,10 +303,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable bh,
                          java.util.Hashtable ch,
                          boolean ext,
    @@ -314,7 +314,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -335,16 +335,16 @@ public int get_codegen_Array_Type()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/NewClass.html b/doc/OldStuff/JavaDoc/NewClass.html index 7b9a15d9..d8e96b58 100755 --- a/doc/OldStuff/JavaDoc/NewClass.html +++ b/doc/OldStuff/JavaDoc/NewClass.html @@ -158,9 +158,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -176,7 +176,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -209,7 +209,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type   @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -316,10 +316,10 @@ public void set_UsedId(UsedId t)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable bh,
                          java.util.Hashtable ch,
                          boolean ext,
    @@ -328,7 +328,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -348,16 +348,16 @@ public void set_ArgumentList(ArgumentList al)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/NoReceiver.html b/doc/OldStuff/JavaDoc/NoReceiver.html index 7262fc0f..709442b2 100755 --- a/doc/OldStuff/JavaDoc/NoReceiver.html +++ b/doc/OldStuff/JavaDoc/NoReceiver.html @@ -134,7 +134,7 @@ java.lang.Object Methods inherited from class Receiver -get_Type, sc_check, set_Expr +get_Type, sc_check, set_Expr   diff --git a/doc/OldStuff/JavaDoc/NotEqualOp.html b/doc/OldStuff/JavaDoc/NotEqualOp.html index fe5fce79..14b4ba14 100755 --- a/doc/OldStuff/JavaDoc/NotEqualOp.html +++ b/doc/OldStuff/JavaDoc/NotEqualOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,18 +186,18 @@ public NotEqualOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean not,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/NotExpr.html b/doc/OldStuff/JavaDoc/NotExpr.html index a27d78cf..cc0d55bc 100755 --- a/doc/OldStuff/JavaDoc/NotExpr.html +++ b/doc/OldStuff/JavaDoc/NotExpr.html @@ -168,9 +168,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -194,9 +194,9 @@ java.lang.Object  void -not_codegen(ClassFile classfile, +not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -204,7 +204,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -237,7 +237,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -255,7 +255,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -326,10 +326,10 @@ public NotExpr() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -338,7 +338,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -394,16 +394,16 @@ public void set_Expr(Expr ex)

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    @@ -412,12 +412,12 @@ public void codegen(ClassFile classfile,

    -

    +

    not_codegen

     public void not_codegen(ClassFile classfile,
                             CodeAttribute code,
    -                        java.util.Vector paralist)
    +                        de.dhbwstuttgart.typeinference.Menge paralist)
                      throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/Null.html b/doc/OldStuff/JavaDoc/Null.html index f67f018c..01860281 100755 --- a/doc/OldStuff/JavaDoc/Null.html +++ b/doc/OldStuff/JavaDoc/Null.html @@ -152,9 +152,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -170,7 +170,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -187,7 +187,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -205,7 +205,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -264,10 +264,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -275,7 +275,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -283,16 +283,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/Operator.html b/doc/OldStuff/JavaDoc/Operator.html index 3ca8b692..5702c13b 100755 --- a/doc/OldStuff/JavaDoc/Operator.html +++ b/doc/OldStuff/JavaDoc/Operator.html @@ -122,11 +122,11 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -174,14 +174,14 @@ public Operator() -

    +

    codegen

     public abstract void codegen(ClassFile classfile,
                                  CodeAttribute code,
                                  Expr expr,
                                  boolean neg_not,
    -                             java.util.Vector paralist)
    +                             de.dhbwstuttgart.typeinference.Menge paralist)
                           throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/OrOp.html b/doc/OldStuff/JavaDoc/OrOp.html index dfd6cc8a..161122df 100755 --- a/doc/OldStuff/JavaDoc/OrOp.html +++ b/doc/OldStuff/JavaDoc/OrOp.html @@ -120,7 +120,7 @@ java.lang.Object Methods inherited from class LogOp -build, codegen, if_codegen, loop_codegen, replace_index +build, codegen, if_codegen, loop_codegen, replace_index   diff --git a/doc/OldStuff/JavaDoc/Pair.html b/doc/OldStuff/JavaDoc/Pair.html index 420a340c..288f3e98 100755 --- a/doc/OldStuff/JavaDoc/Pair.html +++ b/doc/OldStuff/JavaDoc/Pair.html @@ -203,7 +203,7 @@ java.lang.Object (package private)  boolean -isInVector(java.util.Vector V) +isInMenge(de.dhbwstuttgart.typeinference.Menge V)
                @@ -374,10 +374,10 @@ Type getTA2Copy()

    -

    -isInVector

    +

    +isInMenge

    -boolean isInVector(java.util.Vector V)
    +boolean isInMenge(de.dhbwstuttgart.typeinference.Menge V)
    diff --git a/doc/OldStuff/JavaDoc/ParaList.html b/doc/OldStuff/JavaDoc/ParaList.html index 8625fc1a..8156bd02 100755 --- a/doc/OldStuff/JavaDoc/ParaList.html +++ b/doc/OldStuff/JavaDoc/ParaList.html @@ -99,7 +99,7 @@ java.lang.Object -protected  java.util.Vector +protected  de.dhbwstuttgart.typeinference.Menge paralist
    @@ -159,7 +159,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -191,7 +191,7 @@ java.lang.Object

    paralist

    -protected java.util.Vector paralist
    +protected de.dhbwstuttgart.typeinference.Menge paralist
    @@ -235,7 +235,7 @@ ParaList

    get_ParaList

    -public java.util.Vector get_ParaList()
    +public de.dhbwstuttgart.typeinference.Menge get_ParaList()
    diff --git a/doc/OldStuff/JavaDoc/ParameterList.html b/doc/OldStuff/JavaDoc/ParameterList.html index 9cb296f1..baecb166 100755 --- a/doc/OldStuff/JavaDoc/ParameterList.html +++ b/doc/OldStuff/JavaDoc/ParameterList.html @@ -99,7 +99,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge formalparameter
    @@ -151,14 +151,14 @@ java.lang.Object  java.lang.String -get_codegen_ParameterList(java.util.Vector paralist) +get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
                - java.util.Vector + de.dhbwstuttgart.typeinference.Menge sc_get_Formalparalist()
    @@ -208,7 +208,7 @@ public boolean hamaDebug

    formalparameter

    -public java.util.Vector formalparameter
    +public de.dhbwstuttgart.typeinference.Menge formalparameter
    @@ -252,10 +252,10 @@ public void set_AddParameter(FormalParameter fp)

    -

    +

    get_codegen_ParameterList

    -public java.lang.String get_codegen_ParameterList(java.util.Vector paralist)
    +public java.lang.String get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
    @@ -266,7 +266,7 @@ public java.lang.String get_codegen_ParameterList(java.util.Vector p

    sc_get_Formalparalist

    -public java.util.Vector sc_get_Formalparalist()
    +public de.dhbwstuttgart.typeinference.Menge sc_get_Formalparalist()
    diff --git a/doc/OldStuff/JavaDoc/PlusOp.html b/doc/OldStuff/JavaDoc/PlusOp.html index a0f4020c..b6a8f0b2 100755 --- a/doc/OldStuff/JavaDoc/PlusOp.html +++ b/doc/OldStuff/JavaDoc/PlusOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -175,18 +175,18 @@ public PlusOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean neg,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class AddOp
    +
    Specified by:
    codegen in class AddOp
    diff --git a/doc/OldStuff/JavaDoc/PositivExpr.html b/doc/OldStuff/JavaDoc/PositivExpr.html index f0780104..6f57c491 100755 --- a/doc/OldStuff/JavaDoc/PositivExpr.html +++ b/doc/OldStuff/JavaDoc/PositivExpr.html @@ -168,9 +168,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -186,7 +186,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -219,7 +219,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -237,7 +237,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -344,10 +344,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -355,7 +355,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -363,16 +363,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/PostDecExpr.html b/doc/OldStuff/JavaDoc/PostDecExpr.html index 1a7894a4..58650e39 100755 --- a/doc/OldStuff/JavaDoc/PostDecExpr.html +++ b/doc/OldStuff/JavaDoc/PostDecExpr.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -307,10 +307,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -319,7 +319,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/PostIncExpr.html b/doc/OldStuff/JavaDoc/PostIncExpr.html index df89ace0..813c3bae 100755 --- a/doc/OldStuff/JavaDoc/PostIncExpr.html +++ b/doc/OldStuff/JavaDoc/PostIncExpr.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -307,10 +307,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -319,7 +319,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/PreDecExpr.html b/doc/OldStuff/JavaDoc/PreDecExpr.html index e6795cef..21172c60 100755 --- a/doc/OldStuff/JavaDoc/PreDecExpr.html +++ b/doc/OldStuff/JavaDoc/PreDecExpr.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -307,10 +307,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -319,7 +319,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/PreIncExpr.html b/doc/OldStuff/JavaDoc/PreIncExpr.html index 95d5e675..eddc20fa 100755 --- a/doc/OldStuff/JavaDoc/PreIncExpr.html +++ b/doc/OldStuff/JavaDoc/PreIncExpr.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -307,10 +307,10 @@ public java.lang.String get_Name()

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -319,7 +319,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -328,16 +328,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class UnaryExpr
    +
    Specified by:
    codegen in class UnaryExpr
    diff --git a/doc/OldStuff/JavaDoc/Receiver.html b/doc/OldStuff/JavaDoc/Receiver.html index 76211895..5012b47c 100755 --- a/doc/OldStuff/JavaDoc/Receiver.html +++ b/doc/OldStuff/JavaDoc/Receiver.html @@ -153,7 +153,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -240,10 +240,10 @@ public Receiver() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    diff --git a/doc/OldStuff/JavaDoc/RefType.html b/doc/OldStuff/JavaDoc/RefType.html
    index 26b70066..e6490a1c 100755
    --- a/doc/OldStuff/JavaDoc/RefType.html
    +++ b/doc/OldStuff/JavaDoc/RefType.html
    @@ -104,7 +104,7 @@ java.lang.Object
     
     
     
    -private  java.util.Vector
    +private  de.dhbwstuttgart.typeinference.Menge
     parameter
     
     
    @@ -148,8 +148,8 @@ java.lang.Object             -RefType(java.lang.String s, - java.util.Vector parameter) +RefType(java.lang.String s, + de.dhbwstuttgart.typeinference.Menge parameter)
                @@ -174,7 +174,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -215,7 +215,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector v) +set_ParaList(de.dhbwstuttgart.typeinference.Menge v)
                @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_UsedId, set_Type, set_UsedId   @@ -255,7 +255,7 @@ java.lang.Object

    parameter

    -private java.util.Vector parameter
    +private de.dhbwstuttgart.typeinference.Menge parameter
    @@ -287,11 +287,11 @@ public RefType(java.lang.String s)

    -

    +

    RefType

     public RefType(java.lang.String s,
    -               java.util.Vector parameter)
    + de.dhbwstuttgart.typeinference.Menge parameter)

    @@ -327,10 +327,10 @@ public java.lang.String get_Type()

    -

    +

    set_ParaList

    -public void set_ParaList(java.util.Vector v)
    +public void set_ParaList(de.dhbwstuttgart.typeinference.Menge v)
    @@ -341,7 +341,7 @@ public void set_ParaList(java.util.Vector v)

    get_ParaList

    -public java.util.Vector get_ParaList()
    +public de.dhbwstuttgart.typeinference.Menge get_ParaList()
    diff --git a/doc/OldStuff/JavaDoc/RelOp.html b/doc/OldStuff/JavaDoc/RelOp.html index 49e4e0e9..e21a722b 100755 --- a/doc/OldStuff/JavaDoc/RelOp.html +++ b/doc/OldStuff/JavaDoc/RelOp.html @@ -139,7 +139,7 @@ java.lang.Object Methods inherited from class Operator -codegen +codegen   diff --git a/doc/OldStuff/JavaDoc/Return.html b/doc/OldStuff/JavaDoc/Return.html index d5a77d2e..1ae3de38 100755 --- a/doc/OldStuff/JavaDoc/Return.html +++ b/doc/OldStuff/JavaDoc/Return.html @@ -136,9 +136,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -154,7 +154,7 @@ java.lang.Object (package private)  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -179,7 +179,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -240,10 +240,10 @@ public Return() -

    +

    sc_check

    -void sc_check(java.util.Vector classname,
    +void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                   java.util.Hashtable ch,
                   java.util.Hashtable bh,
                   boolean ext,
    @@ -252,7 +252,7 @@ void sc_check(java.util.Vector classname,
             throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -283,16 +283,16 @@ public java.lang.String get_Type()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/ReturnType.html b/doc/OldStuff/JavaDoc/ReturnType.html index 54d6af56..2649c472 100755 --- a/doc/OldStuff/JavaDoc/ReturnType.html +++ b/doc/OldStuff/JavaDoc/ReturnType.html @@ -134,7 +134,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/SCClassBodyException.html b/doc/OldStuff/JavaDoc/SCClassBodyException.html index 26350859..d7403d98 100755 --- a/doc/OldStuff/JavaDoc/SCClassBodyException.html +++ b/doc/OldStuff/JavaDoc/SCClassBodyException.html @@ -108,7 +108,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exlist
    @@ -168,7 +168,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_exlist()
    @@ -209,7 +209,7 @@ java.lang.Object

    exlist

    -private java.util.Vector exlist
    +private de.dhbwstuttgart.typeinference.Menge exlist
    @@ -256,7 +256,7 @@ void addException(SCExcept ex)

    get_exlist

    -public java.util.Vector get_exlist()
    +public de.dhbwstuttgart.typeinference.Menge get_exlist()
    diff --git a/doc/OldStuff/JavaDoc/SCClassException.html b/doc/OldStuff/JavaDoc/SCClassException.html index c431b7af..a29a2371 100755 --- a/doc/OldStuff/JavaDoc/SCClassException.html +++ b/doc/OldStuff/JavaDoc/SCClassException.html @@ -108,7 +108,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exlist
    @@ -169,7 +169,7 @@ java.lang.Object  void -addException(java.util.Vector v) +addException(de.dhbwstuttgart.typeinference.Menge v)
                @@ -217,7 +217,7 @@ java.lang.Object

    exlist

    -private java.util.Vector exlist
    +private de.dhbwstuttgart.typeinference.Menge exlist
    @@ -250,10 +250,10 @@ public SCClassException() -

    +

    addException

    -public void addException(java.util.Vector v)
    +public void addException(de.dhbwstuttgart.typeinference.Menge v)
    diff --git a/doc/OldStuff/JavaDoc/SCException.html b/doc/OldStuff/JavaDoc/SCException.html index f9d02a49..6dee63ca 100755 --- a/doc/OldStuff/JavaDoc/SCException.html +++ b/doc/OldStuff/JavaDoc/SCException.html @@ -108,7 +108,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge scerrors
    @@ -209,7 +209,7 @@ java.lang.Object

    scerrors

    -private java.util.Vector scerrors
    +private de.dhbwstuttgart.typeinference.Menge scerrors
    diff --git a/doc/OldStuff/JavaDoc/SCMethodException.html b/doc/OldStuff/JavaDoc/SCMethodException.html index a3656e06..52602a63 100755 --- a/doc/OldStuff/JavaDoc/SCMethodException.html +++ b/doc/OldStuff/JavaDoc/SCMethodException.html @@ -108,7 +108,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exlist
    @@ -160,7 +160,7 @@ java.lang.Object -(package private)  java.util.Vector +(package private)  de.dhbwstuttgart.typeinference.Menge get_exlist()
    @@ -169,7 +169,7 @@ java.lang.Object (package private)  void -set_exlist(java.util.Vector list) +set_exlist(de.dhbwstuttgart.typeinference.Menge list)
                @@ -209,7 +209,7 @@ java.lang.Object

    exlist

    -private java.util.Vector exlist
    +private de.dhbwstuttgart.typeinference.Menge exlist
    @@ -245,7 +245,7 @@ public SCMethodException()

    get_exlist

    -java.util.Vector get_exlist()
    +de.dhbwstuttgart.typeinference.Menge get_exlist()
    @@ -253,10 +253,10 @@ java.util.Vector get_exlist()

    -

    +

    set_exlist

    -void set_exlist(java.util.Vector list)
    +void set_exlist(de.dhbwstuttgart.typeinference.Menge list)
    diff --git a/doc/OldStuff/JavaDoc/SCStatementException.html b/doc/OldStuff/JavaDoc/SCStatementException.html index e0cbddd5..41ac906a 100755 --- a/doc/OldStuff/JavaDoc/SCStatementException.html +++ b/doc/OldStuff/JavaDoc/SCStatementException.html @@ -108,7 +108,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge exlist
    @@ -168,7 +168,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_exlist()
    @@ -209,7 +209,7 @@ java.lang.Object

    exlist

    -private java.util.Vector exlist
    +private de.dhbwstuttgart.typeinference.Menge exlist
    @@ -245,7 +245,7 @@ public SCStatementException()

    get_exlist

    -public java.util.Vector get_exlist()
    +public de.dhbwstuttgart.typeinference.Menge get_exlist()
    diff --git a/doc/OldStuff/JavaDoc/SourceFile.html b/doc/OldStuff/JavaDoc/SourceFile.html index 3b04c554..9002a9c1 100755 --- a/doc/OldStuff/JavaDoc/SourceFile.html +++ b/doc/OldStuff/JavaDoc/SourceFile.html @@ -99,7 +99,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge KlassenVektor
    @@ -134,10 +134,10 @@ java.lang.Object (package private)  Pair -adapt(java.lang.String strTV, +adapt(java.lang.String strTV, Type T, - java.util.Vector vRFC, - java.util.Vector vRE) + de.dhbwstuttgart.typeinference.Menge vRFC, + de.dhbwstuttgart.typeinference.Menge vRE)
                @@ -153,7 +153,7 @@ java.lang.Object (package private)  boolean -hasSolvedForm(java.util.Vector E) +hasSolvedForm(de.dhbwstuttgart.typeinference.Menge E)
                @@ -161,9 +161,9 @@ java.lang.Object (package private)  Pair -isInFC(RefType R1, +isInFC(RefType R1, RefType R2, - java.util.Vector FC) + de.dhbwstuttgart.typeinference.Menge FC)
                @@ -197,7 +197,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge makeFC()
    @@ -216,8 +216,8 @@ java.lang.Object  void -printMenge(java.lang.String strMenge, - java.util.Vector E, +printMenge(java.lang.String strMenge, + de.dhbwstuttgart.typeinference.Menge E, int nDebug)
    @@ -253,9 +253,9 @@ java.lang.Object - java.util.Vector -unify(java.util.Vector E, - java.util.Vector FC) + de.dhbwstuttgart.typeinference.Menge +unify(de.dhbwstuttgart.typeinference.Menge E, + de.dhbwstuttgart.typeinference.Menge FC)
                @@ -286,7 +286,7 @@ java.lang.Object

    KlassenVektor

    -public java.util.Vector KlassenVektor
    +public de.dhbwstuttgart.typeinference.Menge KlassenVektor
    @@ -335,7 +335,7 @@ public void sc_check(boolean ext)

    makeFC

    -public java.util.Vector makeFC()
    +public de.dhbwstuttgart.typeinference.Menge makeFC()
    @@ -343,11 +343,11 @@ public java.util.Vector makeFC()

    -

    +

    unify

    -public java.util.Vector unify(java.util.Vector E,
    -                              java.util.Vector FC)
    +public de.dhbwstuttgart.typeinference.Menge unify(de.dhbwstuttgart.typeinference.Menge E, + de.dhbwstuttgart.typeinference.Menge FC)
    @@ -355,13 +355,13 @@ public java.util.Vector unify(java.util.Vector E,

    -

    +

    adapt

     Pair adapt(java.lang.String strTV,
                Type T,
    -           java.util.Vector vRFC,
    -           java.util.Vector vRE)
    + de.dhbwstuttgart.typeinference.Menge vRFC, + de.dhbwstuttgart.typeinference.Menge vRE)
    @@ -381,12 +381,12 @@ boolean isRXSimilarRY(RefType RFC,

    -

    +

    isInFC

     Pair isInFC(RefType R1,
                 RefType R2,
    -            java.util.Vector FC)
    + de.dhbwstuttgart.typeinference.Menge FC)
    @@ -448,11 +448,11 @@ public int pi(int n,

    -

    +

    printMenge

     public void printMenge(java.lang.String strMenge,
    -                       java.util.Vector E,
    +                       de.dhbwstuttgart.typeinference.Menge E,
                            int nDebug)
    @@ -461,10 +461,10 @@ public void printMenge(java.lang.String strMenge,

    -

    +

    hasSolvedForm

    -boolean hasSolvedForm(java.util.Vector E)
    +boolean hasSolvedForm(de.dhbwstuttgart.typeinference.Menge E)
    diff --git a/doc/OldStuff/JavaDoc/Statement.html b/doc/OldStuff/JavaDoc/Statement.html index bfb263dc..3001fbf9 100755 --- a/doc/OldStuff/JavaDoc/Statement.html +++ b/doc/OldStuff/JavaDoc/Statement.html @@ -122,9 +122,9 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -149,8 +149,8 @@ java.lang.Object (package private) static void -print_rec(java.lang.String st, - java.util.Vector v) +print_rec(java.lang.String st, + de.dhbwstuttgart.typeinference.Menge v)
                @@ -158,7 +158,7 @@ java.lang.Object (package private) static void -print_rec(java.util.Vector v) +print_rec(de.dhbwstuttgart.typeinference.Menge v)
                @@ -166,7 +166,7 @@ java.lang.Object (package private) abstract  void -sc_check(java.util.Vector classlist, +sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -219,10 +219,10 @@ public Statement() -

    +

    sc_check

    -abstract void sc_check(java.util.Vector classlist,
    +abstract void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
                            java.util.Hashtable ch,
                            java.util.Hashtable bh,
                            boolean ext,
    @@ -237,12 +237,12 @@ abstract void sc_check(java.util.Vector classlist,
     

    -

    +

    codegen

     public abstract void codegen(ClassFile classfile,
                                  CodeAttribute code,
    -                             java.util.Vector paralist)
    +                             de.dhbwstuttgart.typeinference.Menge paralist)
                           throws JVMCodeException
    @@ -263,10 +263,10 @@ static void print_rec(java.util.Hashtable ht)

    -

    +

    print_rec

    -static void print_rec(java.util.Vector v)
    +static void print_rec(de.dhbwstuttgart.typeinference.Menge v)
    @@ -286,11 +286,11 @@ static void print_rec(java.lang.String st,

    -

    +

    print_rec

     static void print_rec(java.lang.String st,
    -                      java.util.Vector v)
    + de.dhbwstuttgart.typeinference.Menge v)
    diff --git a/doc/OldStuff/JavaDoc/StringLiteral.html b/doc/OldStuff/JavaDoc/StringLiteral.html index d248545a..73737472 100755 --- a/doc/OldStuff/JavaDoc/StringLiteral.html +++ b/doc/OldStuff/JavaDoc/StringLiteral.html @@ -160,9 +160,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -178,7 +178,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -203,7 +203,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type, set_UsedId +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId   @@ -221,7 +221,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -282,10 +282,10 @@ public StringLiteral() -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -293,7 +293,7 @@ public void sc_check(java.util.Vector classname,
                          java.util.Hashtable parabh)
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -326,16 +326,16 @@ public java.lang.String get_Name()

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/This.html b/doc/OldStuff/JavaDoc/This.html index e6be55f1..292a5a4a 100755 --- a/doc/OldStuff/JavaDoc/This.html +++ b/doc/OldStuff/JavaDoc/This.html @@ -158,9 +158,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -176,7 +176,7 @@ java.lang.Object  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -209,7 +209,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Type_Vector, get_UsedId, set_Type +get_Name_Menge, get_Type_Menge, get_UsedId, set_Type   @@ -227,7 +227,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -313,10 +313,10 @@ public void set_UsedId(UsedId ui)

    -

    +

    sc_check

    -public void sc_check(java.util.Vector classname,
    +public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                          java.util.Hashtable ch,
                          java.util.Hashtable bh,
                          boolean ext,
    @@ -325,7 +325,7 @@ public void sc_check(java.util.Vector classname,
                   throws SCStatementException
    -
    Specified by:
    sc_check in class Expr
    +
    Specified by:
    sc_check in class Expr
    @@ -334,16 +334,16 @@ public void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/TimesOp.html b/doc/OldStuff/JavaDoc/TimesOp.html index 7953e578..93184566 100755 --- a/doc/OldStuff/JavaDoc/TimesOp.html +++ b/doc/OldStuff/JavaDoc/TimesOp.html @@ -123,11 +123,11 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -175,18 +175,18 @@ public TimesOp() -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
                         Expr expr,
                         boolean neg,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Operator
    +
    Specified by:
    codegen in class Operator
    diff --git a/doc/OldStuff/JavaDoc/Type.html b/doc/OldStuff/JavaDoc/Type.html index 6dc872a7..80a08323 100755 --- a/doc/OldStuff/JavaDoc/Type.html +++ b/doc/OldStuff/JavaDoc/Type.html @@ -159,7 +159,7 @@ java.lang.Object  java.lang.String -get_codegen_Type(java.util.Vector paralist) +get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -335,10 +335,10 @@ public java.lang.String get_Name()

    -

    +

    get_codegen_Type

    -public java.lang.String get_codegen_Type(java.util.Vector paralist)
    +public java.lang.String get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
    diff --git a/doc/OldStuff/JavaDoc/TyploseVariable.html b/doc/OldStuff/JavaDoc/TyploseVariable.html index a56d1658..d939de2e 100755 --- a/doc/OldStuff/JavaDoc/TyploseVariable.html +++ b/doc/OldStuff/JavaDoc/TyploseVariable.html @@ -174,7 +174,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_Name, get_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/UnaryExpr.html b/doc/OldStuff/JavaDoc/UnaryExpr.html index 3dc5dba7..c226b91b 100755 --- a/doc/OldStuff/JavaDoc/UnaryExpr.html +++ b/doc/OldStuff/JavaDoc/UnaryExpr.html @@ -153,9 +153,9 @@ java.lang.Object abstract  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -167,7 +167,7 @@ java.lang.Object Methods inherited from class Expr -get_Name_Vector, get_Name, get_Type_Vector, get_UsedId, sc_check, set_Type, set_UsedId +get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId   @@ -185,7 +185,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -230,16 +230,16 @@ public UnaryExpr() -

    +

    codegen

     public abstract void codegen(ClassFile classfile,
                                  CodeAttribute code,
    -                             java.util.Vector paralist)
    +                             de.dhbwstuttgart.typeinference.Menge paralist)
                           throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    diff --git a/doc/OldStuff/JavaDoc/UsedId.html b/doc/OldStuff/JavaDoc/UsedId.html index 23b37e76..83165815 100755 --- a/doc/OldStuff/JavaDoc/UsedId.html +++ b/doc/OldStuff/JavaDoc/UsedId.html @@ -99,7 +99,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge name
    @@ -107,7 +107,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge paralist
    @@ -115,7 +115,7 @@ java.lang.Object -private  java.util.Vector +private  de.dhbwstuttgart.typeinference.Menge typen
    @@ -123,7 +123,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge vParaOrg
    @@ -173,7 +173,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Name()
    @@ -181,7 +181,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -189,7 +189,7 @@ java.lang.Object - java.util.Vector + de.dhbwstuttgart.typeinference.Menge get_Typen()
    @@ -206,7 +206,7 @@ java.lang.Object  void -set_ParaList(java.util.Vector pl) +set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
                @@ -214,7 +214,7 @@ java.lang.Object  void -set_Typen(java.util.Vector t) +set_Typen(de.dhbwstuttgart.typeinference.Menge t)
                @@ -245,7 +245,7 @@ java.lang.Object

    name

    -public java.util.Vector name
    +public de.dhbwstuttgart.typeinference.Menge name
    @@ -255,7 +255,7 @@ public java.util.Vector name

    typen

    -private java.util.Vector typen
    +private de.dhbwstuttgart.typeinference.Menge typen
    @@ -265,7 +265,7 @@ private java.util.Vector typen

    paralist

    -private java.util.Vector paralist
    +private de.dhbwstuttgart.typeinference.Menge paralist
    @@ -275,7 +275,7 @@ private java.util.Vector paralist

    vParaOrg

    -public java.util.Vector vParaOrg
    +public de.dhbwstuttgart.typeinference.Menge vParaOrg
    @@ -322,7 +322,7 @@ public void set_Name(java.lang.String name)

    get_Name

    -public java.util.Vector get_Name()
    +public de.dhbwstuttgart.typeinference.Menge get_Name()
    @@ -341,10 +341,10 @@ public java.lang.String get_Name_1Element()

    -

    +

    set_Typen

    -public void set_Typen(java.util.Vector t)
    +public void set_Typen(de.dhbwstuttgart.typeinference.Menge t)
    @@ -352,10 +352,10 @@ public void set_Typen(java.util.Vector t)

    -

    +

    set_ParaList

    -public void set_ParaList(java.util.Vector pl)
    +public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
    @@ -366,7 +366,7 @@ public void set_ParaList(java.util.Vector pl)

    get_ParaList

    -public java.util.Vector get_ParaList()
    +public de.dhbwstuttgart.typeinference.Menge get_ParaList()
    @@ -377,7 +377,7 @@ public java.util.Vector get_ParaList()

    get_Typen

    -public java.util.Vector get_Typen()
    +public de.dhbwstuttgart.typeinference.Menge get_Typen()
    diff --git a/doc/OldStuff/JavaDoc/Void.html b/doc/OldStuff/JavaDoc/Void.html index 54003657..1dc11057 100755 --- a/doc/OldStuff/JavaDoc/Void.html +++ b/doc/OldStuff/JavaDoc/Void.html @@ -176,7 +176,7 @@ java.lang.Object Methods inherited from class RefType -add_Parameter, get_ParaList, get_Type, getParaN, getTypeName, isTV, set_ParaList +add_Parameter, get_ParaList, get_Type, getParaN, getTypeName, isTV, set_ParaList   @@ -185,7 +185,7 @@ java.lang.Object Methods inherited from class Type -get_codegen_Type, get_UsedId, set_Type, set_UsedId +get_codegen_Type, get_UsedId, set_Type, set_UsedId   diff --git a/doc/OldStuff/JavaDoc/WhileStmt.html b/doc/OldStuff/JavaDoc/WhileStmt.html index 744a6d13..f73c3acf 100755 --- a/doc/OldStuff/JavaDoc/WhileStmt.html +++ b/doc/OldStuff/JavaDoc/WhileStmt.html @@ -144,9 +144,9 @@ java.lang.Object  void -codegen(ClassFile classfile, +codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -154,11 +154,11 @@ java.lang.Object  void -loop_codegen(ClassFile classfile, +loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -166,7 +166,7 @@ java.lang.Object (package private)  void -sc_check(java.util.Vector classname, +sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -199,7 +199,7 @@ java.lang.Object Methods inherited from class Statement -print_rec, print_rec, print_rec, print_rec +print_rec, print_rec, print_rec, print_rec   @@ -292,10 +292,10 @@ void set_Loop_block(Statement blk)

    -

    +

    sc_check

    -void sc_check(java.util.Vector classname,
    +void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
                   java.util.Hashtable ch,
                   java.util.Hashtable bh,
                   boolean ext,
    @@ -304,7 +304,7 @@ void sc_check(java.util.Vector classname,
             throws SCStatementException
    -
    Specified by:
    sc_check in class Statement
    +
    Specified by:
    sc_check in class Statement
    @@ -313,16 +313,16 @@ void sc_check(java.util.Vector classname,

    -

    +

    codegen

     public void codegen(ClassFile classfile,
                         CodeAttribute code,
    -                    java.util.Vector paralist)
    +                    de.dhbwstuttgart.typeinference.Menge paralist)
                  throws JVMCodeException
    -
    Specified by:
    codegen in class Statement
    +
    Specified by:
    codegen in class Statement
    @@ -331,14 +331,14 @@ public void codegen(ClassFile classfile,

    -

    +

    loop_codegen

     public void loop_codegen(ClassFile classfile,
                              CodeAttribute code,
                              int breakpoint,
                              boolean not,
    -                         java.util.Vector paralist)
    +                         de.dhbwstuttgart.typeinference.Menge paralist)
                       throws JVMCodeException
    diff --git a/doc/OldStuff/JavaDoc/class-use/JVMCodeException.html b/doc/OldStuff/JavaDoc/class-use/JVMCodeException.html index 57c0f041..1307cb23 100755 --- a/doc/OldStuff/JavaDoc/class-use/JVMCodeException.html +++ b/doc/OldStuff/JavaDoc/class-use/JVMCodeException.html @@ -84,8 +84,8 @@ Uses of JVMCodeException in  void -ClassBody.codegen(ClassFile classfile, - java.util.Vector paralist) +ClassBody.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -93,8 +93,8 @@ Uses of JVMCodeException in  void -InstVarDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +InstVarDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -102,11 +102,11 @@ Uses of JVMCodeException in abstract  void -Operator.codegen(ClassFile classfile, +Operator.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -114,11 +114,11 @@ Uses of JVMCodeException in  void -PlusOp.codegen(ClassFile classfile, +PlusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -148,9 +148,9 @@ Uses of JVMCodeException in  void -Block.codegen(ClassFile classfile, +Block.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -158,11 +158,11 @@ Uses of JVMCodeException in  void -ModuloOp.codegen(ClassFile classfile, +ModuloOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -179,11 +179,11 @@ Uses of JVMCodeException in  void -GreaterOp.codegen(ClassFile classfile, +GreaterOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -202,9 +202,9 @@ Uses of JVMCodeException in  void -InstanceOf.codegen(ClassFile classfile, +InstanceOf.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -212,13 +212,13 @@ Uses of JVMCodeException in  void -ClassFile.add_method(java.lang.String name, +ClassFile.add_method(java.lang.String name, java.lang.String param_type, ParameterList param, Type type, Block block, short acc_flag, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -244,9 +244,9 @@ Uses of JVMCodeException in  void -CastExpr.codegen(ClassFile classfile, +CastExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -254,11 +254,11 @@ Uses of JVMCodeException in  void -DivideOp.codegen(ClassFile classfile, +DivideOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -275,11 +275,11 @@ Uses of JVMCodeException in  void -LessEquOp.codegen(ClassFile classfile, +LessEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -298,11 +298,11 @@ Uses of JVMCodeException in  void -EqualOp.codegen(ClassFile classfile, +EqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -321,9 +321,9 @@ Uses of JVMCodeException in  void -PostDecExpr.codegen(ClassFile classfile, +PostDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -331,9 +331,9 @@ Uses of JVMCodeException in  void -NotExpr.codegen(ClassFile classfile, +NotExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -341,9 +341,9 @@ Uses of JVMCodeException in  void -NotExpr.not_codegen(ClassFile classfile, +NotExpr.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -351,9 +351,9 @@ Uses of JVMCodeException in  void -CharLiteral.codegen(ClassFile classfile, +CharLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -361,9 +361,9 @@ Uses of JVMCodeException in  void -LocalOrFieldVar.codegen(ClassFile classfile, +LocalOrFieldVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -371,9 +371,9 @@ Uses of JVMCodeException in  void -InstVar.codegen(ClassFile classfile, +InstVar.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -381,9 +381,9 @@ Uses of JVMCodeException in  void -PositivExpr.codegen(ClassFile classfile, +PositivExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -391,9 +391,9 @@ Uses of JVMCodeException in  void -PreDecExpr.codegen(ClassFile classfile, +PreDecExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -401,11 +401,11 @@ Uses of JVMCodeException in  void -LogOp.codegen(ClassFile classfile, +LogOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -413,13 +413,13 @@ Uses of JVMCodeException in  void -LogOp.if_codegen(ClassFile classfile, +LogOp.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -427,12 +427,12 @@ Uses of JVMCodeException in  void -LogOp.loop_codegen(ClassFile classfile, +LogOp.loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -440,14 +440,14 @@ Uses of JVMCodeException in static void -LogOp.build(ClassFile classfile, +LogOp.build(ClassFile classfile, CodeAttribute code, Expr expr, - java.util.Vector indices, + de.dhbwstuttgart.typeinference.Menge indices, boolean not, boolean ex2, boolean and, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -455,8 +455,8 @@ Uses of JVMCodeException in static void -LogOp.replace_index(CodeAttribute code, - java.util.Vector indices, +LogOp.replace_index(CodeAttribute code, + de.dhbwstuttgart.typeinference.Menge indices, int else_index, int then_index) @@ -474,11 +474,11 @@ Uses of JVMCodeException in  void -LessOp.codegen(ClassFile classfile, +LessOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -497,9 +497,9 @@ Uses of JVMCodeException in  void -This.codegen(ClassFile classfile, +This.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -507,9 +507,9 @@ Uses of JVMCodeException in  void -IntLiteral.codegen(ClassFile classfile, +IntLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -517,11 +517,11 @@ Uses of JVMCodeException in  void -NotEqualOp.codegen(ClassFile classfile, +NotEqualOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -540,9 +540,9 @@ Uses of JVMCodeException in  void -PostIncExpr.codegen(ClassFile classfile, +PostIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -550,9 +550,9 @@ Uses of JVMCodeException in  void -WhileStmt.codegen(ClassFile classfile, +WhileStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -560,11 +560,11 @@ Uses of JVMCodeException in  void -WhileStmt.loop_codegen(ClassFile classfile, +WhileStmt.loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -572,9 +572,9 @@ Uses of JVMCodeException in  void -PreIncExpr.codegen(ClassFile classfile, +PreIncExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -582,8 +582,8 @@ Uses of JVMCodeException in  void -Method.codegen(ClassFile classfile, - java.util.Vector paralist) +Method.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -591,9 +591,9 @@ Uses of JVMCodeException in  void -BoolLiteral.codegen(ClassFile classfile, +BoolLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -621,9 +621,9 @@ Uses of JVMCodeException in  void -MethodCall.codegen(ClassFile classfile, +MethodCall.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -631,9 +631,9 @@ Uses of JVMCodeException in  void -Binary.codegen(ClassFile classfile, +Binary.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -641,9 +641,9 @@ Uses of JVMCodeException in  void -Binary.not_codegen(ClassFile classfile, +Binary.not_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -651,9 +651,9 @@ Uses of JVMCodeException in  void -Binary.neg_codegen(ClassFile classfile, +Binary.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -694,9 +694,9 @@ Uses of JVMCodeException in  void -Assign.codegen(ClassFile classfile, +Assign.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -704,11 +704,11 @@ Uses of JVMCodeException in abstract  void -AddOp.codegen(ClassFile classfile, +AddOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -733,9 +733,9 @@ Uses of JVMCodeException in  void -NewArray.codegen(ClassFile classfile, +NewArray.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -923,7 +923,7 @@ Uses of JVMCodeException in static void -JVMCode.get_Command(java.util.Vector b) +JVMCode.get_Command(de.dhbwstuttgart.typeinference.Menge b)
                @@ -931,9 +931,9 @@ Uses of JVMCodeException in  void -DeclId.codegen_InstVarDecl(ClassFile classfile, +DeclId.codegen_InstVarDecl(ClassFile classfile, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -941,10 +941,10 @@ Uses of JVMCodeException in  void -DeclId.codegen_LocalVarDecl(ClassFile classfile, +DeclId.codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -952,11 +952,11 @@ Uses of JVMCodeException in  void -TimesOp.codegen(ClassFile classfile, +TimesOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -964,9 +964,9 @@ Uses of JVMCodeException in  void -Null.codegen(ClassFile classfile, +Null.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -974,8 +974,8 @@ Uses of JVMCodeException in  void -Constructor.codegen(ClassFile classfile, - java.util.Vector paralist) +Constructor.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -983,11 +983,11 @@ Uses of JVMCodeException in  void -MinusOp.codegen(ClassFile classfile, +MinusOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -995,9 +995,9 @@ Uses of JVMCodeException in  void -EmptyStmt.codegen(ClassFile classfile, +EmptyStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1005,9 +1005,9 @@ Uses of JVMCodeException in  void -LocalVarDecl.codegen(ClassFile classfile, +LocalVarDecl.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1015,9 +1015,9 @@ Uses of JVMCodeException in  void -NegativeExpr.codegen(ClassFile classfile, +NegativeExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1025,9 +1025,9 @@ Uses of JVMCodeException in  void -NegativeExpr.neg_codegen(ClassFile classfile, +NegativeExpr.neg_codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1035,9 +1035,9 @@ Uses of JVMCodeException in  void -Return.codegen(ClassFile classfile, +Return.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1045,11 +1045,11 @@ Uses of JVMCodeException in  void -GreaterEquOp.codegen(ClassFile classfile, +GreaterEquOp.codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1068,9 +1068,9 @@ Uses of JVMCodeException in  void -IfStmt.codegen(ClassFile classfile, +IfStmt.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1078,10 +1078,10 @@ Uses of JVMCodeException in  void -IfStmt.if_codegen(ClassFile classfile, +IfStmt.if_codegen(ClassFile classfile, CodeAttribute code, boolean not, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1089,9 +1089,9 @@ Uses of JVMCodeException in  void -NewClass.codegen(ClassFile classfile, +NewClass.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1099,9 +1099,9 @@ Uses of JVMCodeException in  void -StringLiteral.codegen(ClassFile classfile, +StringLiteral.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1109,9 +1109,9 @@ Uses of JVMCodeException in abstract  void -Statement.codegen(ClassFile classfile, +Statement.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1128,9 +1128,9 @@ Uses of JVMCodeException in abstract  void -UnaryExpr.codegen(ClassFile classfile, +UnaryExpr.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1138,8 +1138,8 @@ Uses of JVMCodeException in abstract  void -FieldDecl.codegen(ClassFile classfile, - java.util.Vector paralist) +FieldDecl.codegen(ClassFile classfile, + de.dhbwstuttgart.typeinference.Menge paralist)
                @@ -1147,9 +1147,9 @@ Uses of JVMCodeException in  void -ArgumentList.codegen(ClassFile classfile, +ArgumentList.codegen(ClassFile classfile, CodeAttribute code, - java.util.Vector paralist) + de.dhbwstuttgart.typeinference.Menge paralist)
                diff --git a/doc/OldStuff/JavaDoc/class-use/SCClassBodyException.html b/doc/OldStuff/JavaDoc/class-use/SCClassBodyException.html index 095b89b0..54bf9d5c 100755 --- a/doc/OldStuff/JavaDoc/class-use/SCClassBodyException.html +++ b/doc/OldStuff/JavaDoc/class-use/SCClassBodyException.html @@ -84,7 +84,7 @@ Uses of SCClassBodyException in  void -ClassBody.sc_init_hashtable(java.util.Vector KlassenVektor, +ClassBody.sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, java.lang.String strSuperKlassenName, java.lang.String classname, boolean ext) @@ -95,7 +95,7 @@ Uses of SCClassBodyException in  void -ClassBody.sc_check(java.util.Vector classlist, +ClassBody.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    @@ -104,7 +104,7 @@ Uses of SCClassBodyException in  java.util.Hashtable -ClassBody.complete_parahashtable(java.util.Vector classlist, +ClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, UsedId superclassid, java.util.Hashtable childhash, boolean ext) @@ -115,8 +115,8 @@ Uses of SCClassBodyException in  boolean -ClassBody.is_declared(Type t, - java.util.Vector classlist) +ClassBody.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
                diff --git a/doc/OldStuff/JavaDoc/class-use/SCClassException.html b/doc/OldStuff/JavaDoc/class-use/SCClassException.html index ae996f07..4933022b 100755 --- a/doc/OldStuff/JavaDoc/class-use/SCClassException.html +++ b/doc/OldStuff/JavaDoc/class-use/SCClassException.html @@ -84,7 +84,7 @@ Uses of SCClassException in  void -Class.para_check(java.util.Vector classlist, +Class.para_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    @@ -93,7 +93,7 @@ Uses of SCClassException in  void -Class.sc_check(java.util.Vector classlist, +Class.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, boolean ext)
    diff --git a/doc/OldStuff/JavaDoc/class-use/SCMethodException.html b/doc/OldStuff/JavaDoc/class-use/SCMethodException.html index d0f2cc7e..a64a287f 100755 --- a/doc/OldStuff/JavaDoc/class-use/SCMethodException.html +++ b/doc/OldStuff/JavaDoc/class-use/SCMethodException.html @@ -84,7 +84,7 @@ Uses of SCMethodException in  void -Method.call_sc_check(java.util.Vector classlist, +Method.call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable classhash, boolean ext, java.util.Hashtable parach) diff --git a/doc/OldStuff/JavaDoc/class-use/SCStatementException.html b/doc/OldStuff/JavaDoc/class-use/SCStatementException.html index a3088527..da996ed3 100755 --- a/doc/OldStuff/JavaDoc/class-use/SCStatementException.html +++ b/doc/OldStuff/JavaDoc/class-use/SCStatementException.html @@ -84,7 +84,7 @@ Uses of SCStatementException in  void -Block.sc_check(java.util.Vector classname, +Block.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -97,7 +97,7 @@ Uses of SCStatementException in  void -InstanceOf.sc_check(java.util.Vector classname, +InstanceOf.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -110,7 +110,7 @@ Uses of SCStatementException in  void -CastExpr.sc_check(java.util.Vector classname, +CastExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -123,7 +123,7 @@ Uses of SCStatementException in abstract  void -Expr.sc_check(java.util.Vector classname, +Expr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -136,7 +136,7 @@ Uses of SCStatementException in  void -PostDecExpr.sc_check(java.util.Vector classname, +PostDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -149,7 +149,7 @@ Uses of SCStatementException in  void -NotExpr.sc_check(java.util.Vector classname, +NotExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -162,7 +162,7 @@ Uses of SCStatementException in  void -LocalOrFieldVar.sc_check(java.util.Vector classname, +LocalOrFieldVar.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -175,7 +175,7 @@ Uses of SCStatementException in  void -PreDecExpr.sc_check(java.util.Vector classname, +PreDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -188,7 +188,7 @@ Uses of SCStatementException in  void -This.sc_check(java.util.Vector classname, +This.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -201,7 +201,7 @@ Uses of SCStatementException in  void -PostIncExpr.sc_check(java.util.Vector classname, +PostIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -214,7 +214,7 @@ Uses of SCStatementException in (package private)  void -WhileStmt.sc_check(java.util.Vector classname, +WhileStmt.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -227,7 +227,7 @@ Uses of SCStatementException in  void -PreIncExpr.sc_check(java.util.Vector classname, +PreIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -240,7 +240,7 @@ Uses of SCStatementException in  void -MethodCall.sc_check(java.util.Vector classname, +MethodCall.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -253,7 +253,7 @@ Uses of SCStatementException in  void -MethodCall.sc_check_get_Method(java.util.Vector classlist, +MethodCall.sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, java.lang.String methodname, boolean ext, java.util.Hashtable parach, @@ -265,8 +265,8 @@ Uses of SCStatementException in  void -MethodCall.sc_check_uebergabe(java.util.Vector classlist, - java.util.Vector method, +MethodCall.sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, + de.dhbwstuttgart.typeinference.Menge method, boolean ext, int paranum, java.util.Hashtable parach, @@ -278,7 +278,7 @@ Uses of SCStatementException in  void -Binary.sc_check(java.util.Vector classname, +Binary.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -291,7 +291,7 @@ Uses of SCStatementException in  void -Receiver.sc_check(java.util.Vector classname, +Receiver.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -304,7 +304,7 @@ Uses of SCStatementException in  void -Assign.sc_check(java.util.Vector classname, +Assign.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -317,7 +317,7 @@ Uses of SCStatementException in  void -LocalVarDecl.sc_check(java.util.Vector classname, +LocalVarDecl.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -330,8 +330,8 @@ Uses of SCStatementException in  void -LocalVarDecl.is_declared(Type t, - java.util.Vector classlist) +LocalVarDecl.is_declared(Type t, + de.dhbwstuttgart.typeinference.Menge classlist)
                @@ -339,9 +339,9 @@ Uses of SCStatementException in  void -LocalVarDecl.check_anz(Type type, - java.util.Vector paralist, - java.util.Vector classlist) +LocalVarDecl.check_anz(Type type, + de.dhbwstuttgart.typeinference.Menge paralist, + de.dhbwstuttgart.typeinference.Menge classlist)
                @@ -349,7 +349,7 @@ Uses of SCStatementException in  void -NegativeExpr.sc_check(java.util.Vector classname, +NegativeExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -362,7 +362,7 @@ Uses of SCStatementException in (package private)  void -Return.sc_check(java.util.Vector classname, +Return.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -375,7 +375,7 @@ Uses of SCStatementException in (package private)  void -IfStmt.sc_check(java.util.Vector classname, +IfStmt.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, @@ -388,7 +388,7 @@ Uses of SCStatementException in  void -NewClass.sc_check(java.util.Vector classname, +NewClass.sc_check(de.dhbwstuttgart.typeinference.Menge classname, java.util.Hashtable bh, java.util.Hashtable ch, boolean ext, @@ -401,7 +401,7 @@ Uses of SCStatementException in (package private) abstract  void -Statement.sc_check(java.util.Vector classlist, +Statement.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, java.util.Hashtable ch, java.util.Hashtable bh, boolean ext, diff --git a/doc/OldStuff/JavaDoc/index-files/index-1.html b/doc/OldStuff/JavaDoc/index-files/index-1.html index df62eef5..979dfd2f 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-1.html +++ b/doc/OldStuff/JavaDoc/index-files/index-1.html @@ -93,7 +93,7 @@ Variable in class MethodInfo
    aconst_null - Static variable in class JVMCode
      -
    adapt(String, Type, Vector, Vector) - +
    adapt(String, Type, Menge, Menge) - Method in class SourceFile
     
    add_class(String, String, short) - @@ -150,7 +150,7 @@ Method in class CodeAttribute
    add_method_ref(String, String, String) - Method in class ClassFile
      -
    add_method(String, String, ParameterList, Type, Block, short, Vector) - +
    add_method(String, String, ParameterList, Type, Block, short, Menge) - Method in class ClassFile
     
    add_ParaList(Object) - @@ -168,7 +168,7 @@ Method in class SCStatementException
    addException(SCExcept) - Method in class SCClassBodyException
      -
    addException(Vector) - +
    addException(Menge) - Method in class SCClassException
     
    AddOp - class AddOp.
     
    AddOp() - diff --git a/doc/OldStuff/JavaDoc/index-files/index-11.html b/doc/OldStuff/JavaDoc/index-files/index-11.html index 2e20c5cb..49e16203 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-11.html +++ b/doc/OldStuff/JavaDoc/index-files/index-11.html @@ -66,7 +66,7 @@ parent.document.title="K-Index";

    K

    -
    Key - class Key.
     
    key_vector - +
    Key - class Key.
     
    key_Menge - Variable in class ClassFile
     
    Key(byte, String) - diff --git a/doc/OldStuff/JavaDoc/index-files/index-12.html b/doc/OldStuff/JavaDoc/index-files/index-12.html index fc1cd755..575e35e0 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-12.html +++ b/doc/OldStuff/JavaDoc/index-files/index-12.html @@ -144,10 +144,10 @@ Static variable in class JVMCode
    lneg - Static variable in class JVMCode
      -
    local_name_vector - +
    local_name_Menge - Variable in class CodeAttribute
      -
    local_type_vector - +
    local_type_Menge - Variable in class CodeAttribute
     
    LocalOrFieldVar - class LocalOrFieldVar.
     
    LocalOrFieldVar() - @@ -174,10 +174,10 @@ Static variable in class JVMCode
    loop_block - Variable in class WhileStmt
      -
    loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Vector) - +
    loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Menge) - Method in class LogOp
      -
    loop_codegen(ClassFile, CodeAttribute, int, boolean, Vector) - +
    loop_codegen(ClassFile, CodeAttribute, int, boolean, Menge) - Method in class WhileStmt
     
    lor - diff --git a/doc/OldStuff/JavaDoc/index-files/index-14.html b/doc/OldStuff/JavaDoc/index-files/index-14.html index 247dfbb3..a7c11b4b 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-14.html +++ b/doc/OldStuff/JavaDoc/index-files/index-14.html @@ -135,10 +135,10 @@ Static method in class JVMCode
    neg - Variable in class NegativeExpr
      -
    neg_codegen(ClassFile, CodeAttribute, Vector) - +
    neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class Binary
      -
    neg_codegen(ClassFile, CodeAttribute, Vector) - +
    neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class NegativeExpr
     
    NegativeExpr - class NegativeExpr.
     
    NegativeExpr() - @@ -186,10 +186,10 @@ Constructor for class NoReceiver
    not - Variable in class NotExpr
      -
    not_codegen(ClassFile, CodeAttribute, Vector) - +
    not_codegen(ClassFile, CodeAttribute, Menge) - Method in class NotExpr
      -
    not_codegen(ClassFile, CodeAttribute, Vector) - +
    not_codegen(ClassFile, CodeAttribute, Menge) - Method in class Binary
     
    NOTEQUAL - diff --git a/doc/OldStuff/JavaDoc/index-files/index-16.html b/doc/OldStuff/JavaDoc/index-files/index-16.html index b8789cb4..31a07fc3 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-16.html +++ b/doc/OldStuff/JavaDoc/index-files/index-16.html @@ -72,7 +72,7 @@ Constructor for class Pair
    Pair(Type, Type, boolean) - Constructor for class Pair
      -
    para_check(Vector, boolean) - +
    para_check(Menge, boolean) - Method in class Class
     
    paraclasshash - @@ -168,25 +168,25 @@ Static method in class Class
    print_rec(String, Hashtable) - Static method in class Statement
      -
    print_rec(String, Vector) - +
    print_rec(String, Menge) - Static method in class ClassBody
      -
    print_rec(String, Vector) - +
    print_rec(String, Menge) - Static method in class Class
      -
    print_rec(String, Vector) - +
    print_rec(String, Menge) - Static method in class Statement
      -
    print_rec(Vector) - +
    print_rec(Menge) - Static method in class ClassBody
      -
    print_rec(Vector) - +
    print_rec(Menge) - Static method in class Class
      -
    print_rec(Vector) - +
    print_rec(Menge) - Static method in class Statement
      -
    printMenge(String, Vector, int) - +
    printMenge(String, Menge, int) - Method in class SourceFile
     
    Private - class Private.
     
    PRIVATE - diff --git a/doc/OldStuff/JavaDoc/index-files/index-17.html b/doc/OldStuff/JavaDoc/index-files/index-17.html index 9268103b..651ec3b7 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-17.html +++ b/doc/OldStuff/JavaDoc/index-files/index-17.html @@ -87,7 +87,7 @@ Constructor for class RefType
    RefType(String) - Constructor for class RefType
      -
    RefType(String, Vector) - +
    RefType(String, Menge) - Constructor for class RefType
     
    RelOp - class RelOp.
     
    RELOP - @@ -96,7 +96,7 @@ Static variable in class JavaParser
    RelOp() - Constructor for class RelOp
      -
    replace_index(CodeAttribute, Vector, int, int) - +
    replace_index(CodeAttribute, Menge, int, int) - Static method in class LogOp
     
    ret - diff --git a/doc/OldStuff/JavaDoc/index-files/index-18.html b/doc/OldStuff/JavaDoc/index-files/index-18.html index cbe40beb..bb801851 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-18.html +++ b/doc/OldStuff/JavaDoc/index-files/index-18.html @@ -72,130 +72,130 @@ Static variable in class JVMCode
    sastore - Static variable in class JVMCode
      -
    sc_check_for_extended_classes(Vector, Hashtable, boolean) - +
    sc_check_for_extended_classes(Menge, Hashtable, boolean) - Method in class Class
      -
    sc_check_get_Method(Vector, String, boolean, Hashtable, Hashtable) - +
    sc_check_get_Method(Menge, String, boolean, Hashtable, Hashtable) - Method in class MethodCall
      -
    sc_check_method_kleiner(Vector, String, String, boolean) - +
    sc_check_method_kleiner(Menge, String, String, boolean) - Method in class MethodCall
      -
    sc_check_uebergabe(Vector, Vector, boolean, int, Hashtable, Hashtable) - +
    sc_check_uebergabe(Menge, Menge, boolean, int, Hashtable, Hashtable) - Method in class MethodCall
     
    sc_check(boolean) - Method in class SourceFile
      -
    sc_check(Vector, boolean) - +
    sc_check(Menge, boolean) - Method in class ClassBody
      -
    sc_check(Vector, boolean) - +
    sc_check(Menge, boolean) - Method in class Class
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Block
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class InstanceOf
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class CastExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Expr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class PostDecExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class NotExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class CharLiteral
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class LocalOrFieldVar
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class InstVar
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class PositivExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class PreDecExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class This
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class IntLiteral
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class PostIncExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class WhileStmt
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class PreIncExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class BoolLiteral
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class MethodCall
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Binary
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Receiver
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Assign
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class NewArray
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Null
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class EmptyStmt
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class LocalVarDecl
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class NegativeExpr
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Return
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class IfStmt
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class NewClass
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class StringLiteral
      -
    sc_check(Vector, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - +
    sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class Statement
     
    sc_get_Formalparalist() - Method in class ParameterList
      -
    sc_init_extended_fcts(Vector, Vector, String, String, boolean) - +
    sc_init_extended_fcts(Menge, Menge, String, String, boolean) - Method in class MethodCall
      -
    sc_init_hashtable_for_extended_classes(Vector, String, Hashtable, Vector, Hashtable, Hashtable, boolean) - +
    sc_init_hashtable_for_extended_classes(Menge, String, Hashtable, Menge, Hashtable, Hashtable, boolean) - Method in class ClassBody
      -
    sc_init_hashtable(Vector, String, String, boolean) - +
    sc_init_hashtable(Menge, String, String, boolean) - Method in class ClassBody
     
    sc_init_parameterlist(boolean) - @@ -258,16 +258,16 @@ Method in class NewClass
    set_attribute_name_index(short) - Method in class Attribute
      -
    set_attributes_Vector(Vector) - +
    set_attributes_Menge(Menge) - Method in class CodeAttribute
      -
    set_attributes(Vector) - +
    set_attributes(Menge) - Method in class ClassFile
      -
    set_attributes(Vector) - +
    set_attributes(Menge) - Method in class FieldInfo
      -
    set_attributes(Vector) - +
    set_attributes(Menge) - Method in class MethodInfo
     
    set_Block(Block) - @@ -324,7 +324,7 @@ Method in class CodeAttribute
    set_code(Byte, int) - Method in class CodeAttribute
      -
    set_constant_pool(Vector) - +
    set_constant_pool(Menge) - Method in class ClassFile
     
    set_constructor_founded(boolean) - @@ -354,16 +354,16 @@ Method in class IfStmt
    set_error(String) - Method in class SCExcept
      -
    set_exception_table_Vector(Vector) - +
    set_exception_table_Menge(Menge) - Method in class CodeAttribute
     
    set_ExceptionList(ExceptionList) - Method in class Method
      -
    set_exlist(Vector) - +
    set_exlist(Menge) - Method in class SCMethodException
      -
    set_Expr_Vector(Vector) - +
    set_Expr_Menge(Menge) - Method in class MethodCall
     
    set_Expr(Expr) - @@ -414,7 +414,7 @@ Method in class Binary
    set_FieldDecl(FieldDecl) - Method in class ClassBody
      -
    set_fields(Vector) - +
    set_fields(Menge) - Method in class ClassFile
     
    set_function(String) - @@ -432,7 +432,7 @@ Method in class Status
    set_info(byte[]) - Method in class AttributeInfo
      -
    set_info(Vector) - +
    set_info(Menge) - Method in class AttributeInfo
     
    set_Int(int) - @@ -450,7 +450,7 @@ Method in class CONSTANT_Double_info
    set_low_bytes(int) - Method in class CONSTANT_Long_info
      -
    set_methods(Vector) - +
    set_methods(Menge) - Method in class ClassFile
     
    set_Modifiers(Modifiers) - @@ -504,19 +504,19 @@ Method in class Class
    set_ParaList(ParameterList) - Method in class Method
      -
    set_ParaList(Vector) - +
    set_ParaList(Menge) - Method in class RefType
      -
    set_ParaList(Vector) - +
    set_ParaList(Menge) - Method in class Class
      -
    set_ParaList(Vector) - +
    set_ParaList(Menge) - Method in class LocalVarDecl
      -
    set_ParaList(Vector) - +
    set_ParaList(Menge) - Method in class UsedId
      -
    set_Paratyp(Vector) - +
    set_Paratyp(Menge) - Method in class DeclId
     
    set_Receiver(Receiver) - @@ -528,7 +528,7 @@ Method in class Return
    set_ReturnType(Type) - Method in class Method
      -
    set_Statement_Vector(Vector) - +
    set_Statement_Menge(Menge) - Method in class Block
     
    set_Statement(Statement) - @@ -588,7 +588,7 @@ Method in class Expr
    set_Type(Type) - Method in class LocalVarDecl
      -
    set_Typen(Vector) - +
    set_Typen(Menge) - Method in class UsedId
     
    set_UnaryMinus(UnaryMinus) - @@ -627,7 +627,7 @@ Method in class Status
    set_Wert(ExprStmt) - Method in class DeclId
      -
    setDeclIdVector(Vector) - +
    setDeclIdMenge(Menge) - Method in class FieldDecl
     
    SHIFTLEFT - diff --git a/doc/OldStuff/JavaDoc/index-files/index-2.html b/doc/OldStuff/JavaDoc/index-files/index-2.html index b495fc88..a4c51291 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-2.html +++ b/doc/OldStuff/JavaDoc/index-files/index-2.html @@ -126,7 +126,7 @@ Static variable in class JVMCode
    bSubst - Variable in class Pair
      -
    build(ClassFile, CodeAttribute, Expr, Vector, boolean, boolean, boolean, Vector) - +
    build(ClassFile, CodeAttribute, Expr, Menge, boolean, boolean, boolean, Menge) - Static method in class LogOp
     
    bytes - diff --git a/doc/OldStuff/JavaDoc/index-files/index-20.html b/doc/OldStuff/JavaDoc/index-files/index-20.html index 0820c4fc..1fc4e4b6 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-20.html +++ b/doc/OldStuff/JavaDoc/index-files/index-20.html @@ -81,7 +81,7 @@ Constructor for class UnaryNot
    UnaryPlus - class UnaryPlus.
     
    UnaryPlus() - Constructor for class UnaryPlus
      -
    unify(Vector, Vector) - +
    unify(Menge, Menge) - Method in class SourceFile
     
    unpackFromString(int, int, String) - diff --git a/doc/OldStuff/JavaDoc/index-files/index-22.html b/doc/OldStuff/JavaDoc/index-files/index-22.html index 784c12f6..8cb62d95 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-22.html +++ b/doc/OldStuff/JavaDoc/index-files/index-22.html @@ -66,7 +66,7 @@ parent.document.title="W-Index";

    W

    -
    wandleTV2RefType(Vector, Vector) - +
    wandleTV2RefType(Menge, Menge) - Static method in class MyCompiler
     
    wert - diff --git a/doc/OldStuff/JavaDoc/index-files/index-3.html b/doc/OldStuff/JavaDoc/index-files/index-3.html index 9df4bb48..a0ff4060 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-3.html +++ b/doc/OldStuff/JavaDoc/index-files/index-3.html @@ -72,7 +72,7 @@ Method in class Modifiers
    calculate_max_stack() - Method in class CodeAttribute
      -
    call_sc_check(Vector, Hashtable, boolean, Hashtable) - +
    call_sc_check(Menge, Hashtable, boolean, Hashtable) - Method in class Method
     
    called_method - @@ -117,7 +117,7 @@ Static variable in class JavaParser
    CharLiteral() - Constructor for class CharLiteral
      -
    check_anz(Type, Vector, Vector) - +
    check_anz(Type, Menge, Menge) - Method in class LocalVarDecl
     
    checkcast - @@ -168,16 +168,16 @@ Variable in class SCExcept
    classname - Variable in class ClassDeclId
      -
    code_vector - +
    code_Menge - Variable in class CodeAttribute
     
    CodeAttribute - class CodeAttribute.
     
    CodeAttribute(String, short) - Constructor for class CodeAttribute
      -
    codegen_InstVarDecl(ClassFile, Type, Vector) - +
    codegen_InstVarDecl(ClassFile, Type, Menge) - Method in class DeclId
      -
    codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Vector) - +
    codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Menge) - Method in class DeclId
     
    codegen() - @@ -198,142 +198,142 @@ Method in class ParameterList
    codegen(ClassFile, CodeAttribute, boolean) - Method in class UnaryNot
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class Operator
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class PlusOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class ModuloOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class GreaterOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class DivideOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class LessEquOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class EqualOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class LogOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class LessOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class NotEqualOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class AddOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class TimesOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class MinusOp
      -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Vector) - +
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class GreaterEquOp
     
    codegen(ClassFile, CodeAttribute, String, boolean) - Method in class UnaryMinus
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Block
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class InstanceOf
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class CastExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class PostDecExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class NotExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class CharLiteral
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class LocalOrFieldVar
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class InstVar
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class PositivExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class PreDecExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class This
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class IntLiteral
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class PostIncExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class WhileStmt
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class PreIncExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class BoolLiteral
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class MethodCall
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Binary
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Assign
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class NewArray
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Null
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class EmptyStmt
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class LocalVarDecl
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class NegativeExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Return
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class IfStmt
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class NewClass
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class StringLiteral
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class Statement
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class UnaryExpr
      -
    codegen(ClassFile, CodeAttribute, Vector) - +
    codegen(ClassFile, CodeAttribute, Menge) - Method in class ArgumentList
     
    codegen(ClassFile, FileOutputStream) - @@ -393,22 +393,22 @@ Method in class Key
    codegen(ClassFile, FileOutputStream) - Method in class MethodInfo
      -
    codegen(ClassFile, Vector) - +
    codegen(ClassFile, Menge) - Method in class ClassBody
      -
    codegen(ClassFile, Vector) - +
    codegen(ClassFile, Menge) - Method in class InstVarDecl
      -
    codegen(ClassFile, Vector) - +
    codegen(ClassFile, Menge) - Method in class Method
      -
    codegen(ClassFile, Vector) - +
    codegen(ClassFile, Menge) - Method in class Constructor
      -
    codegen(ClassFile, Vector) - +
    codegen(ClassFile, Menge) - Method in class FieldDecl
      -
    complete_parahashtable(Vector, UsedId, Hashtable, boolean) - +
    complete_parahashtable(Menge, UsedId, Hashtable, boolean) - Method in class ClassBody
     
    complete_paralist(boolean) - diff --git a/doc/OldStuff/JavaDoc/index-files/index-7.html b/doc/OldStuff/JavaDoc/index-files/index-7.html index cf95173a..71b464e0 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-7.html +++ b/doc/OldStuff/JavaDoc/index-files/index-7.html @@ -96,7 +96,7 @@ Method in class Attribute
    get_attributes_length() - Method in class CodeAttribute
      -
    get_attributes_Vector() - +
    get_attributes_Menge() - Method in class CodeAttribute
     
    get_attributes() - @@ -153,28 +153,28 @@ Method in class ClassDeclId
    get_code_length() - Method in class CodeAttribute
      -
    get_code_Vector() - +
    get_code_Menge() - Method in class CodeAttribute
      -
    get_codegen_ArgumentList(Vector) - +
    get_codegen_ArgumentList(Menge) - Method in class ArgumentList
     
    get_codegen_Array_Type() - Method in class NewArray
      -
    get_codegen_Param_Type(Vector) - +
    get_codegen_Param_Type(Menge) - Method in class Method
      -
    get_codegen_Param_Type(Vector) - +
    get_codegen_Param_Type(Menge) - Method in class Constructor
      -
    get_codegen_ParameterList(Vector) - +
    get_codegen_ParameterList(Menge) - Method in class ParameterList
      -
    get_codegen_Type(String, Vector) - +
    get_codegen_Type(String, Menge) - Static method in class JVMCode
      -
    get_codegen_Type(Vector) - +
    get_codegen_Type(Menge) - Method in class Type
     
    get_codegen_UsedId() - @@ -183,7 +183,7 @@ Method in class InstVar
    get_codegen_UsedId() - Method in class UsedId
      -
    get_Command(Vector) - +
    get_Command(Menge) - Static method in class JVMCode
     
    get_constant_pool_element(byte, String) - @@ -204,7 +204,7 @@ Method in class FieldInfo
    get_descriptor_index() - Method in class MethodInfo
      -
    get_exception_table_Vector() - +
    get_exception_table_Menge() - Method in class CodeAttribute
     
    get_ExceptionList() - @@ -228,7 +228,7 @@ Method in class Binary
    get_Expr2() - Method in class Binary
      -
    get_FieldDeclVector() - +
    get_FieldDeclMenge() - Method in class ClassBody
     
    get_fields() - @@ -255,16 +255,16 @@ Method in class CONSTANT_Long_info
    get_indexOf_Var(String) - Method in class CodeAttribute
      -
    get_info_Vector() - +
    get_info_Menge() - Method in class AttributeInfo
     
    get_info() - Method in class AttributeInfo
      -
    get_key_vector() - +
    get_key_Menge() - Method in class ClassFile
      -
    get_local_Vector() - +
    get_local_Menge() - Method in class CodeAttribute
     
    get_low_bytes() - @@ -315,7 +315,7 @@ Method in class FieldInfo
    get_name_index() - Method in class MethodInfo
      -
    get_Name_Vector() - +
    get_Name_Menge() - Method in class Expr
     
    get_Name() - @@ -477,7 +477,7 @@ Method in class ClassFile
    get_Type_Paralist() - Method in class Method
      -
    get_Type_Vector() - +
    get_Type_Menge() - Method in class Expr
     
    get_Type() - @@ -525,7 +525,7 @@ Method in class Expr
    get_Wert() - Method in class DeclId
      -
    getDeclIdVector() - +
    getDeclIdMenge() - Method in class FieldDecl
     
    getfield - diff --git a/doc/OldStuff/JavaDoc/index-files/index-8.html b/doc/OldStuff/JavaDoc/index-files/index-8.html index 1c90a8e5..df01dce5 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-8.html +++ b/doc/OldStuff/JavaDoc/index-files/index-8.html @@ -96,7 +96,7 @@ Variable in class Block
    HashTabelleKlasse - Variable in class Block
      -
    hasSolvedForm(Vector) - +
    hasSolvedForm(Menge) - Method in class SourceFile
     
    high_bytes - diff --git a/doc/OldStuff/JavaDoc/index-files/index-9.html b/doc/OldStuff/JavaDoc/index-files/index-9.html index 729682ba..bb4d498e 100755 --- a/doc/OldStuff/JavaDoc/index-files/index-9.html +++ b/doc/OldStuff/JavaDoc/index-files/index-9.html @@ -135,10 +135,10 @@ Static variable in class JVMCode
    if_codegen(ClassFile, CodeAttribute, boolean) - Method in class UnaryNot
      -
    if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Vector) - +
    if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Menge) - Method in class LogOp
      -
    if_codegen(ClassFile, CodeAttribute, boolean, Vector) - +
    if_codegen(ClassFile, CodeAttribute, boolean, Menge) - Method in class IfStmt
     
    if_codegen(ClassFile, CodeAttribute, String, boolean) - @@ -258,7 +258,7 @@ Static variable in class JVMCode
    info - Variable in class AttributeInfo
      -
    init_parahashtable(Vector, boolean) - +
    init_parahashtable(Menge, boolean) - Method in class ClassBody
     
    InstanceOf - class InstanceOf.
     
    INSTANCEOF - @@ -315,10 +315,10 @@ Static variable in class JVMCode
    ireturn - Static variable in class JVMCode
      -
    is_declared(Type, Vector) - +
    is_declared(Type, Menge) - Method in class ClassBody
      -
    is_declared(Type, Vector) - +
    is_declared(Type, Menge) - Method in class LocalVarDecl
     
    is_instance - @@ -336,10 +336,10 @@ Static variable in class JVMCode
    ishr - Static variable in class JVMCode
      -
    isInFC(RefType, RefType, Vector) - +
    isInFC(RefType, RefType, Menge) - Method in class SourceFile
      -
    isInVector(Vector) - +
    isInMenge(Menge) - Method in class Pair
     
    isRealSubClass(String, String) - @@ -363,7 +363,7 @@ Static variable in class JVMCode
    istore_3 - Static variable in class JVMCode
      -
    istParameterOK(Vector, Vector) - +
    istParameterOK(Menge, Menge) - Method in class ClassBody
     
    isTV(int) - diff --git a/doc/OldStuff/JavaDoc/serialized-form.html b/doc/OldStuff/JavaDoc/serialized-form.html index c6dc6b8b..3ba2380f 100755 --- a/doc/OldStuff/JavaDoc/serialized-form.html +++ b/doc/OldStuff/JavaDoc/serialized-form.html @@ -127,7 +127,7 @@ java.lang.String message

    exlist

    -java.util.Vector exlist
    +de.dhbwstuttgart.typeinference.Menge exlist
    @@ -155,7 +155,7 @@ java.util.Vector exlist

    exlist

    -java.util.Vector exlist
    +de.dhbwstuttgart.typeinference.Menge exlist
    @@ -183,7 +183,7 @@ java.util.Vector exlist

    scerrors

    -java.util.Vector scerrors
    +de.dhbwstuttgart.typeinference.Menge scerrors
    @@ -211,7 +211,7 @@ java.util.Vector scerrors

    exlist

    -java.util.Vector exlist
    +de.dhbwstuttgart.typeinference.Menge exlist
    @@ -239,7 +239,7 @@ java.util.Vector exlist

    exlist

    -java.util.Vector exlist
    +de.dhbwstuttgart.typeinference.Menge exlist
    diff --git a/doc/OldStuff/Rest/ClassDiagram.svg b/doc/OldStuff/Rest/ClassDiagram.svg index c8635fa6..143b2ea2 100755 --- a/doc/OldStuff/Rest/ClassDiagram.svg +++ b/doc/OldStuff/Rest/ClassDiagram.svg @@ -61,17 +61,17 @@ BhasGg7gcA92DUDXJwzvmAYAV18Ug/+ytKcAAAAASUVORK5CYII=" style="fill:black; stroke: - attributes: Vector + attributes: Menge - class_block: Vector + class_block: Menge - interfaces: Vector + interfaces: Menge - methods: Vector + methods: Menge - key_vector: Vector + key_Menge: Menge - constant_pool: Vector + constant_pool: Menge - fields: Vector + fields: Menge - get_key_vector(): Vector + get_key_Menge(): Menge - set_methods(in Vector): void + set_methods(in Menge): void - set_attributes(in Vector): void + set_attributes(in Menge): void - get_constant_pool(): Vector + get_constant_pool(): Menge - get_attributes(): Vector + get_attributes(): Menge - get_class_block(): Vector + get_class_block(): Menge - set_fields(in Vector): void + set_fields(in Menge): void - get_fields(): Vector + get_fields(): Menge - set_constant_pool(in Vector): void + set_constant_pool(in Menge): void - get_methods(): Vector + get_methods(): Menge - add_method(in String, in String, in ParameterList, in Type, in Block, in short, in Vector): void + add_method(in String, in String, in ParameterList, in Type, in Block, in short, in Menge): void - modifier: Vector + modifier: Menge - get_modifiers(): Vector + get_modifiers(): Menge - KlassenVektor: Vector + KlassenVektor: Menge - isInFC(in RefType, in RefType, in Vector): Pair + isInFC(in RefType, in RefType, in Menge): Pair - hasSolvedForm(in Vector): boolean + hasSolvedForm(in Menge): boolean - adapt(in String, in Type, in Vector, in Vector): Pair + adapt(in String, in Type, in Menge, in Menge): Pair - unify(in Vector, in Vector): Vector + unify(in Menge, in Menge): Menge - makeFC(): Vector + makeFC(): Menge - printMenge(in String, in Vector, in int): void + printMenge(in String, in Menge, in int): void - scerrors: Vector + scerrors: Menge - exlist: Vector + exlist: Menge - addException(in Vector): void + addException(in Menge): void - attributes: Vector + attributes: Menge - get_attributes(): Vector + get_attributes(): Menge - set_attributes(in Vector): void + set_attributes(in Menge): void - formalparameter: Vector + formalparameter: Menge - sc_get_Formalparalist(): Vector + sc_get_Formalparalist(): Menge - get_codegen_ParameterList(in Vector): String + get_codegen_ParameterList(in Menge): String - fielddecl: Vector + fielddecl: Menge - is_declared(in Type, in Vector): boolean + is_declared(in Type, in Menge): boolean - get_FieldDeclVector(): Vector + get_FieldDeclMenge(): Menge - sc_check(in Vector, in boolean): void + sc_check(in Menge, in boolean): void - complete_parahashtable(in Vector, in UsedId, in Hashtable, in boolean): Hashtable + complete_parahashtable(in Menge, in UsedId, in Hashtable, in boolean): Hashtable - sc_init_hashtable(in Vector, in String, in String, in boolean): void + sc_init_hashtable(in Menge, in String, in String, in boolean): void - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - sc_init_hashtable_for_extended_classes(in Vector, in String, in Hashtable, in Vector, in Hashtable, in Hashtable, in boolean): void + sc_init_hashtable_for_extended_classes(in Menge, in String, in Hashtable, in Menge, in Hashtable, in Hashtable, in boolean): void - init_parahashtable(in Vector, in boolean): Hashtable + init_parahashtable(in Menge, in boolean): Hashtable - istParameterOK(in Vector, in Vector): void + istParameterOK(in Menge, in Menge): void - print_rec(in Vector): void + print_rec(in Menge): void - print_rec(in String, in Vector): void + print_rec(in String, in Menge): void - isInVector(in Vector): boolean + isInMenge(in Menge): boolean - exlist: Vector + exlist: Menge - get_exlist(): Vector + get_exlist(): Menge - reftype: Vector + reftype: Menge - paratyp: Vector + paratyp: Menge - set_Paratyp(in Vector): void + set_Paratyp(in Menge): void - get_Paratyp(): Vector + get_Paratyp(): Menge - codegen_InstVarDecl(in ClassFile, in Type, in Vector): void + codegen_InstVarDecl(in ClassFile, in Type, in Menge): void - codegen_LocalVarDecl(in ClassFile, in CodeAttribute, in Type, in Vector): void + codegen_LocalVarDecl(in ClassFile, in CodeAttribute, in Type, in Menge): void - name: Vector + name: Menge - vParaOrg: Vector + vParaOrg: Menge - typen: Vector + typen: Menge - paralist: Vector + paralist: Menge - get_ParaList(): Vector + get_ParaList(): Menge - get_Typen(): Vector + get_Typen(): Menge - set_Typen(in Vector): void + set_Typen(in Menge): void - get_Name(): Vector + get_Name(): Menge - set_ParaList(in Vector): void + set_ParaList(in Menge): void - exlist: Vector + exlist: Menge - get_exlist(): Vector + get_exlist(): Menge - attributes: Vector + attributes: Menge - set_attributes(in Vector): void + set_attributes(in Menge): void - get_attributes(): Vector + get_attributes(): Menge - vParaOrg: Vector + vParaOrg: Menge - paralist: Vector + paralist: Menge - get_ParaList(): Vector + get_ParaList(): Menge - complete_paralist(in boolean): Vector + complete_paralist(in boolean): Menge - set_ParaList(in Vector): void + set_ParaList(in Menge): void - sc_check_for_extended_classes(in Vector, in Hashtable, in boolean): void + sc_check_for_extended_classes(in Menge, in Hashtable, in boolean): void - para_check(in Vector, in boolean): void + para_check(in Menge, in boolean): void - sc_check(in Vector, in boolean): void + sc_check(in Menge, in boolean): void - print_rec(in String, in Vector): void + print_rec(in String, in Menge): void - print_rec(in Vector): void + print_rec(in Menge): void - expr: Vector + expr: Menge - get_codegen_ArgumentList(in Vector): String + get_codegen_ArgumentList(in Menge): String - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - exlist: Vector + exlist: Menge - get_exlist(): Vector + get_exlist(): Menge - set_exlist(in Vector): void + set_exlist(in Menge): void - get_codegen_Type(in String, in Vector): String + get_codegen_Type(in String, in Menge): String - get_Command(in Vector): void + get_Command(in Menge): void - paralist: Vector + paralist: Menge - get_ParaList(): Vector + get_ParaList(): Menge - wandleTV2RefType(in Vector, in Vector): void + wandleTV2RefType(in Menge, in Menge): void - parameter: Vector + parameter: Menge - set_ParaList(in Vector): void + set_ParaList(in Menge): void - RefType(in String, in Vector): void + RefType(in String, in Menge): void - get_ParaList(): Vector + get_ParaList(): Menge - get_codegen_Type(in Vector): String + get_codegen_Type(in Menge): String - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - neg_codegen(in ClassFile, in CodeAttribute, in Vector): void + neg_codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - not_codegen(in ClassFile, in CodeAttribute, in Vector): void + not_codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - exprtypes: Vector + exprtypes: Menge - finde_method: Vector + finde_method: Menge - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_init_extended_fcts(in Vector, in Vector, in String, in String, in boolean): void + sc_init_extended_fcts(in Menge, in Menge, in String, in String, in boolean): void - sc_check_method_kleiner(in Vector, in String, in String, in boolean): boolean + sc_check_method_kleiner(in Menge, in String, in String, in boolean): boolean - set_Expr_Vector(in Vector): void + set_Expr_Menge(in Menge): void - sc_check_uebergabe(in Vector, in Vector, in boolean, in int, in Hashtable, in Hashtable): void + sc_check_uebergabe(in Menge, in Menge, in boolean, in int, in Hashtable, in Hashtable): void - sc_check_get_Method(in Vector, in String, in boolean, in Hashtable, in Hashtable): void + sc_check_get_Method(in Menge, in String, in boolean, in Hashtable, in Hashtable): void - statements: Vector + statements: Menge - set_Statement_Vector(in Vector): void + set_Statement_Menge(in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - get_Statement(): Vector + get_Statement(): Menge - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - declid: Vector + declid: Menge - paralist: Vector + paralist: Menge - is_declared(in Type, in Vector): void + is_declared(in Type, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - check_anz(in Type, in Vector, in Vector): void + check_anz(in Type, in Menge, in Menge): void - set_ParaList(in Vector): void + set_ParaList(in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - get_Name_Vector(): Vector + get_Name_Menge(): Menge - get_Type_Vector(): Vector + get_Type_Menge(): Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - print_rec(in String, in Vector): void + print_rec(in String, in Menge): void - print_rec(in Vector): void + print_rec(in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - not_codegen(in ClassFile, in CodeAttribute, in Vector): void + not_codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - if_codegen(in ClassFile, in CodeAttribute, in boolean, in Vector): void + if_codegen(in ClassFile, in CodeAttribute, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - loop_codegen(in ClassFile, in CodeAttribute, in int, in boolean, in Vector): void + loop_codegen(in ClassFile, in CodeAttribute, in int, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - neg_codegen(in ClassFile, in CodeAttribute, in Vector): void + neg_codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - expr: Vector + expr: Menge - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - if_codegen(in ClassFile, in CodeAttribute, in boolean, in Expr, in Statement, in Statement, in Vector): void + if_codegen(in ClassFile, in CodeAttribute, in boolean, in Expr, in Statement, in Statement, in Menge): void - loop_codegen(in ClassFile, in CodeAttribute, in Expr, in int, in boolean, in Vector): void + loop_codegen(in ClassFile, in CodeAttribute, in Expr, in int, in boolean, in Menge): void - replace_index(in CodeAttribute, in Vector, in int, in int): void + replace_index(in CodeAttribute, in Menge, in int, in int): void - build(in ClassFile, in CodeAttribute, in Expr, in Vector, in boolean, in boolean, in boolean, in Vector): void + build(in ClassFile, in CodeAttribute, in Expr, in Menge, in boolean, in boolean, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - set_info(in Vector): void + set_info(in Menge): void - get_info_Vector(): Vector + get_info_Menge(): Menge - local_name_vector: Vector + local_name_Menge: Menge - code_vector: Vector + code_Menge: Menge - attributes: Vector + attributes: Menge - exception_tables: Vector + exception_tables: Menge - local_type_vector: Vector + local_type_Menge: Menge - get_attributes_Vector(): Vector + get_attributes_Menge(): Menge - get_code_Vector(): Vector + get_code_Menge(): Menge - set_exception_table_Vector(in Vector): void + set_exception_table_Menge(in Menge): void - get_local_Vector(): Vector + get_local_Menge(): Menge - get_exception_table_Vector(): Vector + get_exception_table_Menge(): Menge - set_attributes_Vector(in Vector): void + set_attributes_Menge(in Menge): void - get_codegen_Param_Type(in Vector): String + get_codegen_Param_Type(in Menge): String - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - types_in_parameterlist: Vector + types_in_parameterlist: Menge - get_Type_Paralist(): Vector + get_Type_Paralist(): Menge - call_sc_check(in Vector, in Hashtable, in boolean, in Hashtable): void + call_sc_check(in Menge, in Hashtable, in boolean, in Hashtable): void - get_codegen_Param_Type(in Vector): String + get_codegen_Param_Type(in Menge): String - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - declid: Vector + declid: Menge - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - getDeclIdVector(): Vector + getDeclIdMenge(): Menge - get_Name(): Vector + get_Name(): Menge - setDeclIdVector(in Vector): void + setDeclIdMenge(in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - if_codegen(in ClassFile, in CodeAttribute, in boolean, in Expr, in Statement, in Statement, in Vector): void + if_codegen(in ClassFile, in CodeAttribute, in boolean, in Expr, in Statement, in Statement, in Menge): void - loop_codegen(in ClassFile, in CodeAttribute, in Expr, in int, in boolean, in Vector): void + loop_codegen(in ClassFile, in CodeAttribute, in Expr, in int, in boolean, in Menge): void - replace_index(in CodeAttribute, in Vector, in int, in int): void + replace_index(in CodeAttribute, in Menge, in int, in int): void - build(in ClassFile, in CodeAttribute, in Expr, in Vector, in boolean, in boolean, in boolean, in Vector): void + build(in ClassFile, in CodeAttribute, in Expr, in Menge, in boolean, in boolean, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Expr, in boolean, in Menge): void - declid: Vector + declid: Menge - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - getDeclIdVector(): Vector + getDeclIdMenge(): Menge - get_Name(): Vector + get_Name(): Menge - setDeclIdVector(in Vector): void + setDeclIdMenge(in Menge): void - types_in_parameterlist: Vector + types_in_parameterlist: Menge - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - get_Type_Paralist(): Vector + get_Type_Paralist(): Menge - call_sc_check(in Vector, in Hashtable, in boolean, in Hashtable): void + call_sc_check(in Menge, in Hashtable, in boolean, in Hashtable): void - get_codegen_Param_Type(in Vector): String + get_codegen_Param_Type(in Menge): String - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - get_codegen_Param_Type(in Vector): String + get_codegen_Param_Type(in Menge): String - codegen(in ClassFile, in Vector): void + codegen(in ClassFile, in Menge): void - get_info_Vector(): Vector + get_info_Menge(): Menge - set_info(in Vector): void + set_info(in Menge): void - local_name_vector: Vector + local_name_Menge: Menge - exception_tables: Vector + exception_tables: Menge - attributes: Vector + attributes: Menge - local_type_vector: Vector + local_type_Menge: Menge - code_vector: Vector + code_Menge: Menge - set_attributes_Vector(in Vector): void + set_attributes_Menge(in Menge): void - get_code_Vector(): Vector + get_code_Menge(): Menge - get_attributes_Vector(): Vector + get_attributes_Menge(): Menge - set_exception_table_Vector(in Vector): void + set_exception_table_Menge(in Menge): void - get_local_Vector(): Vector + get_local_Menge(): Menge - get_exception_table_Vector(): Vector + get_exception_table_Menge(): Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - parameter: Vector + parameter: Menge - set_ParaList(in Vector): void + set_ParaList(in Menge): void - get_ParaList(): Vector + get_ParaList(): Menge - RefType(in String, in Vector): void + RefType(in String, in Menge): void - get_codegen_Type(in Vector): String + get_codegen_Type(in Menge): String - wandleTV2RefType(in Vector, in Vector): void + wandleTV2RefType(in Menge, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - print_rec(in String, in Vector): void + print_rec(in String, in Menge): void - print_rec(in Vector): void + print_rec(in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - loop_codegen(in ClassFile, in CodeAttribute, in int, in boolean, in Vector): void + loop_codegen(in ClassFile, in CodeAttribute, in int, in boolean, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - exprtypes: Vector + exprtypes: Menge - finde_method: Vector + finde_method: Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - set_Expr_Vector(in Vector): void + set_Expr_Menge(in Menge): void - sc_check_get_Method(in Vector, in String, in boolean, in Hashtable, in Hashtable): void + sc_check_get_Method(in Menge, in String, in boolean, in Hashtable, in Hashtable): void - sc_check_uebergabe(in Vector, in Vector, in boolean, in int, in Hashtable, in Hashtable): void + sc_check_uebergabe(in Menge, in Menge, in boolean, in int, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_init_extended_fcts(in Vector, in Vector, in String, in String, in boolean): void + sc_init_extended_fcts(in Menge, in Menge, in String, in String, in boolean): void - sc_check_method_kleiner(in Vector, in String, in String, in boolean): boolean + sc_check_method_kleiner(in Menge, in String, in String, in boolean): boolean - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - if_codegen(in ClassFile, in CodeAttribute, in boolean, in Vector): void + if_codegen(in ClassFile, in CodeAttribute, in boolean, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - not_codegen(in ClassFile, in CodeAttribute, in Vector): void + not_codegen(in ClassFile, in CodeAttribute, in Menge): void - neg_codegen(in ClassFile, in CodeAttribute, in Vector): void + neg_codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - neg_codegen(in ClassFile, in CodeAttribute, in Vector): void + neg_codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - get_Name_Vector(): Vector + get_Name_Menge(): Menge - get_Type_Vector(): Vector + get_Type_Menge(): Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - expr: Vector + expr: Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - not_codegen(in ClassFile, in CodeAttribute, in Vector): void + not_codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - statements: Vector + statements: Menge - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - get_Statement(): Vector + get_Statement(): Menge - set_Statement_Vector(in Vector): void + set_Statement_Menge(in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - declid: Vector + declid: Menge - paralist: Vector + paralist: Menge - sc_check(in Vector, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void + sc_check(in Menge, in Hashtable, in Hashtable, in boolean, in Hashtable, in Hashtable): void - is_declared(in Type, in Vector): void + is_declared(in Type, in Menge): void - codegen(in ClassFile, in CodeAttribute, in Vector): void + codegen(in ClassFile, in CodeAttribute, in Menge): void - check_anz(in Type, in Vector, in Vector): void + check_anz(in Type, in Menge, in Menge): void - set_ParaList(in Vector): void + set_ParaList(in Menge): void > { +class Matrix extends Menge> { mul(m){ ret = new Matrix(); i = 0; while(i (); + v2 = new Menge(); j = 0; while(j < v1.size()) { erg = 0; diff --git a/examples/bajo1/Test.jav b/examples/bajo1/Test.jav index 71fbe961..6109d781 100755 --- a/examples/bajo1/Test.jav +++ b/examples/bajo1/Test.jav @@ -1,3 +1,3 @@ class Bla extends Blub{ - Vector v = null; + Menge v = null; } \ No newline at end of file diff --git a/examples/bajo1_usecases/Matrix.jav b/examples/bajo1_usecases/Matrix.jav index 87f28a6f..cbcc59ea 100755 --- a/examples/bajo1_usecases/Matrix.jav +++ b/examples/bajo1_usecases/Matrix.jav @@ -1,9 +1,9 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { mul(m){ - Vector> ret; + Menge> ret; ret = new Matrix(); i; i = 0; @@ -11,7 +11,7 @@ class Matrix extends Vector> { v1; v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); j; j = 0; while(j < v1.size()) { diff --git a/examples/bajo1_usecases/Matrix1.jav b/examples/bajo1_usecases/Matrix1.jav index 60262844..673ab47d 100755 --- a/examples/bajo1_usecases/Matrix1.jav +++ b/examples/bajo1_usecases/Matrix1.jav @@ -1,7 +1,7 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { mul(m){ - Vector> ret; + Menge> ret; ret = new Matrix(); i; i = 0; @@ -9,7 +9,7 @@ class Matrix extends Vector> { v1; v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); j; j = 0; ret.addElement(v2); diff --git a/examples/bajo1_usecases/Matrix2.jav b/examples/bajo1_usecases/Matrix2.jav index ec5f6131..b98a82cf 100755 --- a/examples/bajo1_usecases/Matrix2.jav +++ b/examples/bajo1_usecases/Matrix2.jav @@ -1,4 +1,4 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { mul(m){ k; diff --git a/examples/feda/feda.jav b/examples/feda/feda.jav index 8afc79fd..27fd449b 100755 --- a/examples/feda/feda.jav +++ b/examples/feda/feda.jav @@ -1,6 +1,6 @@ package none; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Stack; interface GeomObjektTrans { diff --git a/examples/hoti/GenericsTest.jav b/examples/hoti/GenericsTest.jav index b015c17a..1f2bc455 100755 --- a/examples/hoti/GenericsTest.jav +++ b/examples/hoti/GenericsTest.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class Test{ diff --git a/examples/hoti/Import.jav b/examples/hoti/Import.jav index d79b1871..2b5f738d 100755 --- a/examples/hoti/Import.jav +++ b/examples/hoti/Import.jav @@ -1,10 +1,10 @@ package none; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Stack; public class Test{ - test(Vector x){ + test(Menge x){ x.addElement(""); } } \ No newline at end of file diff --git a/examples/hoti/Matrix.jav b/examples/hoti/Matrix.jav index 87f28a6f..cbcc59ea 100755 --- a/examples/hoti/Matrix.jav +++ b/examples/hoti/Matrix.jav @@ -1,9 +1,9 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { mul(m){ - Vector> ret; + Menge> ret; ret = new Matrix(); i; i = 0; @@ -11,7 +11,7 @@ class Matrix extends Vector> { v1; v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); j; j = 0; while(j < v1.size()) { diff --git a/examples/hoti/Simple2.jav b/examples/hoti/Simple2.jav index ae86be6c..e942b0ff 100755 --- a/examples/hoti/Simple2.jav +++ b/examples/hoti/Simple2.jav @@ -1,9 +1,9 @@ import java.util.Stack; class Simple2{ - Vector test(Boolean first){ + Menge test(Boolean first){ x; - x=new Vector(); + x=new Menge(); x=new Stack(); return(x); } diff --git a/examples/hoti/Test3.jav b/examples/hoti/Test3.jav index eb04b078..aab68cd1 100755 --- a/examples/hoti/Test3.jav +++ b/examples/hoti/Test3.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class Test3 { diff --git a/examples/hoti/VectorStack.jav b/examples/hoti/VectorStack.jav index f4f8e80b..013722d8 100755 --- a/examples/hoti/VectorStack.jav +++ b/examples/hoti/VectorStack.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -public class VectorStack { +public class MengeStack { public test(x,y){ x.addElement("TEST"); diff --git a/examples/hoti/VectorTest.jav b/examples/hoti/VectorTest.jav index 9ce42f9b..ea534326 100755 --- a/examples/hoti/VectorTest.jav +++ b/examples/hoti/VectorTest.jav @@ -1,7 +1,7 @@ import java.util.Stack; import java.util.Hashtable; -public class VectorTest{ +public class MengeTest{ public test(x){ b; diff --git a/examples/lambda/general.jav b/examples/lambda/general.jav index 754ed70c..751ba06d 100755 --- a/examples/lambda/general.jav +++ b/examples/lambda/general.jav @@ -2,7 +2,7 @@ import java.util.concurrent.Callable; -public class general extends Vector> { +public class general extends Menge> { diff --git a/examples/lambda/test1.jav b/examples/lambda/test1.jav index 0db0e868..bb0ff15d 100755 --- a/examples/lambda/test1.jav +++ b/examples/lambda/test1.jav @@ -1,4 +1,4 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { method(){ op; op = "test"; diff --git a/examples/lambda/test2.jav b/examples/lambda/test2.jav index cba63ff1..1f66bb0d 100755 --- a/examples/lambda/test2.jav +++ b/examples/lambda/test2.jav @@ -1,3 +1,3 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { op = (m) -> (f) -> f.apply(this, m); } \ No newline at end of file diff --git a/examples/luar/WCParseTest.jav b/examples/luar/WCParseTest.jav index 50a5de5b..5409750a 100755 --- a/examples/luar/WCParseTest.jav +++ b/examples/luar/WCParseTest.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class WCTest{ void test() { - Vector> v1 = new Vector>(); + Menge> v1 = new Menge>(); } } diff --git a/examples/luar/WCTest1.jav b/examples/luar/WCTest1.jav index e3f1f441..c89aed4b 100755 --- a/examples/luar/WCTest1.jav +++ b/examples/luar/WCTest1.jav @@ -1,8 +1,8 @@ -Vector Vector> +Menge Menge> -Vector Vector> +Menge Menge> class A { } class B extends A { } @@ -14,10 +14,10 @@ class Integer extends Number {} class AbstractList extends List {} class List {} -class Vector extends List {} -class Stack extends Vector {} -class Test extends Vector {} +class Menge extends List {} +class Stack extends Menge {} +class Test extends Menge {} /*D, ? extends A> Test,A>*/ /*D, D> D, ? super E>*/ -/*Stack Vector AbstractList List*/ \ No newline at end of file +/*Stack Menge AbstractList List*/ \ No newline at end of file diff --git a/examples/luar/WCTest10.jav b/examples/luar/WCTest10.jav index d801732e..c02e3e8f 100755 --- a/examples/luar/WCTest10.jav +++ b/examples/luar/WCTest10.jav @@ -1,8 +1,8 @@ -/* Vector> Vector> */ +/* Menge> Menge> */ /* FUNKTIONIERT!! */ -Big2,d,e,f> BigBig2 +Big2,d,e,f> BigBig2 /* Funktioniert auch!!! */ @@ -12,6 +12,6 @@ class BigBig {} class Big2 extends BigBig2 {} class BigBig2 {} -class Vector {} +class Menge {} class Integer extends Number {} class Number {} \ No newline at end of file diff --git a/examples/luar/WCTest11.jav b/examples/luar/WCTest11.jav index cb4c9082..5fe2ab93 100755 --- a/examples/luar/WCTest11.jav +++ b/examples/luar/WCTest11.jav @@ -1,47 +1,47 @@ -Vector Vector -/* Vector Vector> */ +Menge Menge +/* Menge Menge> */ /* Erg.: -[[(TPH a = Vector< Integer >), (TPH b = Matrix)], - [(TPH a = Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = ? extends Matrix)], +[[(TPH a = Menge< Integer >), (TPH b = Matrix)], + [(TPH a = Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = ? extends Matrix)], [(TPH a = ? extends Object), (TPH b = Matrix)], [(TPH a = ? extends Object), (TPH b = ? extends Matrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = Matrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = Vector< Integer >), (TPH b = ExtMatrix)], - [(TPH a = Vector< Integer >), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = ExtMatrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = ExtMatrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = ExtMatrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? super Menge< Integer >), (TPH b = Matrix)], + [(TPH a = ? super Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = Menge< Integer >), (TPH b = ExtMatrix)], + [(TPH a = Menge< Integer >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = ExtMatrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = ExtMatrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = ? extends ExtMatrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = ExtMatrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = ? extends ExtMatrix)], [(TPH a = ? extends Object), (TPH b = ExtMatrix)], [(TPH a = ? extends Object), (TPH b = ? extends ExtMatrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = ExtMatrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = ? extends ExtMatrix)], - [(TPH b = Vector< TPH a >)], - [(TPH b = ? extends Vector< TPH a >)]] + [(TPH a = ? super Menge< Integer >), (TPH b = ExtMatrix)], + [(TPH a = ? super Menge< Integer >), (TPH b = ? extends ExtMatrix)], + [(TPH b = Menge< TPH a >)], + [(TPH b = ? extends Menge< TPH a >)]] */ class Number {} class Integer extends Number {} -class Vector { } +class Menge { } -class Matrix extends Vector> { } +class Matrix extends Menge> { } class ExtMatrix extends Matrix { } \ No newline at end of file diff --git a/examples/luar/WCTest2.jav b/examples/luar/WCTest2.jav index 4aae3f01..b881e55b 100755 --- a/examples/luar/WCTest2.jav +++ b/examples/luar/WCTest2.jav @@ -1,4 +1,4 @@ -Stack Vector +Stack Menge AbstractList List /* funktioniert */ @@ -8,5 +8,5 @@ class Integer extends Number {} class AbstractList extends List {} class List {} -class Vector extends List {} -class Stack extends Vector {} \ No newline at end of file +class Menge extends List {} +class Stack extends Menge {} \ No newline at end of file diff --git a/examples/luar/WCTest4.jav b/examples/luar/WCTest4.jav index a9eca71e..5a6876de 100755 --- a/examples/luar/WCTest4.jav +++ b/examples/luar/WCTest4.jav @@ -1,4 +1,4 @@ -Matrix Vector +Matrix Menge /* Fehler behoben. Korrekt? sieht gut aus PL 07-07-09 */ @@ -6,6 +6,6 @@ Matrix Vector class Number {} class Integer extends Number {} -class Vector { } +class Menge { } -class Matrix extends Vector> { } \ No newline at end of file +class Matrix extends Menge> { } \ No newline at end of file diff --git a/examples/luar/WCTest5.jav b/examples/luar/WCTest5.jav index a6d1a73d..668489c0 100755 --- a/examples/luar/WCTest5.jav +++ b/examples/luar/WCTest5.jav @@ -1,23 +1,23 @@ -/* Vector Vector> */ +/* Menge Menge> */ /* Erg: -[[(TPH a = Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = ? extends Matrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = ? extends Matrix)], +[[(TPH a = Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = ? extends Matrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = ? extends Matrix)], [(TPH a = ? extends Object), (TPH b = ? extends Matrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = ? extends Matrix)], - [(TPH a = Vector< Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Integer >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Number >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? extends Object >), (TPH b = Matrix)], - [(TPH a = ? extends Vector< ? super Integer >), (TPH b = Matrix)], + [(TPH a = ? super Menge< Integer >), (TPH b = ? extends Matrix)], + [(TPH a = Menge< Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Integer >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Number >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? extends Object >), (TPH b = Matrix)], + [(TPH a = ? extends Menge< ? super Integer >), (TPH b = Matrix)], [(TPH a = ? extends Object), (TPH b = Matrix)], - [(TPH a = ? super Vector< Integer >), (TPH b = Matrix)], - [(TPH b = ? extends Vector< TPH a >)], - [(TPH b = Vector< TPH a >)]] + [(TPH a = ? super Menge< Integer >), (TPH b = Matrix)], + [(TPH b = ? extends Menge< TPH a >)], + [(TPH b = Menge< TPH a >)]] */ /* FUNKTIONIERT !!! */ @@ -35,17 +35,17 @@ /* Fehler behoben. Korrekt? */ - /* Vector> Vector */ + /* Menge> Menge */ /* FUNKTIONIERT !!! nochmals ueberpruefen 07-07-29 */ -/* Vector Vector> */ +/* Menge Menge> */ /* Test der 3. Menge. FUNKTIONIERT !!! nochmals ueberpruefen 07-07-29 */ -/* Vector Vector */ +/* Menge Menge */ /* Test der 4. Menge. FUNKTIONIERT !!! nochmals ueberpruefen 07-07-29 */ -Vector Vector>> +Menge Menge>> /* funktioniert. Ergebnis: [[(TPH b = Integer), (TPH a = ? extends Matrix)], [(TPH b = Integer), (TPH a = Matrix)], @@ -57,15 +57,15 @@ Vector Vector>> [(TPH b = ? extends Object), (TPH a = Matrix)], [(TPH b = ? super Integer), (TPH a = ? extends Matrix)], [(TPH b = ? super Integer), (TPH a = Matrix)], - [(TPH a = ? extends Vector< ? extends Vector< TPH b > >)], - [(TPH a = Vector< ? extends Vector< TPH b > >)], - [(TPH a = ? extends Vector< Vector< TPH b > >)], - [(TPH a = Vector< Vector< TPH b > >)]] */ + [(TPH a = ? extends Menge< ? extends Menge< TPH b > >)], + [(TPH a = Menge< ? extends Menge< TPH b > >)], + [(TPH a = ? extends Menge< Menge< TPH b > >)], + [(TPH a = Menge< Menge< TPH b > >)]] */ class Number {} class Integer extends Number {} -class Vector { } +class Menge { } -class Matrix extends Vector> { } \ No newline at end of file +class Matrix extends Menge> { } \ No newline at end of file diff --git a/examples/luar/WCTest6.jav b/examples/luar/WCTest6.jav index 30765470..9f941945 100755 --- a/examples/luar/WCTest6.jav +++ b/examples/luar/WCTest6.jav @@ -1,6 +1,6 @@ -Vector Vector> +Menge Menge> -/* Nach Sub_unify +/* Nach Sub_unify FUNKTIONIERT !!! */ /* muss noch nac der 2. Menge angepasst werden PL 07-08-03 @@ -8,6 +8,6 @@ Vector Vector> class Number {} class Integer extends Number {} -class Vector { } +class Menge { } -class Matrix extends Vector> { } \ No newline at end of file +class Matrix extends Menge> { } \ No newline at end of file diff --git a/examples/luar/WCTest7.jav b/examples/luar/WCTest7.jav index c14975d5..6b90116b 100755 --- a/examples/luar/WCTest7.jav +++ b/examples/luar/WCTest7.jav @@ -1,42 +1,42 @@ -/* VecPair Vector> */ +/* VecPair Menge> */ /* Funktioniert !!! */ -/* VecPair Vector> */ +/* VecPair Menge> */ /* Funktioniert !!! */ -/* VecPair Vector> */ +/* VecPair Menge> */ /* Funktioniert !!! */ -/* Vector> Vector */ +/* Menge> Menge */ /* Funktioniert !!! nochmals ueberpruefen 07-07-29 */ -/* VecPair Vector> */ +/* VecPair Menge> */ /* Funktioniert kein Unifier!!! */ -/* VecPair Vector> */ +/* VecPair Menge> */ /* Funktioniert!!! */ -/* Vector Vector>> */ +/* Menge Menge>> */ /* funktioniert */ /* Erg.: [[(TPH a = TPH A), (TPH c = Integer), (TPH b = ? extends VecPair< TPH A, TPH B >)], [(TPH a = TPH A), (TPH c = Integer), (TPH b = VecPair< TPH A, TPH B >)], - [(TPH b = ? extends Vector< Pair< TPH a, TPH c > >)], - [(TPH b = Vector< Pair< TPH a, TPH c > >)]] + [(TPH b = ? extends Menge< Pair< TPH a, TPH c > >)], + [(TPH b = Menge< Pair< TPH a, TPH c > >)]] */ -/* Vector Vector>> */ +/* Menge Menge>> */ /* Erg: [[(TPH c = Integer), (TPH b = VecPair< Number, TPH B >)], [(TPH c = Integer), (TPH b = ? extends VecPair< Number, TPH B >)], - [(TPH b = Vector< Pair< Number, TPH c > >)], - [(TPH b = ? extends Vector< Pair< Number, TPH c > >)]] + [(TPH b = Menge< Pair< Number, TPH c > >)], + [(TPH b = ? extends Menge< Pair< Number, TPH c > >)]] */ -/* Vector Vector> */ +/* Menge Menge> */ /* Erg.: [[(TPH a = Pair< TPH A, Integer >), (TPH b = ? extends VecPair< TPH A, TPH B >)], [(TPH a = Pair< TPH A, Integer >), (TPH b = VecPair< TPH A, TPH B >)], @@ -54,12 +54,12 @@ [(TPH a = ? extends Object), (TPH b = VecPair< TPH A, TPH H >)], [(TPH a = ? super Pair< TPH A, Integer >), (TPH b = ? extends VecPair< TPH A, TPH I >)], [(TPH a = ? super Pair< TPH A, Integer >), (TPH b = VecPair< TPH A, TPH I >)], - [(TPH b = ? extends Vector< TPH a >)], - [(TPH b = Vector< TPH a >)]] + [(TPH b = ? extends Menge< TPH a >)], + [(TPH b = Menge< TPH a >)]] */ -/* Vector> Vector> */ +/* Menge> Menge> */ /* funktioniert */ /* Erg. [[(TPH a = Pair< Number, Integer >)], @@ -92,7 +92,7 @@ [(TPH a = ? super Pair< Number, Integer >)]] */ -/* Vector Vector>> */ +/* Menge Menge>> */ /* Erg. stimmt [[[(TPH c = Integer), (TPH b = ? extends VecPair< Number, TPH B >)], [(TPH c = Integer), (TPH b = VecPair< Number, TPH B >)], @@ -104,17 +104,17 @@ [(TPH c = ? extends Object), (TPH b = VecPair< Number, TPH E >)], [(TPH c = ? super Integer), (TPH b = ? extends VecPair< Number, TPH F >)], [(TPH c = ? super Integer), (TPH b = VecPair< Number, TPH F >)], - [(TPH b = ? extends Vector< ? extends Pair< Number, TPH c > >)], - [(TPH b = Vector< ? extends Pair< Number, TPH c > >)], - [(TPH b = ? extends Vector< Pair< Number, TPH c > >)], - [(TPH b = Vector< Pair< Number, TPH c > >)]] + [(TPH b = ? extends Menge< ? extends Pair< Number, TPH c > >)], + [(TPH b = Menge< ? extends Pair< Number, TPH c > >)], + [(TPH b = ? extends Menge< Pair< Number, TPH c > >)], + [(TPH b = Menge< Pair< Number, TPH c > >)]] */ class Number {} class Integer extends Number {} -class Vector { } +class Menge { } class Pair { } -class VecPair extends Vector> { } \ No newline at end of file +class VecPair extends Menge> { } \ No newline at end of file diff --git a/examples/luar/WCTest8.jav b/examples/luar/WCTest8.jav index bb186800..9bbaaf23 100755 --- a/examples/luar/WCTest8.jav +++ b/examples/luar/WCTest8.jav @@ -1,14 +1,14 @@ -/* Subtype Vector> OK */ +/* Subtype Menge> OK */ -/* Subtype Vector> */ +/* Subtype Menge> */ /* Korrekt */ -/* Vector> Vector>> */ +/* Menge> Menge>> */ /* Super, FUNKTIONIERT!!! */ -/* Vector> Vector> */ +/* Menge> Menge> */ /* redureSup Test: FUNKTIONIERT!!! */ @@ -17,9 +17,9 @@ class Integer extends Number {} class List { } -class Vector extends List { } +class Menge extends List { } class Pair { } -class Subtype extends Vector> { } \ No newline at end of file +class Subtype extends Menge> { } \ No newline at end of file diff --git a/examples/luar/WCTest9.jav b/examples/luar/WCTest9.jav index 939a129e..4a393aa2 100755 --- a/examples/luar/WCTest9.jav +++ b/examples/luar/WCTest9.jav @@ -7,7 +7,7 @@ Subtype Pair class Number {} class Integer extends Number {} -class Vector { } +class Menge { } class Pair { } diff --git a/examples/mema_usecases/UsecaseOne.jav b/examples/mema_usecases/UsecaseOne.jav index 26ab4e50..c5fc1c81 100755 --- a/examples/mema_usecases/UsecaseOne.jav +++ b/examples/mema_usecases/UsecaseOne.jav @@ -1,4 +1,4 @@ -class UsecaseOne extends Vector{ +class UsecaseOne extends Menge{ foo(bar){ SchorschKlasse x; return 3; diff --git a/examples/pl_usecases/OL2.jav b/examples/pl_usecases/OL2.jav index 8a2c485b..b42eb1dc 100755 --- a/examples/pl_usecases/OL2.jav +++ b/examples/pl_usecases/OL2.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class OL2 { @@ -13,7 +13,7 @@ class Main { ol; ol = new OL2(); y; - /* y = new Vector(); */ + /* y = new Menge(); */ y.addElement(ol.m(x)); } diff --git a/examples/pl_usecases/Probleme b/examples/pl_usecases/Probleme index 4a69c5d0..f4ebc5a2 100755 --- a/examples/pl_usecases/Probleme +++ b/examples/pl_usecases/Probleme @@ -4,7 +4,7 @@ - Parameter gehen nicht Matrix Use-Rase - gleiche TypePlaceHolder in unterschiedlichen Intersections werden durch unterschiedliche GentypeVars ersetzt (BoundedType2.jav) - Mail von Juergen, welche Usecases machen ihm Probleme? -- UsedId bei bei "extends" in RefType bzw. bei "implements" in Vector umwandeln. (siehe mail an Timo) +- UsedId bei bei "extends" in RefType bzw. bei "implements" in Menge umwandeln. (siehe mail an Timo) - Roundtrip fuer den Innovator einbauen erledigt 06-06 - Schnittstelle mit syntaktischen Angaben fuer den Konstantenpool wird bei unbeboxten Typen nicht richtig erzeugt - Boxing und Unboxing geht noch nicht bei allen primitiven Typen und Operatoren diff --git a/examples/pl_usecases/SMatrix.jav b/examples/pl_usecases/SMatrix.jav index 80dd631a..bbb6bb5f 100755 --- a/examples/pl_usecases/SMatrix.jav +++ b/examples/pl_usecases/SMatrix.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { mul(){ - Vector> ret1; - Vector ret; + Menge> ret1; + Menge ret; return ret; } diff --git a/examples/pl_usecases/UnifyTest1.jav b/examples/pl_usecases/UnifyTest1.jav index abb8580b..78cc68e9 100755 --- a/examples/pl_usecases/UnifyTest1.jav +++ b/examples/pl_usecases/UnifyTest1.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Stack; diff --git a/examples/pl_usecases/UsecaseFive_pl.jav b/examples/pl_usecases/UsecaseFive_pl.jav index 1ccfddbd..6857d448 100755 --- a/examples/pl_usecases/UsecaseFive_pl.jav +++ b/examples/pl_usecases/UsecaseFive_pl.jav @@ -1,8 +1,8 @@ class UsecaseFive_pl { foo() { - Vector c; - c = new Vector() ; + Menge c; + c = new Menge() ; return c; } diff --git a/examples/pl_usecases/UsecaseFour_pl.jav b/examples/pl_usecases/UsecaseFour_pl.jav index b40233f6..415318d4 100755 --- a/examples/pl_usecases/UsecaseFour_pl.jav +++ b/examples/pl_usecases/UsecaseFour_pl.jav @@ -2,7 +2,7 @@ class UsecaseFour_pl { foo() { c; - c = new Vector() ; + c = new Menge() ; return c; } diff --git a/examples/pl_usecases/UsecaseOne_pl.jav b/examples/pl_usecases/UsecaseOne_pl.jav index cf614cbe..5156ae48 100755 --- a/examples/pl_usecases/UsecaseOne_pl.jav +++ b/examples/pl_usecases/UsecaseOne_pl.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseOne_pl { @@ -11,7 +11,7 @@ class UsecaseOne_pl { /* foo1(a) { c; - c = new Vector(); + c = new Menge(); b; b = new UsecaseOne_pl(); return c.addElement(a); diff --git a/examples/pl_usecases/UsecaseSeven_pl.jav b/examples/pl_usecases/UsecaseSeven_pl.jav index 9833b49b..5744f550 100755 --- a/examples/pl_usecases/UsecaseSeven_pl.jav +++ b/examples/pl_usecases/UsecaseSeven_pl.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseSeven_pl { @@ -9,7 +9,7 @@ class UsecaseSeven_pl { foo1(a) { c; - c = new Vector(); + c = new Menge(); b; b = new UsecaseSeven_pl(); return c.addElement(a); diff --git a/examples/pl_usecases/UsecaseSix_pl.jav b/examples/pl_usecases/UsecaseSix_pl.jav index e6a1a5cc..45c140af 100755 --- a/examples/pl_usecases/UsecaseSix_pl.jav +++ b/examples/pl_usecases/UsecaseSix_pl.jav @@ -1,5 +1,5 @@ class uuu {} class vvv {} -class UsecaseSix_pl extends Vector> { +class UsecaseSix_pl extends Menge> { } \ No newline at end of file diff --git a/examples/pl_usecases/UsecaseTen_pl.jav b/examples/pl_usecases/UsecaseTen_pl.jav index 3a679aa9..ab5b8d00 100755 --- a/examples/pl_usecases/UsecaseTen_pl.jav +++ b/examples/pl_usecases/UsecaseTen_pl.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseTen_pl { - Vector c; + Menge c; foo1() { a; diff --git a/examples/pl_usecases/UsecaseThree_pl.jav b/examples/pl_usecases/UsecaseThree_pl.jav index 7ce53593..b0351814 100755 --- a/examples/pl_usecases/UsecaseThree_pl.jav +++ b/examples/pl_usecases/UsecaseThree_pl.jav @@ -2,7 +2,7 @@ class UsecaseThree_pl { foo() { c; - c = new Vector(); + c = new Menge(); return c; } diff --git a/examples/pl_usecases/UsecaseThree_pl.orig.java b/examples/pl_usecases/UsecaseThree_pl.orig.java index 074acc31..aecefabd 100755 --- a/examples/pl_usecases/UsecaseThree_pl.orig.java +++ b/examples/pl_usecases/UsecaseThree_pl.orig.java @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseThree_pl_org { - Vector foo() { - Vector c; - c = new Vector(); + Menge foo() { + Menge c; + c = new Menge(); return c; } diff --git a/examples/pl_usecases/ZweiKlassen.jav b/examples/pl_usecases/ZweiKlassen.jav index 2e396884..e74b9b9f 100755 --- a/examples/pl_usecases/ZweiKlassen.jav +++ b/examples/pl_usecases/ZweiKlassen.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ZweiKlassen { foo() { c; - c = new Vector() ; + c = new Menge() ; return c; } diff --git a/examples/scju/Boxing.jav b/examples/scju/Boxing.jav index edff055f..c632c2c0 100755 --- a/examples/scju/Boxing.jav +++ b/examples/scju/Boxing.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class Boxing { @@ -7,7 +7,7 @@ public class Boxing { a= new Integer(12); v; - v = new Vector(); + v = new Menge(); v.addElement(a); diff --git a/examples/scju/ClassGenerics.jav b/examples/scju/ClassGenerics.jav index 4b327cc6..938046cc 100755 --- a/examples/scju/ClassGenerics.jav +++ b/examples/scju/ClassGenerics.jav @@ -1,7 +1,7 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.lang.Comparable; -public class ClassGenerics extends Vector implements Comparable{ +public class ClassGenerics extends Menge implements Comparable{ public typ1 variable1; protected typ2 variable2; diff --git a/examples/scju/FieldGenerics.jav b/examples/scju/FieldGenerics.jav index 357b4f9a..d0f91aa1 100755 --- a/examples/scju/FieldGenerics.jav +++ b/examples/scju/FieldGenerics.jav @@ -1,11 +1,11 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Hashtable; public class FieldGenerics { - public Vector StringVec; + public Menge StringVec; public Hashtable ht; - public Vector TestMethode(Hashtable para1) { + public Menge TestMethode(Hashtable para1) { return null; } } \ No newline at end of file diff --git a/examples/scju/InterfaceGenerics.jav b/examples/scju/InterfaceGenerics.jav index 371d1e1b..a66dd8ca 100755 --- a/examples/scju/InterfaceGenerics.jav +++ b/examples/scju/InterfaceGenerics.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.lang.Comparable; import java.io.Serializable; -public interface InterfaceGenerics extends Comparable, Serializable{ +public interface InterfaceGenerics extends Comparable, Serializable{ public typ1 compareTo(typ2 s); diff --git a/examples/scju/MethodGenerics.jav b/examples/scju/MethodGenerics.jav index d965c96a..31c0fbb5 100755 --- a/examples/scju/MethodGenerics.jav +++ b/examples/scju/MethodGenerics.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.io.Serializable; import java.lang.Comparable; @@ -8,11 +8,11 @@ public class MethodGenerics { return null; } - t TestMethode2() { + t TestMethode2() { return null; } - u TestMethode3() { + u TestMethode3() { return null; } } \ No newline at end of file diff --git a/examples/scju/SimpleMethodCall.jav b/examples/scju/SimpleMethodCall.jav index a9eb482b..5133efcc 100755 --- a/examples/scju/SimpleMethodCall.jav +++ b/examples/scju/SimpleMethodCall.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class SimpleMethodCall { public TestProzedur() { v; - v = new Vector(); + v = new Menge(); x; x = "Hallo Welt!"; diff --git a/examples/scju/testPackage/Test.jav b/examples/scju/testPackage/Test.jav index ad68828e..d9ebd0d6 100755 --- a/examples/scju/testPackage/Test.jav +++ b/examples/scju/testPackage/Test.jav @@ -1,6 +1,6 @@ package testPackage.second.third; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class PackageTest { @@ -8,7 +8,7 @@ class PackageTest { TestProzedur() { c; - c = new Vector(); + c = new Menge(); return c; } diff --git a/notizen/hoti/Notizen.txt b/notizen/hoti/Notizen.txt index e92fc697..e722da65 100755 --- a/notizen/hoti/Notizen.txt +++ b/notizen/hoti/Notizen.txt @@ -5,7 +5,7 @@ Algorithmus-Probleme: - Methodenaufruf in if-Statement - Generic-Methoden addElement und elementAt funktionieren nicht: - public getValue(Vector a){ + public getValue(Menge a){ String x; a.addElement(x); diff --git a/notizen/pl/xxx b/notizen/pl/xxx index b958944e..a55d0822 100755 --- a/notizen/pl/xxx +++ b/notizen/pl/xxx @@ -20,7 +20,7 @@ Set { C --> Matrix, D --> Matrix, E --> Matrix, -F --> Vector< Vector< Integer > > +F --> Menge< Menge< Integer > > } ResultType: void Assumptions: @@ -32,46 +32,46 @@ mul: A --> B Triple ( Substitutions: Set { -C --> Vector< Vector< Integer > >, +C --> Menge< Menge< Integer > >, D --> Matrix, -E --> Vector< Vector< Integer > >, +E --> Menge< Menge< Integer > >, F --> Matrix } ResultType: void Assumptions: Set { m: A, -ret: Vector< Vector< Integer > >, +ret: Menge< Menge< Integer > >, mul: A --> B } ), Triple ( Substitutions: Set { -C --> Vector< Vector< Integer > >, +C --> Menge< Menge< Integer > >, D --> Matrix, -E --> Vector< Vector< Integer > >, -F --> Vector< Vector< Integer > > +E --> Menge< Menge< Integer > >, +F --> Menge< Menge< Integer > > } ResultType: void Assumptions: Set { m: A, -ret: Vector< Vector< Integer > >, +ret: Menge< Menge< Integer > >, mul: A --> B } ), Triple ( Substitutions: Set { -C --> Vector< Vector< Integer > >, -D --> Vector< Vector< Integer > >, -E --> Vector< Vector< Integer > >, -F --> Vector< Vector< Integer > > +C --> Menge< Menge< Integer > >, +D --> Menge< Menge< Integer > >, +E --> Menge< Menge< Integer > >, +F --> Menge< Menge< Integer > > } ResultType: void Assumptions: Set { m: A, -ret: Vector< Vector< Integer > >, +ret: Menge< Menge< Integer > >, mul: A --> B } ) } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java b/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java index 6988d70a..61d6261b 100755 --- a/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java +++ b/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java @@ -18,7 +18,7 @@ class jvmDisassembler { return (code & 0x7fffffff | code & 0x80000000); } - static void parse_attribute(DataInputStream d, Vector const_pool) throws IOException, Exception { + static void parse_attribute(DataInputStream d, Menge const_pool) throws IOException, Exception { int attribut_count = d.readShort(); System.out.println("attribut_count = " + attribut_count); if (attribut_count == 0) System.out.println("attributes = {}"); @@ -62,7 +62,7 @@ class jvmDisassembler { } - static void parse_code(DataInputStream d, Vector const_pool) throws IOException { + static void parse_code(DataInputStream d, Menge const_pool) throws IOException { long attribut_length = d.readInt(); System.out.println("attribut_length = " + attribut_length); @@ -133,7 +133,7 @@ class jvmDisassembler { int constant_pool_count = makePosShort(d.readShort()); System.out.println("constant_pool_count = " + constant_pool_count); - Vector const_pool = new Vector(constant_pool_count); + Menge const_pool = new Menge(constant_pool_count); const_pool.addElement(""); // Konstatenpool beginnt bei 1, Stelle 0 auffuellen System.out.println("constant_pool =\n{"); diff --git a/src/de/dhbwstuttgart/antlr/VisitorTest.java b/src/de/dhbwstuttgart/antlr/VisitorTest.java index 2effc93d..99dcd0e3 100644 --- a/src/de/dhbwstuttgart/antlr/VisitorTest.java +++ b/src/de/dhbwstuttgart/antlr/VisitorTest.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.antlr; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.*; @@ -47,7 +47,7 @@ class EvalVisitor extends Java8BaseVisitor { @Override public SyntaxTreeNode visitCompilationUnit(CompilationUnitContext ctx) { - Vector classDefinitions = new Vector<>(); + Menge classDefinitions = new Menge<>(); for(TypeDeclarationContext tDecl : ctx.typeDeclaration()){ Class cl = (Class) visit(tDecl); classDefinitions.add(cl); @@ -74,7 +74,7 @@ class EvalVisitor extends Java8BaseVisitor { @Override public GenericDeclarationList visitTypeParameters(TypeParametersContext ctx) { - Vector list = new Vector<>(); + Menge list = new Menge<>(); int endOffset = 0; for(TypeParameterContext tpctx : ctx.typeParameter()){ tpctx.Identifier(); diff --git a/src/de/dhbwstuttgart/bytecode/AttributeInfo.java b/src/de/dhbwstuttgart/bytecode/AttributeInfo.java index d43d5de6..01b700c0 100755 --- a/src/de/dhbwstuttgart/bytecode/AttributeInfo.java +++ b/src/de/dhbwstuttgart/bytecode/AttributeInfo.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.bytecode; import java.io.FileOutputStream; import java.io.OutputStream; import java.lang.reflect.Array; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -28,12 +28,12 @@ public class AttributeInfo extends Attribute } // ino.end - // ino.method.get_info_Vector.21477.definition - public Vector get_info_Vector() + // ino.method.get_info_Menge.21477.definition + public Menge get_info_Menge() // ino.end - // ino.method.get_info_Vector.21477.body + // ino.method.get_info_Menge.21477.body { - Vector ret = new Vector(); + Menge ret = new Menge(); for (int i = 0; i < Array.getLength(info); i++) ret.addElement(new Byte(info[i])); return ret; @@ -59,7 +59,7 @@ public class AttributeInfo extends Attribute // ino.end // ino.method.set_info.21486.definition - public void set_info(Vector t) + public void set_info(Menge t) // ino.end // ino.method.set_info.21486.body { diff --git a/src/de/dhbwstuttgart/bytecode/ClassFile.java b/src/de/dhbwstuttgart/bytecode/ClassFile.java index 9fc2cd91..e4f0144c 100755 --- a/src/de/dhbwstuttgart/bytecode/ClassFile.java +++ b/src/de/dhbwstuttgart/bytecode/ClassFile.java @@ -1,4 +1,4 @@ -//key_vector funktioniert nicht PL 14-03-21 +//key_Menge funktioniert nicht PL 14-03-21 //muss angeschaut werden @@ -11,7 +11,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end @@ -71,7 +71,7 @@ public class ClassFile // ino.end // ino.attribute.constant_pool.21507.declaration - private Vector constant_pool = new Vector(); + private Menge constant_pool = new Menge(); // ino.end // ino.attribute.access_flags.21510.declaration private short access_flags; @@ -83,22 +83,22 @@ public class ClassFile private short super_class; // ino.end // ino.attribute.fields.21519.declaration - private Vector fields = new Vector(); + private Menge fields = new Menge(); // ino.end // ino.attribute.methods.21522.declaration - private Vector methods = new Vector(); + private Menge methods = new Menge(); // ino.end // ino.attribute.attributes.21525.declaration - private Vector attributes = new Vector(); + private Menge attributes = new Menge(); // ino.end // ino.attribute.interfaces.21528.declaration - private Vector interfaces = new Vector(); + private Menge interfaces = new Menge(); // ino.end - // ino.attribute.key_vector.21531.declaration - private Vector key_vector = new Vector(); + // ino.attribute.key_Menge.21531.declaration + private Menge key_Menge = new Menge(); // ino.end // ino.attribute.class_block.21534.declaration - private Vector class_block = new Vector(); + private Menge class_block = new Menge(); // ino.end // ino.attribute.class_name.21537.declaration private String class_name = new String("OUTPUT");//DEFAULTWERT PL 14-03-21 eingefuegt @@ -170,14 +170,14 @@ public class ClassFile // ino.method.add_CONSTANT_Utf8_info.21558.body { Key utf8_key = new Key(JVMCode.CONSTANT_Utf8, name); - if(!this.key_vector.contains(utf8_key)) { + if(!this.key_Menge.contains(utf8_key)) { CONSTANT_Utf8_info utf8_info = new CONSTANT_Utf8_info(); utf8_info.set_tag(JVMCode.CONSTANT_Utf8); utf8_info.set_bytes(name.getBytes()); - this.key_vector.addElement(utf8_key); + this.key_Menge.addElement(utf8_key); this.constant_pool.addElement(utf8_info); } - return (this.key_vector.indexOf(utf8_key)+1); + return (this.key_Menge.indexOf(utf8_key)+1); } // ino.end @@ -187,14 +187,14 @@ public class ClassFile // ino.method.add_CONSTANT_Class_info.21561.body { Key class_key = new Key(JVMCode.CONSTANT_Class, name); - if(!this.key_vector.contains(class_key)) { + if(!this.key_Menge.contains(class_key)) { CONSTANT_Class_info class_info = new CONSTANT_Class_info(); class_info.set_tag(JVMCode.CONSTANT_Class); class_info.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); - this.key_vector.addElement(class_key); + this.key_Menge.addElement(class_key); this.constant_pool.addElement(class_info); } - return (this.key_vector.indexOf(class_key)+1); + return (this.key_Menge.indexOf(class_key)+1); } // ino.end @@ -204,16 +204,16 @@ public class ClassFile // ino.method.add_CONSTANT_NameAndType_info.21564.body { Key name_type_key = new Key(JVMCode.CONSTANT_NameAndType, name + param_type); - if(!this.key_vector.contains(name_type_key)) + if(!this.key_Menge.contains(name_type_key)) { CONSTANT_NameAndType_info name_type = new CONSTANT_NameAndType_info(); name_type.set_tag(JVMCode.CONSTANT_NameAndType); name_type.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); name_type.set_descriptor_index((short)this.add_CONSTANT_Utf8_info(param_type)); - this.key_vector.addElement(name_type_key); + this.key_Menge.addElement(name_type_key); this.constant_pool.addElement(name_type); } - return this.key_vector.indexOf(name_type_key) + 1; + return this.key_Menge.indexOf(name_type_key) + 1; } // ino.end @@ -223,14 +223,14 @@ public class ClassFile // ino.method.add_CONSTANT_Integer_info.21567.body { Key key = new Key(JVMCode.CONSTANT_Integer, "" + i); - if(!this.key_vector.contains(key)) { + if(!this.key_Menge.contains(key)) { CONSTANT_Integer_info info = new CONSTANT_Integer_info(); info.set_tag(JVMCode.CONSTANT_Integer); info.set_bytes(i); - this.key_vector.addElement(key); + this.key_Menge.addElement(key); this.constant_pool.addElement(info); } - return (this.key_vector.indexOf(key)+1); + return (this.key_Menge.indexOf(key)+1); } // ino.end @@ -240,14 +240,14 @@ public class ClassFile // ino.method.add_CONSTANT_String_info.21570.body { Key key = new Key(JVMCode.CONSTANT_String, s); - if(!this.key_vector.contains(key)) { + if(!this.key_Menge.contains(key)) { CONSTANT_String_info info = new CONSTANT_String_info(); info.set_tag(JVMCode.CONSTANT_String); info.set_string_index((short)this.add_CONSTANT_Utf8_info(s)); - this.key_vector.addElement(key); + this.key_Menge.addElement(key); this.constant_pool.addElement(info); } - return (this.key_vector.indexOf(key)+1); + return (this.key_Menge.indexOf(key)+1); } // ino.end @@ -315,7 +315,7 @@ public class ClassFile */ // ino.end // ino.method.addSuperInterfaces.21582.definition - public void addSuperInterfaces(Vector superif) + public void addSuperInterfaces(Menge superif) // ino.end // ino.method.addSuperInterfaces.21582.body { @@ -336,7 +336,7 @@ public class ClassFile */ // ino.end // ino.method.addGenerics.21585.definition - public void addGenerics(Vector para, UsedId superClass, Vector superIf) + public void addGenerics(Menge para, UsedId superClass, Menge superIf) // ino.end // ino.method.addGenerics.21585.body { @@ -352,12 +352,12 @@ public class ClassFile // ino.method.add_method.21588.definition public void add_method(String name, String param_type, ParameterList param, - Type type, Block block, short acc_flag, Vector paralist, boolean isAbstract) + Type type, Block block, short acc_flag, Menge paralist, boolean isAbstract) throws JVMCodeException // ino.end // ino.method.add_method.21588.body { - Vector method_attributes = new Vector(); + Menge method_attributes = new Menge(); @@ -481,16 +481,16 @@ public class ClassFile codegenlog.debug("Methodenreferenz hinzugefuegt: " + name + ", Klasse: " + cl_name + ", Paramter-Typ: " + param_type); Key methodref_key = new Key(JVMCode.CONSTANT_Methodref, cl_name + name + param_type); - if(!this.key_vector.contains(methodref_key)) + if(!this.key_Menge.contains(methodref_key)) { CONSTANT_Methodref_info methodref = new CONSTANT_Methodref_info(); methodref.set_tag(JVMCode.CONSTANT_Methodref); methodref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); methodref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, param_type)); - this.key_vector.addElement(methodref_key); + this.key_Menge.addElement(methodref_key); this.constant_pool.addElement(methodref); } - return this.key_vector.indexOf(methodref_key)+1; + return this.key_Menge.indexOf(methodref_key)+1; } // ino.end @@ -549,7 +549,7 @@ public class ClassFile field.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); field.set_descriptor_index((short)this.add_CONSTANT_Utf8_info(type)); if (attr != null) { - Vector vec = new Vector(); + Menge vec = new Menge(); vec.addElement(attr); field.set_attributes(vec); } @@ -578,35 +578,35 @@ public class ClassFile codegenlog.debug("Fieldref hinzugefuegt: " + name + ", Klassenname: " + cl_name + ", Accessflags: " + field.get_access_flags()); Key fieldref_key = new Key(JVMCode.CONSTANT_Fieldref, cl_name + name + type); - if(!this.key_vector.contains(fieldref_key)) { + if(!this.key_Menge.contains(fieldref_key)) { CONSTANT_Fieldref_info fieldref = new CONSTANT_Fieldref_info(); fieldref.set_tag(JVMCode.CONSTANT_Fieldref); fieldref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); fieldref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, type)); - this.key_vector.addElement(fieldref_key); + this.key_Menge.addElement(fieldref_key); this.constant_pool.addElement(fieldref); } - return (this.key_vector.indexOf(fieldref_key)+1); + return (this.key_Menge.indexOf(fieldref_key)+1); } else { codegenlog.debug("Fieldref hinzugefuegt: " + name + ", Klassenname: " + cl_name + ", Typ: " + type); Key fieldref_key = new Key(JVMCode.CONSTANT_Fieldref, cl_name + name + type); - if(!this.key_vector.contains(fieldref_key)) { + if(!this.key_Menge.contains(fieldref_key)) { CONSTANT_Fieldref_info fieldref = new CONSTANT_Fieldref_info(); fieldref.set_tag(JVMCode.CONSTANT_Fieldref); fieldref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); fieldref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, type)); - this.key_vector.addElement(fieldref_key); + this.key_Menge.addElement(fieldref_key); this.constant_pool.addElement(fieldref); } - return (this.key_vector.indexOf(fieldref_key)+1); + return (this.key_Menge.indexOf(fieldref_key)+1); } } // ino.end // ino.method.set_constant_pool.21606.definition - public void set_constant_pool(Vector t) + public void set_constant_pool(Menge t) // ino.end // ino.method.set_constant_pool.21606.body { this.constant_pool = t; } @@ -630,19 +630,19 @@ public class ClassFile { this.super_class = t; } // ino.end // ino.method.set_fields.21618.definition - public void set_fields(Vector t) + public void set_fields(Menge t) // ino.end // ino.method.set_fields.21618.body { this.fields = t; } // ino.end // ino.method.set_methods.21621.definition - public void set_methods(Vector t) + public void set_methods(Menge t) // ino.end // ino.method.set_methods.21621.body { this.methods = t; } // ino.end // ino.method.set_attributes.21624.definition - public void set_attributes(Vector t) + public void set_attributes(Menge t) // ino.end // ino.method.set_attributes.21624.body { this.attributes = t; } @@ -666,7 +666,7 @@ public class ClassFile // ino.end // ino.method.get_constant_pool.21633.definition - public Vector get_constant_pool() + public Menge get_constant_pool() // ino.end // ino.method.get_constant_pool.21633.body { return this.constant_pool; } @@ -690,28 +690,28 @@ public class ClassFile { return this.super_class; } // ino.end // ino.method.get_fields.21645.definition - public Vector get_fields() + public Menge get_fields() // ino.end // ino.method.get_fields.21645.body { return this.fields; } // ino.end // ino.method.get_methods.21648.definition - public Vector get_methods() + public Menge get_methods() // ino.end // ino.method.get_methods.21648.body { return this.methods; } // ino.end // ino.method.get_attributes.21651.definition - public Vector get_attributes() + public Menge get_attributes() // ino.end // ino.method.get_attributes.21651.body { return this.attributes; } // ino.end - // ino.method.get_key_vector.21654.definition - public Vector get_key_vector() + // ino.method.get_key_Menge.21654.definition + public Menge get_key_Menge() // ino.end - // ino.method.get_key_vector.21654.body - { return this.key_vector; } + // ino.method.get_key_Menge.21654.body + { return this.key_Menge; } // ino.end // ino.method.get_constructor_founded.21657.definition public boolean get_constructor_founded() @@ -723,10 +723,10 @@ public class ClassFile public short get_constant_pool_element(byte b, String id) // ino.end // ino.method.get_constant_pool_element.21660.body - { return (short)this.key_vector.indexOf(new Key(b, id)); } + { return (short)this.key_Menge.indexOf(new Key(b, id)); } // ino.end // ino.method.get_class_block.21663.definition - public Vector get_class_block() + public Menge get_class_block() // ino.end // ino.method.get_class_block.21663.body { return this.class_block; } diff --git a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java index 9650c6a6..47fee80c 100755 --- a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java +++ b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java @@ -12,7 +12,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -22,20 +22,20 @@ public class CodeAttribute extends Attribute // ino.end // ino.class.CodeAttribute.21681.body { - // ino.attribute.code_vector.21685.declaration - private Vector code_vector = new Vector(); + // ino.attribute.code_Menge.21685.declaration + private Menge code_Menge = new Menge(); // ino.end // ino.attribute.exception_tables.21688.declaration - private Vector exception_tables = new Vector(); + private Menge exception_tables = new Menge(); // ino.end // ino.attribute.attributes.21691.declaration - private Vector attributes = new Vector(); + private Menge attributes = new Menge(); // ino.end - // ino.attribute.local_name_vector.21694.declaration - private Vector local_name_vector = new Vector(); + // ino.attribute.local_name_Menge.21694.declaration + private Menge local_name_Menge = new Menge(); // ino.end - // ino.attribute.local_type_vector.21697.declaration - private Vector local_type_vector = new Vector(); + // ino.attribute.local_type_Menge.21697.declaration + private Menge local_type_Menge = new Menge(); // ino.end short max_stack; @@ -54,39 +54,39 @@ public class CodeAttribute extends Attribute } // ino.end - // ino.method.get_code_Vector.21703.definition - public Vector get_code_Vector() + // ino.method.get_code_Menge.21703.definition + public Menge get_code_Menge() // ino.end - // ino.method.get_code_Vector.21703.body + // ino.method.get_code_Menge.21703.body { - return this.code_vector; + return this.code_Menge; } // ino.end - // ino.method.get_exception_table_Vector.21706.definition - public Vector get_exception_table_Vector() + // ino.method.get_exception_table_Menge.21706.definition + public Menge get_exception_table_Menge() // ino.end - // ino.method.get_exception_table_Vector.21706.body + // ino.method.get_exception_table_Menge.21706.body { return this.exception_tables; } // ino.end - // ino.method.get_attributes_Vector.21709.definition - public Vector get_attributes_Vector() + // ino.method.get_attributes_Menge.21709.definition + public Menge get_attributes_Menge() // ino.end - // ino.method.get_attributes_Vector.21709.body + // ino.method.get_attributes_Menge.21709.body { return this.attributes; } // ino.end - // ino.method.get_local_Vector.21712.definition - public Vector get_local_Vector() + // ino.method.get_local_Menge.21712.definition + public Menge get_local_Menge() // ino.end - // ino.method.get_local_Vector.21712.body + // ino.method.get_local_Menge.21712.body { - return this.local_name_vector; + return this.local_name_Menge; } // ino.end @@ -95,7 +95,7 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.get_code_length.21715.body { - return this.code_vector.size(); + return this.code_Menge.size(); } // ino.end @@ -104,12 +104,12 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.add_local.21718.body { - local_name_vector.addElement(s); - local_type_vector.addElement(t); + local_name_Menge.addElement(s); + local_type_Menge.addElement(t); String type = t.getName(); if (type.equals("double") || type.equals("long")) { - local_name_vector.addElement(s); - local_type_vector.addElement(t); + local_name_Menge.addElement(s); + local_type_Menge.addElement(t); } } // ino.end @@ -119,7 +119,7 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.add_code.21721.body { - code_vector.addElement(b); + code_Menge.addElement(b); } // ino.end @@ -128,7 +128,7 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.set_code.21724.body { - code_vector.setElementAt(b, i); + code_Menge.setElementAt(b, i); } // ino.end @@ -137,10 +137,10 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.add_code_int.21727.body { - code_vector.addElement(new Byte((byte) ((i >> 24) & 255))); - code_vector.addElement(new Byte((byte) ((i >> 16) & 255))); - code_vector.addElement(new Byte((byte) ((i >> 8) & 255))); - code_vector.addElement(new Byte((byte) (i & 255))); + code_Menge.addElement(new Byte((byte) ((i >> 24) & 255))); + code_Menge.addElement(new Byte((byte) ((i >> 16) & 255))); + code_Menge.addElement(new Byte((byte) ((i >> 8) & 255))); + code_Menge.addElement(new Byte((byte) (i & 255))); } // ino.end @@ -149,8 +149,8 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.add_code_short.21730.body { - code_vector.addElement(new Byte((byte) ((s >> 8) & 255))); - code_vector.addElement(new Byte((byte) (s & 255))); + code_Menge.addElement(new Byte((byte) ((s >> 8) & 255))); + code_Menge.addElement(new Byte((byte) (s & 255))); } // ino.end @@ -159,8 +159,8 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.set_code_short.21733.body { - code_vector.setElementAt(new Byte((byte) ((s >> 8) & 255)), i); - code_vector.setElementAt(new Byte((byte) (s & 255)), i + 1); + code_Menge.setElementAt(new Byte((byte) ((s >> 8) & 255)), i); + code_Menge.setElementAt(new Byte((byte) (s & 255)), i + 1); } // ino.end @@ -169,7 +169,7 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.add_code_byte.21736.body { - code_vector.addElement(new Byte((byte) (b & 255))); + code_Menge.addElement(new Byte((byte) (b & 255))); } // ino.end @@ -179,7 +179,7 @@ public class CodeAttribute extends Attribute // ino.method.add_code_byte_array.21739.body { for (int i = 0; i < Array.getLength(b); i++) - code_vector.addElement(new Byte(b[i])); + code_Menge.addElement(new Byte(b[i])); } // ino.end @@ -188,8 +188,8 @@ public class CodeAttribute extends Attribute // ino.end // ino.method.get_indexOf_Var.21742.body { - for (int i = 0; i < local_name_vector.size(); i++) - if (name.equals((String) local_name_vector.elementAt(i))) + for (int i = 0; i < local_name_Menge.size(); i++) + if (name.equals((String) local_name_Menge.elementAt(i))) return i; return -1; } @@ -203,7 +203,7 @@ public class CodeAttribute extends Attribute { int index = get_indexOf_Var(name); if (index != -1) - return (Type) local_type_vector.elementAt(index); + return (Type) local_type_Menge.elementAt(index); throw new JVMCodeException( "JVMCodeException: Code_attribute: Type get_TypeOf_Var(String name)"); } @@ -215,7 +215,7 @@ public class CodeAttribute extends Attribute // ino.method.get_attributes_length.21748.body { int ret = 8;//2(max_stack)+2(max_locals)+4(code_length) - ret += code_vector.size(); + ret += code_Menge.size(); ret += 2; //exception table length ret += (exception_tables.size() * 8); ret += 2; //Attribute_count @@ -226,19 +226,19 @@ public class CodeAttribute extends Attribute } // ino.end - // ino.method.set_exception_table_Vector.21751.definition - public void set_exception_table_Vector(Vector t) + // ino.method.set_exception_table_Menge.21751.definition + public void set_exception_table_Menge(Menge t) // ino.end - // ino.method.set_exception_table_Vector.21751.body + // ino.method.set_exception_table_Menge.21751.body { this.exception_tables = t; } // ino.end - // ino.method.set_attributes_Vector.21754.definition - public void set_attributes_Vector(Vector t) + // ino.method.set_attributes_Menge.21754.definition + public void set_attributes_Menge(Menge t) // ino.end - // ino.method.set_attributes_Vector.21754.body + // ino.method.set_attributes_Menge.21754.body { this.attributes = t; } @@ -261,20 +261,20 @@ public class CodeAttribute extends Attribute classfile.writeShort(f, get_attribute_name_index()); classfile.writeInt(f, attributes_length); classfile.writeShort(f, max_stack); - classfile.writeShort(f, (short) local_name_vector.size()); - classfile.writeInt(f, code_vector.size()); + classfile.writeShort(f, (short) local_name_Menge.size()); + classfile.writeInt(f, code_Menge.size()); codegenlog.debug("Code_attribute_name_index=" + get_attribute_name_index() + ", Length=" + attributes_length + ", Max_Stack=" + max_stack - + ", Max_Locals=" + (short) local_name_vector.size() - + ", Code_Length=" + code_vector.size()); + + ", Max_Locals=" + (short) local_name_Menge.size() + + ", Code_Length=" + code_Menge.size()); - for (int i = 0; i < code_vector.size(); i++) { // code_vector - classfile.writeByte(f, (code_vector.elementAt(i)).byteValue()); + for (int i = 0; i < code_Menge.size(); i++) { // code_Menge + classfile.writeByte(f, (code_Menge.elementAt(i)).byteValue()); } // Verarbeitung der Exception-Table - JVMCode.get_Command(code_vector); + JVMCode.get_Command(code_Menge); codegenlog.debug("Groesse der Exception-Table: " + exception_tables.size()); classfile.writeShort(f, (short) exception_tables.size()); for (int i = 0; i < exception_tables.size(); i++) { @@ -289,10 +289,10 @@ public class CodeAttribute extends Attribute } /* * if(classfile.get_system_out()) { System.out.println(" locals:"); - * for(int i = 0; i < local_name_vector.size(); i++) // locals + * for(int i = 0; i < local_name_Menge.size(); i++) // locals * System.out.println(" " + i +" " + - * (String)local_name_vector.elementAt(i) + - * ((Type)local_type_vector.elementAt(i)).get_Type()); } + * (String)local_name_Menge.elementAt(i) + + * ((Type)local_type_Menge.elementAt(i)).get_Type()); } */ } // ino.end @@ -306,8 +306,8 @@ public class CodeAttribute extends Attribute { short max_stack = 0; short stack = 0; - for (int y = 0; y < code_vector.size(); y++) { - int x = JVMCode.bytes_to_int(code_vector.elementAt(y)); + for (int y = 0; y < code_Menge.size(); y++) { + int x = JVMCode.bytes_to_int(code_Menge.elementAt(y)); switch (x) { case 0: { break; diff --git a/src/de/dhbwstuttgart/bytecode/FieldInfo.java b/src/de/dhbwstuttgart/bytecode/FieldInfo.java index 1118e3ba..84a568c4 100755 --- a/src/de/dhbwstuttgart/bytecode/FieldInfo.java +++ b/src/de/dhbwstuttgart/bytecode/FieldInfo.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.bytecode; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -50,7 +50,7 @@ public class FieldInfo implements ClassFileMember // ino.end // ino.attribute.attributes.22092.declaration - private Vector attributes = new Vector(); // attribute + private Menge attributes = new Menge(); // attribute // ino.end // ino.method.get_Name.22095.definition @@ -108,7 +108,7 @@ public class FieldInfo implements ClassFileMember // ino.end // ino.method.get_attributes.22113.definition - public Vector get_attributes() + public Menge get_attributes() // ino.end // ino.method.get_attributes.22113.body { @@ -171,7 +171,7 @@ public class FieldInfo implements ClassFileMember // ino.end // ino.method.set_attributes.22134.definition - public void set_attributes(Vector t) + public void set_attributes(Menge t) // ino.end // ino.method.set_attributes.22134.body { diff --git a/src/de/dhbwstuttgart/bytecode/JVMCode.java b/src/de/dhbwstuttgart/bytecode/JVMCode.java index 24f9b23f..6dbeb2f5 100755 --- a/src/de/dhbwstuttgart/bytecode/JVMCode.java +++ b/src/de/dhbwstuttgart/bytecode/JVMCode.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.bytecode; // ino.end // ino.module.JVMCode.8547.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -1060,16 +1060,16 @@ public class JVMCode /** * Liefert zu dem angegebenen Typ die entsprechende Repraesentation * im Bytecode zurueck. Fuer integer bspw. I, fuer String Ljava/lang/String;. - * Wird im Vector paralist ein Objekt mit gleichen Namen gefunden, + * Wird im Menge paralist ein Objekt mit gleichen Namen gefunden, * wird der Typ in Objekt geaendert (Typisierbare Klassen, hama). */ // ino.end // ino.method.get_codegen_Type.22872.definition - public static String get_codegen_Type(String type, Vector paralist) + public static String get_codegen_Type(String type, Menge paralist) // ino.end // ino.method.get_codegen_Type.22872.body { - //hama: Hier wird geschaut, ob es im Vector paralist + //hama: Hier wird geschaut, ob es im Menge paralist //einen Eintrag mit gleichem Namen wie in dem type String gibt. //Wenn dies der Fall ist, bedeute es, dass es sich um einen Typparameter //handelt (bzw. handeln kann). Dann wird in type @@ -1115,7 +1115,7 @@ public class JVMCode */ // ino.end // ino.method.get_Command.22875.definition - public static void get_Command(Vector b) + public static void get_Command(Menge b) throws JVMCodeException // ino.end // ino.method.get_Command.22875.body @@ -1330,7 +1330,7 @@ public class JVMCode case 201: { sb.append("jsr_w #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i), b.elementAt(++i), b.elementAt(++i))); break; } case 202: { sb.append("breakpoint"); break; } case 254: { sb.append("impdep1"); break; } - default: { throw new JVMCodeException("JVMCodeException: jvmCode: void get_Command(Vector b)"); } + default: { throw new JVMCodeException("JVMCodeException: jvmCode: void get_Command(Menge b)"); } } sb.append("\n"); } diff --git a/src/de/dhbwstuttgart/bytecode/MethodInfo.java b/src/de/dhbwstuttgart/bytecode/MethodInfo.java index ef2f9163..1733a93f 100755 --- a/src/de/dhbwstuttgart/bytecode/MethodInfo.java +++ b/src/de/dhbwstuttgart/bytecode/MethodInfo.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.bytecode; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -38,7 +38,7 @@ public class MethodInfo implements ClassFileMember // ino.end // ino.attribute.attributes.22938.declaration - private Vector attributes = new Vector(); + private Menge attributes = new Menge(); // ino.end // ino.method.get_access_flags.22941.definition @@ -69,7 +69,7 @@ public class MethodInfo implements ClassFileMember // ino.end // ino.method.get_attributes.22950.definition - public Vector get_attributes() + public Menge get_attributes() // ino.end // ino.method.get_attributes.22950.body { @@ -105,7 +105,7 @@ public class MethodInfo implements ClassFileMember // ino.end // ino.method.set_attributes.22962.definition - public void set_attributes(Vector t) + public void set_attributes(Menge t) // ino.end // ino.method.set_attributes.22962.body { diff --git a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java b/src/de/dhbwstuttgart/bytecode/SignatureInfo.java index a13f8a86..11d57d23 100755 --- a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java +++ b/src/de/dhbwstuttgart/bytecode/SignatureInfo.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.bytecode; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -60,7 +60,7 @@ public class SignatureInfo extends Attribute */ // ino.end // ino.method.SignatureInfo.22978.definition - public SignatureInfo(Vector vec, UsedId superclass, Vector superIf, ClassFile cf) + public SignatureInfo(Menge vec, UsedId superclass, Menge superIf, ClassFile cf) // ino.end // ino.method.SignatureInfo.22978.body { diff --git a/src/de/dhbwstuttgart/core/AClassOrInterface.java b/src/de/dhbwstuttgart/core/AClassOrInterface.java index cf3ba515..bea737c6 100755 --- a/src/de/dhbwstuttgart/core/AClassOrInterface.java +++ b/src/de/dhbwstuttgart/core/AClassOrInterface.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.core; // ino.end // ino.module.AClassOrInterface.8526.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -41,8 +41,8 @@ public interface AClassOrInterface { public JavaClassName getName(); - public Vector getSuperInterfaces(); - public void setSuperInterfaces(Vector vector); + public Menge getSuperInterfaces(); + public void setSuperInterfaces(Menge Menge); /* // ino.attribute.inferencelog.21189.decldescription type=javadoc @@ -79,7 +79,7 @@ public interface AClassOrInterface // Klassen implementieren die Liste. // ino.end // ino.attribute.superif.21207.declaration - private Vector superif = new Vector(); + private Menge superif = new Menge(); // ino.end // ino.method.AClassOrInterface.21210.defdescription type=line @@ -190,7 +190,7 @@ public interface AClassOrInterface // ino.end // ino.method.getSuperInterfaces.21240.definition - public Vector getSuperInterfaces() + public Menge getSuperInterfaces() // ino.end // ino.method.getSuperInterfaces.21240.body { @@ -199,7 +199,7 @@ public interface AClassOrInterface // ino.end // ino.method.setSuperInterfaces.21243.definition - public void setSuperInterfaces(Vector superif) + public void setSuperInterfaces(Menge superif) // ino.end // ino.method.setSuperInterfaces.21243.body { diff --git a/src/de/dhbwstuttgart/core/ConsoleInterface.java b/src/de/dhbwstuttgart/core/ConsoleInterface.java index 6d2b5f46..fff92abf 100755 --- a/src/de/dhbwstuttgart/core/ConsoleInterface.java +++ b/src/de/dhbwstuttgart/core/ConsoleInterface.java @@ -16,7 +16,7 @@ public class ConsoleInterface { * @param args */ public static void main(String[] args) { - Vector filenames = new Vector(); + Menge filenames = new Menge(); for(String file : args){ filenames.add(file); } @@ -25,8 +25,8 @@ public class ConsoleInterface { run(filenames); } - public static void run(Vector filenames){ - Vector resultSet = null; + public static void run(Menge filenames){ + Menge resultSet = null; MyCompilerAPI compiler = MyCompiler.getAPI(); try{ diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 3bebd0c4..e1b624cf 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -11,7 +11,7 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -86,7 +86,7 @@ public class MyCompiler implements MyCompilerAPI */ // ino.end // ino.attribute.m_AbstractSyntaxTree.21280.declaration - private Vector m_AbstractSyntaxTree = new Vector(); + private Menge m_AbstractSyntaxTree = new Menge(); // ino.end // ino.method.MyCompiler.21283.defdescription type=javadoc @@ -124,7 +124,7 @@ public class MyCompiler implements MyCompilerAPI } // ino.end - public Vector testPair = null; + public Menge testPair = null; // ino.method.wandleGeneric2RefType.21289.defdescription type=javadoc /** @@ -144,7 +144,7 @@ public class MyCompiler implements MyCompilerAPI // ino.end // ino.method.wandleGeneric2RefType.21289.definition - public static void wandleGeneric2RefType(Vector Parameter, Vector KlassenVektor ) + public static void wandleGeneric2RefType(Menge Parameter, Menge KlassenVektor ) // ino.end // ino.method.wandleGeneric2RefType.21289.body { @@ -276,7 +276,7 @@ public class MyCompiler implements MyCompilerAPI // if( tempKlasse.superclassid != null && tempKlasse.get_ParaList() != null ) // { // // aktuelle Klasse hat Superklasse und Parameter - // Vector Parameter = tempKlasse.superclassid.get_ParaList(); + // Menge Parameter = tempKlasse.superclassid.get_ParaList(); // this.wandleGeneric2RefType(Parameter, srcFile.KlassenVektor ); // } //wandleGeneric2RefType(tempKlasse.getContainedTypes(), srcFile.KlassenVektor ); @@ -288,7 +288,7 @@ public class MyCompiler implements MyCompilerAPI { Class tempKlasse = null; ClassBody tempKlassBody = null; - Vector tempVectorFieldDecl; + Menge tempMengeFieldDecl; mycompiler.myclass.Field tempFieldDecl = null; String strKlasse; @@ -311,10 +311,10 @@ public class MyCompiler implements MyCompilerAPI parserlog.debug( "------------------------------------"); // Schleife �ber alle fielddeclarations - tempVectorFieldDecl = tempKlassBody.getFields(); - for( int k = 0; k < tempVectorFieldDecl.size(); k++ ) + tempMengeFieldDecl = tempKlassBody.getFields(); + for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { - tempFieldDecl = tempVectorFieldDecl.elementAt(k); + tempFieldDecl = tempMengeFieldDecl.elementAt(k); if( tempFieldDecl instanceof Constructor ) { //parserlog.debug("T->Konstruktor: " + ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name() + " - ReturnType: " + tempFieldDecl.getTypeName()); @@ -333,7 +333,7 @@ public class MyCompiler implements MyCompilerAPI Methode.setParameterList( Konstruktor.getParameterList() ); Methode.set_ExceptionList( Konstruktor.get_ExceptionList() ); Methode.setReturnType( Konstruktor.getReturnType() ); - Methode.setDeclIdVector( Konstruktor.getDeclIdVector() ); + Methode.setDeclIdMenge( Konstruktor.getDeclIdMenge() ); // types_in_parameterlist wird wohl erst sp�ter und intern gef�llt // R�ckgabetyp = Objekt der Klasse 'TypePlaceholder' @@ -345,7 +345,7 @@ public class MyCompiler implements MyCompilerAPI // ########################################################### // Element an der Position k durch neues ersetzen! - tempVectorFieldDecl.setElementAt( Methode, k ); + tempMengeFieldDecl.setElementAt( Methode, k ); } } if( tempFieldDecl instanceof Method && !(tempFieldDecl instanceof Constructor) ) @@ -359,9 +359,9 @@ public class MyCompiler implements MyCompilerAPI parserlog.debug(""); parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse); parserlog.debug( "-----------------------------------------"); - for( int k = 0; k < tempVectorFieldDecl.size(); k++ ) + for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { - tempFieldDecl = tempVectorFieldDecl.elementAt(k); + tempFieldDecl = tempMengeFieldDecl.elementAt(k); //parserlog.debug("T->" + ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name() + " - Typ: " + tempFieldDecl + " - ReturnType: " + tempFieldDecl.getTypeName()); } @@ -372,14 +372,14 @@ public class MyCompiler implements MyCompilerAPI parserlog.debug( "------------------------------------------"); ParameterList tempParameterList; - Vector tempVFktPara; + Menge tempVFktPara; FormalParameter tempFP; Method tempMethod; Type tempReturn; Type tempType; - for( int k = 0; k < tempVectorFieldDecl.size(); k++ ) + for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { - tempFieldDecl = tempVectorFieldDecl.elementAt(k); + tempFieldDecl = tempMengeFieldDecl.elementAt(k); tempMethod = null; if( tempFieldDecl instanceof Method ) @@ -507,7 +507,7 @@ public class MyCompiler implements MyCompilerAPI */ // ino.end // ino.method.typeReconstruction.21304.definition - public Vector typeReconstruction() + public Menge typeReconstruction() throws NullPointerException, CTypeReconstructionException // ino.end // ino.method.typeReconstruction.21304.body @@ -520,7 +520,7 @@ public class MyCompiler implements MyCompilerAPI inferencelog.info("##########################################\n", Section.TYPEINFERENCE); TypeAssumptions globalAssumptions = makeFunNAssumptions(); - Vector result = new Vector(); + Menge result = new Menge(); for(SourceFile srcFile : m_AbstractSyntaxTree){ result.addAll(srcFile.typeReconstruction(globalAssumptions)); @@ -560,7 +560,7 @@ public class MyCompiler implements MyCompilerAPI * ist. @Override - public Vector codeGeneration(ResultSet result) + public Menge codeGeneration(ResultSet result) throws NullPointerException, JVMCodeException { if(m_AbstractSyntaxTree==null){ @@ -568,7 +568,7 @@ public class MyCompiler implements MyCompilerAPI } codegenlog.info("Beginn der Codegenerierung ..."); - Vector ret = new Vector(); + Menge ret = new Menge(); for(SourceFile sf : m_AbstractSyntaxTree){ ret.addAll(sf.codegen(result)); @@ -679,14 +679,14 @@ public class MyCompiler implements MyCompilerAPI /** * @author HOTI * Macht alle Referenzen auf Objekte zu fully qualified Names - * p.ex Vector x; => java.util.Vector x; + * p.ex Menge x; => de.dhbwstuttgart.typeinference.Menge x; * @param containedTypes Alle Typen, die die Klasse beinhaltet * @param name Alle Klassen, die es in den BasicAssumptions und im * AbstractSyntaxTree gibt @param declarations Alle Import-Declarations // ino.end // ino.method.makeRefTypesFullyQualified.21325.definition - public static void makeRefTypesFullyQualified(Vector containedTypes, ImportDeclarations declarations) + public static void makeRefTypesFullyQualified(Menge containedTypes, ImportDeclarations declarations) // ino.end // ino.method.makeRefTypesFullyQualified.21325.body { @@ -727,7 +727,7 @@ public class MyCompiler implements MyCompilerAPI RefType refT = (RefType)T; if(refT.get_ParaList() != null) { - Vector paras = refT.get_ParaList(); + Menge paras = refT.get_ParaList(); for(int i = 0; i filenames) throws ParserError { + public void parse(Menge filenames) throws ParserError { for(String filename : filenames){ StringBuffer fileData = new StringBuffer(); @@ -853,7 +853,7 @@ public class MyCompiler implements MyCompilerAPI } @Override - public Vector codeGeneration(ResultSet result) + public Menge codeGeneration(ResultSet result) throws NullPointerException, JVMCodeException { // TODO Auto-generated method stub return null; diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index e774618f..24b7728c 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.core; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -85,7 +85,7 @@ public interface MyCompilerAPI */ // ino.end // ino.method.typeReconstruction.21340.declaration - public Vector typeReconstruction() + public Menge typeReconstruction() throws NullPointerException, TypeinferenceException; // ino.end @@ -99,7 +99,7 @@ public interface MyCompilerAPI */ // ino.end // ino.method.codeGeneration.21346.declaration - public Vector codeGeneration(ResultSet result) + public Menge codeGeneration(ResultSet result) throws NullPointerException, JVMCodeException; // ino.end @@ -127,7 +127,7 @@ public interface MyCompilerAPI * Parst zusammenhängende JavaKlassen in verschiedenen Dateien. * @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen */ - public void parse(Vector filenames) throws ParserError; + public void parse(Menge filenames) throws ParserError; /** * Parst den SourceCode einer Datei. diff --git a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java index babbc691..5a7d0bca 100755 --- a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java +++ b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.myexception; // ino.end // ino.module.CTypeReconstructionException.8572.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; @@ -24,7 +24,7 @@ public class CTypeReconstructionException extends RuntimeException private static final long serialVersionUID = -7744106691767607974L; // ino.end // ino.attribute.parentExceptions.23753.declaration - public Vector parentExceptions; + public Menge parentExceptions; // ino.end // ino.attribute.problemSource.23756.decldescription type=javadoc @@ -51,7 +51,7 @@ public class CTypeReconstructionException extends RuntimeException // ino.end // ino.method.CTypeReconstructionException.23765.definition - public CTypeReconstructionException(String message, Vector parentExceptions, IItemWithOffset problemSource) + public CTypeReconstructionException(String message, Menge parentExceptions, IItemWithOffset problemSource) // ino.end // ino.method.CTypeReconstructionException.23765.body { @@ -63,14 +63,14 @@ public class CTypeReconstructionException extends RuntimeException // ino.end // ino.method.getHighestProblemSources.23768.definition - public Vector getHighestProblemSources() + public Menge getHighestProblemSources() // ino.end // ino.method.getHighestProblemSources.23768.body { - Vector stmts=new Vector(); + Menge stmts=new Menge(); if(parentExceptions!=null){ for(int i=0;i problems = parentExceptions.elementAt(i).getHighestProblemSources(); + Menge problems = parentExceptions.elementAt(i).getHighestProblemSources(); for(int j=0;j getProblemLines(){ - Vector problems=getHighestProblemSources(); - Vector lines=new Vector(); + /*private Menge getProblemLines(){ + Menge problems=getHighestProblemSources(); + Menge lines=new Menge(); for(int i=0;i exlist=new Vector(); + private Menge exlist=new Menge(); // ino.end // ino.method.addException.23810.definition @@ -29,7 +29,7 @@ public class SCClassBodyException extends Exception // ino.end // ino.method.get_exlist.23813.definition - public Vector get_exlist() + public Menge get_exlist() // ino.end // ino.method.get_exlist.23813.body { diff --git a/src/de/dhbwstuttgart/myexception/SCClassException.java b/src/de/dhbwstuttgart/myexception/SCClassException.java index f39629cd..af6ea2c7 100755 --- a/src/de/dhbwstuttgart/myexception/SCClassException.java +++ b/src/de/dhbwstuttgart/myexception/SCClassException.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.myexception; // ino.end // ino.module.SCClassException.8576.import import java.util.Enumeration; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -19,14 +19,14 @@ public class SCClassException extends Exception private static final long serialVersionUID = 5339857618390360728L; // ino.end // ino.attribute.exlist.23823.declaration - private Vector exlist=new Vector(); + private Menge exlist=new Menge(); // ino.end // ino.attribute.parserlog.23826.declaration protected static Logger parserlog = Logger.getLogger("parser"); // ino.end // ino.method.addException.23829.definition - public void addException(Vector v) + public void addException(Menge v) // ino.end // ino.method.addException.23829.body { diff --git a/src/de/dhbwstuttgart/myexception/SCException.java b/src/de/dhbwstuttgart/myexception/SCException.java index 35b13e4e..6d528eeb 100755 --- a/src/de/dhbwstuttgart/myexception/SCException.java +++ b/src/de/dhbwstuttgart/myexception/SCException.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.myexception; // ino.end // ino.module.SCException.8578.import import java.util.Enumeration; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -18,7 +18,7 @@ public class SCException extends Exception private static final long serialVersionUID = 1L; // ino.end // ino.attribute.scerrors.23887.declaration - private Vector scerrors = new Vector(); + private Menge scerrors = new Menge(); // ino.end // ino.attribute.parserlog.23890.declaration protected static Logger parserlog = Logger.getLogger("parser"); diff --git a/src/de/dhbwstuttgart/myexception/SCMethodException.java b/src/de/dhbwstuttgart/myexception/SCMethodException.java index e336528f..a65cfcdf 100755 --- a/src/de/dhbwstuttgart/myexception/SCMethodException.java +++ b/src/de/dhbwstuttgart/myexception/SCMethodException.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.myexception; // ino.end // ino.module.SCMethodException.8579.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end @@ -17,11 +17,11 @@ public class SCMethodException extends Exception // ino.end // ino.attribute.exlist.23906.declaration - private Vector exlist; + private Menge exlist; // ino.end // ino.method.get_exlist.23909.definition - public Vector get_exlist() + public Menge get_exlist() // ino.end // ino.method.get_exlist.23909.body { @@ -30,7 +30,7 @@ public class SCMethodException extends Exception // ino.end // ino.method.set_exlist.23912.definition - public void set_exlist(Vector list) + public void set_exlist(Menge list) // ino.end // ino.method.set_exlist.23912.body { diff --git a/src/de/dhbwstuttgart/myexception/SCStatementException.java b/src/de/dhbwstuttgart/myexception/SCStatementException.java index f477527b..7552752e 100755 --- a/src/de/dhbwstuttgart/myexception/SCStatementException.java +++ b/src/de/dhbwstuttgart/myexception/SCStatementException.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.myexception; // ino.end // ino.module.SCStatementException.8580.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end @@ -17,11 +17,11 @@ public class SCStatementException extends Exception // ino.end // ino.attribute.exlist.23922.declaration - private Vector exlist= new Vector(); + private Menge exlist= new Menge(); // ino.end // ino.method.get_exlist.23925.definition - public Vector get_exlist() + public Menge get_exlist() // ino.end // ino.method.get_exlist.23925.body { diff --git a/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java b/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java index 844f6ee6..0531cbd0 100644 --- a/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java +++ b/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java @@ -1,17 +1,17 @@ package de.dhbwstuttgart.parser; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -public class BoundedClassIdentifierList extends Vector{ +public class BoundedClassIdentifierList extends Menge{ private int endOffset; - private Vector list; + private Menge list; - public BoundedClassIdentifierList(Vector list, int endOffset){ + public BoundedClassIdentifierList(Menge list, int endOffset){ this.endOffset = endOffset; this.addAll(list); } diff --git a/src/de/dhbwstuttgart/parser/ClassAndParameter.java b/src/de/dhbwstuttgart/parser/ClassAndParameter.java index 87441788..7936aeab 100755 --- a/src/de/dhbwstuttgart/parser/ClassAndParameter.java +++ b/src/de/dhbwstuttgart/parser/ClassAndParameter.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.parser; // ino.end // ino.module.ClassAndParameter.8613.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ParaList; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -49,10 +49,10 @@ public class ClassAndParameter } // ino.end - // ino.method.getParaVector.24338.definition - public Vector getParaVector() + // ino.method.getParaMenge.24338.definition + public Menge getParaMenge() // ino.end - // ino.method.getParaVector.24338.body + // ino.method.getParaMenge.24338.body { if (plist == null) return null; diff --git a/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java b/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java index ef1ad7c8..d53679b0 100644 --- a/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java +++ b/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java @@ -1,13 +1,13 @@ package de.dhbwstuttgart.parser; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.typeinference.exceptions.DebugException; public class GenericVarDeclarationList { - private Vector elements = new Vector<>(); + private Menge elements = new Menge<>(); public void addElement(GenericTypeVar e){ elements.addElement(e); @@ -20,7 +20,7 @@ public class GenericVarDeclarationList { return ret; } - public Vector getElements(){ + public Menge getElements(){ return elements; } } diff --git a/src/de/dhbwstuttgart/parser/InterfaceAndParameter.java b/src/de/dhbwstuttgart/parser/InterfaceAndParameter.java index 1aa50b6f..732349ae 100755 --- a/src/de/dhbwstuttgart/parser/InterfaceAndParameter.java +++ b/src/de/dhbwstuttgart/parser/InterfaceAndParameter.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.parser; // ino.end // ino.module.InterfaceAndParameter.8614.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ParaList; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -50,10 +50,10 @@ public class InterfaceAndParameter } // ino.end - // ino.method.getParaVector.24368.definition - public Vector getParaVector() + // ino.method.getParaMenge.24368.definition + public Menge getParaMenge() // ino.end - // ino.method.getParaVector.24368.body + // ino.method.getParaMenge.24368.body { if (plist == null) return null; diff --git a/src/de/dhbwstuttgart/parser/InterfaceList.java b/src/de/dhbwstuttgart/parser/InterfaceList.java index a3b8b82d..045b6ad9 100755 --- a/src/de/dhbwstuttgart/parser/InterfaceList.java +++ b/src/de/dhbwstuttgart/parser/InterfaceList.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.parser; // ino.end // ino.module.InterfaceList.8615.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.Interface; import de.dhbwstuttgart.syntaxtree.misc.UsedId; @@ -13,7 +13,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; // ino.class.InterfaceList.24383.description type=javadoc /** * Hilfskonstrukt fuer die Grammatik, um ungepruefte - * Typcasts fuer Vectoren zu umgehen. Wird nuer fuer den + * Typcasts fuer Mengeen zu umgehen. Wird nuer fuer den * Parser benoetigt. * @author SCJU * @@ -25,7 +25,7 @@ public class InterfaceList // ino.class.InterfaceList.24383.body { // ino.attribute.superif.24386.declaration - private Vector superif = new Vector(); + private Menge superif = new Menge(); // ino.end // ino.method.addInterface.24389.definition @@ -37,12 +37,12 @@ public class InterfaceList } // ino.end - // ino.method.getVector.24392.definition - public Vector getTypeVector() + // ino.method.getMenge.24392.definition + public Menge getTypeMenge() // ino.end - // ino.method.getVector.24392.body + // ino.method.getMenge.24392.body { - Vector ret = new Vector<>(); + Menge ret = new Menge<>(); for(UsedId name : superif){ ret.add(new Interface(name.get_Name_1Element(), name.getOffset()).getType()); } diff --git a/src/de/dhbwstuttgart/parser/JavaClassName.java b/src/de/dhbwstuttgart/parser/JavaClassName.java index 31609fe3..372b647d 100644 --- a/src/de/dhbwstuttgart/parser/JavaClassName.java +++ b/src/de/dhbwstuttgart/parser/JavaClassName.java @@ -1,12 +1,12 @@ package de.dhbwstuttgart.parser; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; /** * Stellt den Namen einer Java Klasse dar. - * Dieser kann auch den Packagenamen mit beinhalten: java.util.Vector + * Dieser kann auch den Packagenamen mit beinhalten: de.dhbwstuttgart.typeinference.Menge * * @author janulrich * @@ -25,7 +25,7 @@ public class JavaClassName { this.name = name; }else { name = names[names.length-1]; - Vector packageNames = new Vector(); + Menge packageNames = new Menge(); for(int i = 0; i names = new Vector(); + Menge names = new Menge(); - public PackageName(Vector packageNames) { + public PackageName(Menge packageNames) { names = packageNames; } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index a90acd91..2baa8e12 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -25,29 +25,29 @@ import de.dhbwstuttgart.syntaxtree.modifier.*; import de.dhbwstuttgart.syntaxtree.operator.*; import de.dhbwstuttgart.syntaxtree.type.*; import de.dhbwstuttgart.syntaxtree.statement.*; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class JavaParser{ -public Vector path = new Vector(); +public Menge path = new Menge(); //PL 05-07-30 eingefuegt. ANFANG -private Vector containedTypes = new Vector(); -private Vector usedIdsToCheck = new Vector(); +private Menge containedTypes = new Menge(); +private Menge usedIdsToCheck = new Menge(); //Vektor aller Typdeklarationen die in aktueller Klasse vorkommen. //wird nach Beendigung der Klasse des Attributs der jeweiligen //Klasse zugeordnet //nach dem Parsen wird mit wandleGeneric2RefType die //die RefTypes gesetzt. void initContainedTypes() { - this.containedTypes = new Vector(); + this.containedTypes = new Menge(); } void initUsedIdsToCheck() { - this.usedIdsToCheck = new Vector(); + this.usedIdsToCheck = new Menge(); } //PL 05-07-30 eingefuegt. ENDE //LUAR 07-05-29 Anfang für Wildcard Test -public Vector testPair = new Vector(); +public Menge testPair = new Menge(); //LUAR 07-05-29 Ende // line 53 "-" // %token constants @@ -168,7 +168,7 @@ public Vector testPair = new Vector(); /** (syntax) error message. Can be overwritten to control message format. @param message text to be displayed. - @param expected vector of acceptable tokens, if available. + @param expected Menge of acceptable tokens, if available. */ public String yyerror (String message, String[] expected) { if (expected != null && expected.length > 0) { @@ -830,12 +830,12 @@ case 20: /* String name, */ /* Modifiers mod,*/ /* ClassBody classbody, */ - /* Vector containedtypes, */ + /* Menge containedtypes, */ /* UsedId superclass, */ - /* Vector SuperInterfaces, */ - /* Vector Parameterliste*/ + /* Menge SuperInterfaces, */ + /* Menge Parameterliste*/ - yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaMenge(), ((Token)yyVals[-2+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -843,7 +843,7 @@ case 20: case 21: // line 376 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaMenge(), ((Token)yyVals[-2+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -851,7 +851,7 @@ case 21: case 22: // line 382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -859,7 +859,7 @@ case 22: case 23: // line 388 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -867,7 +867,7 @@ case 23: case 24: // line 395 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -875,7 +875,7 @@ case 24: case 25: // line 401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -883,7 +883,7 @@ case 25: case 26: // line 407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaMenge(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -891,7 +891,7 @@ case 26: case 27: // line 413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset()); + yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaMenge(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -929,7 +929,7 @@ case 32: { /* SCJU: Interface*/ Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Token)yyVals[-2+yyTop]).getOffset()); - ic.setParaList(((InterfaceAndParameter)yyVals[-1+yyTop]).getParaVector()); + ic.setParaList(((InterfaceAndParameter)yyVals[-1+yyTop]).getParaMenge()); ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -941,7 +941,7 @@ case 33: { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((Token)yyVals[-2+yyTop]).getOffset()); ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); - ic.setParaList(((InterfaceAndParameter)yyVals[-1+yyTop]).getParaVector()); + ic.setParaList(((InterfaceAndParameter)yyVals[-1+yyTop]).getParaMenge()); ic.setContainedTypes(containedTypes); initContainedTypes(); yyVal = ic; @@ -951,8 +951,8 @@ case 34: // line 461 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Token)yyVals[-3+yyTop]).getOffset()); - ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaVector()); - /*ic.setSuperInterfaces($3.getVector());*/ + ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaMenge()); + /*ic.setSuperInterfaces($3.getMenge());*/ ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -963,8 +963,8 @@ case 35: // line 471 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((Token)yyVals[-3+yyTop]).getOffset()); - ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaVector()); - /*ic.setSuperInterfaces($4.getVector());*/ + ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaMenge()); + /*ic.setSuperInterfaces($4.getMenge());*/ ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -1250,11 +1250,11 @@ case 70: case 71: // line 712 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - if (((Vector)yyVals[0+yyTop]) != null) { + if (((Menge)yyVals[0+yyTop]) != null) { /*$1.set_ParaList($2.get_ParaList());*/ - ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Vector)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ + ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ /* otth: originale (also diese) Parameterliste retten */ - /*((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() );*/ + /*((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() );*/ } yyVal=((UsedId)yyVals[-1+yyTop]); } @@ -1262,7 +1262,7 @@ case 71: case 72: // line 723 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Vector tl = new Vector(); + Menge tl = new Menge(); tl.add(((Type)yyVals[0+yyTop])); yyVal = tl; } @@ -1270,21 +1270,21 @@ case 72: case 73: // line 729 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - ((Vector)yyVals[-2+yyTop]).add(((Type)yyVals[0+yyTop])); - yyVal=((Vector)yyVals[-2+yyTop]); + ((Menge)yyVals[-2+yyTop]).add(((Type)yyVals[0+yyTop])); + yyVal=((Menge)yyVals[-2+yyTop]); } break; case 74: // line 734 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - ((Vector)yyVals[-2+yyTop]).add(((WildcardType)yyVals[0+yyTop])); - yyVal=((Vector)yyVals[-2+yyTop]); + ((Menge)yyVals[-2+yyTop]).add(((WildcardType)yyVals[0+yyTop])); + yyVal=((Menge)yyVals[-2+yyTop]); } break; case 75: // line 739 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Vector tl = new Vector(); + Menge tl = new Menge(); tl.add(((WildcardType)yyVals[0+yyTop])); yyVal = tl; } @@ -1296,7 +1296,7 @@ case 76: case 77: // line 749 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - yyVal = ((Vector)yyVals[-1+yyTop]); + yyVal = ((Menge)yyVals[-1+yyTop]); } break; case 78: @@ -1434,9 +1434,9 @@ case 95: // line 882 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); - for(int i=0;i<(((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdVector().size());i++) + for(int i=0;i<(((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdMenge().size());i++) { - ((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdVector().elementAt(i).modifiers=((Modifiers)yyVals[-3+yyTop]); + ((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdMenge().elementAt(i).modifiers=((Modifiers)yyVals[-3+yyTop]); } yyVal = ((FieldDeclaration)yyVals[-1+yyTop]); } @@ -1561,7 +1561,7 @@ case 110: case 111: // line 990 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Vector vec=new Vector(); + Menge vec=new Menge(); vec.addElement(((RefType)yyVals[0+yyTop])); containedTypes.addElement(((RefType)yyVals[0+yyTop])); yyVal=new BoundedClassIdentifierList(vec, ((RefType)yyVals[0+yyTop]).getOffset()+((RefType)yyVals[0+yyTop]).getName().toString().length()); @@ -1803,7 +1803,7 @@ case 140: // line 1181 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration IVD = new FieldDeclaration(((DeclId)yyVals[0+yyTop]).getOffset()); - IVD.getDeclIdVector().addElement( ((DeclId)yyVals[0+yyTop]) ); + IVD.getDeclIdMenge().addElement( ((DeclId)yyVals[0+yyTop]) ); IVD.setOffset(((DeclId)yyVals[0+yyTop]).getOffset()); yyVal = IVD; } @@ -1811,7 +1811,7 @@ case 140: case 141: // line 1188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - ((FieldDeclaration)yyVals[-2+yyTop]).getDeclIdVector().addElement(((DeclId)yyVals[0+yyTop])); + ((FieldDeclaration)yyVals[-2+yyTop]).getDeclIdMenge().addElement(((DeclId)yyVals[0+yyTop])); yyVal=((FieldDeclaration)yyVals[-2+yyTop]); } break; @@ -2136,7 +2136,7 @@ case 179: de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((Type)yyVals[-1+yyTop]).getOffset(),((Type)yyVals[-1+yyTop]).getVariableLength()); LVD.setType(((Type)yyVals[-1+yyTop])); - LVD.setDeclidVector(((FieldDeclaration)yyVals[0+yyTop]).getDeclIdVector()); + LVD.setDeclidMenge(((FieldDeclaration)yyVals[0+yyTop]).getDeclIdMenge()); yyVal = LVD; } break; @@ -2146,7 +2146,7 @@ case 180: de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((FieldDeclaration)yyVals[0+yyTop]).getOffset(),((FieldDeclaration)yyVals[0+yyTop]).getVariableLength()); /*auskommentiert von Andreas Stadelmeier (a10023) LVD.setType(TypePlaceholder.fresh());*/ - LVD.setDeclidVector(((FieldDeclaration)yyVals[0+yyTop]).getDeclIdVector()); + LVD.setDeclidMenge(((FieldDeclaration)yyVals[0+yyTop]).getDeclIdMenge()); yyVal = LVD; } break; diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 7d6874b0..8df87947 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -23,29 +23,29 @@ import de.dhbwstuttgart.syntaxtree.modifier.*; import de.dhbwstuttgart.syntaxtree.operator.*; import de.dhbwstuttgart.syntaxtree.type.*; import de.dhbwstuttgart.syntaxtree.statement.*; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class JavaParser{ -public Vector path = new Vector(); +public Menge path = new Menge(); //PL 05-07-30 eingefuegt. ANFANG -private Vector containedTypes = new Vector(); -private Vector usedIdsToCheck = new Vector(); +private Menge containedTypes = new Menge(); +private Menge usedIdsToCheck = new Menge(); //Vektor aller Typdeklarationen die in aktueller Klasse vorkommen. //wird nach Beendigung der Klasse des Attributs der jeweiligen //Klasse zugeordnet //nach dem Parsen wird mit wandleGeneric2RefType die //die RefTypes gesetzt. void initContainedTypes() { - this.containedTypes = new Vector(); + this.containedTypes = new Menge(); } void initUsedIdsToCheck() { - this.usedIdsToCheck = new Vector(); + this.usedIdsToCheck = new Menge(); } //PL 05-07-30 eingefuegt. ENDE //LUAR 07-05-29 Anfang für Wildcard Test -public Vector testPair = new Vector(); +public Menge testPair = new Menge(); //LUAR 07-05-29 Ende %} @@ -220,8 +220,8 @@ public Vector testPair = new Vector(); %type typedeclarations %type boundedMethodParameter; %type boundedClassParameter; -%type boundedclassidentifierlist //Vector -%type boundedMethodParameters; // Vector +%type boundedclassidentifierlist //Menge +%type boundedMethodParameters; // Menge %type boundedClassParameters; // ParaList %type packagedeclaration %type assignment @@ -238,7 +238,7 @@ public Vector testPair = new Vector(); %type staticinitializer %type castexpression %type paralist -%type typelist parameter +%type typelist parameter %type wildcardparameter %left ',' %% @@ -363,55 +363,55 @@ classdeclaration : CLASS classidentifier classbody // String name, // Modifiers mod, // ClassBody classbody, - // Vector containedtypes, + // Menge containedtypes, // UsedId superclass, - // Vector SuperInterfaces, - // Vector Parameterliste + // Menge SuperInterfaces, + // Menge Parameterliste - $$ = new Class($2.getName(), null, $3, containedTypes, null, $2.getParaVector(), $1.getOffset()); + $$ = new Class($2.getName(), null, $3, containedTypes, null, $2.getParaMenge(), $1.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | modifiers CLASS classidentifier classbody { - $$ = new Class($3.getName(), $1, $4, containedTypes, null, $3.getParaVector(), $2.getOffset()); + $$ = new Class($3.getName(), $1, $4, containedTypes, null, $3.getParaMenge(), $2.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | CLASS classidentifier super classbody { - $$ = new Class($2.getName(), null, $4, containedTypes, $3, null, $2.getParaVector(), $1.getOffset()); + $$ = new Class($2.getName(), null, $4, containedTypes, $3, null, $2.getParaMenge(), $1.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | modifiers CLASS classidentifier super classbody { - $$ = new Class($3.getName(), $1, $5, containedTypes, $4, null, $3.getParaVector(), $2.getOffset()); + $$ = new Class($3.getName(), $1, $5, containedTypes, $4, null, $3.getParaMenge(), $2.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } ///* auskommentiert von Andreas Stadelmeier A10023 | CLASS classidentifier interfaces classbody { - $$ = new Class($2.getName(), null, $4, containedTypes, $3.getTypeVector(), $2.getParaVector(), $1.getOffset()); + $$ = new Class($2.getName(), null, $4, containedTypes, $3.getTypeMenge(), $2.getParaMenge(), $1.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | modifiers CLASS classidentifier interfaces classbody { - $$ = new Class($3.getName(), $1, $5, containedTypes, $4.getTypeVector(), $3.getParaVector(), $2.getOffset()); + $$ = new Class($3.getName(), $1, $5, containedTypes, $4.getTypeMenge(), $3.getParaMenge(), $2.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | CLASS classidentifier super interfaces classbody { - $$ = new Class($2.getName(), null, $5, containedTypes, $3, $4.getTypeVector(), $2.getParaVector(), $1.getOffset()); + $$ = new Class($2.getName(), null, $5, containedTypes, $3, $4.getTypeMenge(), $2.getParaMenge(), $1.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } | modifiers CLASS classidentifier super interfaces classbody { - $$ = new Class($3.getName(), $1, $6, containedTypes, $4, $5.getTypeVector(), $3.getParaVector(), $2.getOffset()); + $$ = new Class($3.getName(), $1, $6, containedTypes, $4, $5.getTypeMenge(), $3.getParaMenge(), $2.getOffset()); this.initContainedTypes(); this.initUsedIdsToCheck(); } @@ -442,7 +442,7 @@ interfacedeclaration: INTERFACE interfaceidentifier interfacebody { // SCJU: Interface Interface ic = new Interface($2.getName(), $1.getOffset()); - ic.setParaList($2.getParaVector()); + ic.setParaList($2.getParaMenge()); ic.setInterfaceBody($3); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -452,7 +452,7 @@ interfacedeclaration: INTERFACE interfaceidentifier interfacebody { Interface ic = new Interface($3.getName(), $1, $2.getOffset()); ic.setInterfaceBody($4); - ic.setParaList($3.getParaVector()); + ic.setParaList($3.getParaMenge()); ic.setContainedTypes(containedTypes); initContainedTypes(); $$ = ic; @@ -460,8 +460,8 @@ interfacedeclaration: INTERFACE interfaceidentifier interfacebody | INTERFACE interfaceidentifier extendsinterfaces interfacebody { Interface ic = new Interface($2.getName(), $1.getOffset()); - ic.setParaList($2.getParaVector()); - //ic.setSuperInterfaces($3.getVector()); + ic.setParaList($2.getParaMenge()); + //ic.setSuperInterfaces($3.getMenge()); ic.setInterfaceBody($4); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -470,8 +470,8 @@ interfacedeclaration: INTERFACE interfaceidentifier interfacebody | modifiers INTERFACE interfaceidentifier extendsinterfaces interfacebody ; { Interface ic = new Interface($3.getName(), $1, $2.getOffset()); - ic.setParaList($3.getParaVector()); - //ic.setSuperInterfaces($4.getVector()); + ic.setParaList($3.getParaMenge()); + //ic.setSuperInterfaces($4.getMenge()); ic.setInterfaceBody($5); ic.setContainedTypes(containedTypes); initContainedTypes(); @@ -714,14 +714,14 @@ classorinterfacetype : name parameter //$1.set_ParaList($2.get_ParaList()); $1.set_ParaList($2);//Änderung von Andreas Stadelmeier. Type statt GenericVarType /* otth: originale (also diese) Parameterliste retten */ - //((UsedId)$1).vParaOrg = new Vector( $2.get_ParaList() ); + //((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() ); } $$=$1; } typelist : type { - Vector tl = new Vector(); + Menge tl = new Menge(); tl.add($1); $$ = tl; } @@ -737,7 +737,7 @@ typelist : type } | wildcardparameter { - Vector tl = new Vector(); + Menge tl = new Menge(); tl.add($1); $$ = tl; } @@ -881,9 +881,9 @@ fielddeclaration : type fielddeclarator ';' | modifiers type variabledeclarators ';' { $3.setType($2); - for(int i=0;i<($3.getDeclIdVector().size());i++) + for(int i=0;i<($3.getDeclIdMenge().size());i++) { - $3.getDeclIdVector().elementAt(i).modifiers=$1; + $3.getDeclIdMenge().elementAt(i).modifiers=$1; } $$ = $3; } @@ -985,10 +985,10 @@ boundedMethodParameter : IDENTIFIER //gtv.setBounds($3); $$=gtv; } -// returns Vector +// returns Menge boundedclassidentifierlist : referencetype { - Vector vec=new Vector(); + Menge vec=new Menge(); vec.addElement($1); containedTypes.addElement($1); $$=new BoundedClassIdentifierList(vec, $1.getOffset()+$1.getName().toString().length()); @@ -1000,7 +1000,7 @@ boundedclassidentifierlist : referencetype containedTypes.addElement($3); $$=$1; } -// returns Vector +// returns Menge boundedMethodParameters : boundedMethodParameter { GenericVarDeclarationList vec=new GenericVarDeclarationList(); @@ -1180,13 +1180,13 @@ type : primitivetype variabledeclarators : variabledeclarator { FieldDeclaration IVD = new FieldDeclaration($1.getOffset()); - IVD.getDeclIdVector().addElement( $1 ); + IVD.getDeclIdMenge().addElement( $1 ); IVD.setOffset($1.getOffset()); $$ = IVD; } | variabledeclarators ',' variabledeclarator { - $1.getDeclIdVector().addElement($3); + $1.getDeclIdMenge().addElement($3); $$=$1; } @@ -1493,7 +1493,7 @@ localvariabledeclaration : type variabledeclarators de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl($1.getOffset(),$1.getVariableLength()); LVD.setType($1); - LVD.setDeclidVector($2.getDeclIdVector()); + LVD.setDeclidMenge($2.getDeclIdMenge()); $$ = LVD; } @@ -1504,7 +1504,7 @@ localvariabledeclaration : type variabledeclarators de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl($1.getOffset(),$1.getVariableLength()); //auskommentiert von Andreas Stadelmeier (a10023) LVD.setType(TypePlaceholder.fresh()); - LVD.setDeclidVector($1.getDeclIdVector()); + LVD.setDeclidMenge($1.getDeclIdMenge()); $$ = LVD; } /* ########################################################### */ diff --git a/src/de/dhbwstuttgart/parser/JavaParser_old.jay b/src/de/dhbwstuttgart/parser/JavaParser_old.jay index 4c5a00e4..04b93a75 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser_old.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser_old.jay @@ -1,7 +1,7 @@ %{ package mycompiler.myparser; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.DeclId; import mycompiler.ExceptionList; @@ -82,7 +82,7 @@ import mycompiler.mytype.Type; import mycompiler.mytype.TyploseVariable; public class JavaParser{ -public Vector path = new Vector(); +public Menge path = new Menge(); %} %token ABSTRACT @@ -491,7 +491,7 @@ classtype : classorinterfacetype $1.set_ParaList($3.get_ParaList()); /* otth: originale (also diese) Parameterliste retten */ - ((UsedId)$1).vParaOrg = new Vector( $3.get_ParaList() ); + ((UsedId)$1).vParaOrg = new Menge( $3.get_ParaList() ); $$ = $1; } diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 75108071..8f63cd5a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -7,7 +7,7 @@ import java.util.Collection; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -50,7 +50,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I protected Modifiers modifiers; protected String name; - private Vector superif = new Vector(); + private Menge superif = new Menge(); public UsedId getPackageName() { @@ -88,13 +88,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I return ret; } - public Vector getSuperInterfaces() + public Menge getSuperInterfaces() { return superif; } @Override - public void setSuperInterfaces(Vector superif) + public void setSuperInterfaces(Menge superif) { this.superif = superif; } @@ -112,7 +112,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I private Block class_block; // ino.end // ino.attribute.paralist.23023.declaration - //private Vector paralist = new Vector(); // Parameterliste 'class xy{}' wird gespeichert + //private Menge paralist = new Menge(); // Parameterliste 'class xy{}' wird gespeichert // ino.end // ino.attribute.parahash.23026.declaration private Hashtable parahash = new Hashtable(); // parametrisierten Attrib. werden mit den Paramet.aus paralist verk. @@ -121,17 +121,17 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I public static boolean isFirstLocalVarDecl; //Hilfsvariable fuer Offsets, hoth // ino.end - //private Vector genericClassParameters=new Vector(); + //private Menge genericClassParameters=new Menge(); // ino.attribute.containedTypes.23032.decldescription type=line // PL 05-07-30 eingefuegt. Vektor aller Typdeklarationen, die in der Klasse // vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt. // ino.end // ino.attribute.containedTypes.23032.declaration - private Vector containedTypes = new Vector(); + private Menge containedTypes = new Menge(); // ino.end // ino.attribute.usedIdsToCheck.23035.declaration - private Vector usedIdsToCheck = new Vector(); + private Menge usedIdsToCheck = new Menge(); // ino.end private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden. @@ -141,7 +141,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.end protected Logger typinferenzLog = Logger.getLogger(Class.class.getName()); private SyntaxTreeNode parent; - private Vector fielddecl = new Vector(); + private Menge fielddecl = new Menge(); private GenericDeclarationList genericClassParameters; private int offset; private Type superClass; @@ -171,10 +171,10 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I * @param supertypeGenPara - Eine Liste von Namen, welche die Generischen Parameter der Klasse darstellen. */ public Class(String name, RefType superClass, Modifiers modifiers, - Vector supertypeGenPara) { + Menge supertypeGenPara) { this(name,superClass,modifiers,0); if(supertypeGenPara == null)return; - Vector gtvs = new Vector<>(); + Menge gtvs = new Menge<>(); for(String gname : supertypeGenPara){ GenericTypeVar newGTV=new GenericTypeVar(gname,this,0); gtvs.add(newGTV); @@ -198,26 +198,26 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } // ino.end - public Class(String name, Modifiers mod, ClassBody cb, Vector ct, Vector usedIdsToCheck, - UsedId superclass, Vector superif, Vector paralist, int offset){ + public Class(String name, Modifiers mod, ClassBody cb, Menge ct, Menge usedIdsToCheck, + UsedId superclass, Menge superif, Menge paralist, int offset){ this(name, mod, cb, ct, usedIdToRefType(superclass),usedIdToRefType(superif),paralist,offset); } - public Class(String name, ClassBody cb, Vector ct, - UsedId superclass, Vector superif, Vector paralist, int offset) { + public Class(String name, ClassBody cb, Menge ct, + UsedId superclass, Menge superif, Menge paralist, int offset) { this(name,null,cb,ct,usedIdToRefType(superclass),superif,paralist,offset); } public Class(String name2, Modifiers modifiers2, ClassBody classBody, - Vector containedTypes2, UsedId usedId, - Vector typeVector, Vector paraVector, int offset2) { - this(name2, modifiers2, classBody, containedTypes2, usedIdToRefType(usedId),typeVector, paraVector, offset2); + Menge containedTypes2, UsedId usedId, + Menge typeMenge, Menge paraMenge, int offset2) { + this(name2, modifiers2, classBody, containedTypes2, usedIdToRefType(usedId),typeMenge, paraMenge, offset2); } public Class(String name2, Modifiers object, ClassBody classBody, - Vector containedTypes2, Vector typeVector, - Vector paraVector, int offset2) { - this(name2, object, classBody, containedTypes2,(Type)null, typeVector, paraVector, offset2); + Menge containedTypes2, Menge typeMenge, + Menge paraMenge, int offset2) { + this(name2, object, classBody, containedTypes2,(Type)null, typeMenge, paraMenge, offset2); } - private static Vector usedIdToRefType(Vector superif2) { - Vector ret = new Vector<>(); + private static Menge usedIdToRefType(Menge superif2) { + Menge ret = new Menge<>(); for(UsedId id : superif2)ret.add(usedIdToRefType(id)); return ret; } @@ -234,8 +234,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ // ino.end // ino.method.Class.23047.definition - public Class(String name, Modifiers mod, ClassBody cb, Vector ct, - Type superclass, Vector vector, Vector paralist, int offset) + public Class(String name, Modifiers mod, ClassBody cb, Menge ct, + Type superclass, Menge Menge, Menge paralist, int offset) // ino.end // ino.method.Class.23047.body { @@ -246,14 +246,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if (superclass != null){ this.superClass = superclass; } - if (vector != null) setSuperInterfaces(vector); + if (Menge != null) setSuperInterfaces(Menge); if (paralist != null && !paralist.isEmpty()){ Type lastPara = paralist.lastElement(); Integer lastItemOffset = lastPara.getOffset() + lastPara.get_Name().length(); - this.setGenericParameter(new GenericDeclarationList((Vector)paralist, lastItemOffset)); + this.setGenericParameter(new GenericDeclarationList((Menge)paralist, lastItemOffset)); /* //this.set_ParaList(paralist); - Vector gtvList = new Vector<>(); + Menge gtvList = new Menge<>(); int lastItemOffset = 0; for(Type paraT : paralist){ GenericTypeVar gtv = new GenericTypeVar(paraT.get_Name(),this, paraT.getOffset()); @@ -278,7 +278,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } // ino.end - public Vector getFields() + public Menge getFields() { return fielddecl; } @@ -296,7 +296,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } // ino.method.getUsedIdsToCheck.23050.definition - public Vector getUsedIdsToCheck() + public Menge getUsedIdsToCheck() // ino.end // ino.method.getUsedIdsToCheck.23050.body { @@ -304,7 +304,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } // ino.end // ino.method.setContainedTypes.23053.definition - public void setContainedTypes(Vector containedTypes) + public void setContainedTypes(Menge containedTypes) // ino.end // ino.method.setContainedTypes.23053.body { @@ -313,7 +313,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.end // ino.method.getContainedTypes.23056.definition - public Vector getContainedTypes() + public Menge getContainedTypes() // ino.end // ino.method.getContainedTypes.23056.body { @@ -323,15 +323,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /* // ino.method.complete_paralist.23062.definition - public Vector complete_paralist(boolean ext) + public Menge complete_paralist(boolean ext) // ino.end // ino.method.complete_paralist.23062.body { //Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen - Vector child = paralist; + Menge child = paralist; - paralist = (Vector)superclassid.get_ParaList(); + paralist = (Menge)superclassid.get_ParaList(); for(Enumeration e = child.elements();e.hasMoreElements();){ paralist.addElement(e.nextElement()); @@ -416,7 +416,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ public void set_ClassBody(ClassBody body) { - Vector tempFields=body.getFields(); + Menge tempFields=body.getFields(); for(Field f : this.getFields()){ if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?) @@ -493,7 +493,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /* // ino.method.set_ParaList.23098.definition - public void set_ParaList(Vector para) + public void set_ParaList(Menge para) // ino.end // ino.method.set_ParaList.23098.body { @@ -503,11 +503,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ // ino.method.get_ParaList.23101.definition - public Vector get_ParaList() + public Menge get_ParaList() // ino.end // ino.method.get_ParaList.23101.body { - //if(this.paralist == null)return new Vector(); + //if(this.paralist == null)return new Menge(); return this.getGenericParameter(); } // ino.end @@ -567,7 +567,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } }*/ - /*static void string_rec(Vector v){ + /*static void string_rec(Menge v){ String record=("{"); for(Enumeration e=v.elements();e.hasMoreElements();){ Type t = (Type)e.nextElement(); @@ -617,7 +617,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } }*/ - /*static void string_rec(String st,Vector v) + /*static void string_rec(String st,Menge v) { String record=(st); record=record.concat("{"); @@ -686,7 +686,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I typinferenzLog.debug("Erstellte Assumptions: "+assumptions, Section.TYPEINFERENCE); /* //Generiere Liste mit Expressions, welche zur Initialisierung von Feldern verwendet werden. - Vector fieldInitializers = new Vector(); + Menge fieldInitializers = new Menge(); for(FieldDeclaration field : body.getFieldInitializations()){ Assign fieldAssign = new Assign(0,0); Expr expr1 = new LocalOrFieldVar(field.getName(), 0); @@ -715,10 +715,10 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // Typannahmen erzeugen: ////////////////////////////// inferencelog.debug("Erstelle Ergebnismenge..."); - Vector newA = new Vector(); + Menge newA = new Menge(); // Alle bisherigen M�glichkeiten an Typkombinationen durchgehen: - Vector oldA = supportData.getA(); + Menge oldA = supportData.getA(); for(int i=0; i genericsList = new Vector(); + Menge genericsList = new Menge(); for(int ii =0; ii getMethodList() { + private Menge getMethodList() { if(this.methodList != null) return this.methodList; @@ -767,9 +767,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ////////////////////////////// inferencelog.debug("Baue Eingabedaten..."); TypeAssumptions V_fields_methods = new TypeAssumptions(this.getName()); - Vector methodList = new Vector(); - Vector V = new Vector(); - Vector rememberLocals = new Vector(); + Menge methodList = new Menge(); + Menge V = new Menge(); + Menge rememberLocals = new Menge(); ////////////////////////////// // Alle Felder durchgehen: @@ -814,7 +814,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I methodList.addElement(method); // F�r V_fields_methods: - CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(this.getType(), method.get_Method_Name(), method.getReturnType(), method.getParameterCount(),method.getLineNumber(),method.getOffset(),new Vector(),method.getGenericMethodParameters()); // Typannahme bauen... + CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(this.getType(), method.get_Method_Name(), method.getReturnType(), method.getParameterCount(),method.getLineNumber(),method.getOffset(),new Menge(),method.getGenericMethodParameters()); // Typannahme bauen... // Methode in V_Fields_methods ablegen @@ -835,7 +835,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I for(int i=0; i()); + CParaTypeAssumption paraAssum = new CParaTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),para.getIdentifier(), para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -848,7 +848,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // F�r die V_i: - CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),"1", para.getIdentifier(),para.getType(), para.getLineNumber(),para.getOffset(),new Vector()); + CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),"1", para.getIdentifier(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); rememberLocals.addElement(varAssum); } @@ -886,14 +886,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt) //auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird. //if(assumptions.getMethodAssumptions(this.getName(), "").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde: - // assumptions.addMethodAssumption(new RefType(this.getName(),0), "", new RefType(this.getName(),0), new Vector()); + // assumptions.addMethodAssumption(new RefType(this.getName(),0), "", new RefType(this.getName(),0), new Menge()); //} this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. return assumptions; } /* - public ConstraintsSet TYPE(Vector methodList, Vector fielddeclarationList, TypeAssumptions assumptions){ + public ConstraintsSet TYPE(Menge methodList, Menge fielddeclarationList, TypeAssumptions assumptions){ ConstraintsSet ret = new ConstraintsSet(); // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. //TypeAssumptions assumptionsPlusFieldAssumptions = new TypeAssumptions(assumptions); @@ -972,7 +972,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //f.wandleRefTypeAttributes2GenericAttributes(paralist); } /* - Vector fieldsAndMethods=this.getFields(); + Menge fieldsAndMethods=this.getFields(); // Alle Methoden und Instanzvariablen durchgehen for(int i=0;i Vector + * p.ex. de.dhbwstuttgart.typeinference.Menge => Menge * @return */ // ino.end @@ -1030,7 +1030,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } // ino.end - public String getTypeInformation(Vector methodList, Vector fieldList){ + public String getTypeInformation(Menge methodList, Menge fieldList){ String ret = this.name+": "; for(Expr field : fieldList){ ret+=field.getTypeInformation()+"\n"; @@ -1098,8 +1098,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. * @param tphs : Alle übriggebliebenen TypePLaceholder - private void createGenericTypeVars(Vector tphs){ - this.genericClassParameters = new GenericDeclarationList(new Vector()); + private void createGenericTypeVars(Menge tphs){ + this.genericClassParameters = new GenericDeclarationList(new Menge()); for(TypePlaceholder tph : tphs){ GenericTypeVar toAdd = new GenericTypeVar(tph,this.getOffset()); if(!this.genericClassParameters.contains(toAdd))this.genericClassParameters.add(toAdd); @@ -1112,7 +1112,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I * @param reconstructionResult public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){ - this.genericClassParameters = new Vector(); + this.genericClassParameters = new Menge(); for(Pair pair : reconstructionResult.getUnifiedConstraints()){ if(pair.TA2 instanceof TypePlaceholder && pair.TA1 instanceof TypePlaceholder){// if(pair.OperatorSmallerExtends() || pair.OperatorSmaller()){ Type ta1=reconstructionResult.getUnifiedConstraints().getTypeEqualTo(pair.TA1); @@ -1143,7 +1143,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ public RefType getType() { /* - Vector parameter = new Vector(); + Menge parameter = new Menge(); for(Type param : this.get_ParaList()){ parameter.add(((GenericTypeVar)param).getTypePlaceHolder());//(TypePlaceholder.fresh()); //Hier ist kein ReplacementListener notwendig. Der Typ soll nie eingesetzt werden. Der TPH wird nur gebraucht, damit das Unifizieren funktioniert. } @@ -1178,7 +1178,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } //Alle Methoden auf Konstruktoren durchsuchen und diese umwandeln: - Vector tempFields = new Vector(); + Menge tempFields = new Menge(); for(Field f : this.getFields()){ if(f instanceof Method && !(f instanceof Constructor)){ Method method = (Method)f; @@ -1206,7 +1206,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I this.addField(standardKonstruktor); } - if(this.genericClassParameters == null)this.setGenericParameter(new GenericDeclarationList(new Vector(), 0)); + if(this.genericClassParameters == null)this.setGenericParameter(new GenericDeclarationList(new Menge(), 0)); /*//Nicht mehr notwendig, Generische Klassenparameter werden nun immer direkt in die genericClassParameters gespeichert. for(Type t : this.get_ParaList()){ if(t instanceof GenericTypeVar)this.genericClassParameters.add((GenericTypeVar)t); @@ -1237,8 +1237,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); //for(Field f : this.getFields()){ // ret.add(f); //} @@ -1258,9 +1258,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } @Override - public Vector getGenericParameter() { - if(this.genericClassParameters == null)return new Vector(); - return this.genericClassParameters.getVector(); + public Menge getGenericParameter() { + if(this.genericClassParameters == null)return new Menge(); + return this.genericClassParameters.getMenge(); } @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java index d6de343b..c8fae5a0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.module.ClassBody.8554.import import java.util.Enumeration; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -31,7 +31,7 @@ import de.dhbwstuttgart.typeinference.ResultSet; public class ClassBody { // ino.attribute.fielddecl.23146.declaration - private Vectorfielddecl = new Vector(); + private Mengefielddecl = new Menge(); // ino.end // ino.attribute.kill.23155.declaration public Hashtable kill = new Hashtable(); @@ -44,7 +44,7 @@ public class ClassBody // ino.method.complete_parahashtable.23173.defdescription type=block -/* public void set_paratype(Vector classlist, UsedId superclass, Vector +/* public void set_paratype(Menge classlist, UsedId superclass, Menge pl,Hashtable ph,boolean ext){ DeclId decl; FieldDecl field; System.out.println("++ ParaCheck: Fielddecl's: "+fielddecl.toString()); @@ -73,7 +73,7 @@ Paratyp gesetzt."); } // ino.end // ino.method.codegen.23176.definition - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.23176.body @@ -96,7 +96,7 @@ Paratyp gesetzt."); } - public Vector getFields() + public Menge getFields() { return fielddecl; } @@ -118,7 +118,7 @@ Paratyp gesetzt."); } // ino.end // ino.method.is_declared.23188.definition -public boolean is_declared(Type t, Vector classlist) +public boolean is_declared(Type t, Menge classlist) throws SCClassBodyException // ino.end // ino.method.is_declared.23188.body @@ -131,7 +131,7 @@ throws SCClassBodyException // System.out.println("is_init: vergleiche "+t.get_Type_()+" mit "+c.getName()); if(c.getName().equals(t.getName())){ -// System.out.println("Klasse "+t.get_Type()+"im Vector classlist gefunden."); +// System.out.println("Klasse "+t.get_Type()+"im Menge classlist gefunden."); flag = true; break; } @@ -207,7 +207,7 @@ static String string_rec(Hashtable ht) // ino.end // ino.method.string_rec.23194.defdescription type=block - /*static void string_rec(Vector v){ + /*static void string_rec(Menge v){ String record=("{"); for(Enumeration e=v.elements();e.hasMoreElements();){ Type t = (Type)e.nextElement(); @@ -258,7 +258,7 @@ static String string_rec(Hashtable ht) // ino.end // ino.method.string_rec.23197.definition -static String string_rec(String st,Vector v) +static String string_rec(String st,Menge v) // ino.end // ino.method.string_rec.23197.body { @@ -281,7 +281,7 @@ static String string_rec(String st,Vector v) // ino.end /* // ino.method.istParameterOK.23200.definition -public void istParameterOK( Vector Parameter, Vector KlassenVektor ) +public void istParameterOK( Menge Parameter, Menge KlassenVektor ) // ino.end // ino.method.istParameterOK.23200.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java index 110256b7..c8b53433 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.ClassHelper.8555.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -28,7 +28,7 @@ public class ClassHelper // ino.end // ino.method.findGenericType.23209.definition @Deprecated - public static GenericTypeVar findGenericType(Type type, Vector paralist, Vector methodParaList) + public static GenericTypeVar findGenericType(Type type, Menge paralist, Menge methodParaList) // ino.end // ino.method.findGenericType.23209.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/Constant.java b/src/de/dhbwstuttgart/syntaxtree/Constant.java index b9e5dcc7..b1be13aa 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Constant.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constant.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.Constant.8556.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.AttributeInfo; import de.dhbwstuttgart.bytecode.ClassFile; @@ -161,7 +161,7 @@ public class Constant extends Method // ino.end // ino.method.codegen.23258.definition - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.23258.body diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 515364c4..859b2c02 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -72,12 +72,12 @@ public class Constructor extends Method { public Constructor(Method methode){ super(methode.getOffset()); this.methode = methode; - this.setDeclIdVector(methode.getDeclIdVector()); + this.setDeclIdMenge(methode.getDeclIdMenge()); this.methode.setType(this.methode.getParentClass().getType()); } @Override - public Vector getGenericParameter() { + public Menge getGenericParameter() { return this.methode.getGenericParameter(); } @@ -200,7 +200,7 @@ public class Constructor extends Method { } @Override - public String get_codegen_Param_Type(Vector paralist) { + public String get_codegen_Param_Type(Menge paralist) { return this.methode.get_codegen_Param_Type(paralist); } @@ -212,13 +212,13 @@ public class Constructor extends Method { } @Override - public Vector get_Type_Paralist() { + public Menge get_Type_Paralist() { return this.methode.get_Type_Paralist(); } @Override - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException { this.methode.codegen(classfile, paralist); @@ -279,7 +279,7 @@ public class Constructor extends Method { } @Override - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist) { + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist) { this.methode.wandleRefTypeAttributes2GenericAttributes(paralist); } @@ -328,7 +328,7 @@ public class Constructor extends Method { } @Override - public Vector getChildren() { + public Menge getChildren() { return this.methode.getChildren(); } @@ -358,20 +358,20 @@ public class Constructor extends Method { @Override - public Vector get_Name() { + public Menge get_Name() { return this.methode.get_Name(); } @Override - public Vector getDeclIdVector() { - return this.methode.getDeclIdVector(); + public Menge getDeclIdMenge() { + return this.methode.getDeclIdMenge(); } @Override - public void setDeclIdVector(Vector vDeclId) { - this.methode.setDeclIdVector(vDeclId); + public void setDeclIdMenge(Menge vDeclId) { + this.methode.setDeclIdMenge(vDeclId); } @@ -419,7 +419,7 @@ public class Constructor_Backup extends Method // ino.method.get_codegen_Param_Type.23274.definition - public String get_codegen_Param_Type(Vector paralist) + public String get_codegen_Param_Type(Menge paralist) // ino.end // ino.method.get_codegen_Param_Type.23274.body { @@ -440,7 +440,7 @@ public class Constructor_Backup extends Method // ino.method.codegen.23277.definition - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.23277.body diff --git a/src/de/dhbwstuttgart/syntaxtree/ExceptionList.java b/src/de/dhbwstuttgart/syntaxtree/ExceptionList.java index 7e41e64d..5ab263be 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ExceptionList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ExceptionList.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.ExceptionList.8559.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -15,7 +15,7 @@ public class ExceptionList // ino.class.ExceptionList.23358.body { // ino.attribute.reftype.23361.declaration - private Vector reftype = new Vector(); + private Menge reftype = new Menge(); // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index feb028f8..b54de818 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -20,7 +20,7 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; public abstract class Field extends GTVDeclarationContext implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{ - protected Vector declid = new Vector(); // Vector, da 'int a, b, c, ...' auch eingeparst werden muss + protected Menge declid = new Menge(); // Menge, da 'int a, b, c, ...' auch eingeparst werden muss private Type typ; @@ -50,14 +50,14 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta return typ; } - public abstract void codegen(ClassFile classfile, Vector paralist) + public abstract void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException; @Override - public Vector getGenericParameter() { - Vector ret = new Vector<>(); + public Menge getGenericParameter() { + Menge ret = new Menge<>(); if(this.genericParameters == null)return ret; - ret.addAll(this.genericParameters.getVector()); + ret.addAll(this.genericParameters.getMenge()); return ret; } @@ -72,18 +72,18 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta - public Vector get_Name() + public Menge get_Name() { return declid; } - public Vector getDeclIdVector() + public Menge getDeclIdMenge() { // otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) return declid; } - public void setDeclIdVector( Vector vDeclId ) + public void setDeclIdMenge( Menge vDeclId ) { // otth: kompletter Vektor setzen, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) declid = vDeclId; @@ -124,11 +124,11 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta * Diese Methode ersetzt die RefTypes gegebenenfalls durch eine GTV. * @param paralist */ - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist){ + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist){ // Zuerst Returntype untersuchen Type type=getType(); Type pendantReturnType = null; - if(type instanceof RefType)pendantReturnType = ((RefType)type).findGenericType(paralist, new Vector());//GenericTypeVar pendantReturnType=ClassHelper.findGenericType(type, paralist,new Vector()); + if(type instanceof RefType)pendantReturnType = ((RefType)type).findGenericType(paralist, new Menge());//GenericTypeVar pendantReturnType=ClassHelper.findGenericType(type, paralist,new Menge()); if(pendantReturnType!=null){ //Wenn generisch, dann modifizieren setType(pendantReturnType); } @@ -159,8 +159,8 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta } @Override - public Vector getChildren() { - Vector ret = new Vector<>(); + public Menge getChildren() { + Menge ret = new Menge<>(); if(this.getType()!=null)ret.add(this.getType()); ret.addAll(this.getGenericParameter()); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 0ddb10b1..e47a0ce9 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -30,7 +30,7 @@ public class FieldDeclaration extends Field{ private Expr wert; //private Type type; - //private Vector parameter; + //private Menge parameter; /** * Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. @@ -58,7 +58,7 @@ public class FieldDeclaration extends Field{ } @Override - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException { // TODO Auto-generated method stub @@ -104,8 +104,8 @@ public class FieldDeclaration extends Field{ } @Override - public Vector getChildren() { - Vector ret = super.getChildren(); + public Menge getChildren() { + Menge ret = super.getChildren(); if(this.wert!=null)ret.add(this.wert); return ret; } @@ -159,9 +159,9 @@ public class FieldDeclaration extends Field{ } @Override - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist){ + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist){ super.wandleRefTypeAttributes2GenericAttributes(paralist); - if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Vector()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben + if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben } } diff --git a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java index c98caac6..d229de60 100755 --- a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java +++ b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.FormalParameter.8561.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -208,8 +208,8 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(type != null)ret.add(this.type); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java b/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java index e2ff91a7..a39c9e68 100644 --- a/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java +++ b/src/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; /** * Beischreibt eine SyntaxTreeNode, welcher die Eigenschaft besitzt, diff --git a/src/de/dhbwstuttgart/syntaxtree/Generic.java b/src/de/dhbwstuttgart/syntaxtree/Generic.java index 0c1f7a5e..7bcb538a 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Generic.java +++ b/src/de/dhbwstuttgart/syntaxtree/Generic.java @@ -1,7 +1,7 @@ package de.dhbwstuttgart.syntaxtree; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; diff --git a/src/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java b/src/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java index 9a722981..45fb0f09 100644 --- a/src/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java +++ b/src/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java @@ -4,7 +4,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.GenericVarDeclarationList; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -19,14 +19,14 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; public class GenericDeclarationList extends SyntaxTreeNode implements Iterable{ private int offsetOfLastElement; - private Vector gtvs = new Vector<>(); + private Menge gtvs = new Menge<>(); - public GenericDeclarationList(Vector values, int endOffset) { + public GenericDeclarationList(Menge values, int endOffset) { this.addAll(values); this.offsetOfLastElement = endOffset; } - private void addAll(Vector values) { + private void addAll(Menge values) { this.gtvs.addAll(values); } @@ -50,8 +50,8 @@ public class GenericDeclarationList extends SyntaxTreeNode implements Iterable getChildren() { - Vector ret = new Vector<>(); + public Menge getChildren() { + Menge ret = new Menge<>(); for(GenericTypeVar gtv : gtvs){ ret.add(gtv); } @@ -62,7 +62,7 @@ public class GenericDeclarationList extends SyntaxTreeNode implements Iterable getVector() { + public Menge getMenge() { return this.gtvs; } diff --git a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java index 15cfad5f..0ecbaa6d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java +++ b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.ImportDeclarations.8562.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end import de.dhbwstuttgart.syntaxtree.misc.UsedId; @@ -18,7 +18,7 @@ import de.dhbwstuttgart.syntaxtree.misc.UsedId; */ // ino.end // ino.class.ImportDeclarations.23434.declaration -public class ImportDeclarations extends Vector +public class ImportDeclarations extends Menge // ino.end // ino.class.ImportDeclarations.23434.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/Interface.java b/src/de/dhbwstuttgart/syntaxtree/Interface.java index 2d98f3c5..194297d6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Interface.java +++ b/src/de/dhbwstuttgart/syntaxtree/Interface.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.Interface.8582.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.core.AClassOrInterface; @@ -30,7 +30,7 @@ public class Interface extends Class { super(name,modifiers, offset); } - public Vector getParaList() { + public Menge getParaList() { // TODO Auto-generated method stub return null; } @@ -40,7 +40,7 @@ public class Interface extends Class { } - public void setParaList(Vector paraVector) { + public void setParaList(Menge paraMenge) { // TODO Auto-generated method stub } @@ -70,11 +70,11 @@ public class Interface implements AClassOrInterface // HOTI 29. Apr 06 // ino.end // ino.attribute.paralist.23939.declaration - private Vector paralist = new Vector(); // Parameterliste 'interface xy{}' wird gespeichert + private Menge paralist = new Menge(); // Parameterliste 'interface xy{}' wird gespeichert // ino.end // ino.attribute.containedTypes.23942.declaration - private Vector containedTypes; + private Menge containedTypes; // ino.end // ino.method.Interface.23945.defdescription type=line @@ -112,7 +112,7 @@ public class Interface implements AClassOrInterface // ino.method.getParaList.23954.definition - public Vector getParaList() + public Menge getParaList() // ino.end // ino.method.getParaList.23954.body { @@ -120,7 +120,7 @@ public class Interface implements AClassOrInterface } // ino.end // ino.method.setParaList.23957.definition - public void setParaList(Vector paralist) + public void setParaList(Menge paralist) // ino.end // ino.method.setParaList.23957.body { @@ -128,7 +128,7 @@ public class Interface implements AClassOrInterface } // ino.end // ino.method.setContainedTypes.23960.definition - public void setContainedTypes(Vector containedTypes) + public void setContainedTypes(Menge containedTypes) // ino.end // ino.method.setContainedTypes.23960.body { @@ -137,7 +137,7 @@ public class Interface implements AClassOrInterface // ino.end // ino.method.getContainedTypes.23963.definition - public Vector getContainedTypes() + public Menge getContainedTypes() // ino.end // ino.method.getContainedTypes.23963.body { @@ -166,7 +166,7 @@ public class Interface implements AClassOrInterface classfile.addSuperInterfaces(getSuperInterfaces()); // Codegen fuer Interface-Body - Vector paralist = new Vector(); + Menge paralist = new Menge(); if(ib != null) ib.codegen(classfile, paralist); classfile.codegen(); @@ -224,7 +224,7 @@ public class Interface implements AClassOrInterface if(ib==null) return; - Vector methods=ib.MethodVektor; + Menge methods=ib.MethodVektor; // Alle Methoden durchgehen for(int i=0;i ConstantVektor = new Vector(); + protected Menge ConstantVektor = new Menge(); // ino.end // ino.attribute.MethodVektor.23990.declaration - protected Vector MethodVektor = new Vector(); + protected Menge MethodVektor = new Menge(); // ino.end // ino.method.InterfaceBody.23993.defdescription type=line @@ -63,7 +63,7 @@ public class InterfaceBody // ino.end // ino.method.getConstantVektor.23999.definition - public Vector getConstantVektor() + public Menge getConstantVektor() // ino.end // ino.method.getConstantVektor.23999.body { @@ -72,7 +72,7 @@ public class InterfaceBody // ino.end // ino.method.setConstantVektor.24002.definition - public void setConstantVektor(Vector constantVektor) + public void setConstantVektor(Menge constantVektor) // ino.end // ino.method.setConstantVektor.24002.body { @@ -81,7 +81,7 @@ public class InterfaceBody // ino.end // ino.method.getMethodVektor.24005.definition - public Vector getMethodVektor() + public Menge getMethodVektor() // ino.end // ino.method.getMethodVektor.24005.body { @@ -90,7 +90,7 @@ public class InterfaceBody // ino.end // ino.method.setMethodVektor.24008.definition - public void setMethodVektor(Vector methodVektor) + public void setMethodVektor(Menge methodVektor) // ino.end // ino.method.setMethodVektor.24008.body { @@ -99,7 +99,7 @@ public class InterfaceBody // ino.end // ino.method.codegen.24011.definition - public void codegen(ClassFile cf, Vector paralist) + public void codegen(ClassFile cf, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24011.body @@ -114,7 +114,7 @@ public class InterfaceBody for (int i=0; i < MethodVektor.size(); i++) { Method m = MethodVektor.elementAt(i); - Modifiers mod = m.getDeclIdVector().elementAt(0).get_Modifiers(); + Modifiers mod = m.getDeclIdMenge().elementAt(0).get_Modifiers(); if (mod != null){ mod.ensureAbstract(); @@ -123,7 +123,7 @@ public class InterfaceBody mod = new Modifiers(); mod.ensureAbstract(); mod.ensurePublic(); - m.getDeclIdVector().elementAt(0).set_Modifiers(mod); + m.getDeclIdMenge().elementAt(0).set_Modifiers(mod); } diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index aa45cb3e..a776235a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -71,7 +71,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable */ // ino.end // ino.attribute.genericMethodParameters.23500.declaration - //private Vector genericMethodParameters=new Vector(); + //private Menge genericMethodParameters=new Menge(); // ino.end // ino.attribute.overloadedID.23503.declaration @@ -81,7 +81,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable private boolean isAbstract = false; // ino.end // ino.attribute.types_in_parameterlist.23509.declaration - private Vector types_in_parameterlist = new Vector(); + private Menge types_in_parameterlist = new Menge(); // ino.end // ino.attribute.m_LineNumber.23512.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; @@ -114,7 +114,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable /* // ino.method.setGenericMethodParameters.23521.definition - public void setGenericMethodParameters(Vector genericMethodParameters) + public void setGenericMethodParameters(Menge genericMethodParameters) // ino.end // ino.method.setGenericMethodParameters.23521.body { @@ -122,7 +122,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } // ino.end // ino.method.getGenericMethodParameters.23524.definition - public Vector getGenericMethodParameters() + public Menge getGenericMethodParameters() // ino.end // ino.method.getGenericMethodParameters.23524.body { @@ -137,7 +137,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.method.sc_init_parameterlist.23530.body { DeclId hilf=null; - Vector list; + Menge list; FormalParameter para; String typeofpara; int i=1; @@ -146,14 +146,14 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable hilf=declid.elementAt(0); if(ext) parserlog.debug("Semantik-Check hat in Methode "+hilf.get_Name()+" bergabewerte gefunden:"); - list=this.getParameterList().sc_get_Formalparalist(); //Vector Formalparalist aus FormalParameterList wird zwischen gesichert + list=this.getParameterList().sc_get_Formalparalist(); //Menge Formalparalist aus FormalParameterList wird zwischen gesichert for(Enumeration el2=list.elements(); el2.hasMoreElements();) { para=el2.nextElement(); typeofpara=para.getTypeName(); if(ext) parserlog.debug(" "+i+". Parameter hat Typ "+typeofpara); - types_in_parameterlist.addElement(typeofpara); //Typ der Parameter werden im Vector abgelegt + types_in_parameterlist.addElement(typeofpara); //Typ der Parameter werden im Menge abgelegt i++; } } @@ -312,7 +312,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.method.get_codegen_Param_Type.23572.definition - public String get_codegen_Param_Type(Vector paralist) + public String get_codegen_Param_Type(Menge paralist) // ino.end // ino.method.get_codegen_Param_Type.23572.body { @@ -350,7 +350,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.get_Type_Paralist.23578.definition - public Vector get_Type_Paralist() + public Menge get_Type_Paralist() // ino.end // ino.method.get_Type_Paralist.23578.body { @@ -361,7 +361,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.method.codegen.23581.definition - public void codegen(ClassFile classfile, Vector paralist) + public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.23581.body @@ -482,17 +482,17 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } @Override - public void wandleRefTypeAttributes2GenericAttributes(Vector classParalist) + public void wandleRefTypeAttributes2GenericAttributes(Menge classParalist) { /* - Vector paralist = new Vector();//Mit den Generischen Typen der Methode + Menge paralist = new Menge();//Mit den Generischen Typen der Methode paralist.addAll(classParalist); paralist.addAll(this.genericMethodParameters); // Zuerst Returntype untersuchen Type returnType=getType(); Type pendantReturnType = null; - if(returnType instanceof RefType)pendantReturnType = ((RefType)returnType).findGenericType(paralist, new Vector()); + if(returnType instanceof RefType)pendantReturnType = ((RefType)returnType).findGenericType(paralist, new Menge()); //GenericTypeVar pendantReturnType=ClassHelper.findGenericType(returnType, paralist,genericMethodParameters); if(pendantReturnType!=null){ //Wenn generisch, dann modifizieren setReturnType(pendantReturnType); @@ -504,7 +504,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable Type fpType=fp.getType(); // Nur wenn es sich um ein RefType-Field handelt Type pendantPara = null; - if(fpType instanceof RefType)pendantPara = ((RefType)fpType).findGenericType(paralist, new Vector()); + if(fpType instanceof RefType)pendantPara = ((RefType)fpType).findGenericType(paralist, new Menge()); //GenericTypeVar pendantPara=ClassHelper.findGenericType(fpType,paralist,genericMethodParameters); if(pendantPara!=null){ //Wenn generisch, dann modifizieren fp.setType(pendantPara); @@ -630,7 +630,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //methodList.addElement(method); //F�r V_fields_methods: - CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Vector(),this.getGenericMethodParameters()); // Typannahme bauen... + CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Menge(),this.getGenericMethodParameters()); // Typannahme bauen... //Methode in V_Fields_methods ablegen @@ -651,7 +651,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable for(int i=0; i()); + CParaTypeAssumption paraAssum = new CParaTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),para.get_Name(), para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -661,7 +661,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable methodAssum.addParaAssumption(paraAssum); // F�r die V_i: - CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Vector()); + CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); //rememberLocals.addElement(varAssum); } @@ -700,8 +700,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.block); ret.add(this.parameterlist); ret.addAll(this.getGenericParameter()); diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index 76d8ed59..2deffc91 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.ParameterList.8565.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Iterator; @@ -25,7 +25,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable formalparameter = new Vector(); + public Menge formalparameter = new Menge(); // ino.end @@ -45,7 +45,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable sc_get_Formalparalist() + public Menge sc_get_Formalparalist() // ino.end // ino.method.sc_get_Formalparalist.23635.body { @@ -181,7 +181,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable getChildren() { + public Menge getChildren() { return formalparameter; } diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 360d2eef..13e176f9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -8,7 +8,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.stream.Stream; import de.dhbwstuttgart.logger.Logger; @@ -61,7 +61,7 @@ public class SourceFile // ino.attribute.LOAD_BASIC_ASSUMPTIONS_FROM_JRE.21358.decldescription type=javadoc /** * @autor HOTI - * Dieses Flag bestimmt, ob die basicAssumptions (Integer, Vector, ...) direkt von + * Dieses Flag bestimmt, ob die basicAssumptions (Integer, Menge, ...) direkt von * der Java-Laufzeitumgebung anhand der Imports oder von den "Fixed Hacks" geladen * werden (Mit Fixed Hacks sind die von Hand eingetragene Basetypes gemeint) */ @@ -120,11 +120,11 @@ public class SourceFile // ino.end // ino.attribute.KlassenVektor.21376.declaration - public Vector KlassenVektor = new Vector(); + public Menge KlassenVektor = new Menge(); // ino.end // ino.attribute.InterfaceVektor.21379.declaration - public Vector InterfaceVektor = new Vector(); + public Menge InterfaceVektor = new Menge(); // ino.end /** @@ -141,7 +141,7 @@ public class SourceFile baseTypeTranslationTable.put("double","java.lang.Double"); baseTypeTranslationTable.put("long","java.lang.Long"); baseTypeTranslationTable.put("float","java.lang.Float"); - //baseTypeTranslationTable.put("this.is.a.temporary.entry","java.util.Vector"); auskommentiert PL 07-08-11 + //baseTypeTranslationTable.put("this.is.a.temporary.entry","de.dhbwstuttgart.typeinference.Menge"); auskommentiert PL 07-08-11 this.imports=new ImportDeclarations(); @@ -162,7 +162,7 @@ public class SourceFile } } - public SourceFile(Vector classDefinitions) { + public SourceFile(Menge classDefinitions) { this.KlassenVektor = classDefinitions; } @@ -222,12 +222,12 @@ public class SourceFile // ino.end // ino.method.codegen.21397.definition - public Vector codegen(ResultSet result) + public Menge codegen(ResultSet result) throws JVMCodeException // ino.end // ino.method.codegen.21397.body { - Vector ret = new Vector(); + Menge ret = new Menge(); codegenlog.info("Anzahl der Interfaces: " + Integer.toString(InterfaceVektor.size())); for(int i = 0; i < InterfaceVektor.size(); i++) { @@ -252,7 +252,7 @@ public class SourceFile */ // ino.end // ino.method.createPairFromClassAndSuperclass.21400.definition - private Pair createPairFromClassAndSuperclass(Class baseClass, Type superclass, Vector classParaOrg, Vector superclassParaOrg, TypeAssumptions ass) + private Pair createPairFromClassAndSuperclass(Class baseClass, Type superclass, Menge classParaOrg, Menge superclassParaOrg, TypeAssumptions ass) // ino.end // ino.method.createPairFromClassAndSuperclass.21400.body { @@ -306,12 +306,12 @@ public class SourceFile // Menge FC bilden - Vector vFC = new Vector(); // Menge FC + Menge vFC = new Menge(); // Menge FC TypeAssumptions globalAssumptions = this.makeBasicAssumptionsFromJRE(imports, false); globalAssumptions.add(this.getPublicFieldAssumptions()); // 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen - Vector ignoreTypes = new Vector<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. + Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType()); @@ -319,7 +319,7 @@ public class SourceFile ignoreTypes.add(new RefType("Integer",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Object",null,-1).TYPE(globalAssumptions, parent).getType()); - Vector basicAssumptionsClassVector = new Vector<>(); //die Klassen aus den BasicAssumptions und den Importierten Klassen + Menge basicAssumptionsClassMenge = new Menge<>(); //die Klassen aus den BasicAssumptions und den Importierten Klassen for(ClassAssumption cAss : ass.getClassAssumptions()){ Type t1 = cAss.getAssumedClass().getType(); Type t2 = cAss.getAssumedClass().getSuperClass(); @@ -330,7 +330,7 @@ public class SourceFile if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. vFC.add(p); } - basicAssumptionsClassVector.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen + basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen }else{ //System.out.println("Wurde nicht aufgenommen"); } @@ -367,7 +367,7 @@ public class SourceFile } } } - Vector tto = (Vector)vFC.clone(); + Menge tto = (Menge)vFC.clone(); Unify.printMenge( "FC", vFC, 6 ); /* z.B. @@ -407,7 +407,7 @@ public class SourceFile Pair PTypKonst = vFC.elementAt(n); // Parameter des rechten Typausdrucks des betrachteten Paars extrahieren - Vector vPara = ((RefType)(PTypKonst.TA2)).get_ParaList(); + Menge vPara = ((RefType)(PTypKonst.TA2)).get_ParaList(); Integer Subst = null; // Substitution int nSubstStelle = 0; inferencelog.debug("nSubstStelleStart" + nSubstStelle + " " + n, Section.FINITECLOSURE); @@ -513,7 +513,7 @@ public class SourceFile // Paar einfuegen, falls noch nicht vorhanden // System.out.println("Paar alt:" + PSuchen.toString() ); // System.out.println("Paar neu:" + P.toString() ); - if( !P.isInVector( vFC ) ) + if( !P.isInMenge( vFC ) ) { vFC.add( P ); Unify.printMenge( "FC", vFC, 6 ); @@ -585,7 +585,7 @@ public class SourceFile //Pair P = new Pair( (RefType)PTemp.TA1, (RefType)PSuch.TA2 ); Pair P = new Pair(L1, R2); - if( !P.isInVector( vFC ) ) + if( !P.isInMenge( vFC ) ) { vFC.add( P ); bPaarHinzu = true; @@ -636,8 +636,8 @@ public class SourceFile // printMenge( "nach trans: FC", vFC, 6 ); - Vector KlassenVektorunImportierteKlassen = new Vector<>(); - KlassenVektorunImportierteKlassen.addAll(basicAssumptionsClassVector); + Menge KlassenVektorunImportierteKlassen = new Menge<>(); + KlassenVektorunImportierteKlassen.addAll(basicAssumptionsClassMenge); KlassenVektorunImportierteKlassen.addAll(KlassenVektor); FC_TTO fctto = new FC_TTO(vFC, tto, KlassenVektorunImportierteKlassen); @@ -668,12 +668,12 @@ public class SourceFile */ // ino.end // ino.method.typeReconstruction.21406.definition - public Vector typeReconstruction(TypeAssumptions globalAssumptions) + public Menge typeReconstruction(TypeAssumptions globalAssumptions) throws CTypeReconstructionException // ino.end // ino.method.typeReconstruction.21406.body { - Vector ret = new Vector(); + Menge ret = new Menge(); //Logger initialisieren: Logger typinferenzLog = Logger.getLogger("Typeinference"); @@ -705,16 +705,16 @@ public class SourceFile //Unmögliche ConstraintsSets aussortieren durch Unifizierung Unifier unifier = (pairs)->{ - Vector> retValue = new Vector<>(); + Menge> retValue = new Menge<>(); retValue = Unify.unify(pairs, finiteClosure); return retValue;}; //oderConstraints.filterWrongConstraints(unifier); - //oderConstraints.unifyUndConstraints(unifier); + oderConstraints.unifyUndConstraints(unifier); typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): - Vector> xConstraints = new Vector>();// = oderConstraints.getConstraints(); - for(Vector uC : oderConstraints.getConstraints()){ //mit dem getConstraints-Aufruf wird das Karthesische Produkt erzeugt. - Vector cons = new Vector(); + Menge> xConstraints = new Menge>();// = oderConstraints.getConstraints(); + for(Menge uC : oderConstraints.getConstraints()){ //mit dem getConstraints-Aufruf wird das Karthesische Produkt erzeugt. + Menge cons = new Menge(); for(UndConstraint undCons:uC){ cons.addAll(undCons.getConstraintPairs()); } @@ -728,9 +728,9 @@ public class SourceFile // Unifizierung der Constraints: ////////////////////////////// boolean unifyFail = true; - for(Vector constraints : xConstraints){ + for(Menge constraints : xConstraints){ //Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen: - Vector> result = new Vector>(); + Menge> result = new Menge>(); //Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden. for(Pair p : constraints){ @@ -765,7 +765,7 @@ public class SourceFile } */ //Erst die Unifizierung erstellen: - Vector constraintsClone = (Vector)constraints.clone(); + Menge constraintsClone = (Menge)constraints.clone(); /* //Typen kontrollieren: @@ -793,79 +793,79 @@ public class SourceFile // und unifizert nur die Zusammenhangskomponenten in Schritten 1 - 5 //Schritt 1: Alle Variablen in den Paaren von Elementen einsammeln - Vector> constraintsclonevars = constraintsClone.stream().map(p -> {Vector TPHs = new Vector<>(); + Menge> constraintsclonevars = constraintsClone.stream().map(p -> {Menge TPHs = new Menge<>(); TPHs.addAll(p.TA1.getInvolvedTypePlaceholder()); TPHs.addAll(p.TA2.getInvolvedTypePlaceholder()); return TPHs;} - ).collect(Vector::new, Vector::add, Vector::addAll); + ).collect(Menge::new, Menge::add, Menge::addAll); //Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen - Vector> indexeset = new Vector<>(); + Menge> indexeset = new Menge<>(); if (constraintsclonevars != null && constraintsclonevars.size()>0) { indexeset = Unify.schnitt(constraintsclonevars); } //Schritt 3: Umwandlung der Indizes in die zugehoerigen Elemente // In streamconstraintsclone sind die Mengen von Paar enthalten die unifiziert werden muessen - Stream> streamconstraintsclone = indexeset.stream().map(x -> x.stream() + Stream> streamconstraintsclone = indexeset.stream().map(x -> x.stream() .map(i -> constraintsClone.elementAt(i)) - .collect(Vector::new, Vector::add, Vector::addAll)); - //Vector> vecconstraintsclone = streamconstraintsclone.collect(Vector::new, Vector::add, Vector::addAll); + .collect(Menge::new, Menge::add, Menge::addAll)); + //Menge> vecconstraintsclone = streamconstraintsclone.collect(Menge::new, Menge::add, Menge::addAll); System.out.println(); //Schritt 4: Unifikation - Vector>> vecunifyResult = - //streamconstraintsclone.map(x -> Unify.unify(x, finiteClosure)).collect(Vector::new, Vector::add, Vector::addAll); + Menge>> vecunifyResult = + //streamconstraintsclone.map(x -> Unify.unify(x, finiteClosure)).collect(Menge::new, Menge::add, Menge::addAll); //DEBUG-Variante streamconstraintsclone.map(x -> - { Vector> z = Unify.unify(x, finiteClosure); + { Menge> z = Unify.unify(x, finiteClosure); return z; } - ).collect(Vector::new, Vector::add, Vector::addAll); + ).collect(Menge::new, Menge::add, Menge::addAll); //card gibt die Cardinalitaet der unifizierten Mengen an - Vector card = vecunifyResult.stream().map(x -> x.size()).collect(Vector::new, Vector::add, Vector::addAll); + Menge card = vecunifyResult.stream().map(x -> x.size()).collect(Menge::new, Menge::add, Menge::addAll); ;//.reduce(1,(a,b) -> { if ((a > 0) && (b > 0)) return (a * b); else return 1; }); //Schritt 5: Bildung des cartesischen Produkts //sollte wieder entfernt werden: Weiterarbeit mit: //[[x_1 -> t_1, x_2 -> t2], [x_1 -> t'_1, x_2 -> t'_2]] x ... x [[x_n -> t_1n], [x_n -> t2n], [x_n -> t3n]] - Vector> cardprodret_start = new Vector<>(); - cardprodret_start.add(new Vector()); + Menge> cardprodret_start = new Menge<>(); + cardprodret_start.add(new Menge()); //cart. Produkt mit kopieren - //Vector> unifyResult = vecunifyResult.stream().reduce(cardprodret_start, (x, y) -> { - //Vector> cardprodret= new Vector<>(); + //Menge> unifyResult = vecunifyResult.stream().reduce(cardprodret_start, (x, y) -> { + //Menge> cardprodret= new Menge<>(); //if (y.size() > 0) { ////System.out.println(y); - //Vector> cardprodretold = x; - //cardprodret = new Vector<>(); + //Menge> cardprodretold = x; + //cardprodret = new Menge<>(); //for(int j = 0; j < cardprodretold.size(); j++) { //for (int k = 0; k < y.size(); k++){ - //Vector help; + //Menge help; //if (y.size() == 1) help = cardprodretold.elementAt(j); //bei einem hinzuzufuegenden Element muss nicht kopiert werden - //else help = Unify.copyVectorPair(cardprodretold.elementAt(j)); + //else help = Unify.copyMengePair(cardprodretold.elementAt(j)); //help.addAll(y.elementAt(k)); //cardprodret.add(help); //} //} //} //else - //return new Vector<>(); //kein unifiziertes Ergebnis, damit wird das Geseamtergebnis [] + //return new Menge<>(); //kein unifiziertes Ergebnis, damit wird das Geseamtergebnis [] //return cardprodret; //}); //cart. Produkt mit Linkverschiebung - Vector> unifyResult = vecunifyResult.stream().reduce(cardprodret_start, (x, y) -> { - Vector> cardprodret= new Vector<>(); + Menge> unifyResult = vecunifyResult.stream().reduce(cardprodret_start, (x, y) -> { + Menge> cardprodret= new Menge<>(); if (y.size() > 0) { //System.out.println(y); - //Vector> cardprodretold = x; - //cardprodret = new Vector<>(); + //Menge> cardprodretold = x; + //cardprodret = new Menge<>(); for(int j = 0; j < x.size(); j++) { for (int k = 0; k < y.size(); k++){ - Vector help = new Vector<>(); + Menge help = new Menge<>(); help.addAll(y.elementAt(k)); help.addAll(x.elementAt(j)); cardprodret.add(help); @@ -873,15 +873,15 @@ public class SourceFile } } else - return new Vector<>(); //kein unifiziertes Ergebnis, damit wird das Geseamtergebnis [] + return new Menge<>(); //kein unifiziertes Ergebnis, damit wird das Geseamtergebnis [] return cardprodret; }); - //Vector> unifyResult = Unify.unify(constraintsClone, finiteClosure); + //Menge> unifyResult = Unify.unify(constraintsClone, finiteClosure); //Dann den Ergebnissen anfügen result.addAll(unifyResult); - // Debugoutput:Vector> + // Debugoutput:Menge> //typinferenzLog.debug("Unifiziertes Ergebnis: "+result, Section.TYPEINFERENCE); @@ -907,13 +907,13 @@ public class SourceFile typinferenzLog.debug("\nJavaFiles:\n", Section.TYPEINFERENCE); - //typinferenzLog.debug(this.printJavaCode(new ResultSet(new Vector()))); + //typinferenzLog.debug(this.printJavaCode(new ResultSet(new Menge()))); //Für jede Klasse in diesem SourceFile gilt das selbe ResultSet: for(Class klasse : this.KlassenVektor){ //Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen: - for(Vector resultSet : result){ + for(Menge resultSet : result){ unifyFail = false; //Ein Unifiziertes Ergebnis ist entstanden (es kann auch leer sein, das bedeutet nur, dass die Constraints mindestens in einem Fall Sinn ergaben) //Add Result set as a new ReconstructionResult to ret: TypeinferenceResultSet reconstructionResult = new TypeinferenceResultSet(klasse, constraints, new ResultSet(resultSet)); @@ -937,7 +937,7 @@ public class SourceFile // inferencelog.setLevel(Level.INFO); - Vector A = new Vector(); + Menge A = new Menge(); TypeAssumptions basics; @@ -978,7 +978,7 @@ public class SourceFile tempInterface.wandleRefTypeAttributes2GenericAttributes(); } - // HOT 8.5.06 Wandelt alle Referenzen auf p.ex. Vector in java.util.Vector + // HOT 8.5.06 Wandelt alle Referenzen auf p.ex. Menge in de.dhbwstuttgart.typeinference.Menge for (int i = 0; i < this.KlassenVektor.size(); i++) { Class tempKlasse = this.KlassenVektor.elementAt(i); MyCompiler.makeRefTypesFullyQualified(tempKlasse.getContainedTypes(), this.imports); @@ -1067,7 +1067,7 @@ public class SourceFile TypeAssumptions ret = new TypeAssumptions(null); // AB hier der Teil aus makeBasicAssumptionsFromJRE: - Vector doneImports=new Vector(); + Menge doneImports=new Menge(); //CTypeReconstructionResult basicAssumptions = new CTypeReconstructionResult(null); @@ -1098,7 +1098,7 @@ public class SourceFile Hashtable jreSpiderRegistry=new Hashtable(); - Vector typeGenPara = new Vector(); + Menge typeGenPara = new Menge(); for(int j=0;j0){ //basicAssumptions.addGenericTypeVars(className, typeGenPara); - //myCl.set_ParaList((Vector)typeGenPara); + //myCl.set_ParaList((Menge)typeGenPara); } @@ -1123,7 +1123,7 @@ public class SourceFile || (isBaseType && READ_BASE_TYPE_SUPERCLASSES_FROM_JRE)) { String superclassFullyQualifiedName = x.getSuperclass().getCanonicalName(); - //Andere Methode, da Vector.contains bei Strings nicht richtig vergleicht. + //Andere Methode, da Menge.contains bei Strings nicht richtig vergleicht. if(!containsString(imports,superclassFullyQualifiedName) && !containsString(doneImports,superclassFullyQualifiedName)){ imports.addElement(UsedId.createFromQualifiedName(superclassFullyQualifiedName,-1)); } @@ -1132,7 +1132,7 @@ public class SourceFile UsedId ui=UsedId.createFromQualifiedName(x.getSuperclass().getName(),-1); java.lang.Class superClass=x.getSuperclass(); java.lang.reflect.TypeVariable[] superclassTVS=superClass.getTypeParameters(); - Vector supertypeGenPara = new Vector(); + Menge supertypeGenPara = new Menge(); for(int tvi=0;tvi()); - CInstVarTypeAssumption instVar = new CInstVarTypeAssumption(className, fields[j].getName(), new RefType(fields[j].getType().getName(),-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector()); + //CInstVarTypeAssumption instVar = new CInstVarTypeAssumption(className, fields[j].getName(), new RefType(fields[j].getType().getSimpleName()), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge()); + CInstVarTypeAssumption instVar = new CInstVarTypeAssumption(className, fields[j].getName(), new RefType(fields[j].getType().getName(),-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge()); //basicAssumptions.addFieldOrLocalVarAssumption(instVar); //ret.add(instVar); //auskommentiert von Andreas Stadelmeier } @@ -1168,13 +1168,13 @@ public class SourceFile java.lang.reflect.Type[] gpt=methods[j].getGenericParameterTypes(); java.lang.Class[] pt=methods[j].getParameterTypes(); - CMethodTypeAssumption method = new CMethodTypeAssumption(new RefType(className, 0), methodName, returnType, pt.length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + CMethodTypeAssumption method = new CMethodTypeAssumption(new RefType(className, 0), methodName, returnType, pt.length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); for(int k=0;k())); + method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName().toString(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); } //basicAssumptions.addMethodIntersectionType(new CIntersectionType(method)); //ret.add(method); //auskommentiert von Andreas Stadelmeier @@ -1184,12 +1184,12 @@ public class SourceFile for(int j=0;j(),null); + CMethodTypeAssumption constructor = new CMethodTypeAssumption(new RefType(className, 0), methodName, new RefType(className,-1), constructors[j].getParameterTypes().length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); for(int k=0;k())); + constructor.addParaAssumption(new CParaTypeAssumption(className, methodName, constructors[j].getParameterTypes().length,0,paraType, new RefType(paraType,-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); } //basicAssumptions.addMethodIntersectionType(new CIntersectionType(constructor)); //ret.add(constructor); //auskommentiert von Andreas Stadelmeier @@ -1212,13 +1212,13 @@ public class SourceFile * @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen. * @return */ - private TypeAssumptions makeBasicAssumptionsFromJRE(Vector imports, boolean withSubtypes) + private TypeAssumptions makeBasicAssumptionsFromJRE(Menge imports, boolean withSubtypes) // ino.end // ino.method.makeBasicAssumptionsFromJRE.21409.body { //return null; ///* - Vector doneImports=new Vector(); + Menge doneImports=new Menge(); //TypeinferenceResultSet basicAssumptions = new TypeinferenceResultSet(null); TypeAssumptions basicAssumptions = new TypeAssumptions(); @@ -1254,7 +1254,7 @@ public class SourceFile // Namen von Generische Typen erzeugen Hashtable jreSpiderRegistry=new Hashtable(); - Vector typeGenPara = new Vector(); + Menge typeGenPara = new Menge(); for(int j=0;j0){ //auskommentiert von Andreas Stadelmeier: //basicAssumptions.addGenericTypeVars(className, typeGenPara); - //parentClass.set_ParaList((Vector)typeGenPara);//myCl.set_ParaList((Vector)typeGenPara); + //parentClass.set_ParaList((Menge)typeGenPara);//myCl.set_ParaList((Menge)typeGenPara); } @@ -1286,7 +1286,7 @@ public class SourceFile || (isBaseType && READ_BASE_TYPE_SUPERCLASSES_FROM_JRE)) { String superclassFullyQualifiedName = x.getSuperclass().getCanonicalName(); - //Andere Methode, da Vector.contains bei Strings nicht richtig vergleicht. + //Andere Methode, da Menge.contains bei Strings nicht richtig vergleicht. if(!containsString(imports,superclassFullyQualifiedName) && !containsString(doneImports,superclassFullyQualifiedName)){ imports.addElement(UsedId.createFromQualifiedName(superclassFullyQualifiedName,-1)); } @@ -1295,7 +1295,7 @@ public class SourceFile UsedId ui=UsedId.createFromQualifiedName(x.getSuperclass().getName(),-1); java.lang.Class superClass=x.getSuperclass(); java.lang.reflect.TypeVariable[] superclassTVS=superClass.getTypeParameters(); - Vector supertypeGenPara = new Vector(); + Menge supertypeGenPara = new Menge(); for(int tvi=0;tvi(),null); + //CMethodTypeAssumption method = new CMethodTypeAssumption(new RefType(className, 0), methodName, returnType, pt.length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); Method method = de.dhbwstuttgart.syntaxtree.Method.createEmptyMethod(methodName, parentClass); method.setType(returnType); ParameterList parameterList = new ParameterList(); @@ -1338,7 +1338,7 @@ public class SourceFile for(int k=0;k())); + //method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); FormalParameter parameter = new FormalParameter(new DeclId(type.get_Name())); parameter.setType(type); parameterList.formalparameter.add(parameter); @@ -1392,7 +1392,7 @@ public class SourceFile return new Class("java.lang.Object",new Modifiers(), 0); } - Vector supertypeGenPara = new Vector<>();//Die Generischen Parameter für die Superklasse berechnen: + Menge supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen: java.lang.reflect.TypeVariable[] superclassTVS=s.getTypeParameters(); for(int tvi=0;tvi searchVector, String searchString) + private boolean containsString(Menge searchMenge, String searchString) { boolean found = false; - for(UsedId id : searchVector) + for(UsedId id : searchMenge) { String s = id.getQualifiedName().toString(); found |= s.equals(searchString); @@ -1482,7 +1482,7 @@ public class SourceFile /* if(LOAD_BASIC_ASSUMPTIONS_FROM_JRE){ - Vector strImports=new Vector(); + Menge strImports=new Menge(); ImportDeclarations usedIdImports=getImports(); for(int i=0;i()); + instVar = new CInstVarTypeAssumption("java.lang.Integer", "MAX_VALUE", new RefType("java.lang.Integer",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge()); foo.addFieldOrLocalVarAssumption(instVar); - meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "", new RefType("java.lang.Integer",-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); - meth.addParaAssumption(new CParaTypeAssumption("java.lang.Integer", "", 1, 0,"value", new RefType("java.lang.Integer",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector())); + meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "", new RefType("java.lang.Integer",-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); + meth.addParaAssumption(new CParaTypeAssumption("java.lang.Integer", "", 1, 0,"value", new RefType("java.lang.Integer",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "intValue", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Integer", 0), "intValue", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); @@ -1540,7 +1540,7 @@ public class SourceFile // ui = new UsedId(); // ui.set_Name("Super-Class-Blub"); // c.set_UsedId(ui); - // pl = new Vector(); + // pl = new Menge(); // pl.addElement(new GenericTypeVar("bla")); // c.set_ParaList(pl); this.addElement(c); @@ -1549,14 +1549,14 @@ public class SourceFile // Boolean bauen: //------------------------ foo.addClassName("java.lang.Boolean"); //PL 05-08-01 eingefuegt - meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "", new RefType("java.lang.Boolean",-1),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "", new RefType("java.lang.Boolean",-1),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "", new RefType("java.lang.Boolean",-1), 1,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); - meth.addParaAssumption(new CParaTypeAssumption("java.lang.Boolean", "", 1, 0, "value", new RefType("java.lang.Boolean",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector())); + meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "", new RefType("java.lang.Boolean",-1), 1,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); + meth.addParaAssumption(new CParaTypeAssumption("java.lang.Boolean", "", 1, 0, "value", new RefType("java.lang.Boolean",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "booleanValue", new RefType("java.lang.Boolean",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Boolean", 0), "booleanValue", new RefType("java.lang.Boolean",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); c = new BasicAssumptionClass("java.lang.Boolean", mod); @@ -1564,7 +1564,7 @@ public class SourceFile // ui = new UsedId(); // ui.set_Name("Super-Class-Blub"); // c.set_UsedId(ui); - // pl = new Vector(); + // pl = new Menge(); // pl.addElement(new GenericTypeVar("bla")); // c.set_ParaList(pl); this.addElement(c); @@ -1573,14 +1573,14 @@ public class SourceFile // Character bauen: //------------------------ foo.addClassName("java.lang.Character"); //PL 05-08-01 eingefuegt - meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "", new RefType("java.lang.Character",-1),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "", new RefType("java.lang.Character",-1),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "", new RefType("java.lang.Character",-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); - meth.addParaAssumption(new CParaTypeAssumption("java.lang.Character", "", 1, 0,"value", new RefType("java.lang.Character",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector())); + meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "", new RefType("java.lang.Character",-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); + meth.addParaAssumption(new CParaTypeAssumption("java.lang.Character", "", 1, 0,"value", new RefType("java.lang.Character",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "charValue", new BooleanType(),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Character", 0), "charValue", new BooleanType(),0, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); c = new BasicAssumptionClass("java.lang.Character", mod); @@ -1588,36 +1588,36 @@ public class SourceFile // ui = new UsedId(); // ui.set_Name("Super-Class-Blub"); // c.set_UsedId(ui); - // pl = new Vector(); + // pl = new Menge(); // pl.addElement(new GenericTypeVar("bla")); // c.set_ParaList(pl); this.addElement(c); //------------------------ - // Vector bauen: + // Menge bauen: //------------------------ - foo.addClassName("java.lang.Vector"); //PL 05-08-01 eingefuegt + foo.addClassName("java.lang.Menge"); //PL 05-08-01 eingefuegt TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar - Vector typeGenPara = new Vector(); + Menge typeGenPara = new Menge(); typeGenPara.addElement(new GenericTypeVar(E.getName(),-1)); - foo.addGenericTypeVars("java.lang.Vector", typeGenPara); - meth = new CMethodTypeAssumption(new RefType("java.lang.Vector", 0), "elementAt", new GenericTypeVar(E.getName(),-1), 1,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); - meth.addParaAssumption(new CParaTypeAssumption("java.lang.Vector", "elementAt", 1, 0, "index", new RefType("java.lang.Integer",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector())); + foo.addGenericTypeVars("java.lang.Menge", typeGenPara); + meth = new CMethodTypeAssumption(new RefType("java.lang.Menge", 0), "elementAt", new GenericTypeVar(E.getName(),-1), 1,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); + meth.addParaAssumption(new CParaTypeAssumption("java.lang.Menge", "elementAt", 1, 0, "index", new RefType("java.lang.Integer",-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Vector", 0), "addElement", new Void(-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); - meth.addParaAssumption(new CParaTypeAssumption("java.lang.Vector", "addElement", 1, 0,"element", new GenericTypeVar(E.getName(),-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector())); + meth = new CMethodTypeAssumption(new RefType("java.lang.Menge", 0), "addElement", new Void(-1),1, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); + meth.addParaAssumption(new CParaTypeAssumption("java.lang.Menge", "addElement", 1, 0,"element", new GenericTypeVar(E.getName(),-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge())); foo.addMethodIntersectionType(new CIntersectionType(meth)); - meth = new CMethodTypeAssumption(new RefType("java.lang.Vector", 0), "size", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector(),null); + meth = new CMethodTypeAssumption(new RefType("java.lang.Menge", 0), "size", new RefType("java.lang.Integer",-1), 0,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Menge(),null); foo.addMethodIntersectionType(new CIntersectionType(meth)); - c = new BasicAssumptionClass("java.lang.Vector", mod); + c = new BasicAssumptionClass("java.lang.Menge", mod); // ui = new UsedId(); // ui.set_Name("Super-Class-Blub"); // c.set_UsedId(ui); - // pl = new Vector(); + // pl = new Menge(); // pl.addElement(E); // c.set_ParaList(pl); this.addElement(c); @@ -1628,9 +1628,9 @@ public class SourceFile foo.addClassName("java.lang.Stack"); //PL 05-08-01 eingefuegt c = new BasicAssumptionClass("java.lang.Stack", mod); ui = new UsedId(-1); - ui.set_Name("java.lang.Vector"); + ui.set_Name("java.lang.Menge"); c.set_UsedId(ui); - // pl = new Vector(); + // pl = new Menge(); // pl.addElement(E); // c.set_ParaList(pl); this.addElement(c); @@ -1685,8 +1685,8 @@ public class SourceFile // ino.method.getPackageName.21427.defdescription type=javadoc /** - * Erzeugt f�r jede Klasse einen Vector, in den Referenzen auf die GenericTypeVars - * dieser Klasse gespeichert werden. Diese Vectoren werden unter den Klassennamen + * Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars + * dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen * in der * Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. *
    Author: J�rg B�uerle @@ -1697,7 +1697,7 @@ public class SourceFile * while(it.hasNext()){ * Class cl = it.next(); * res.addClassName(cl.get_classname()); - * Vector genericsList = new Vector(); + * Menge genericsList = new Menge(); * * for(int i =0; i getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); for(Class cl : this.KlassenVektor){ ret.add(cl); } diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index 0adf889f..a1b43e84 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -38,7 +38,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ return this.parent; } - public abstract Vector getChildren(); + public abstract Menge getChildren(); public Class getParentClass(){ SyntaxTreeNode parent = this.getParent(); @@ -90,10 +90,10 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ //Für den Fall, dass dieser Knoten Generische Variablen halten kann. if(that instanceof Generic && that.getOffset()>=0){ //Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden: - Vector uTPHs = insertSet.getUnresolvedTPHs(); + Menge uTPHs = insertSet.getUnresolvedTPHs(); if(uTPHs.size()>0){//Nur wenn es auch unresolvedTPHs gibt: - Vector gPairs = result.getConstraintsFor(uTPHs); + Menge gPairs = result.getConstraintsFor(uTPHs); if(gPairs.size()>0){ GenericTypeInsertPoint genericTIP = new GenericTypeInsertPoint(that,gPairs,result); insertSet.add(genericTIP); diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java index 111c0b53..4d750fa2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.misc; // ino.end // ino.module.DeclId.8558.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -49,7 +49,7 @@ public class DeclId private ExprStmt wert; // ino.end // ino.attribute.paratyp.23292.declaration - public Vector paratyp = null; // hier wird die Parameterzuordnung gespeichert ... 'test t = new test();' + public Menge paratyp = null; // hier wird die Parameterzuordnung gespeichert ... 'test t = new test();' // ino.end // ino.attribute.m_LineNumber.23295.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; @@ -83,7 +83,7 @@ public class DeclId // ino.end // ino.method.set_Paratyp.23307.definition - public void set_Paratyp(Vector p) + public void set_Paratyp(Menge p) // ino.end // ino.method.set_Paratyp.23307.body { @@ -92,7 +92,7 @@ public class DeclId // ino.end // ino.method.get_Paratyp.23310.definition - public Vector get_Paratyp() + public Menge get_Paratyp() // ino.end // ino.method.get_Paratyp.23310.body { @@ -184,7 +184,7 @@ public class DeclId */ // ino.end // ino.method.codegen_InstVarDecl.23337.definition - public void codegen_InstVarDecl(ClassFile classfile, Type type, Vector paralist) + public void codegen_InstVarDecl(ClassFile classfile, Type type, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen_InstVarDecl.23337.body @@ -236,7 +236,7 @@ public class DeclId // ino.method.codegen_LocalVarDecl.23340.definition - public void codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, Vector paralist) + public void codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen_LocalVarDecl.23340.body diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java index 4670605d..25837caf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.misc; // ino.end // ino.module.UsedId.8567.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; @@ -20,16 +20,16 @@ public class UsedId implements IItemWithOffset // ino.class.UsedId.23659.body { // ino.attribute.name.23663.declaration - public Vector name = new Vector(); // Vector mit Strings + public Menge name = new Menge(); // Menge mit Strings // ino.end // ino.attribute.typen.23666.declaration - private Vector typen = new Vector(); // Vector mit Typen + private Menge typen = new Menge(); // Menge mit Typen // ino.end // ino.attribute.paralist.23669.declaration - private Vector paralist = null; + private Menge paralist = null; // ino.end // ino.attribute.vParaOrg.23672.declaration - public Vector vParaOrg = null; // otth: originale Parameterliste + public Menge vParaOrg = null; // otth: originale Parameterliste // ino.end private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 @@ -91,7 +91,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.get_Name.23690.definition - public Vector get_Name() + public Menge get_Name() // ino.end // ino.method.get_Name.23690.body { @@ -109,7 +109,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.set_Typen.23696.definition - public void set_Typen(Vector t) + public void set_Typen(Menge t) // ino.end // ino.method.set_Typen.23696.body { @@ -118,7 +118,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.set_ParaList.23699.definition - public void set_ParaList(Vector pl) + public void set_ParaList(Menge pl) // ino.end // ino.method.set_ParaList.23699.body { @@ -127,7 +127,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.get_RealParaList.23702.definition - public Vector get_RealParaList() + public Menge get_RealParaList() // ino.end // ino.method.get_RealParaList.23702.body { @@ -136,18 +136,18 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.get_ParaList.23705.definition - public Vector get_ParaList() + public Menge get_ParaList() // ino.end // ino.method.get_ParaList.23705.body { if(this.paralist != null) return this.paralist; - else return new Vector(); + else return new Menge(); } // ino.end // ino.method.get_vParaOrg.23708.definition - public Vector get_vParaOrg() + public Menge get_vParaOrg() // ino.end // ino.method.get_vParaOrg.23708.body { @@ -157,7 +157,7 @@ public class UsedId implements IItemWithOffset // ino.method.get_Typen.23711.definition - public Vector get_Typen() + public Menge get_Typen() // ino.end // ino.method.get_Typen.23711.body { @@ -265,7 +265,7 @@ public class UsedId implements IItemWithOffset { String[] steps=qualifiedName.split("\\."); UsedId uid=new UsedId(offset); - uid.name=new Vector(); + uid.name=new Menge(); for(int i=0;i(); + uid.name=new Menge(); for(int i=0;i modifier = new Vector(); + protected Menge modifier = new Menge(); // ino.end // ino.method.getModifiers.24041.definition - public Vector getModifiers() + public Menge getModifiers() // ino.end // ino.method.getModifiers.24041.body { @@ -36,7 +36,7 @@ public class Modifiers // ino.end // ino.method.setModifier.24044.definition - public void setModifier(Vector modifier) + public void setModifier(Menge modifier) // ino.end // ino.method.setModifier.24044.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java index 419061f1..5b2b10b1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -42,7 +42,7 @@ public abstract class AddOp extends Operator // ino.end // ino.method.codegen.24095.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist) + public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) throws JVMCodeException; // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java index 9afe711c..6884d20b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java @@ -1,7 +1,7 @@ // ino.module.AndOp.8595.package package de.dhbwstuttgart.syntaxtree.operator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.Expr; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java index e5ebac5e..bd04f950 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.DivideOp.8596.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -30,7 +30,7 @@ public class DivideOp extends MulOp // ino.end // ino.method.codegen.24115.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24115.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java index 99198400..8dcd630f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.EqualOp.8597.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -36,7 +36,7 @@ public class EqualOp extends RelOp // ino.end // ino.method.codegen.24125.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24125.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java index 1577b463..7225deee 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.GreaterEquOp.8598.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -30,7 +30,7 @@ public class GreaterEquOp extends RelOp // ino.end // ino.method.codegen.24141.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24141.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java index c3121083..332361e8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.GreaterOp.8599.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class GreaterOp extends RelOp // ino.end // ino.method.codegen.24154.definition -public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) +public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24154.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java index 7af4bdae..2ed325ab 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.LessEquOp.8600.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class LessEquOp extends RelOp // ino.end // ino.method.codegen.24167.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24167.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java index ddcdcca4..56243808 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.LessOp.8601.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class LessOp extends RelOp // ino.end // ino.method.codegen.24180.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24180.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java index 7b2953ab..621b049a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -47,12 +47,12 @@ public abstract class LogOp extends Operator // ino.end // ino.method.codegen.24193.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24193.body { - Vector indices = new Vector(); + Menge indices = new Menge(); Operator op = ((Binary)expr).get_Operator(); Expr expr1 = ((Binary)expr).get_Expr1(); Expr expr2 = ((Binary)expr).get_Expr2(); @@ -75,12 +75,12 @@ public abstract class LogOp extends Operator // ino.end // ino.method.if_codegen.24196.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, Vector paralist) + public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, Menge paralist) throws JVMCodeException // ino.end // ino.method.if_codegen.24196.body { - Vector indices = new Vector(); + Menge indices = new Menge(); Operator op = ((Binary)expr).get_Operator(); Expr expr1 = ((Binary)expr).get_Expr1(); Expr expr2 = ((Binary)expr).get_Expr2(); @@ -109,12 +109,12 @@ public abstract class LogOp extends Operator // ino.end // ino.method.loop_codegen.24199.definition - public void loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, Vector paralist) + public void loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.loop_codegen.24199.body { - Vector indices = new Vector(); + Menge indices = new Menge(); Operator op = ((Binary)expr).get_Operator(); Expr expr1 = ((Binary)expr).get_Expr1(); Expr expr2 = ((Binary)expr).get_Expr2(); @@ -132,7 +132,7 @@ public abstract class LogOp extends Operator // ino.end // ino.method.build.24202.definition - public static void build(ClassFile classfile, CodeAttribute code, Expr expr, Vector indices, boolean not, boolean ex2, boolean and, Vector paralist) + public static void build(ClassFile classfile, CodeAttribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and, Menge paralist) throws JVMCodeException // ino.end // ino.method.build.24202.body @@ -148,10 +148,10 @@ public abstract class LogOp extends Operator boolean and2; if(op instanceof OrOp) and2 = false; else if(op instanceof AndOp) and2 = true; - else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Vector indices, boolean not, boolean ex2, boolean and)"); + else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and)"); if((and != and2) && !ex2) { - Vector indices2 = new Vector(); + Menge indices2 = new Menge(); build(classfile, code, expr1, indices2, not, false, and2, paralist); build(classfile, code, expr2, indices, not, ex2, and, paralist); int breakpoint = code.get_code_length(); @@ -180,7 +180,7 @@ public abstract class LogOp extends Operator else code.add_code_short(1); } } - else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Vector indices, boolean not, boolean ex2, boolean and)"); + else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and)"); } else { expr.codegen(classfile, code, paralist); @@ -202,12 +202,12 @@ public abstract class LogOp extends Operator // ino.end // ino.method.replace_index.24205.definition - public static void replace_index(CodeAttribute code, Vector indices, int else_index, int then_index) + public static void replace_index(CodeAttribute code, Menge indices, int else_index, int then_index) throws JVMCodeException // ino.end // ino.method.replace_index.24205.body { - Vector b = code.get_code_Vector(); + Menge b = code.get_code_Menge(); for(int i = 0; i < indices.size(); i++) { int y = indices.elementAt(i).intValue(); int high = JVMCode.bytes_to_int((Byte)b.elementAt(y)); @@ -215,7 +215,7 @@ public abstract class LogOp extends Operator int x = (high << 8) + low; if(x == 0) code.set_code_short(else_index + 1 - y, y); else if(x == 1) code.set_code_short(then_index + 1 - y, y); - else throw new JVMCodeException("JVMCodeException: LogOp: replace_index(Code_attribute code, Vector indices, int else_index, int then_index)"); + else throw new JVMCodeException("JVMCodeException: LogOp: replace_index(Code_attribute code, Menge indices, int else_index, int then_index)"); } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java index 1b1a8ecc..a4e87cbd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.MinusOp.8603.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class MinusOp extends AddOp // ino.end // ino.method.codegen.24218.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24218.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java index 866c6bd6..c4347325 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.ModuloOp.8604.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class ModuloOp extends MulOp // ino.end // ino.method.codegen.24228.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24228.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java index 34ca0f7e..b25c8044 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.syntaxtree.statement.Binary; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java index c95f341a..249a4ee3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.NotEqualOp.8606.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -32,7 +32,7 @@ public class NotEqualOp extends RelOp // ino.end // ino.method.codegen.24248.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24248.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java index 5f8aef61..953b11e0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -73,7 +73,7 @@ public abstract class Operator extends SyntaxTreeNode // ino.end // ino.method.codegen.24276.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, Vector paralist) + public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, Menge paralist) throws JVMCodeException; // ino.end @@ -126,8 +126,8 @@ public abstract class Operator extends SyntaxTreeNode @Override - public Vector getChildren() { - return new Vector<>(); + public Menge getChildren() { + return new Menge<>(); } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java index cfe9cc22..d4b5b402 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.PlusOp.8609.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -29,7 +29,7 @@ public class PlusOp extends AddOp // ino.end // ino.method.codegen.24296.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24296.body diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java index 43fb132d..952b5313 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java index 07ca1fe8..3a66c28a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.end // ino.module.TimesOp.8611.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -28,7 +28,7 @@ public class TimesOp extends MulOp // ino.method.codegen.24319.definition public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, - boolean neg, Vector paralist) + boolean neg, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24319.body diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java index 52b87589..9757926f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.ArgumentList.8621.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -23,13 +23,13 @@ public class ArgumentList extends SyntaxTreeNode // ino.class.ArgumentList.24911.body { // ino.attribute.expr.24914.declaration - public Vector expr = new Vector(); + public Menge expr = new Menge(); // ino.end // ino.method.codegen.24917.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24917.body @@ -44,7 +44,7 @@ public class ArgumentList extends SyntaxTreeNode // ino.method.get_codegen_ArgumentList.24920.definition - public String get_codegen_ArgumentList(Vector paralist) + public String get_codegen_ArgumentList(Menge paralist) // ino.end // ino.method.get_codegen_ArgumentList.24920.body { @@ -125,7 +125,7 @@ public class ArgumentList extends SyntaxTreeNode @Override - public Vector getChildren() { + public Menge getChildren() { return expr; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 96196a5a..a3098046 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -92,7 +92,7 @@ public class Assign extends Expr // ino.method.codegen.24951.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.24951.body @@ -104,15 +104,15 @@ public class Assign extends Expr if(expr1 instanceof LocalOrFieldVar) { LocalOrFieldVar local = (LocalOrFieldVar)expr1; - Vector name_vector = local.get_Name_Vector(); - Vector type_vector = local.get_Type_Vector(); + Menge name_Menge = local.get_Name_Menge(); + Menge type_Menge = local.get_Type_Menge(); String local_name = null; String class_name = null; String type = null; - for(int i=0; i < name_vector.size()-1; i++) + for(int i=0; i < name_Menge.size()-1; i++) { - local_name = (String)name_vector.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + local_name = (String)name_Menge.elementAt(i); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -137,10 +137,10 @@ public class Assign extends Expr code.add_code(JVMCode.getfield); code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); } - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } expr2.codegen(classfile, code, paralist); - local_name = (String)name_vector.lastElement(); + local_name = (String)name_Menge.lastElement(); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -226,7 +226,7 @@ public class Assign extends Expr // ino.method.wandleRefTypeAttributes2GenericAttributes.24963.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.24963.body { @@ -250,8 +250,8 @@ public class Assign extends Expr @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr1); ret.add(this.expr2); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index 0e2934d5..f48cb7e7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -156,7 +156,7 @@ public class Binary extends BinaryExpr // ino.method.codegen.25009.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25009.body @@ -175,7 +175,7 @@ public class Binary extends BinaryExpr // ino.method.not_codegen.25012.definition - public void not_codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void not_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.not_codegen.25012.body @@ -194,7 +194,7 @@ public class Binary extends BinaryExpr // ino.method.neg_codegen.25015.definition - public void neg_codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void neg_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.neg_codegen.25015.body @@ -236,7 +236,7 @@ public class Binary extends BinaryExpr // ino.method.wandleRefTypeAttributes2GenericAttributes.25027.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25027.body { @@ -285,8 +285,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr1); ret.add(this.expr2); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index e338318c..f330bffc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -55,7 +55,7 @@ public class Block extends Statement // ino.end // ino.attribute.statements.25047.declaration - public Vector statements = new Vector(); + public Menge statements = new Menge(); // ino.end @@ -73,7 +73,7 @@ public class Block extends Statement // ino.method.get_Statement.25065.definition - public Vector get_Statement() + public Menge get_Statement() // ino.end // ino.method.get_Statement.25065.body { @@ -94,10 +94,10 @@ public class Block extends Statement - // ino.method.set_Statement_Vector.25071.definition - public void set_Statement_Vector(Vector v) + // ino.method.set_Statement_Menge.25071.definition + public void set_Statement_Menge(Menge v) // ino.end - // ino.method.set_Statement_Vector.25071.body + // ino.method.set_Statement_Menge.25071.body { statements = v; } @@ -106,7 +106,7 @@ public class Block extends Statement // ino.method.codegen.25074.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25074.body @@ -150,7 +150,7 @@ public class Block extends Statement */ // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25086.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25086.body { @@ -246,8 +246,8 @@ public class Block extends Statement } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); for(Statement st : this.get_Statement()){ ret.add(st); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index 721568c8..e5f3a45d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.BoolLiteral.8626.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -56,7 +56,7 @@ public class BoolLiteral extends Literal /* // ino.method.sc_check.25102.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach,Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach,Hashtable parabh) // ino.end // ino.method.sc_check.25102.body { @@ -92,7 +92,7 @@ public class BoolLiteral extends Literal // ino.method.codegen.25111.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25111.body @@ -139,8 +139,8 @@ public class BoolLiteral extends Literal @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } @@ -148,8 +148,8 @@ public class BoolLiteral extends Literal @Override public void wandleRefTypeAttributes2GenericAttributes( - Vector paralist, - Vector genericMethodParameters) { + Menge paralist, + Menge genericMethodParameters) { // TODO Auto-generated method stub } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java index 3e087090..e2212b52 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.CastExpr.8627.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -89,7 +89,7 @@ public class CastExpr extends UnaryExpr // ino.method.codegen.25154.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25154.body @@ -114,7 +114,7 @@ public class CastExpr extends UnaryExpr // ino.method.wandleRefTypeAttributes2GenericAttributes.25163.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25163.body { @@ -139,8 +139,8 @@ public class CastExpr extends UnaryExpr @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index daaeeb7d..9d0e6f46 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.CharLiteral.8628.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -55,7 +55,7 @@ public class CharLiteral extends Literal /* // ino.method.sc_check.25179.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25179.body { @@ -87,7 +87,7 @@ public class CharLiteral extends Literal // ino.method.codegen.25188.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25188.body @@ -125,8 +125,8 @@ public class CharLiteral extends Literal return new JavaCodeResult("'"+String.valueOf(this.Char)+"'"); } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } @@ -134,8 +134,8 @@ public class CharLiteral extends Literal @Override public void wandleRefTypeAttributes2GenericAttributes( - Vector paralist, - Vector genericMethodParameters) { + Menge paralist, + Menge genericMethodParameters) { } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index f0da0271..4215b26c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -75,7 +75,7 @@ public class DoubleLiteral extends Literal /* // ino.method.sc_check.25466.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25466.body { @@ -94,7 +94,7 @@ public class DoubleLiteral extends Literal // ino.end // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25472.body @@ -155,7 +155,7 @@ public class DoubleLiteral extends Literal } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.body { @@ -175,8 +175,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java index f5d245d4..7138eb27 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.EmptyStmt.8629.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -44,7 +44,7 @@ public class EmptyStmt extends Statement // ino.end /* // ino.method.sc_check.25213.definition - public void sc_check(Vector classlist, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classlist, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25213.body { @@ -56,7 +56,7 @@ public class EmptyStmt extends Statement */ // ino.method.codegen.25216.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25216.body @@ -65,7 +65,7 @@ public class EmptyStmt extends Statement // ino.method.wandleRefTypeAttributes2GenericAttributes.25222.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25222.body { @@ -90,8 +90,8 @@ public class EmptyStmt extends Statement } @Override - public Vector getChildren() { - return new Vector(); + public Menge getChildren() { + return new Menge(); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index 4d35b695..8cc69721 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Expr.8630.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -63,10 +63,10 @@ public abstract class Expr extends ExprStmt } // ino.end - // ino.method.get_Name_Vector.25244.definition - public Vector get_Name_Vector() + // ino.method.get_Name_Menge.25244.definition + public Menge get_Name_Menge() // ino.end - // ino.method.get_Name_Vector.25244.body + // ino.method.get_Name_Menge.25244.body { return usedid.get_Name(); } @@ -74,10 +74,10 @@ public abstract class Expr extends ExprStmt - // ino.method.get_Type_Vector.25247.definition - public Vector get_Type_Vector() + // ino.method.get_Type_Menge.25247.definition + public Menge get_Type_Menge() // ino.end - // ino.method.get_Type_Vector.25247.body + // ino.method.get_Type_Menge.25247.body { return usedid.get_Typen(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java index 40c30950..34c0a8fb 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.ExprStmt.8631.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index 5c01d80e..06e3b7bf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -70,7 +70,7 @@ public class FloatLiteral extends Literal /* // ino.method.sc_check.25466.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25466.body { @@ -89,7 +89,7 @@ public class FloatLiteral extends Literal // ino.end // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25472.body @@ -151,7 +151,7 @@ public class FloatLiteral extends Literal } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.body { @@ -170,8 +170,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return null; } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java index e8e2e7a4..9f16e8b5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -50,13 +50,13 @@ public class ForStmt extends Statement super(offset,variableLength); } - void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) throws SCStatementException { } - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException { @@ -68,7 +68,7 @@ public class ForStmt extends Statement return "FOR "; } - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) { if(body_Loop_block!=null){ body_Loop_block.wandleRefTypeAttributes2GenericAttributes(paralist,genericMethodParameters); @@ -113,8 +113,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(this.body_Loop_block!=null)ret.add(this.body_Loop_block); if(this.head_Condition!=null)ret.add(this.head_Condition); if(this.head_Condition_1!=null)ret.add(this.head_Condition_1); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 4541f13c..1f0e2617 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -106,7 +106,7 @@ public class IfStmt extends Statement // ino.method.codegen.25334.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25334.body @@ -118,7 +118,7 @@ public class IfStmt extends Statement // ino.method.if_codegen.25337.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Vector paralist) + public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.if_codegen.25337.body @@ -206,7 +206,7 @@ public class IfStmt extends Statement //Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die //Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit //Toggle3 zu erzeugen - wird aber richtig generiert. - //letztes Statement im Vector in s schreiben + //letztes Statement im Menge in s schreiben //Statement s = (Statement)(((Block)this.then_block).statements.lastElement()); //Instanz von Return zum pr�fen anlegen Return r = new Return(getOffset(),getVariableLength()); @@ -232,7 +232,7 @@ public class IfStmt extends Statement // ino.method.wandleRefTypeAttributes2GenericAttributes.25349.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25349.body { @@ -284,8 +284,8 @@ public class IfStmt extends Statement @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(this.expr!=null)ret.add(this.expr); if(this.else_block!=null)ret.add(this.else_block); if(this.then_block!=null)ret.add(this.then_block); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java index e01b5717..246ca279 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -79,7 +79,7 @@ public class InstVar extends Expr // ino.method.InstVar.25414.defdescription type=javadoc /** - * macht aus einem UsedId mit einem Vector von Strings eine InstVar + * macht aus einem UsedId mit einem Menge von Strings eine InstVar *
    Author: Martin Pl�micke PL 05-08-17 * @param ui * @return @@ -113,13 +113,13 @@ public class InstVar extends Expr /* // ino.method.sc_check.25417.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25417.body { if(ext) parserlog.debug(" ---InstVar---"); - Vector name = usedid.get_Name(); + Menge name = usedid.get_Name(); for(Enumeration el = name.elements(); el.hasMoreElements();) { @@ -161,7 +161,7 @@ public class InstVar extends Expr // ino.end // ino.method.codegen.25426.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25426.body @@ -196,7 +196,7 @@ public class InstVar extends Expr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25444.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25444.body { @@ -230,8 +230,8 @@ public class InstVar extends Expr } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java index 1f49be5d..b8764fc4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.InstanceOf.8633.import import java.util.Enumeration; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -91,7 +91,7 @@ public class InstanceOf extends BinaryExpr // ino.end // ino.method.codegen.25380.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25380.body @@ -103,7 +103,7 @@ public class InstanceOf extends BinaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25389.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25389.body { @@ -124,8 +124,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index 5ec5f0e6..1484b53f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -73,7 +73,7 @@ public class IntLiteral extends Literal /* // ino.method.sc_check.25466.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25466.body { @@ -92,7 +92,7 @@ public class IntLiteral extends Literal // ino.end // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25472.body @@ -151,7 +151,7 @@ public class IntLiteral extends Literal } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.body { @@ -171,8 +171,8 @@ public class IntLiteral extends Literal return new JavaCodeResult(String.valueOf(this.Int)); } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 7976481a..6ca6dcfe 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -1,7 +1,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -74,7 +74,7 @@ public class LambdaExpression extends Expr{ @Override - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException { // TODO Auto-generated method stub @@ -83,14 +83,14 @@ public class LambdaExpression extends Expr{ @Override public void wandleRefTypeAttributes2GenericAttributes( - Vector paralist, - Vector genericMethodParameters) { + Menge paralist, + Menge genericMethodParameters) { Block block = this.method_body; // Zuerst Returntype untersuchen Type returnType=getType(); Type pendantReturnType = null; if(returnType instanceof RefType) - pendantReturnType = ((RefType)returnType).findGenericType(paralist, new Vector()); + pendantReturnType = ((RefType)returnType).findGenericType(paralist, new Menge()); //GenericTypeVar pendantReturnType=ClassHelper.findGenericType(returnType, paralist,genericMethodParameters); if(pendantReturnType!=null){ //Wenn generisch, dann modifizieren setType(pendantReturnType); @@ -102,7 +102,7 @@ public class LambdaExpression extends Expr{ // Nur wenn es sich um ein RefType-Field handelt Type pendantPara = null; if(fpType instanceof RefType) - pendantPara = ((RefType)fpType).findGenericType(paralist, new Vector()); + pendantPara = ((RefType)fpType).findGenericType(paralist, new Menge()); //GenericTypeVar pendantPara=ClassHelper.findGenericType(fpType,paralist,genericMethodParameters); if(pendantPara!=null){ //Wenn generisch, dann modifizieren fp.setType(pendantPara); @@ -141,7 +141,7 @@ public class LambdaExpression extends Expr{ ConstraintsSet ret = new ConstraintsSet(); //Die Assumptions für die Parameter der LambdaExpression TypeAssumptions ArgumentAssumptions = new TypeAssumptions(this.getParentClass().getName()); - Vector paramTypes = new Vector(); + Menge paramTypes = new Menge(); for(FormalParameter param : params.formalparameter){ if(param.getType()==null)param.setType(TypePlaceholder.fresh(this)); @@ -155,7 +155,7 @@ public class LambdaExpression extends Expr{ ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression //Die Constraints für ParameterTypen und Ret Typ erstellen: - Vector modifiedParamTypes = new Vector<>(); + Menge modifiedParamTypes = new Menge<>(); for(Type pT : paramTypes){ if(pT instanceof WildcardType){ //Auf Typfehler kontrollieren. Siehe Bug #12 Kommentar 3 @@ -210,8 +210,8 @@ public class LambdaExpression extends Expr{ } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.method_body); for(FormalParameter fp : this.params)ret.add(fp); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 85a636a6..e558d172 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.LocalOrFieldVar.8637.import import java.util.Enumeration; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -85,22 +85,22 @@ public class LocalOrFieldVar extends Expr // ino.method.codegen.25525.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25525.body { - Vector name_vector = get_Name_Vector(); - Vector type_vector = get_Type_Vector(); + Menge name_Menge = get_Name_Menge(); + Menge type_Menge = get_Type_Menge(); String local_name = null; String class_name = null; String type = null; - for(int i=0; i < name_vector.size(); i++) + for(int i=0; i < name_Menge.size(); i++) { - local_name = (String)name_vector.elementAt(i); + local_name = (String)name_Menge.elementAt(i); try {// TEST SCJU. ArrayIndexoutofBounds umgehen! - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); } catch (Throwable e) {type = null; } int index = code.get_indexOf_Var(local_name); @@ -129,7 +129,7 @@ public class LocalOrFieldVar extends Expr } try { // TEST SCJU. ArrayIndexoutofBounds umgehen! - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } catch (Throwable e) { } } @@ -163,7 +163,7 @@ public class LocalOrFieldVar extends Expr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25537.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25537.body { @@ -193,8 +193,8 @@ public class LocalOrFieldVar extends Expr } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 56437b0a..9b937799 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.LocalVarDecl.8638.import import java.util.Enumeration; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -52,10 +52,10 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.end // ino.attribute.declid.25548.declaration - private Vector declid = new Vector(); + private Menge declid = new Menge(); // ino.end // ino.attribute.paralist.25554.declaration - private Vector paralist = null; + private Menge paralist = null; // ino.end // ino.attribute.parahash.25557.declaration private Hashtable parahash = null; @@ -90,7 +90,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable } // ino.end // ino.method.set_ParaList.25581.definition - public void set_ParaList(Vector pl) + public void set_ParaList(Menge pl) // ino.end // ino.method.set_ParaList.25581.body { @@ -99,7 +99,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.end // ino.method.is_declared.25587.definition - public void is_declared(Type t, Vector classlist) + public void is_declared(Type t, Menge classlist) throws SCStatementException // ino.end // ino.method.is_declared.25587.body @@ -111,7 +111,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // System.out.println("is_init: vergleiche "+t.get_Type_()+" mit "+c.get_classname()); if(c.getName().equals(t.getName())){ - // System.out.println("Klasse "+t.get_Type()+" im Vector classlist gefunden."); + // System.out.println("Klasse "+t.get_Type()+" im Menge classlist gefunden."); flag = true; break; } @@ -153,7 +153,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable /* // ino.method.check_anz.25590.definition - public void check_anz(Type type, Vector paralist, Vector classlist) + public void check_anz(Type type, Menge paralist, Menge classlist) throws SCStatementException // ino.end // ino.method.check_anz.25590.body @@ -250,7 +250,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.codegen.25593.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25593.body @@ -260,18 +260,18 @@ public class LocalVarDecl extends Statement implements TypeInsertable declid.elementAt(i).codegen_LocalVarDecl(classfile, code, this.getType(), paralist); } // ino.end - // ino.method.getDeclidVector.25596.definition - public Vector getDeclidVector() + // ino.method.getDeclidMenge.25596.definition + public Menge getDeclidMenge() // ino.end - // ino.method.getDeclidVector.25596.body + // ino.method.getDeclidMenge.25596.body { return declid; } // ino.end - // ino.method.setDeclidVector.25599.definition - public void setDeclidVector(Vector declid) + // ino.method.setDeclidMenge.25599.definition + public void setDeclidMenge(Menge declid) // ino.end - // ino.method.setDeclidVector.25599.body + // ino.method.setDeclidMenge.25599.body { this.declid = declid; } @@ -349,7 +349,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25620.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25620.body { @@ -358,7 +358,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // Nur wenn es sich um ein RefType-Field handelt Type pendantPara = null; if(fpType instanceof RefType) - pendantPara = ((RefType)fpType).findGenericType(paralist, new Vector()); + pendantPara = ((RefType)fpType).findGenericType(paralist, new Menge()); //GenericTypeVar pendantPara=ClassHelper.findGenericType(fpType,paralist,genericMethodParameters); if(pendantPara!=null){ //Wenn generisch, dann modifizieren setType(pendantPara); @@ -428,8 +428,8 @@ public class LocalVarDecl extends Statement implements TypeInsertable } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(this.getType()!=null)ret.add(this.getType()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index 64f1d70b..0cc8fd14 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -74,7 +74,7 @@ public class LongLiteral extends Literal /* // ino.method.sc_check.25466.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25466.body { @@ -93,7 +93,7 @@ public class LongLiteral extends Literal // ino.end // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25472.body @@ -153,7 +153,7 @@ public class LongLiteral extends Literal } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25487.body { @@ -172,8 +172,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return null; } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index cd7bd1de..190df4da 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.MethodCall.8639.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -125,10 +125,10 @@ public class MethodCall extends Expr } // ino.end - // ino.method.set_Expr_Vector.25699.definition - public void set_Expr_Vector(Vector v) + // ino.method.set_Expr_Menge.25699.definition + public void set_Expr_Menge(Menge v) // ino.end - // ino.method.set_Expr_Vector.25699.body + // ino.method.set_Expr_Menge.25699.body { arglist.expr=v; } @@ -164,7 +164,7 @@ public class MethodCall extends Expr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25741.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25741.body { @@ -220,7 +220,7 @@ public class MethodCall extends Expr ConstraintsSet ret = new ConstraintsSet(); //ret.add(new Overloading(assumptions, this, this.getType()).generateConsstraints()); OderConstraint oCons = new OderConstraint(); - Vector methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size()); + Menge methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size()); if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+this.get_Name()+" ist in den Assumptions nicht vorhanden", this); //Alle möglichen Methoden durchgehen: for(MethodAssumption methodAssumption : methodAssumptions){ @@ -291,8 +291,8 @@ public class MethodCall extends Expr } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); for(Expr e : this.arglist.expr){ ret.add(e); } @@ -306,7 +306,7 @@ public class MethodCall extends Expr } @Override - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException { // TODO Auto-generated method stub diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java index 108ec380..9728c80f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.NegativeExpr.8640.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -82,7 +82,7 @@ public class NegativeExpr extends UnaryExpr // ino.end // ino.method.codegen.25772.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25772.body @@ -97,7 +97,7 @@ public class NegativeExpr extends UnaryExpr // ino.end // ino.method.neg_codegen.25775.definition - public void neg_codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void neg_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.neg_codegen.25775.body @@ -113,7 +113,7 @@ public class NegativeExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25784.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25784.body { @@ -133,8 +133,8 @@ public class NegativeExpr extends UnaryExpr } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 4162b161..1b3c2bc0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.NewArray.8641.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -42,7 +42,7 @@ public class NewArray extends Expr private Type type; // ino.end // ino.attribute.expr.25797.declaration - public Vector expr = new Vector(); + public Menge expr = new Menge(); // ino.end // ino.attribute.parserlog.25800.declaration protected static Logger parserlog = Logger.getLogger("parser"); @@ -90,7 +90,7 @@ public class NewArray extends Expr /* // ino.method.sc_check.25812.definition - public void sc_check(Vector classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25812.body { @@ -119,7 +119,7 @@ public class NewArray extends Expr // ino.end // ino.method.codegen.25818.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25818.body @@ -139,7 +139,7 @@ public class NewArray extends Expr // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.body { @@ -159,8 +159,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.addAll(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index 0d3179ab..a4e646c4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -97,7 +97,7 @@ public class NewClass extends Expr // ino.end // ino.method.codegen.25858.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25858.body @@ -149,7 +149,7 @@ public class NewClass extends Expr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25870.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25870.body { @@ -162,7 +162,7 @@ public class NewClass extends Expr ConstraintsSet ret = new ConstraintsSet(); UndConstraint callConstraints = new UndConstraint(); //Die Auskommentierten Zeilen gehören zu MethodRefNew - //Vector argumentTypeList = new Vector(); + //Menge argumentTypeList = new Menge(); //for(Expr expr : this.arglist.expr){ // argumentTypeList.add(expr.getTypeVariable()); //} @@ -230,8 +230,8 @@ public class NewClass extends Expr return ret; } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(this.arglist!=null)for(Expr e : this.arglist.expr){ ret.add(e); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index d318c9da..63c3578e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.NotExpr.8643.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -94,7 +94,7 @@ public class NotExpr extends UnaryExpr // ino.end // ino.method.codegen.25904.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25904.body @@ -109,7 +109,7 @@ public class NotExpr extends UnaryExpr // ino.end // ino.method.not_codegen.25907.definition - public void not_codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void not_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.not_codegen.25907.body @@ -134,7 +134,7 @@ public class NotExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25916.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25916.body { @@ -157,8 +157,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 441da860..58924e57 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Null.8644.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -57,7 +57,7 @@ public class Null extends Literal /* // ino.method.sc_check.25932.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25932.body { @@ -68,7 +68,7 @@ public class Null extends Literal */ // ino.method.codegen.25935.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25935.body @@ -79,7 +79,7 @@ public class Null extends Literal // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25944.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25944.body { @@ -98,8 +98,8 @@ public class Null extends Literal } @Override - public Vector getChildren() { - return new Vector(); + public Menge getChildren() { + return new Menge(); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java index 46716fca..d2730c2a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.PositivExpr.8645.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -78,7 +78,7 @@ public class PositivExpr extends UnaryExpr /* // ino.method.sc_check.25972.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.25972.body { @@ -90,7 +90,7 @@ public class PositivExpr extends UnaryExpr */ // ino.method.codegen.25975.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.25975.body @@ -98,7 +98,7 @@ public class PositivExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25984.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25984.body { @@ -119,8 +119,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java index 2c224f97..e2ab3b53 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PostDecExpr.8646.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -70,13 +70,13 @@ public class PostDecExpr extends UnaryExpr // ino.end // ino.method.codegen.26009.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26009.body { if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Vector().lastElement(); + String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -87,13 +87,13 @@ public class PostDecExpr extends UnaryExpr else { if(expr instanceof LocalOrFieldVar) { LocalOrFieldVar local = (LocalOrFieldVar)expr; - Vector name_vector = local.get_Name_Vector(); - Vector type_vector = local.get_Type_Vector(); + Menge name_Menge = local.get_Name_Menge(); + Menge type_Menge = local.get_Type_Menge(); String class_name = null; String type = null; - for(int i=0; i < name_vector.size()-1; i++) { - local_name = (String)name_vector.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + for(int i=0; i < name_Menge.size()-1; i++) { + local_name = (String)name_Menge.elementAt(i); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); index = code.get_indexOf_Var(local_name); if(index != -1) { // LocalVar @@ -112,10 +112,10 @@ public class PostDecExpr extends UnaryExpr code.add_code(JVMCode.getfield); code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); } - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } - local_name = (String)name_vector.lastElement(); + local_name = (String)name_Menge.lastElement(); index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); code.add_code(JVMCode.dup); @@ -148,7 +148,7 @@ public class PostDecExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26018.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26018.body { @@ -162,8 +162,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java index 02959a14..e44c1e5c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PostIncExpr.8647.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -74,13 +74,13 @@ public class PostIncExpr extends UnaryExpr // ino.end // ino.method.codegen.26043.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26043.body { if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Vector().lastElement(); + String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -91,13 +91,13 @@ public class PostIncExpr extends UnaryExpr else { if(expr instanceof LocalOrFieldVar) { LocalOrFieldVar local = (LocalOrFieldVar)expr; - Vector name_vector = local.get_Name_Vector(); - Vector type_vector = local.get_Type_Vector(); + Menge name_Menge = local.get_Name_Menge(); + Menge type_Menge = local.get_Type_Menge(); String class_name = null; String type = null; - for(int i=0; i < name_vector.size()-1; i++) { - local_name = (String)name_vector.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + for(int i=0; i < name_Menge.size()-1; i++) { + local_name = (String)name_Menge.elementAt(i); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); index = code.get_indexOf_Var(local_name); if(index != -1) { // LocalVar @@ -116,10 +116,10 @@ public class PostIncExpr extends UnaryExpr code.add_code(JVMCode.getfield); code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); } - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } - local_name = (String)name_vector.lastElement(); + local_name = (String)name_Menge.lastElement(); index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); code.add_code(JVMCode.dup); @@ -152,7 +152,7 @@ public class PostIncExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26052.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26052.body { @@ -168,8 +168,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java index 778f7491..02eee809 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PreDecExpr.8648.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -70,13 +70,13 @@ public class PreDecExpr extends UnaryExpr // ino.end // ino.method.codegen.26077.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26077.body { if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Vector().lastElement(); + String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -87,13 +87,13 @@ public class PreDecExpr extends UnaryExpr else { if(expr instanceof LocalOrFieldVar) { LocalOrFieldVar local = (LocalOrFieldVar)expr; - Vector name_vector = local.get_Name_Vector(); - Vector type_vector = local.get_Type_Vector(); + Menge name_Menge = local.get_Name_Menge(); + Menge type_Menge = local.get_Type_Menge(); String class_name = null; String type = null; - for(int i=0; i < name_vector.size()-1; i++) { - local_name = (String)name_vector.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + for(int i=0; i < name_Menge.size()-1; i++) { + local_name = (String)name_Menge.elementAt(i); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); index = code.get_indexOf_Var(local_name); if(index != -1) { // LocalVar @@ -112,10 +112,10 @@ public class PreDecExpr extends UnaryExpr code.add_code(JVMCode.getfield); code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); } - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } - local_name = (String)name_vector.lastElement(); + local_name = (String)name_Menge.lastElement(); index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); code.add_code(JVMCode.dup); @@ -148,7 +148,7 @@ public class PreDecExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26086.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26086.body { @@ -161,8 +161,8 @@ public class PreDecExpr extends UnaryExpr return null; } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java index 51553b2f..00861390 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PreIncExpr.8649.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -71,13 +71,13 @@ public class PreIncExpr extends UnaryExpr // ino.end // ino.method.codegen.26111.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26111.body { if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Vector().lastElement(); + String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); int index = code.get_indexOf_Var(local_name); if(index != -1) { @@ -88,13 +88,13 @@ public class PreIncExpr extends UnaryExpr else { if(expr instanceof LocalOrFieldVar) { LocalOrFieldVar local = (LocalOrFieldVar)expr; - Vector name_vector = local.get_Name_Vector(); - Vector type_vector = local.get_Type_Vector(); + Menge name_Menge = local.get_Name_Menge(); + Menge type_Menge = local.get_Type_Menge(); String class_name = null; String type = null; - for(int i=0; i < name_vector.size()-1; i++) { - local_name = (String)name_vector.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_vector.elementAt(i), paralist); + for(int i=0; i < name_Menge.size()-1; i++) { + local_name = (String)name_Menge.elementAt(i); + type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); index = code.get_indexOf_Var(local_name); if(index != -1) { // LocalVar @@ -113,10 +113,10 @@ public class PreIncExpr extends UnaryExpr code.add_code(JVMCode.getfield); code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); } - class_name = (String)type_vector.elementAt(i); + class_name = (String)type_Menge.elementAt(i); } - local_name = (String)name_vector.lastElement(); + local_name = (String)name_Menge.lastElement(); index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); code.add_code(JVMCode.dup); @@ -149,7 +149,7 @@ public class PreIncExpr extends UnaryExpr // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26120.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26120.body { @@ -163,8 +163,8 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java index 8ed2da92..0558c4f7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Receiver.8650.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index d0c13f81..08c516b5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Return.8651.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -70,7 +70,7 @@ public class Return extends Statement // ino.end // ino.method.codegen.26172.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26172.body @@ -89,7 +89,7 @@ public class Return extends Statement } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26181.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26181.body { @@ -124,8 +124,8 @@ public class Return extends Statement } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.retexpr); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index 120a015c..c30794f7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Statement.8652.import import java.util.Enumeration; import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -70,7 +70,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse // ino.end // ino.method.codegen.26206.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public abstract void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException; // ino.end @@ -78,7 +78,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse // ino.method.wandleRefTypeAttributes2GenericAttributes.26224.declaration - public abstract void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters); + public abstract void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters); // ino.end /** @@ -101,7 +101,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse * @return */ public String getTypeInformation(){ - return this.printJavaCode(new ResultSet(new Vector()))+" : "+type.toString(); + return this.printJavaCode(new ResultSet(new Menge()))+" : "+type.toString(); } @@ -120,7 +120,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse @Override public String getDescription(){ - return this.printJavaCode(new ResultSet(new Vector())).toString(); + return this.printJavaCode(new ResultSet(new Menge())).toString(); } public void setReturnType(Type t){ diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index e2b5ce05..89eb265d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -57,7 +57,7 @@ public class StringLiteral extends Literal /* // ino.method.sc_check.26240.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) // ino.end // ino.method.sc_check.26240.body { @@ -86,7 +86,7 @@ public class StringLiteral extends Literal // ino.end // ino.method.codegen.26249.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26249.body @@ -114,7 +114,7 @@ public class StringLiteral extends Literal // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26258.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26258.body { @@ -133,8 +133,8 @@ public class StringLiteral extends Literal } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index 3849e3c0..c5f208b1 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.This.8654.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 8a568600..5c4eecc5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.This.8654.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -83,7 +83,7 @@ public class This extends Expr /* // ino.method.sc_check.26280.definition - public void sc_check(Vector classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach, Hashtable parabh) throws SCStatementException // ino.end // ino.method.sc_check.26280.body @@ -95,7 +95,7 @@ public class This extends Expr */ // ino.method.codegen.26283.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26283.body @@ -113,7 +113,7 @@ public class This extends Expr // ino.method.wandleRefTypeAttributes2GenericAttributes.26295.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26295.body { @@ -148,8 +148,8 @@ public class This extends Expr } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java index fb50b013..506c6d3e 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.This.8654.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassFile; @@ -103,8 +103,8 @@ public class ThisCall extends MethodCall } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); if(arglist != null)ret.add(arglist); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java index 19a2ff5d..cf77ca24 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.UnaryExpr.8655.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; @@ -34,12 +34,12 @@ public abstract class UnaryExpr extends Expr // ino.end // ino.method.codegen.26305.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public abstract void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException; // ino.end - private Vector getNumericTypes(){ - Vector ret = new Vector<>(); + private Menge getNumericTypes(){ + Menge ret = new Menge<>(); ret.add(new RefType("Integer",this,-1)); ret.add(new RefType("Long",this,-1)); ret.add(new RefType("Double",this,-1)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 13a2ace4..e9d32933 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -82,7 +82,7 @@ public class WhileStmt extends Statement // ino.end // ino.method.codegen.26351.definition - public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) + public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) throws JVMCodeException // ino.end // ino.method.codegen.26351.body @@ -100,7 +100,7 @@ public class WhileStmt extends Statement // ino.end // ino.method.loop_codegen.26354.definition - public void loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, Vector paralist) + public void loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, Menge paralist) throws JVMCodeException // ino.end // ino.method.loop_codegen.26354.body @@ -150,7 +150,7 @@ public class WhileStmt extends Statement // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26363.definition - public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26363.body { @@ -182,8 +182,8 @@ public class WhileStmt extends Statement } @Override - public Vector getChildren() { - Vector ret = new Vector(); + public Menge getChildren() { + Menge ret = new Menge(); ret.add(this.expr); ret.add(this.loop_block); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index 15bee03a..1be887c9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.end // ino.module.BoundedGenericTypeVar.8669.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -37,13 +37,13 @@ public class BoundedGenericTypeVar extends GenericTypeVar */ // ino.end // ino.attribute.bounds.26468.declaration - Vector bounds=new Vector(); + Menge bounds=new Menge(); // ino.end private int endOffset; /* // ino.method.BoundedGenericTypeVar.26471.definition - public BoundedGenericTypeVar(String s, int offset, Vector t, int endOffset) + public BoundedGenericTypeVar(String s, int offset, Menge t, int endOffset) // ino.end // ino.method.BoundedGenericTypeVar.26471.body { @@ -54,7 +54,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar */ // ino.method.BoundedGenericTypeVar.29409.definition - public BoundedGenericTypeVar(String s, Vector bounds, SyntaxTreeNode parentClass, int offset, int endOffset) + public BoundedGenericTypeVar(String s, Menge bounds, SyntaxTreeNode parentClass, int offset, int endOffset) // ino.end // ino.method.BoundedGenericTypeVar.29409.body { @@ -74,7 +74,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar } // ino.method.getBounds.26474.definition - public Vector getBounds() + public Menge getBounds() // ino.end // ino.method.getBounds.26474.body { @@ -88,7 +88,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar ConstraintsSet ret = super.TYPE(ass); //ass.addGenericVarAssumption(this); //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds - Vector tempBounds = new Vector<>(); + Menge tempBounds = new Menge<>(); if(this.bounds != null){ for(ObjectType ev : this.bounds){ ConstraintType extendsType = ev.TYPE(ass, this); @@ -135,7 +135,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar // ino.end // ino.method.getSignatureDefinition.26489.body { - // Rueckgabeformat: + // Rueckgabeformat: // Zur kompletten Definition (bspw. Rueckgabewert) muss zusaetzlich // noch ((GenericTypeVar)obj).getSignatureType(paralist) aufgerufen // werden! @@ -152,8 +152,8 @@ public class BoundedGenericTypeVar extends GenericTypeVar // ino.end @Override - public Vector getChildren() { - Vector ret = super.getChildren(); + public Menge getChildren() { + Menge ret = super.getChildren(); ret.addAll(this.bounds); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java b/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java index 80c6d3ca..bf6ab090 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java @@ -1,15 +1,15 @@ package de.dhbwstuttgart.syntaxtree.type; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.unify.CVectorSet; +import de.dhbwstuttgart.typeinference.unify.CMengeSet; -public class CRefTypeSet extends CVectorSet { +public class CRefTypeSet extends CMengeSet { public CRefTypeSet shallowCopy(){ CRefTypeSet copy = new CRefTypeSet(); - copy.setVector((Vector)this.getVector().clone()); + copy.setMenge((Menge)this.getMenge().clone()); return copy; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 7ab8e5e6..0a10cfc8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree.type; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -139,8 +139,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } @Override - public Vector getInvolvedTypePlaceholder() { - Vector ret = super.getInvolvedTypePlaceholder(); + public Menge getInvolvedTypePlaceholder() { + Menge ret = super.getInvolvedTypePlaceholder(); ret.addAll(this.innerType.getInvolvedTypePlaceholder()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java index 3b3f0fc2..535545af 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree.type; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -11,7 +11,7 @@ import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; public class FreshWildcardType extends Type { private static String strNextName = "A"; - private Vector upperBounds = new Vector(); + private Menge upperBounds = new Menge(); /** * Author: Arne Lüdtke
    @@ -151,17 +151,17 @@ public class FreshWildcardType extends Type { } /** * Author: Arne Lüdtke
    - * Gibt den Vector der oberen Grenzen zurück + * Gibt den Menge der oberen Grenzen zurück */ - public Vector get_UpperBounds() + public Menge get_UpperBounds() { return this.upperBounds; } /** * Author: Arne Lüdtke
    - * Setzt den Vector der oberen Grenzen + * Setzt den Menge der oberen Grenzen */ - public void set_UpperBounds(Vector bounds) + public void set_UpperBounds(Menge bounds) { this.upperBounds = bounds; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index bb1a22a5..30d3d317 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.module.GenericTypeVar.8671.import import java.util.HashMap; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -35,7 +35,7 @@ public class GenericTypeVar extends ObjectType // ino.class.GenericTypeVar.26505.body { //Type genericTypeVar; - //Vector extendVars = new Vector(); + //Menge extendVars = new Menge(); protected Pair genericConstraint; /** * Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch @@ -43,7 +43,7 @@ public class GenericTypeVar extends ObjectType *
    Autor: J�rg B�uerle */ // ino.method.GenericTypeVar.26509.defdescription type=line - // private Hashtable> m_TypeErasureList; + // private Hashtable> m_TypeErasureList; // ino.end private static HashMap tph = new HashMap<>(); @@ -132,7 +132,7 @@ public class GenericTypeVar extends ObjectType */ // ino.end // ino.method.get_codegen_Type.26521.definition - public String get_codegen_Type(Vector paralist) + public String get_codegen_Type(Menge paralist) // ino.end // ino.method.get_codegen_Type.26521.body { @@ -141,7 +141,7 @@ public class GenericTypeVar extends ObjectType // ino.end // ino.method.getSignatureType.26524.definition - public String getSignatureType(Vector paralist) + public String getSignatureType(Menge paralist) // ino.end // ino.method.getSignatureType.26524.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ParaList.java b/src/de/dhbwstuttgart/syntaxtree/type/ParaList.java index 0679aa20..2e1a9f7a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ParaList.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ParaList.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.end // ino.module.ParaList.8674.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -13,12 +13,12 @@ import de.dhbwstuttgart.logger.Section; // ino.class.ParaList.26591.declaration -public class ParaList extends Vector +public class ParaList extends Menge // ino.end // ino.class.ParaList.26591.body { // ino.attribute.paralist.26594.declaration - //protected Vector paralist = new Vector(); + //protected Menge paralist = new Menge(); // ino.end // ino.attribute.parserlog.26597.declaration protected static Logger parserlog = Logger.getLogger("parser"); @@ -40,7 +40,7 @@ public class ParaList extends Vector // ino.end // ino.method.get_ParaList.26606.definition - public Vector get_ParaList() + public Menge get_ParaList() // ino.end // ino.method.get_ParaList.26606.body { @@ -66,7 +66,7 @@ public class ParaList extends Vector } // ino.end // ino.method.getParalist.26615.definition - public Vector getParalist() + public Menge getParalist() // ino.end // ino.method.getParalist.26615.body { @@ -74,7 +74,7 @@ public class ParaList extends Vector } // ino.end // ino.method.setParalist.26618.definition - public void setParalist(Vector paralist) + public void setParalist(Menge paralist) // ino.end // ino.method.setParalist.26618.body { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index c59303c6..321b222b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.JVMCode; @@ -41,7 +41,7 @@ public class RefType extends ObjectType implements IMatchable private boolean IsArray = false; // ino.attribute.parameter.26625.declaration - private Vector parameter = null; + private Menge parameter = null; // ino.end // ino.attribute.primitiveFlag.29412.decldescription type=javadoc /** @@ -91,7 +91,7 @@ public class RefType extends ObjectType implements IMatchable } // ino.method.RefType.26640.definition - public RefType(String fullyQualifiedName, Vector parameter,SyntaxTreeNode parent, int offset) + public RefType(String fullyQualifiedName, Menge parameter,SyntaxTreeNode parent, int offset) // ino.end // ino.method.RefType.26640.body { @@ -215,7 +215,7 @@ public class RefType extends ObjectType implements IMatchable * @return */ public void GTV2TPH(SyntaxTreeNode environment){ - Vector paralist = new Vector(); + Menge paralist = new Menge(); if(this.get_ParaList()!=null)for(Type t : this.get_ParaList()){ if(t instanceof GenericTypeVar)paralist.add(((GenericTypeVar)t).getTypePlaceHolder(environment)); else{ @@ -236,7 +236,7 @@ public class RefType extends ObjectType implements IMatchable * @param type * @return */ - public GenericTypeVar findGenericType(Vector paralist, Vector methodParaList) + public GenericTypeVar findGenericType(Menge paralist, Menge methodParaList) { for(int i=0;i v) + public void set_ParaList(Menge v) // ino.end // ino.method.set_ParaList.26661.body { /* - Vector paralist = new Vector(); + Menge paralist = new Menge(); if(v!=null)for(Type t : v){ if(t instanceof GenericTypeVar)paralist.add(((GenericTypeVar)t).getTypePlaceHolder()); else paralist.add(t); @@ -339,7 +339,7 @@ public class RefType extends ObjectType implements IMatchable * @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus */ // ino.method.get_ParaList.26664.definition - public Vector get_ParaList() + public Menge get_ParaList() // ino.end // ino.method.get_ParaList.26664.body { @@ -348,8 +348,8 @@ public class RefType extends ObjectType implements IMatchable } // ino.end - public Vector getParaList(){ - if(this.parameter==null)return new Vector<>(); + public Menge getParaList(){ + if(this.parameter==null)return new Menge<>(); return this.parameter; } @@ -594,8 +594,8 @@ public class RefType extends ObjectType implements IMatchable { if(this.get_ParaList() != null ) { - Vector para = this.get_ParaList(); - Vector clonepara = new Vector(); + Menge para = this.get_ParaList(); + Menge clonepara = new Menge(); for(int i = 0; i< para.size(); i++) { clonepara.addElement(((Type)para.elementAt(i)).clone()); @@ -658,7 +658,7 @@ public class RefType extends ObjectType implements IMatchable * HOTI * Liefert bei Klassen die fullyQualified angegeben wurden * nur den schlussendlichen Bezeichner - * p.ex. java.util.Vector => Vector + * p.ex. de.dhbwstuttgart.typeinference.Menge => Menge * @return */ // ino.end @@ -672,7 +672,7 @@ public class RefType extends ObjectType implements IMatchable // ino.end // ino.method.getSignatureType.26700.definition - public String getSignatureType(Vector paralist) + public String getSignatureType(Menge paralist) // ino.end // ino.method.getSignatureType.26700.body { @@ -784,8 +784,8 @@ public class RefType extends ObjectType implements IMatchable } @Override - public Vector getUnresolvedTPH(ResultSet resultSet) { - Vector ret = super.getUnresolvedTPH(resultSet); + public Menge getUnresolvedTPH(ResultSet resultSet) { + Menge ret = super.getUnresolvedTPH(resultSet); /* if(this.parameter!=null)for(Type t : this.parameter){ if(t instanceof TypePlaceholder){ @@ -800,8 +800,8 @@ public class RefType extends ObjectType implements IMatchable } @Override - public Vector getInvolvedTypePlaceholder() { - Vector ret = super.getInvolvedTypePlaceholder(); + public Menge getInvolvedTypePlaceholder() { + Menge ret = super.getInvolvedTypePlaceholder(); if(this.parameter == null)return ret; for(Type param : this.parameter){ ret.addAll(param.getInvolvedTypePlaceholder()); @@ -817,8 +817,8 @@ public class RefType extends ObjectType implements IMatchable } @Override - public Vector getChildren() { - Vector ret = super.getChildren(); + public Menge getChildren() { + Menge ret = super.getChildren(); ret.addAll(this.getParaList()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 7fd6ec6f..cd477222 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree.type; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.ConstraintType; @@ -136,8 +136,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } @Override - public Vector getInvolvedTypePlaceholder() { - Vector ret = super.getInvolvedTypePlaceholder(); + public Menge getInvolvedTypePlaceholder() { + Menge ret = super.getInvolvedTypePlaceholder(); ret.addAll(this.innerType.getInvolvedTypePlaceholder()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index d2e5522e..55dbc284 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.end // ino.module.Type.8677.import import java.util.ArrayList; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; @@ -118,7 +118,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset */ // ino.end // ino.method.get_codegen_Type.26750.definition - public String get_codegen_Type(Vector paralist) + public String get_codegen_Type(Menge paralist) // ino.end // ino.method.get_codegen_Type.26750.body { @@ -132,7 +132,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset */ // ino.end // ino.method.getSignatureType.26753.definition - public String getSignatureType(Vector paralist) + public String getSignatureType(Menge paralist) // ino.end // ino.method.getSignatureType.26753.body { @@ -247,7 +247,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset * HOTI * Liefert bei Klassen die fullyQualified angegeben wurden * nur den schlussendlichen Bezeichner - * p.ex. java.util.Vector => Vector + * p.ex. de.dhbwstuttgart.typeinference.Menge => Menge * @return */ // ino.end @@ -283,8 +283,8 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset * @param resultSet * @return */ - public Vector getUnresolvedTPH(ResultSet resultSet) { - return new Vector(); + public Menge getUnresolvedTPH(ResultSet resultSet) { + return new Menge(); } /** @@ -320,14 +320,14 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset * Sammelt alle TypePlaceholder, welche in diesem Typ vorkommen. * @return */ - public Vector getInvolvedTypePlaceholder(){ - Vector ret = new Vector<>(); + public Menge getInvolvedTypePlaceholder(){ + Menge ret = new Menge<>(); return ret; } @Override - public Vector getChildren() { - return new Vector<>(); + public Menge getChildren() { + return new Menge<>(); } public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method){ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 7f33ba6a..2db31137 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.module.TypePlaceholder.8678.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.core.MyCompiler; @@ -121,8 +121,8 @@ public class TypePlaceholder extends ObjectType } @Override - public Vector getInvolvedTypePlaceholder() { - Vector ret = super.getInvolvedTypePlaceholder(); + public Menge getInvolvedTypePlaceholder() { + Menge ret = super.getInvolvedTypePlaceholder(); ret.add(this); return ret; } @@ -407,8 +407,8 @@ public class TypePlaceholder extends ObjectType * @return * @see TypeInsertPoint */ - public Vector getTypeInsertPoints(ResultSet result) { - Vector ret = new Vector(); + public Menge getTypeInsertPoints(ResultSet result) { + Menge ret = new Menge(); if(this.parent instanceof TypeInsertable){ TypeInsertPoint toAdd = ((TypeInsertable) parent).createTypeInsertPoint(this, result); if(toAdd != null)ret.add(toAdd); @@ -418,8 +418,8 @@ public class TypePlaceholder extends ObjectType } @Override - public Vector getUnresolvedTPH(ResultSet resultSet) { - Vector ret = super.getUnresolvedTPH(resultSet); + public Menge getUnresolvedTPH(ResultSet resultSet) { + Menge ret = super.getUnresolvedTPH(resultSet); Type t = resultSet.getTypeEqualTo(this); if(t instanceof TypePlaceholder){ ret.add((TypePlaceholder)t); diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index ef1ca368..e051c38d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree.type; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.ConstraintType; diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 7572a6b3..905eb82a 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -1,17 +1,17 @@ package de.dhbwstuttgart.typeinference; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class ConstraintsSet implements Iterable{ +public class ConstraintsSet{ private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); - private Vector constraintsSet; + private UndConstraint constraintsSet; public ConstraintsSet(){ - constraintsSet = new Vector(); + constraintsSet = new UndConstraint(); } public void add(ConstraintsSet CSet){ @@ -19,40 +19,29 @@ public class ConstraintsSet implements Iterable{ add(element); } public void add(OderConstraint constraint){ - constraintsSet.add(constraint); + constraintsSet.addItems(constraint); } /** * Liefert alle Constraint-Variationen * @return */ - public Vector> getConstraints(){ - Vector> ret = new Vector>(); + public Menge> getConstraints(){ + /* + Menge> ret = new Menge>(); for(OderConstraint con : constraintsSet){ ret.add(con.getUndConstraints()); } ret = new KarthesischesProdukt().berechneKarthesischesProdukt(ret); - /*Vector firstConstraints = new Vector(); - for(Constraint con : constraintsSet){ - firstConstraints.addAll(con.getConstraintPairs()); - } - ret.add(firstConstraints); - */ return ret; + */ } @Override public String toString(){ - String ret =""; - for(OderConstraint constraint : this){ - ret += constraint.toString()+"\n"; - } - return ret; + return constraintsSet.toString(); } - public Iterator iterator() { - return constraintsSet.iterator(); - } public void filterWrongConstraints(Unifier unify) { for(OderConstraint constraint : this){ @@ -65,19 +54,19 @@ public class ConstraintsSet implements Iterable{ * @param unifier */ public void unifyUndConstraints(Unifier unifier) { - Vector uCons = this.filterUndConstraints(); - Vector alleUndConstraints = new Vector<>(); + Menge uCons = this.filterUndConstraints(); + Menge alleUndConstraints = new Menge<>(); for(UndConstraint undConstraint : uCons){ alleUndConstraints.addAll(undConstraint.getConstraintPairs()); } this.filterWrongConstraints( (pairs)->{ - Vector undConstraintsUndPairs = new Vector<>(); + Menge undConstraintsUndPairs = new Menge<>(); undConstraintsUndPairs.addAll(pairs); undConstraintsUndPairs.addAll(alleUndConstraints); log.debug("Versuche Pairs auszusondern:\n"+pairs, Section.TYPEINFERENCE); log.debug("Unifiziere:\n"+undConstraintsUndPairs, Section.TYPEINFERENCE); - Vector> unifyResult = unifier.apply(undConstraintsUndPairs); + Menge> unifyResult = unifier.apply(undConstraintsUndPairs); return unifyResult; }); } @@ -87,8 +76,8 @@ public class ConstraintsSet implements Iterable{ * UndConstraints, welche sich nicht innerhalb eines OderConstraints befinden, herausgefiltert * @return [u1, ... , uN] */ - private Vector filterUndConstraints() { - Vector ret = new Vector<>(); + private Menge filterUndConstraints() { + Menge ret = new Menge<>(); for(OderConstraint con : constraintsSet){ UndConstraint filtered = con.filterUndConstraints(); if(filtered != null)ret.add(filtered); diff --git a/src/de/dhbwstuttgart/typeinference/FunN.java b/src/de/dhbwstuttgart/typeinference/FunN.java index 5a21d03d..4a47c75c 100755 --- a/src/de/dhbwstuttgart/typeinference/FunN.java +++ b/src/de/dhbwstuttgart/typeinference/FunN.java @@ -2,7 +2,7 @@ package de.dhbwstuttgart.typeinference; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Method; @@ -26,7 +26,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class FunN extends RefType { private Type R; - private Vector T; + private Menge T; /** * @author Andreas Stadelmeier, a10023 @@ -36,7 +36,7 @@ public class FunN extends RefType { * @param T * @return */ - public FunN(Type R, Vector T) { + public FunN(Type R, Menge T) { super("",null,0); if(T==null || R == null)throw new NullPointerException(); setT(T); @@ -53,7 +53,7 @@ public class FunN extends RefType { public FunN(int parameterCount) { super("",null,0); if(parameterCount<0)throw new RuntimeException("Anzahl der Parameter muss >0 sein"); - Vector t = new Vector(); + Menge t = new Menge(); for(int i=0;i t = new Vector(); + Menge t = new Menge(); for(int i=0;i t = new Vector(); + Menge t = new Menge(); if(R!=null)t.add(R); if(T!=null)t.addAll(T); this.set_ParaList(t); } - protected void setT(Vector T){ + protected void setT(Menge T){ this.T = T; calculateNewParalist(); } @@ -112,7 +112,7 @@ public class FunN extends RefType { /* public CMethodTypeAssumption toCMethodTypeAssumption() { - //CMethodTypeAssumption ret = new CMethodTypeAssumption(this, "apply", R, this.T.size(), 0,this.getOffset(),new Vector(),null); + //CMethodTypeAssumption ret = new CMethodTypeAssumption(this, "apply", R, this.T.size(), 0,this.getOffset(),new Menge(),null); MethodAssumption ret = null; Method method = new Method(); method.set_Method_Name(this.getName()); @@ -148,7 +148,7 @@ public class FunN extends RefType { public FunN clone() { FunN ret = null; - Vector clonepara = new Vector(); + Menge clonepara = new Menge(); for(int i = 0; i< this.T.size(); i++) { clonepara.addElement(((Type)this.T.elementAt(i)).clone()); diff --git a/src/de/dhbwstuttgart/typeinference/FunNInterface.java b/src/de/dhbwstuttgart/typeinference/FunNInterface.java index fcc6b452..9f285fe9 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNInterface.java +++ b/src/de/dhbwstuttgart/typeinference/FunNInterface.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; @@ -23,7 +23,7 @@ public class FunNInterface extends Class{ //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. - //private Vector gtvparalist; + //private Menge gtvparalist; /** * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. @@ -33,9 +33,9 @@ public class FunNInterface extends Class{ super("Fun"+N, null, new Modifiers(), FunNInterface.makeParaList(N)); /* GenericTypeVar gtv; - Vector paralist = new Vector<>(); + Menge paralist = new Menge<>(); gtv = new GenericTypeVar("R",this, 0); - this.gtvparalist = new Vector(); + this.gtvparalist = new Menge(); paralist.add(gtv); this.gtvparalist.add(gtv); //paralist.add(TypePlaceholder.fresh()); @@ -49,8 +49,8 @@ public class FunNInterface extends Class{ */ } - private static Vector makeParaList(int n) { - Vector ret = new Vector<>(); + private static Menge makeParaList(int n) { + Menge ret = new Menge<>(); ret.add("R"); for(int i = 1; i<=n;i++){ ret.add("T"+i); diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index aab0731e..07a4182c 100755 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.FormalParameter; import de.dhbwstuttgart.syntaxtree.Class; @@ -16,13 +16,13 @@ public class FunNMethod extends Method{ * * @param N - Anzahl der Parameter (Beispiel: Fun2) */ - public FunNMethod(Vector paralist){ + public FunNMethod(Menge paralist){ super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp this.setType(paralist.firstElement()); this.set_DeclId(new DeclId("apply")); ParameterList pl = new ParameterList(); - Vector fpList = new Vector(); + Menge fpList = new Menge(); for(int i = 1;i fpList = new Vector(); + Menge fpList = new Menge(); for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. DeclId paramName = new DeclId("T"+i); FormalParameter parameter = new FormalParameter(paramName); diff --git a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java index fe902460..c5cf63a3 100755 --- a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java +++ b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; @@ -8,7 +8,7 @@ public class JavaCodeResult{ private String javaCode = ""; //TODO: unresolvedTPHs entfernen. BROKEN! - private Vector unresolvedTPHs = new Vector(); + private Menge unresolvedTPHs = new Menge(); public JavaCodeResult(){ @@ -43,7 +43,7 @@ public class JavaCodeResult{ * Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ. * @return */ - public Vector getUnresolvedTPH(){ + public Menge getUnresolvedTPH(){ return unresolvedTPHs; } diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index e3fa5545..7646b1d6 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -1,15 +1,14 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; -public class KarthesischesProdukt { +public abstract class KarthesischesProdukt { - public Vector> berechneKarthesischesProdukt(Vector> m1){ + public static Menge> berechneKarthesischesProdukt(Menge> m1){ if(m1.size()==0)return m1; if(m1.size()==1){ - Vector> ret = new Vector>(); + Menge> ret = new Menge>(); for(M o : m1.firstElement()){ - Vector v = new Vector(); + Menge v = new Menge(); v.add(o); ret.add(v); } @@ -19,31 +18,31 @@ public class KarthesischesProdukt { return berechneKarthesischesProdukt(m1, null); } - private Vector> berechneKarthesischesProdukt(Vector> m1, Vector> result){ + private static Menge> berechneKarthesischesProdukt(Menge> m1, Menge> result){ if(m1.size()==0)return result; if(result == null){ - result = new Vector>(); - result.add(new Vector()); + result = new Menge>(); + result.add(new Menge()); } - Vector o1 = m1.remove(0); - Vector> newResult = new Vector>(); - for(Vector o2 : result){ - Vector> xProd = karthesischesProdukt(o2,o1); + Menge o1 = m1.remove(0); + Menge> newResult = new Menge>(); + for(Menge o2 : result){ + Menge> xProd = karthesischesProdukt(o2,o1); //System.out.println("karthesischesProdukt( "+o2+" , "+o1+" ) \n = "+xProd); newResult.addAll(xProd); //result.addAll(karthesischesProdukt(o1, o2)); } return berechneKarthesischesProdukt(m1, newResult); /* - Vector> ret = null; - Iterator> it = m1.iterator(); + Menge> ret = null; + Iterator> it = m1.iterator(); while(it.hasNext()){ } if(m1.size()>1){ - ret = new Vector>(); + ret = new Menge>(); }else if(m1.size() == 1){ - ret = new Vector>(); + ret = new Menge>(); ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) ); }else{ throw new TypinferenzException("Der übergebene Vektor m1 ist leer."); @@ -52,8 +51,8 @@ public class KarthesischesProdukt { return ret;*/ } - private Vector> karthesischesProdukt(Vector m1, Vector m2){ - Vector> ret = new Vector>(); + private static Menge> karthesischesProdukt(Menge m1, Menge m2){ + Menge> ret = new Menge>(); /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden if(m2.size() == 0){//Sonderfall, m2 ist leer: ret.add(m1); @@ -62,7 +61,7 @@ public class KarthesischesProdukt { */ //for(M o1 : m1){ for(M o2 : m2){ - Vector v1 = new Vector(); + Menge v1 = new Menge(); //for(M o1 : m1)v1.add(o1); v1.addAll(m1); v1.add(o2); diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index 1f2762d4..e48ac30e 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -9,8 +9,8 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class OderConstraint{ - private Vector oderConstraintPairs; +public class OderConstraint extends OderMenge{ + //private Menge oderConstraintPairs; private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); @@ -22,26 +22,26 @@ public class OderConstraint{ public OderConstraint(ConstraintType p1, ConstraintType p2){ if(p1 == null || p2 == null)throw new NullPointerException(); ConstraintPair constraintPair = new ConstraintPair(p1,p2); - oderConstraintPairs = new Vector(); this.addConstraint(constraintPair); } public OderConstraint(){ - oderConstraintPairs = new Vector(); } /** * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. * @return - */ - public Vector getConstraintPairs(){ - Vector ret = new Vector(); + + public Menge getConstraintPairs(){ + Menge ret = new Menge(); for(UndConstraint oC : this.oderConstraintPairs){ ret.addAll(oC.getConstraintPairs()); } return ret; + return this.g } + */ /** * Fügt ein Pair(p1, p2) dem Constraint hinzu @@ -57,37 +57,19 @@ public class OderConstraint{ * @param toAdd */ public void addConstraint(ConstraintPair toAdd){ - oderConstraintPairs.add(new SingleConstraint(toAdd)); + //oderConstraintPairs.add(new SingleConstraint(toAdd)); + this.addItem(toAdd.getPair()); } - - @Override - public String toString(){ - String ret = "["; - for(UndConstraint p : this.getUndConstraints()){ - ret += p.toString()+ "| "; - } - return ret+"]"; - } - - public Vector getUndConstraints() { - return this.oderConstraintPairs; - /* - Vector ret = new Vector(); - for(Pair p : this.getConstraintPairs()){ - ret.add(new UndConstraint(p.TA1,p.TA2)); - } - return ret; - */ - } - public void addConstraint(UndConstraint methodConstraint) { - oderConstraintPairs.add(methodConstraint); + this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint); } + //TODO: Funktionalität für filter implementieren void filterWrongConstraints(Unifier unifier) { - Vector filteredConstraints = new Vector<>(); + /* + Menge filteredConstraints = new Menge<>(); for(UndConstraint cons : this.getUndConstraints()){ - Vector> unifierResult = unifier.apply(cons.getConstraintPairs()); + Menge> unifierResult = unifier.apply(cons.getItems()); if(!unifierResult.isEmpty()){ filteredConstraints.add(cons); }else{ @@ -95,13 +77,38 @@ public class OderConstraint{ } } this.oderConstraintPairs = filteredConstraints; + */ } UndConstraint filterUndConstraints() { + return null; + /* if(this.oderConstraintPairs.size()==1){ return this.oderConstraintPairs.firstElement(); } return null; + */ } + /* + @Override + public String toString(){ + String ret = "["; + for(UndConstraint p : this.getUndConstraints()){ + ret += p.toString()+ " | "; + } + return ret+"]"; + } + + public Menge getUndConstraints() { + return this.set; + + Menge ret = new Menge(); + for(Pair p : this.getConstraintPairs()){ + ret.add(new UndConstraint(p.TA1,p.TA2)); + } + return ret; + + } + */ } diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 2973b24f..01d74989 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference; // ino.end // ino.module.Pair.8673.import import java.util.Hashtable; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end @@ -139,8 +139,8 @@ public class Pair RefType RT1=(RefType)TA1; RefType RT2=(RefType)TA2; if(RT1.getTypeName().equals(RT2.getTypeName())){ - Vector v1=RT1.get_ParaList(); - Vector v2=RT2.get_ParaList(); + Menge v1=RT1.get_ParaList(); + Menge v2=RT2.get_ParaList(); if(v1==null && v2==null){ return true; }else{ @@ -264,25 +264,25 @@ public class Pair //System.out.println(((RefType)TA2).is_Equiv((RefType)p.TA2, ht)); //Typen boxen, da es sich um TypePlaceholder handeln koennte - Vector hilfsvector1 = new Vector(); - Vector hilfsvector2 = new Vector(); - hilfsvector1.addElement(TA1); - hilfsvector2.addElement(TA2); - Vector hilfsvector3 = new Vector(); - Vector hilfsvector4 = new Vector(); - hilfsvector3.addElement(p.TA1); - hilfsvector4.addElement(p.TA2); + Menge hilfsMenge1 = new Menge(); + Menge hilfsMenge2 = new Menge(); + hilfsMenge1.addElement(TA1); + hilfsMenge2.addElement(TA2); + Menge hilfsMenge3 = new Menge(); + Menge hilfsMenge4 = new Menge(); + hilfsMenge3.addElement(p.TA1); + hilfsMenge4.addElement(p.TA2); //return (((RefType)TA1).is_Equiv((RefType)p.TA1, ht) && ((RefType)TA2).is_Equiv((RefType)p.TA2, ht)); - return (new RefType("dummy", hilfsvector3,null,-1)).is_Equiv(new RefType("dummy", hilfsvector1,null,-1), ht) && - (new RefType("dummy", hilfsvector4,null,-1)).is_Equiv(new RefType("dummy", hilfsvector2,null,-1), ht); + return (new RefType("dummy", hilfsMenge3,null,-1)).is_Equiv(new RefType("dummy", hilfsMenge1,null,-1), ht) && + (new RefType("dummy", hilfsMenge4,null,-1)).is_Equiv(new RefType("dummy", hilfsMenge2,null,-1), ht); } // ino.end - // ino.method.isInVector.26585.definition - public boolean isInVector( Vector V ) + // ino.method.isInMenge.26585.definition + public boolean isInMenge( Menge V ) // ino.end - // ino.method.isInVector.26585.body + // ino.method.isInMenge.26585.body { // otth: prueft, ob Paar in Vektor liegt for( int i = 0; i < V.size(); i++ ) @@ -389,18 +389,18 @@ public class Pair * (Immer zwischen 0 und 2 Stück ;P) * @return */ - public Vector getTypePlaceholder() { - Vector ret = new Vector(); + public Menge getTypePlaceholder() { + Menge ret = new Menge(); if(this.TA1 instanceof TypePlaceholder)ret.add((TypePlaceholder)TA1); if(this.TA2 instanceof TypePlaceholder)ret.add((TypePlaceholder)TA2); return ret; } /** - * @return Vector aus TA1 und TA2 + * @return Menge aus TA1 und TA2 */ - public Vector getTypes(){ - Vector ret = new Vector<>(); + public Menge getTypes(){ + Menge ret = new Menge<>(); ret.add(this.TA1); ret.add(this.TA2); return ret; diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index d13429be..6073b795 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -1,7 +1,7 @@ package de.dhbwstuttgart.typeinference; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; @@ -15,9 +15,9 @@ import de.dhbwstuttgart.typeinference.exceptions.DebugException; */ public class ResultSet implements Iterable { - Vector resultPairs; + Menge resultPairs; - public ResultSet(Vector resultSet){ + public ResultSet(Menge resultSet){ resultPairs = resultSet; } @@ -25,10 +25,10 @@ public class ResultSet implements Iterable { * Erstellt ein leeres ResultSet */ public ResultSet() { - this(new Vector()); + this(new Menge()); } - public Vector getResultSet(){ + public Menge getResultSet(){ return resultPairs; } @@ -39,7 +39,7 @@ public class ResultSet implements Iterable { */ public Type getTypeEqualTo(Type type) { Type res = type; - Vector modifiedResultPairs = (Vector) resultPairs.clone(); + Menge modifiedResultPairs = (Menge) resultPairs.clone(); int i = findPairWithTypeEqualTo(type, modifiedResultPairs); while(i != -1){ res = modifiedResultPairs.get(i).TA2; @@ -49,7 +49,7 @@ public class ResultSet implements Iterable { return res; } - private int findPairWithTypeEqualTo(Type type, Vector inResultPairs){ + private int findPairWithTypeEqualTo(Type type, Menge inResultPairs){ for(int i = 0; i { * Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt. * @return */ - public Vector getConstraintsFor(Vector typePlaceholders) { - Vector ret = new Vector(); - Vector tphs = (Vector) typePlaceholders.clone(); + public Menge getConstraintsFor(Menge typePlaceholders) { + Menge ret = new Menge(); + Menge tphs = (Menge) typePlaceholders.clone(); for(int i = 0;i { * @param unresolvedTPH * @return */ - public Vector getTypesInvolving(Vector unresolvedTPH) { - Vector ret = new Vector(); + public Menge getTypesInvolving(Menge unresolvedTPH) { + Menge ret = new Menge(); for(Pair p : this.resultPairs){ for(TypePlaceholder tph : unresolvedTPH){ if(p.TA1.involves(tph))ret.add(p.TA1); diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 2ab2e624..4aa140c4 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -38,12 +38,14 @@ public class SingleConstraint extends UndConstraint{ return constraintPair; } - @Override //Methode überschreiben, damit immer nur ein Vector mit nur einem Element zurückgeliefert wird. - public Vector getConstraintPairs(){ - Vector ret = new Vector(); + /* + @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. + public Menge getConstraintPairs(){ + Menge ret = new Menge(); ret.add(constraintPair); return ret; } + */ public void addConstraint(ConstraintPair toAdd){ if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); diff --git a/src/de/dhbwstuttgart/typeinference/TIPConstraints.java b/src/de/dhbwstuttgart/typeinference/TIPConstraints.java index e65fd9bd..63756dd2 100644 --- a/src/de/dhbwstuttgart/typeinference/TIPConstraints.java +++ b/src/de/dhbwstuttgart/typeinference/TIPConstraints.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; @@ -11,7 +11,7 @@ import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; */ public class TIPConstraints { - public TIPConstraints(Vector involvedTPHs){ + public TIPConstraints(Menge involvedTPHs){ } } diff --git a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java index 45096fdc..58297499 100755 --- a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.typeinference; // ino.module.CTypeReconstructionResult.8689.import import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -36,7 +36,7 @@ public class TypeinferenceResultSet * Alle Constraints vor der Unifizierung. * Dies ist nur eine Liste von Pair-Objekten (jedes Pair Objekt bildet dabei einen Constraint: Bsp.: TA <. TB) */ - private Vector constraints; + private Menge constraints; /** * Das unifizierte ConstaraintsSet */ @@ -44,7 +44,7 @@ public class TypeinferenceResultSet private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert. // ino.method.CTypeReconstructionResult.27256.definition - public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Vector constraints, ResultSet unifiedConstraints) + public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge constraints, ResultSet unifiedConstraints) // ino.end // ino.method.CTypeReconstructionResult.27256.body { @@ -61,7 +61,7 @@ public class TypeinferenceResultSet * Zum abrufen der Unifizierten Constraints siehe getUnifiedConstraints() * @return */ - public Vector getConstraints() { + public Menge getConstraints() { return this.constraints; } diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 6dd7ec14..7375eaf4 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -1,7 +1,8 @@ package de.dhbwstuttgart.typeinference; -import java.util.Vector; +import java.util.Iterator; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.unify.Unifier; @@ -10,7 +11,7 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * @author janulrich * */ -public class UndConstraint extends OderConstraint { +public class UndConstraint extends OderConstraint implements Iterable{ public UndConstraint(ConstraintType p1, ConstraintType p2) { super(p1, p2); @@ -20,19 +21,21 @@ public class UndConstraint extends OderConstraint { super(); } + /* @Override - public Vector getUndConstraints() { - Vector ret = new Vector(); + public Menge getUndConstraints() { + Menge ret = new Menge(); ret.add(this); return ret; } + */ @Override public String toString(){ //String ret = super.toString(); //return ret.replace('|', ','); String ret = "["; - for(Pair p : this.getConstraintPairs()){ + for(Pair p : this.getItems()){ ret += p.toString()+ ", "; } return ret+"]"; @@ -47,4 +50,9 @@ public class UndConstraint extends OderConstraint { UndConstraint filterUndConstraints(){ return this; } + + @Override + public Iterator iterator() { + return this.getItems().iterator(); + } } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index ddc01bb8..5a017420 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -1,7 +1,7 @@ package de.dhbwstuttgart.typeinference.assumptions; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.logger.Logger; @@ -42,13 +42,13 @@ public class TypeAssumptions { private JavaClassName thisClassName; - private Vector methodAssumptions = new Vector(); - private Vector constructorAssumptions = new Vector(); - private Vector fieldAssumptions = new Vector(); - private Vector localVarAssumptions = new Vector(); - private Vector parameterAssumptions = new Vector(); - private Vector genericVarAssumptions = new Vector(); - private Vector classAssumptions = new Vector(); + private Menge methodAssumptions = new Menge(); + private Menge constructorAssumptions = new Menge(); + private Menge fieldAssumptions = new Menge(); + private Menge localVarAssumptions = new Menge(); + private Menge parameterAssumptions = new Menge(); + private Menge genericVarAssumptions = new Menge(); + private Menge classAssumptions = new Menge(); /** * Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this" @@ -68,8 +68,8 @@ public class TypeAssumptions { * @param withName * @return */ - public Vector getFieldVars(String withName){ - Vector ret = new Vector(); + public Menge getFieldVars(String withName){ + Menge ret = new Menge(); for(FieldAssumption fa : this.fieldAssumptions){ if(fa.getIdentifier().equals(withName))ret.add(fa); } @@ -96,9 +96,9 @@ public class TypeAssumptions { * @return */ @Deprecated - public Vector getMethods2(String withName){ + public Menge getMethods2(String withName){ //TODO: Implementieren - return new Vector(); + return new Menge(); } /** @@ -123,8 +123,8 @@ public class TypeAssumptions { * @param i Die Parameter, welche die Methode verarbeiten soll * @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können. */ - public Vector getMethodAssumptions(String methodName, int parameterCount){ - Vector ret = new Vector(); + public Menge getMethodAssumptions(String methodName, int parameterCount){ + Menge ret = new Menge(); for(MethodAssumption ass : this.methodAssumptions){ if(ass.getMethodName().equals(methodName) && ass.getParaCount() == parameterCount){ ret.add(ass); @@ -182,8 +182,8 @@ public class TypeAssumptions { * @param parameterCount * @return */ - public Vector getMethodAssumptions(JavaClassName className, String methodName){ - Vector ret = new Vector(); + public Menge getMethodAssumptions(JavaClassName className, String methodName){ + Menge ret = new Menge(); for(FieldAssumption ass : this.getAssumptionsFor(className)){ //System.out.println(ass.getIdentifier()); if(ass.getIdentifier().equals(methodName) && ass instanceof MethodAssumption)ret.add((MethodAssumption)ass); @@ -197,8 +197,8 @@ public class TypeAssumptions { * @param className * @return */ - private Vector getAssumptionsFor(JavaClassName className) { - Vector ret = new Vector(); + private Menge getAssumptionsFor(JavaClassName className) { + Menge ret = new Menge(); for(Assumption a : this.getAllAssumptions()){ if(a instanceof FieldAssumption){ FieldAssumption fA = (FieldAssumption) a; @@ -209,8 +209,8 @@ public class TypeAssumptions { } - private Vector getAllAssumptions(){ - Vector ret = new Vector(); + private Menge getAllAssumptions(){ + Menge ret = new Menge(); for(Assumption f : this.localVarAssumptions)ret.add(f); for(Assumption f : this.methodAssumptions)ret.add(f); for(Assumption f : this.fieldAssumptions)ret.add(f); @@ -236,7 +236,7 @@ public class TypeAssumptions { } - private void addAllAssumptions(Vector assumptions){ + private void addAllAssumptions(Menge assumptions){ for(Assumption ass : assumptions){ this.addAssumption(ass); } @@ -300,7 +300,7 @@ public class TypeAssumptions { //Alle bekannten Klassen nach diesem Typ durchsuchen: JavaClassName typName = t.getName(); for(ClassAssumption ass : this.classAssumptions){ - JavaClassName name = ass.getAssumedClass().getName(); //Das kann auch java.util.Vector sein + JavaClassName name = ass.getAssumedClass().getName(); //Das kann auch de.dhbwstuttgart.typeinference.Menge sein boolean match = true; match = name.equals(typName); if(match && t instanceof RefType){ @@ -313,7 +313,7 @@ public class TypeAssumptions { } //Der RefType muss zusätzlich seine Parameter prüfen. - Vector parameterList = new Vector<>(); + Menge parameterList = new Menge<>(); if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){ ConstraintType ct = param.TYPE(this, inNode); parameterList.add(ct.getType()); @@ -405,7 +405,7 @@ public class TypeAssumptions { this.genericVarAssumptions.add(new GenericVarAssumption(genericTypeVar)); } - public Vector getClassAssumptions() { + public Menge getClassAssumptions() { return this.classAssumptions; } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index 751fea6b..287774ef 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -1,7 +1,7 @@ package de.dhbwstuttgart.typeinference.typedeployment; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -90,9 +90,9 @@ public class GenericTypeInsertPoint extends SourcePatchPoint { */ class GenericVarPatch { - private Vector genericVarExtendDeclarations = new Vector(); - private Vector genericVarDeclarations = new Vector(); - private Vector usedTPHs; + private Menge genericVarExtendDeclarations = new Menge(); + private Menge genericVarDeclarations = new Menge(); + private Menge usedTPHs; /** * Fügt eine generische Variable in Form eines Pairs an. @@ -118,7 +118,7 @@ class GenericVarPatch { * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, * welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind. */ - Vector tmpGenVars = new Vector<>(); + Menge tmpGenVars = new Menge<>(); for(GenericVarDeclarationPatch gv : this.genericVarDeclarations){ if(this.usedTPHs.contains(gv.genericVar)){ tmpGenVars.add(gv); @@ -159,15 +159,15 @@ class GenericVarPatch { if(!this.genericVarDeclarations.contains(toAdd))this.genericVarDeclarations.add(toAdd); } - public void addTPHs(Vector TPHs) { + public void addTPHs(Menge TPHs) { for(TypePlaceholder tph: TPHs)this.add(tph); } - public void addPairs(Vector pairs) { + public void addPairs(Menge pairs) { for(Pair pair : pairs)this.add(pair); } - public void removeUnusedTPHs(Vector usedTPHs) { + public void removeUnusedTPHs(Menge usedTPHs) { this.usedTPHs = usedTPHs; return; diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java index 6d870e1d..6e1dfded 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference.typedeployment; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.Class; diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 6bce9a06..890c7a72 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.typedeployment; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -29,7 +29,7 @@ public class TypeInsertSet { //Logger: protected Logger typinferenzLog = Logger.getLogger("Typeinference"); - public Vector points = new Vector(); + public Menge points = new Menge(); private ResultSet resultSet; public TypeInsertSet(ResultSet resultSet) { @@ -76,17 +76,17 @@ public class TypeInsertSet { */ GenericVarPatch gPatch = new GenericVarPatch();//Set der Einzusetzenden generischen Variablendeklarationen //Schritt 1: - Vector involvedTPHs = tip.getInsertType().getInvolvedTypePlaceholder();//.getInvolvedTypePlaceholder(); + Menge involvedTPHs = tip.getInsertType().getInvolvedTypePlaceholder();//.getInvolvedTypePlaceholder(); //Schritt 2: - Vector pairs = new Vector<>(); + Menge pairs = new Menge<>(); for(Pair pair : this.resultSet.getConstraintsFor(involvedTPHs)){ //gPatch.add(pair); //Schritt 6 (Teil 2) pairs.add(pair); } //Schritt 3: - Vector allTPHs = new Vector<>(); + Menge allTPHs = new Menge<>(); for(TypePlaceholder tph : involvedTPHs){ if(!allTPHs.contains(tph)){ allTPHs.add(tph); @@ -136,7 +136,7 @@ public class TypeInsertSet { tpj.add(gip); } - private boolean pairsDeclareTPH(Vector ps, TypePlaceholder tph){ + private boolean pairsDeclareTPH(Menge ps, TypePlaceholder tph){ for(Pair p : ps){ if(p.TA1.equals(tph))return true; } @@ -189,7 +189,7 @@ public class TypeInsertSet { * Fügt TypeInsertPoints an * @param insertPoints */ - public void add(Vector insertPoints) { + public void add(Menge insertPoints) { for(TypeInsertPoint p : insertPoints){ this.add(p); } @@ -206,7 +206,7 @@ public class TypeInsertSet { * Stellt eine Reihe von TypeInsertions dar */ class TypePatchJob{ - private Vector points = new Vector<>(); + private Menge points = new Menge<>(); void add(SourcePatchPoint tip){ points.add(tip); } diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java index 7e86182c..42e776ce 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.typeinference.unify; // ino.module.CSubstitution.8685.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end @@ -230,7 +230,7 @@ public class CSubstitution } } else if(type instanceof RefType){ - Vector paras = ((RefType)type).get_ParaList(); + Menge paras = ((RefType)type).get_ParaList(); if(paras != null){ for(int i=0; i +public class CSubstitutionSet extends CMengeSet // ino.end // ino.class.CSubstitutionSet.27471.body { @@ -31,7 +31,7 @@ public class CSubstitutionSet extends CVectorSet // ino.end // ino.method.CSubstitutionSet.27478.definition - public CSubstitutionSet(Vector unifiers) + public CSubstitutionSet(Menge unifiers) throws CTypeReconstructionException // ino.end // ino.method.CSubstitutionSet.27478.body @@ -49,7 +49,7 @@ public class CSubstitutionSet extends CVectorSet // ino.method.shallowCopy.27481.body { CSubstitutionSet copy = new CSubstitutionSet(); - copy.setVector((Vector)this.getVector().clone()); + copy.setMenge((Menge)this.getMenge().clone()); return copy; } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java index ed35951a..527382a8 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java @@ -1,33 +1,33 @@ -// ino.module.CVectorSet.8702.package +// ino.module.CMengeSet.8702.package package de.dhbwstuttgart.typeinference.unify; // ino.end -// ino.module.CVectorSet.8702.import +// ino.module.CMengeSet.8702.import import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; // ino.end -// ino.class.CVectorSet.27519.description type=javadoc +// ino.class.CMengeSet.27519.description type=javadoc /** * @author J�rg B�uerle * @version $Date: 2013/02/07 05:08:51 $ */ // ino.end -// ino.class.CVectorSet.27519.declaration -public abstract class CVectorSet extends CSet +// ino.class.CMengeSet.27519.declaration +public abstract class CMengeSet extends CSet // ino.end -// ino.class.CVectorSet.27519.body +// ino.class.CMengeSet.27519.body { // ino.attribute.m_Elements.27523.declaration - private Vector m_Elements = null; + private Menge m_Elements = null; // ino.end - // ino.method.CVectorSet.27526.definition - public CVectorSet() + // ino.method.CMengeSet.27526.definition + public CMengeSet() // ino.end - // ino.method.CVectorSet.27526.body + // ino.method.CMengeSet.27526.body { - m_Elements = new Vector(); + m_Elements = new Menge(); } // ino.end @@ -49,7 +49,7 @@ public abstract class CVectorSet extends CSet } // ino.end - public void addAll( CVectorSet set ) + public void addAll( CMengeSet set ) { for( int i=0;i extends CSet } // ino.end - // ino.method.getVector.27538.definition - public Vector getVector() + // ino.method.getMenge.27538.definition + public Menge getMenge() // ino.end - // ino.method.getVector.27538.body + // ino.method.getMenge.27538.body { return m_Elements; } // ino.end - // ino.method.setVector.27541.definition - public void setVector(Vector elements) + // ino.method.setMenge.27541.definition + public void setMenge(Menge elements) // ino.end - // ino.method.setVector.27541.body + // ino.method.setMenge.27541.body { m_Elements = elements; } // ino.end /** - * Fügt ein CVectorSet an! + * Fügt ein CMengeSet an! * Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen) - * @param anotherSet Das hinzuzufügende CVectorSet (CSet wird ignoriert) + * @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert) */ // ino.method.unite.27544.definition public void unite(CSet anotherSet) // ino.end // ino.method.unite.27544.body { - if(!(anotherSet instanceof CVectorSet)){ + if(!(anotherSet instanceof CMengeSet)){ return; } - CVectorSet vectorSet = (CVectorSet)anotherSet; + CMengeSet MengeSet = (CMengeSet)anotherSet; // Elemente der anderen Menge hinzuf�gen: - Iterator it = vectorSet.getIterator(); + Iterator it = MengeSet.getIterator(); while(it.hasNext()){ E elem = it.next(); if(!m_Elements.contains(elem)){ m_Elements.addElement(elem); } } - //m_Elements.addAll(vectorSet.m_Elements); + //m_Elements.addAll(MengeSet.m_Elements); } // ino.end @@ -116,13 +116,13 @@ public abstract class CVectorSet extends CSet // ino.end // ino.method.subtract.27547.body { - if(!(anotherSet instanceof CVectorSet)){ + if(!(anotherSet instanceof CMengeSet)){ return; } - CVectorSet vectorSet = (CVectorSet)anotherSet; + CMengeSet MengeSet = (CMengeSet)anotherSet; // Elemente der anderen Menge entfernen: - m_Elements.removeAll(vectorSet.m_Elements); + m_Elements.removeAll(MengeSet.m_Elements); } // ino.end @@ -140,8 +140,8 @@ public abstract class CVectorSet extends CSet // ino.end // ino.method.equals.27553.body { - if(obj instanceof CVectorSet){ - CVectorSet tripSet= (CVectorSet)obj; + if(obj instanceof CMengeSet){ + CMengeSet tripSet= (CMengeSet)obj; boolean ret = true; ret &= (m_Elements.containsAll(tripSet.m_Elements)); ret &= (tripSet.m_Elements.containsAll(m_Elements)); diff --git a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java index 0e06e9c4..9dc23f47 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java +++ b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.unify; // ino.end // ino.module.FC_TTO.8719.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.typeinference.Pair; @@ -23,16 +23,16 @@ public class FC_TTO { // ino.attribute.FC.28016.declaration - Vector FC; + Menge FC; // ino.end // ino.attribute.TTO.28019.declaration - Vector TTO; + Menge TTO; // ino.end - Vector CLASSVEC; + Menge CLASSVEC; // ino.method.FC_TTO.28022.definition - public FC_TTO(Vector fc, Vector tto, Vector classv) + public FC_TTO(Menge fc, Menge tto, Menge classv) // ino.end // ino.method.FC_TTO.28022.body { @@ -45,7 +45,7 @@ public class FC_TTO // ino.end // ino.method.getFC.28025.definition - public Vector getFC() + public Menge getFC() // ino.end // ino.method.getFC.28025.body { @@ -54,7 +54,7 @@ public class FC_TTO // ino.end // ino.method.getTTO.28028.definition - public Vector getTTO() + public Menge getTTO() // ino.end // ino.method.getTTO.28028.body { @@ -62,7 +62,7 @@ public class FC_TTO } // ino.end - public Vector getClasses() + public Menge getClasses() { return CLASSVEC; } diff --git a/src/de/dhbwstuttgart/typeinference/unify/MUB.java b/src/de/dhbwstuttgart/typeinference/unify/MUB.java index 30539ea9..42e70c64 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/MUB.java +++ b/src/de/dhbwstuttgart/typeinference/unify/MUB.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.unify; // ino.end // ino.module.MUB.8720.import -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.Pair; @@ -14,14 +14,14 @@ public class MUB // ino.class.MUB.28031.body { // ino.attribute.Mub.28034.declaration - Vector Mub; + Menge Mub; // ino.end // ino.attribute.sigma.28037.declaration - Vector sigma; + Menge sigma; // ino.end // ino.method.MUB.28040.definition - MUB(Vector M, Vector s) + MUB(Menge M, Menge s) // ino.end // ino.method.MUB.28040.body { @@ -31,7 +31,7 @@ public class MUB // ino.end // ino.method.getUnifier.28043.definition - public Vector getUnifier() + public Menge getUnifier() // ino.end // ino.method.getUnifier.28043.body { @@ -40,7 +40,7 @@ public class MUB // ino.end // ino.method.getMub.28046.definition - public Vector getMub() + public Menge getMub() // ino.end // ino.method.getMub.28046.body { diff --git a/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java b/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java index d07e4515..5f852819 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference.unify; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.stream.Stream; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -17,7 +17,7 @@ public class ParallelUnify { return null; } - private UnifyResult parallelUnify(Vector pairs, FC_TTO fc){ + private UnifyResult parallelUnify(Menge pairs, FC_TTO fc){ UnifyResult ret = new UnifyResult(); return ret; } diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unifier.java b/src/de/dhbwstuttgart/typeinference/unify/Unifier.java index f51eb9b9..19446236 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/Unifier.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unifier.java @@ -1,11 +1,11 @@ package de.dhbwstuttgart.typeinference.unify; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.Pair; public interface Unifier { - public Vector> apply (Vector E); + public Menge> apply (Menge E); } diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 5977b8a2..b5489102 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -6,7 +6,7 @@ package de.dhbwstuttgart.typeinference.unify; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.stream.Stream; import de.dhbwstuttgart.logger.Logger; @@ -32,8 +32,11 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; +import de.dhbwstuttgart.typeinference.ConstraintPair; +import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.Pair.PairOperator; +import de.dhbwstuttgart.typeinference.UndConstraint; // ino.end @@ -62,11 +65,11 @@ public class Unify * @return */ // ino.method.unify.28055.definition - public static Vector> unify(Type ty1, Type ty2, FC_TTO fc_tto ) + public static Menge> unify(Type ty1, Type ty2, FC_TTO fc_tto ) // ino.end // ino.method.unify.28055.body { - Vector pairsToUnify = new Vector(); + Menge pairsToUnify = new Menge(); Pair retTypePair = new Pair(ty1, ty2); pairsToUnify.addElement(retTypePair); return Unify.unify(pairsToUnify, fc_tto); @@ -80,9 +83,9 @@ public class Unify * @param ty1 - Typ 1 der Unifizierung * @param ty2 - Typ 2 der Unifizierung * @param fc_tto - Hilfsklasse mit FC - * @return Vector> - Ergebnispaare + * @return Menge> - Ergebnispaare */ - public static Vector> unifyWC(Type ty1, Type ty2, FC_TTO fc_tto) + public static Menge> unifyWC(Type ty1, Type ty2, FC_TTO fc_tto) { return unifyWC(new Pair(ty1,ty2),fc_tto); } @@ -92,11 +95,11 @@ public class Unify * * @param P - Paar das unifiziert werden soll. * @param fc_tto - Hilfsklasse mit FC - * @return Vector> - Ergebnispaare + * @return Menge> - Ergebnispaare */ - public static Vector> unifyWC (Pair P, FC_TTO fc_tto) + public static Menge> unifyWC (Pair P, FC_TTO fc_tto) { - Vector tmp = new Vector(); + Menge tmp = new Menge(); tmp.add(P); return unify(tmp,fc_tto); } @@ -104,23 +107,23 @@ public class Unify /** * Einstieg in die Unifizierung mit Wildcards * - * @param E - Vector von Paaren die unifiziert werden sollen + * @param E - Menge von Paaren die unifiziert werden sollen * @param fc_tto - Hilfsklasse mit FC - * @return Vector> - Ergebnispaare + * @return Menge> - Ergebnispaare * Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] * oder alle Elemente in der Form [A <. B, C <. D, ..., E in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - //public static Vector> unifyWC (Vector E, FC_TTO fc_tto) - public static Vector> unify (Vector E, FC_TTO fc_tto) + //public static Menge> unifyWC (Menge E, FC_TTO fc_tto) + public static Menge> unify (Menge E, FC_TTO fc_tto) { //Schritt 1: Aufrufen der Regeln durch sub_unify. - Vector Eq = sub_unify(E,fc_tto); + Menge Eq = sub_unify(E,fc_tto); /* Schritt 2: Rausfiltern der Typen die entweder beides Typvariablen sind oder nicht. * Sobald ein Paar auftauch, bei denen kein Typ mehr eine Typvariable ist, kann dieses Paar * nicht mehr unifiziert werden, deshalb abbruch.*/ - Vector Eq1 = new Vector(); + Menge Eq1 = new Menge(); for(Pair p : Eq) { if(p.TA1 instanceof TypePlaceholder && p.TA2 instanceof TypePlaceholder) @@ -131,11 +134,11 @@ public class Unify { //Diese Paare können nicht mehr Unifiziert werden. fail. inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten."); - return new Vector>(); + return new Menge>(); } } //Schritt 3: Differenz bilden, in Eq2 landen alle Paare die nicht in Eq1 sind. - Vector Eq2 = new Vector(); + Menge Eq2 = new Menge(); for(Pair p : Eq) { if(!Eq1.contains(p)) @@ -144,7 +147,7 @@ public class Unify /* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt. * Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt * werden, aus denen dann das kartesische Produkt gebildet wird.*/ - Vector>> cartProduktSets = new Vector>>(); + Menge>> cartProduktSets = new Menge>>(); for(Pair p : Eq2) { if(p.TA1 instanceof TypePlaceholder) @@ -166,8 +169,8 @@ public class Unify if(p.OperatorEqual()) { //Alle Paare die bereits durch sub_unify die richtige Struktur haben einfach durchleiten. - Vector> setofsetofpairs = new Vector>(); - Vector vTmp = new Vector(); + Menge> setofsetofpairs = new Menge>(); + Menge vTmp = new Menge(); vTmp.add(p); setofsetofpairs.add(vTmp); cartProduktSets.add(setofsetofpairs); @@ -177,30 +180,30 @@ public class Unify RefType p_TA2 = (RefType)p.TA2; //1. Menge //Durch alle Paare p_fc laufen und schauen ob diese von der Struktur zu dem Paar p passen. - Vector fc_refl = copyVectorPair(fc_tto.getFC()); + Menge fc_refl = copyMengePair(fc_tto.getFC()); fc_refl.add(new Pair(p_TA2.clone(), p_TA2.clone())); //Reflexivitaet muss beruecksichtigt werden; ergaenzt PL 07-07-28 //Ist aber in FC nicht enthalten. - Vector> ergMenge1 = new Vector>(); //Ergebnismenge der 1. Menge; + Menge> ergMenge1 = new Menge>(); //Ergebnismenge der 1. Menge; for(Pair p_fc : fc_refl) { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Menge greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Menge(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else { greater1elemente = greater1(tmp, fc_tto); } - Vector> unifyErgs = new Vector>(); + Menge> unifyErgs = new Menge>(); for (Type p_TA2_gr : greater1elemente) //Unify alleine reicht nicht, da p_TA2 Wildcards vorkommen koennen { //muessen auch alle Typen deren Args Subtypen von p_TA2 sind betrachtet werden. //Dies wird durch smaller1elemente bzw. smaller1 erledigt PL 07-07-29 Pair pUnify = new Pair(p_TA2.clone(),p_TA2_gr,PairOperator.Equal); - Vector> unifyErgsElement = unifyWC(pUnify,fc_tto); + Menge> unifyErgsElement = unifyWC(pUnify,fc_tto); if (!unifyErgsElement.isEmpty()) { unifyErgs.add(unifyErgsElement.firstElement()); } @@ -210,10 +213,10 @@ public class Unify || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { //Wenn die Unifizierung erfolgreich war durch jeden Ergebnisvektor der Unifizierung laufen. - for(Vector pVec : unifyErgs) + for(Menge pVec : unifyErgs) { // Das Ergebnis in die linke Seite von p_fc einsetzen, und dort Smaller anwenden. - Hashtable ht = VectorPair2SubstHashtableVectorPair(pVec); + Hashtable ht = MengePair2SubstHashtableMengePair(pVec); //PL 07-07-04 smallerArg wird auf die linke Seite von p_FC nach subst angewandt RefType p_fc_TA1_new = (RefType)p_fc.TA1.clone(); gtv2tv.applyThisSubstitutionSet(p_fc_TA1_new); //auf der linken Seite @@ -225,11 +228,11 @@ public class Unify //smallerArg ersetz durch folgende Zeilen. Durch Transistivitaet von fc kommen sonst //doppelte Elemente rein //Anfang - Vector smallers = new Vector(); - Vector smaller1elemente; + Menge smallers = new Menge(); + Menge smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Menge(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -258,30 +261,30 @@ public class Unify } //ENDE - Vector> cartProduktErg = new Vector>(); + Menge> cartProduktErg = new Menge>(); cartProduktErg.add(pVec); //Mit den kleineren Typen neue Paare bilden, linke Seite Klonen. - Vector smallerPairs = new Vector(); + Menge smallerPairs = new Menge(); for(Type sT : smallers) { smallerPairs.add(new Pair(p.TA1.clone(),sT,PairOperator.Equal)); } //Hier noch das Kartesische Produkt aus den Greater und den Smaller Ergebnissen bilden. - Vector> ergs = new Vector>(); + Menge> ergs = new Menge>(); for(Pair PsmP : smallerPairs) { - Vector> dolly = copyVectorVectorPair(cartProduktErg); - if(dolly.isEmpty()) dolly.add(new Vector()); - for(Vector vecp : dolly) + Menge> dolly = copyMengeMengePair(cartProduktErg); + if(dolly.isEmpty()) dolly.add(new Menge()); + for(Menge vecp : dolly) { vecp.add(PsmP.clone()); } ergs.addAll(dolly); } if(!ergs.isEmpty()) - for (Vector ergele : ergs) + for (Menge ergele : ergs) if (!ergMenge1.contains(ergele)) //ABFRAGE BRAURHT MAN VERMUTLIRH NIRHT, DA DURRH smaller1 keine doppelten Elemente reinkommen koennen ergMenge1.add(ergele); } @@ -292,21 +295,21 @@ public class Unify //DIES IST NICHT RICHTIG GETESTET, ES KOENNTE SEIN, DASS DAS KART. PRODUKT FALSCH GEBILDET WIRD. //DIES MUEESTE DURCH smallers.add(new ExtendsWildcardType(smele.getOffset(), smele).clone()); weiter ober erledigt sein. //PL 15-03-11 - //Stream> strextergMenge1 = + //Stream> strextergMenge1 = // ergMenge1.stream().map(v -> // v.stream().map(pa -> // new Pair(pa.getTA1Copy(), new ExtendsWildcardType(pa.getTA2Copy().getOffset(), (ObjectType)pa.getTA2Copy()), pa.GetOperator(), pa.bSubst) -// ).collect(Vector::new, Vector::add, Vector::addAll)); +// ).collect(Menge::new, Menge::add, Menge::addAll)); // -// Vector> extergMenge1 = strextergMenge1.collect(Vector::new, Vector::add, Vector::addAll); +// Menge> extergMenge1 = strextergMenge1.collect(Menge::new, Menge::add, Menge::addAll); // ergMenge1.addAll(extergMenge1); cartProduktSets.add(ergMenge1); } else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) { //Paar unverändert lassen, wenn eine GenericTypeVar ist - Vector> setofsetofpairs = new Vector>(); - Vector vTmp = new Vector(); + Menge> setofsetofpairs = new Menge>(); + Menge vTmp = new Menge(); vTmp.add(p); setofsetofpairs.add(vTmp); cartProduktSets.add(setofsetofpairs); @@ -318,30 +321,30 @@ public class Unify RefType p_TA2 = (RefType)((ExtendsWildcardType)p.TA2).get_ExtendsType(); //2. Menge //Durch alle Paare p_fc laufen und schauen ob diese von der Struktur zu dem Paar p passen. - Vector fc_refl = copyVectorPair(fc_tto.getFC()); + Menge fc_refl = copyMengePair(fc_tto.getFC()); fc_refl.add(new Pair(p_TA2.clone(), p_TA2.clone())); //Reflexivitaet muss beruecksichtigt werden; ergaenzt PL 07-07-28 //Ist aber in FC nicht enthalten. - Vector> ergMenge2 = new Vector>(); //Ergebnismenge der 2. Menge; ergaenzt PL 07-07-28 + Menge> ergMenge2 = new Menge>(); //Ergebnismenge der 2. Menge; ergaenzt PL 07-07-28 for(Pair p_fc : fc_refl) { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Menge greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Menge(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else { greater1elemente = greater1(tmp, fc_tto); } - Vector> unifyErgs = new Vector>(); + Menge> unifyErgs = new Menge>(); for (Type p_TA2_gr : greater1elemente) //Unify alleine reicht nicht, da p_TA2 Wildcards vorkommen koennen { //muessen auch alle Typen deren Args Subtypen von p_TA2 sind betrachtet werden. //Dies wird durch smaller1elemente bzw. smaller1 erledigt PL 07-07-29 Pair pUnify = new Pair(p_TA2.clone(),p_TA2_gr,PairOperator.Equal); - Vector> unifyErgsElement = unifyWC(pUnify,fc_tto); + Menge> unifyErgsElement = unifyWC(pUnify,fc_tto); if (!unifyErgsElement.isEmpty()) { unifyErgs.add(unifyErgsElement.firstElement()); } @@ -351,10 +354,10 @@ public class Unify || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { //Wenn die Unifizierung erfolgreich war durch jeden Ergebnisvektor der Unifizierung laufen. - for(Vector pVec : unifyErgs) //unifyErgs enthaelt nur einen Unifier STIMMT NIRHT MEHR!!! + for(Menge pVec : unifyErgs) //unifyErgs enthaelt nur einen Unifier STIMMT NIRHT MEHR!!! { //Das Ergebnis in die linke Seite von p_fc einsetzen, und dort Smaller anwenden. - Hashtable ht = VectorPair2SubstHashtableVectorPair(pVec); + Hashtable ht = MengePair2SubstHashtableMengePair(pVec); //PL 07-07-04 smallerArg wird auf die linke Seite von p_FC nach subst angewandt RefType p_fc_TA1_new = (RefType)p_fc.TA1.clone(); gtv2tv.applyThisSubstitutionSet(p_fc_TA1_new); //auf der linken Seite @@ -366,11 +369,11 @@ public class Unify //smallerArg ersetz durch folgende Zeilen. Durch Transistivitaet von fc kommen sonst //doppelte Elemente rein //Anfang - Vector smallers = new Vector(); - Vector smaller1elemente; + Menge smallers = new Menge(); + Menge smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Menge(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -398,30 +401,30 @@ public class Unify } //ENDE - Vector> cartProduktErg = new Vector>(); + Menge> cartProduktErg = new Menge>(); cartProduktErg.add(pVec); //Mit den kleineren Typen neue Paare bilden, linke Seite Klonen. - Vector smallerPairs = new Vector(); + Menge smallerPairs = new Menge(); for(Type sT : smallers) { smallerPairs.add(new Pair(p.TA1.clone(),sT,PairOperator.Equal)); } //Hier noch das Kartesische Produkt aus den Greater und den Smaller Ergebnissen bilden. - Vector> ergs = new Vector>(); + Menge> ergs = new Menge>(); for(Pair PsmP : smallerPairs) { - Vector> dolly = copyVectorVectorPair(cartProduktErg); - if(dolly.isEmpty()) dolly.add(new Vector()); - for(Vector vecp : dolly) + Menge> dolly = copyMengeMengePair(cartProduktErg); + if(dolly.isEmpty()) dolly.add(new Menge()); + for(Menge vecp : dolly) { vecp.add(PsmP.clone()); } ergs.addAll(dolly); } if(!ergs.isEmpty()) - for (Vector ergele : ergs) + for (Menge ergele : ergs) if (!ergMenge2.contains(ergele)) //ABFRAGE BRAURHT MAN VERMUTLIRH NIRHT, DA DURRH smaller1 keine doppelten Elemente reinkommen koennen ergMenge2.add(ergele); } @@ -433,15 +436,15 @@ public class Unify { //3. Menge //Einfach smallerArg auf die Wildcard aufrufen, mit den Ergebnissen neue Paare bilden. - Vector smErg = smallerArg(p.TA2,fc_tto); + Menge smErg = smallerArg(p.TA2,fc_tto); cartProduktSets.add(generateSetOfSetOfPair(p.TA1,smErg)); } else { //4. Menge - //Den Operator des Paares auf = umbiegen und das Paar in einen Vector verpacken. - Vector> setofsetofpairs = new Vector>(); - Vector vTmp = new Vector(); + //Den Operator des Paares auf = umbiegen und das Paar in einen Menge verpacken. + Menge> setofsetofpairs = new Menge>(); + Menge vTmp = new Menge(); p.SetOperator(PairOperator.Equal); vTmp.add(p); setofsetofpairs.add(vTmp); @@ -452,7 +455,7 @@ public class Unify //kein programmierter Fall konnte angewandt werden. PL 15-03-05 //z.B. TPH <. ? extends Ty inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " Ty wurde kein Fall gefunden"); - return new Vector>(); + return new Menge>(); } } else if (p.TA2 instanceof TypePlaceholder) @@ -462,19 +465,19 @@ public class Unify if (p.TA1 instanceof ObjectType) { //5. Menge //Greater auf den Typen bilden, und mit den Ergebnissen neue Paare bilden. - Vector grErg = greater((ObjectType)p.TA1,fc_tto); + Menge grErg = greater((ObjectType)p.TA1,fc_tto); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } else if (p.TA1 instanceof ExtendsWildcardType) { // eingefuegt 15-3-11 PL - Vector grErg1 = greater(((ExtendsWildcardType)p.TA1).getContainedType(),fc_tto); - Vector grErg2 = grErg1.stream().map(ty -> new SuperWildcardType(ty.getOffset(), ty.clone())).collect(Vector::new, Vector::add, Vector::addAll); - Vector grErg = new Vector<>(); + Menge grErg1 = greater(((ExtendsWildcardType)p.TA1).getContainedType(),fc_tto); + Menge grErg2 = grErg1.stream().map(ty -> new SuperWildcardType(ty.getOffset(), ty.clone())).collect(Menge::new, Menge::add, Menge::addAll); + Menge grErg = new Menge<>(); grErg.addAll(grErg1); grErg.addAll(grErg2); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } else if (p.TA1 instanceof SuperWildcardType) {// eingefuegt 15-3-11 PL - Vector erg = new Vector<> (); + Menge erg = new Menge<> (); erg.addElement(p.TA1); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,erg)); } @@ -485,7 +488,7 @@ public class Unify { //6. Menge //GreaterArg auf die Wildcard aufrufen, und mit den Ergebnissen neue Paare bilden. - Vector grErg = greaterArg(p.TA1,fc_tto); + Menge grErg = greaterArg(p.TA1,fc_tto); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } else if(p.TA1 instanceof SuperWildcardType && ((SuperWildcardType)p.TA1).get_SuperType() instanceof RefType) @@ -493,30 +496,30 @@ public class Unify RefType p_TA1 = (RefType)((SuperWildcardType)p.TA1).get_SuperType(); //7. Menge //Durch alle Paare p_fc laufen und schauen ob diese von der Struktur zu dem Paar p passen. - Vector fc_refl = copyVectorPair(fc_tto.getFC()); + Menge fc_refl = copyMengePair(fc_tto.getFC()); fc_refl.add(new Pair(p_TA1.clone(), p_TA1.clone())); //Reflexivitaet muss beruecksichtigt werden; ergaenzt PL 07-07-28 //Ist aber in FC nicht enthalten. - Vector> ergMenge1 = new Vector>(); //Ergebnismenge der 1. Menge; + Menge> ergMenge1 = new Menge>(); //Ergebnismenge der 1. Menge; for(Pair p_fc : fc_refl) { RefType tmp = ((RefType)p_fc.TA2).clone(); //Unifikation vorgezogen, da isRXSimilarRY nicht ausreicht PL 07-07-29 CSubstitutionSet gtv2tv = tmp.GenericTypeVar2TypePlaceholder(); - Vector greater1elemente; + Menge greater1elemente; if (tmp.get_ParaList() == null) { - greater1elemente = new Vector(); //Bei Konstanten liefert greater1 [] zurueck + greater1elemente = new Menge(); //Bei Konstanten liefert greater1 [] zurueck greater1elemente.add(tmp); } else { greater1elemente = greater1(tmp, fc_tto); } - Vector> unifyErgs = new Vector>(); + Menge> unifyErgs = new Menge>(); for (Type p_TA2_gr : greater1elemente) //Unify alleine reicht nicht, da p_TA2 Wildcards vorkommen koennen { //muessen auch alle Typen deren Args Subtypen von p_TA2 sind betrachtet werden. //Dies wird durch smaller1elemente bzw. smaller1 erledigt PL 07-07-29 Pair pUnify = new Pair(p_TA1.clone(),p_TA2_gr,PairOperator.Equal); - Vector> unifyErgsElement = unifyWC(pUnify,fc_tto); + Menge> unifyErgsElement = unifyWC(pUnify,fc_tto); if (!unifyErgsElement.isEmpty()) { unifyErgs.add(unifyErgsElement.firstElement()); } @@ -526,10 +529,10 @@ public class Unify || p_fc.TA2.equals(p_TA1)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { //Wenn die Unifizierung erfolgreich war durch jeden Ergebnisvektor der Unifizierung laufen. - for(Vector pVec : unifyErgs) + for(Menge pVec : unifyErgs) { // Das Ergebnis in die linke Seite von p_fc einsetzen, und dort Smaller anwenden. - Hashtable ht = VectorPair2SubstHashtableVectorPair(pVec); + Hashtable ht = MengePair2SubstHashtableMengePair(pVec); //PL 07-07-04 smallerArg wird auf die linke Seite von p_FC nach subst angewandt RefType p_fc_TA1_new = (RefType)p_fc.TA1.clone(); gtv2tv.applyThisSubstitutionSet(p_fc_TA1_new); //auf der linken Seite @@ -541,11 +544,11 @@ public class Unify //smallerArg ersetz durch folgende Zeilen. Durch Transistivitaet von fc kommen sonst //doppelte Elemente rein //Anfang - Vector smallers = new Vector(); - Vector smaller1elemente; + Menge smallers = new Menge(); + Menge smaller1elemente; if (p_fc_TA1_new.get_ParaList() == null) { - smaller1elemente = new Vector(); //Bei Konstanten liefert smaller1 [] zurueck + smaller1elemente = new Menge(); //Bei Konstanten liefert smaller1 [] zurueck smaller1elemente.add(p_fc_TA1_new); } else @@ -573,30 +576,30 @@ public class Unify } //ENDE - Vector> cartProduktErg = new Vector>(); + Menge> cartProduktErg = new Menge>(); cartProduktErg.add(pVec); //Mit den kleineren Typen neue Paare bilden, linke Seite Klonen. - Vector smallerPairs = new Vector(); + Menge smallerPairs = new Menge(); for(ObjectType sT : smallers) { smallerPairs.add(new Pair(p.TA2.clone(),new SuperWildcardType(sT.getOffset(),sT),PairOperator.Equal)); } //Hier noch das Kartesische Produkt aus den Greater und den Smaller Ergebnissen bilden. - Vector> ergs = new Vector>(); + Menge> ergs = new Menge>(); for(Pair PsmP : smallerPairs) { - Vector> dolly = copyVectorVectorPair(cartProduktErg); - if(dolly.isEmpty()) dolly.add(new Vector()); - for(Vector vecp : dolly) + Menge> dolly = copyMengeMengePair(cartProduktErg); + if(dolly.isEmpty()) dolly.add(new Menge()); + for(Menge vecp : dolly) { vecp.add(PsmP.clone()); } ergs.addAll(dolly); } if(!ergs.isEmpty()) - for (Vector ergele : ergs) + for (Menge ergele : ergs) if (!ergMenge1.contains(ergele)) //ABFRAGE BRAURHT MAN VERMUTLIRH NIRHT, DA DURRH smaller1 keine doppelten Elemente reinkommen koennen ergMenge1.add(ergele); } @@ -608,34 +611,47 @@ public class Unify { //8. Menge //GreaterArg auf die Linke Seite Aufrufen, mit den Ergebnissen neue Paare erzeugen - Vector grErg = greaterArg(p.TA1,fc_tto); + Menge grErg = greaterArg(p.TA1,fc_tto); cartProduktSets.add(generateSetOfSetOfPair(p.TA2,grErg)); } } else { //kein programmierter Fall konnte angewandt werden. PL 15-03-05 inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " Ty wurde kein Fall gefunden"); - return new Vector>(); + return new Menge>(); } } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern - //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebilden. - Vector helpvp; - Vector> bigCartProductErg = new Vector>(); - bigCartProductErg.addElement(copyVectorPair(Eq1)); + //cartProduktSets kontrollieren: + /* + for (Menge> vecvecpair : cartProduktSets){ + OderConstraint orConstraints = new OderConstraint(); + for(Menge pairs : vecvecpair){ + UndConstraint uCons = new UndConstraint(); + for(Pair p : pairs){ + uCons.addConstraint(new ConstraintPair(p.TA1)); + } + } + } + */ + + //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet. + Menge helpvp; + Menge> bigCartProductErg = new Menge>(); + bigCartProductErg.addElement(copyMengePair(Eq1)); - for (Vector> vecvecpair : cartProduktSets) + for (Menge> vecvecpair : cartProduktSets) { - Vector> bigCartProductErgOld = bigCartProductErg; - bigCartProductErg = new Vector>(); - for(Vector vecpair1 : vecvecpair) + Menge> bigCartProductErgOld = bigCartProductErg; + bigCartProductErg = new Menge>(); + for(Menge vecpair1 : vecvecpair) { - for(Vector vecpair2 : bigCartProductErgOld) + for(Menge vecpair2 : bigCartProductErgOld) { - helpvp = copyVectorPair(vecpair2); - helpvp.addAll(copyVectorPair(vecpair1)); + helpvp = copyMengePair(vecpair2); + helpvp.addAll(copyMengePair(vecpair1)); bigCartProductErg.addElement(helpvp); } } @@ -643,9 +659,9 @@ public class Unify //Schritt 5: Einsetzen der Subst Regel //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. - Vector> changedSets = new Vector>(); - Vector> notChangedSets = new Vector>(); - for(Vector vecpair : bigCartProductErg) + Menge> changedSets = new Menge>(); + Menge> notChangedSets = new Menge>(); + for(Menge vecpair : bigCartProductErg) { boolean change = false; //eingefuegt PL 13-05-22 Pair substPair = null; @@ -697,12 +713,12 @@ public class Unify } //Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird. - Vector> Eq2Set = new Vector>(); + Menge> Eq2Set = new Menge>(); //Schritt 6A: Beginnen mit Schritt 1 bei den geänderten. - for(Vector vecpair : changedSets) + for(Menge vecpair : changedSets) { - Vector> unifyErgs = unify(vecpair,fc_tto); + Menge> unifyErgs = unify(vecpair,fc_tto); //Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden. Eq2Set.addAll(unifyErgs); } @@ -713,9 +729,9 @@ public class Unify * Durch die Rekursion in Schritt 6A sind die Ergebnisse, welche in 6A dazukommen auf jeden Fall korrekt. * Es müssen nur die Ergebnisse aus 6B geprüft werden. */ - for(Vector vecpair : notChangedSets) + for(Menge vecpair : notChangedSets) { - //Überprüfen ob Vector in SolvedForm ist. + //Überprüfen ob Menge in SolvedForm ist. if(hasSolvedForm(vecpair)) //PL 13-05-22 hasSolvedForm angepasst { //Überprüfung auf FreshTypeVars in den Typen @@ -749,15 +765,15 @@ public class Unify * @param indexe * @return */ - static Vector schnitt1 (Vector var, Vector> vars, Vector indexe) { + static Menge schnitt1 (Menge var, Menge> vars, Menge indexe) { int j = -1; - for (Vector varelems : vars) { + for (Menge varelems : vars) { j++; if (varelems != null) { if (var.stream().map(x -> varelems.contains(x)).reduce(false, (a,b) -> (a || b)) && (!indexe.contains(j))) { - Vector rekvarelements = vars.elementAt(j); + Menge rekvarelements = vars.elementAt(j); vars.setElementAt(null, j);//Element erledigt muss nicht nochmals bearbeitet werden. indexe.addElement(j); indexe = schnitt1(rekvarelements, vars, indexe); @@ -773,13 +789,13 @@ public class Unify * @param vars * @return */ - public static Vector> schnitt (Vector> vars) { - Vector> ret = new Vector<>(); + public static Menge> schnitt (Menge> vars) { + Menge> ret = new Menge<>(); int i = -1; - for (Vector var : vars) { + for (Menge var : vars) { i++; if (var != null) {//Element wurde noch bearbeitet - Vector indexe = new Vector<>(); + Menge indexe = new Menge<>(); indexe.add(i); ret.add(schnitt1(var, vars, indexe)); } @@ -791,17 +807,17 @@ public class Unify /** * Diese Methode wird verwendet, um Zuordnungen z.B. TPH a = Integer * aus der Ergebnismenge zu entfernen, wenn im Typ in den die eingesetzt werden sollen kein TPH a vorhanden ist. - * Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Vector
    - * In diesm fall wird b = Number aus dem Vector entfernt. + * Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge + * In diesm fall wird b = Number aus dem Menge entfernt. * - * Durch das Entfernen entstehen evtl. Identische Vectoren, diese werden auch gelöscht. + * Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht. * * @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen. * @param test - RefType gegen den geprüft werden soll. */ - private static void testUnifyErg(Vector> unifyErgs, RefType test) + private static void testUnifyErg(Menge> unifyErgs, RefType test) { - for(Vector pVec : unifyErgs) + for(Menge pVec : unifyErgs) for(int vec = 0; vec < pVec.size(); vec++) { Pair pTest = pVec.elementAt(vec); @@ -811,13 +827,13 @@ public class Unify vec--; } } - //Gleiche Vectoren löschen + //Gleiche Mengeen löschen for(int i = 0; i < unifyErgs.size(); i++) { - Vector p1 = unifyErgs.elementAt(i); + Menge p1 = unifyErgs.elementAt(i); for(int j = i + 1; j < unifyErgs.size(); j++) { - Vector p2 = unifyErgs.elementAt(j); + Menge p2 = unifyErgs.elementAt(j); if(p1.size() == p2.size()) { boolean equal = true; @@ -840,20 +856,20 @@ public class Unify } /** - * Diese Methode generiert einen Vector> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. - * Beispiel: otherPairTypes = [Integer, Number, Vector], TA1 = TPH a. - * return: [[TPH a = Integer],[TPH a = Number],[TPH a = Vector]] + * Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. + * Beispiel: otherPairTypes = [Integer, Number, Menge], TA1 = TPH a. + * return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge]] * * @param TA1 - Der Typ der immer vorne steht * @param otherPairTypes - Die anderen Typen - * @return - Ein Vector> der alle Paare enthält. + * @return - Ein Menge> der alle Paare enthält. */ - private static Vector> generateSetOfSetOfPair(Type TA1, Vector otherPairTypes) + private static Menge> generateSetOfSetOfPair(Type TA1, Menge otherPairTypes) { - Vector> setofsetofpairs = new Vector>(); + Menge> setofsetofpairs = new Menge>(); for(Type t : otherPairTypes) { - Vector vTmp = new Vector(); + Menge vTmp = new Menge(); vTmp.add(new Pair(TA1.clone(),t,PairOperator.Equal)); setofsetofpairs.add(vTmp); } @@ -866,24 +882,24 @@ public class Unify // ino.end // ino.method.unify_Mub.28061.body { - Vector FC = fc_tto.getFC(); + Menge FC = fc_tto.getFC(); if (ty1 instanceof TypePlaceholder) { - Vector Mub = new Vector(); + Menge Mub = new Menge(); Mub.addElement(ty2); - Vector sigma = new Vector(); + Menge sigma = new Menge(); sigma.addElement(new Pair(ty1, ty2)); return new MUB(Mub, sigma); } else if (ty2 instanceof TypePlaceholder) { - Vector Mub = new Vector(); + Menge Mub = new Menge(); Mub.addElement(ty1); - Vector sigma = new Vector(); + Menge sigma = new Menge(); sigma.addElement(new Pair(ty2, ty1)); return new MUB(Mub, sigma); } else { - Vector ub = new Vector(); //alle oberen Schranken - Vector gr1 = new Vector(); //alle Elemente groesser ty1 + Menge ub = new Menge(); //alle oberen Schranken + Menge gr1 = new Menge(); //alle Elemente groesser ty1 boolean refl_flag1=true; //alle groesseren Elemente in FC @@ -908,7 +924,7 @@ public class Unify } } - Vector gr2 = new Vector(); + Menge gr2 = new Menge(); boolean refl_flag2=true; //alle groesseren Elemente in FC @@ -944,8 +960,8 @@ public class Unify } } - //Vector wird geclont, Elemente nicht - //Vector Mub = (Vector)ub.clone(); + //Menge wird geclont, Elemente nicht + //Menge Mub = (Menge)ub.clone(); //Elemente die nicht kleinste obere Schranken sind, werden gel�scht //FUNKTIONIERT NICHT. SIEHE iftest.java PL 08-08-13 @@ -972,10 +988,10 @@ public class Unify //sub dann auf die anderen Elemente von Mub anwenden zu koennen CSubstitutionSet sub = max.GenericTypeVar2TypePlaceholder(); //PL 06-03-22 in allen Elementen von Mub muessten die gleichen Typeplaceholders stehen - Vector sigma = unify(ty1, max, fc_tto).elementAt(0); - Vector sigma2 = unify(ty2, max, fc_tto).elementAt(0); + Menge sigma = unify(ty1, max, fc_tto).elementAt(0); + Menge sigma2 = unify(ty2, max, fc_tto).elementAt(0); sigma.addAll(sigma2); - Vector> unifiers = unify(sigma, fc_tto); + Menge> unifiers = unify(sigma, fc_tto); //es gibt keinen Unifier if (unifiers.size()==0) { @@ -1036,13 +1052,13 @@ throws MatchException // ino.end /* Einstieg in die Unifizierung mit den 4 Regeln. */ - public static Vector sub_unify(Vector E, FC_TTO fc_tto) + public static Menge sub_unify(Menge E, FC_TTO fc_tto) { return sub_unify(E,fc_tto,true); } // ino.method.sub_unify.28067.definition - public static Vector sub_unify( Vector E, FC_TTO fc_tto, boolean useSubst ) + public static Menge sub_unify( Menge E, FC_TTO fc_tto, boolean useSubst ) // ino.end // ino.method.sub_unify.28067.body { @@ -1050,9 +1066,9 @@ throws MatchException //Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht. // otth: Unifikation - Versuch 1 :-) - //Vector FC = fc_tto.getFC(); - Vector TTO = fc_tto.getTTO(); - Vector H = new Vector(); // Hilfsmenge + //Menge FC = fc_tto.getFC(); + Menge TTO = fc_tto.getTTO(); + Menge H = new Menge(); // Hilfsmenge boolean bRegel = true; // gibt an, ob eine Regel gepasst hat int n = 0; @@ -1086,7 +1102,7 @@ throws MatchException if(P.OperatorSmaller()) { if (P.TA1 instanceof ObjectType) { - Vector greaters = greater((ObjectType)P.TA1,fc_tto); + Menge greaters = greater((ObjectType)P.TA1,fc_tto); if (greaters.contains(P.TA2)) { inferencelog.debug(" ================================"); @@ -1098,7 +1114,7 @@ throws MatchException } else if (P.TA1 instanceof ExtendsWildcardType) { ObjectType pta1 = ((ExtendsWildcardType)P.TA1).getContainedType(); - Vector greaters = greater((ObjectType)pta1,fc_tto); + Menge greaters = greater((ObjectType)pta1,fc_tto); if (greaters.contains(P.TA2)) { inferencelog.debug(" ================================"); @@ -1121,7 +1137,7 @@ throws MatchException //ERASE2 luar 15-04-07 if(P.OperatorSmallerExtends()) { - Vector greaterArgs = greaterArg(P.TA1,fc_tto); + Menge greaterArgs = greaterArg(P.TA1,fc_tto); if(greaterArgs.contains(P.TA2)) { inferencelog.debug(" ================================"); @@ -1587,7 +1603,7 @@ throws MatchException // MyCompiler.printDebugInfo("---- E = " + E, 6); // MyCompiler.printDebugInfo("---- H = " + H, 6); E.removeAllElements(); - Vector vTemp = E; + Menge vTemp = E; E = H; H = vTemp; } @@ -1598,14 +1614,14 @@ throws MatchException /** * Implementiert die reduce1 Regel des sub_unify */ - private static void reduce1(Vector H, RefType TA1, RefType TA2, Vector TTO) throws SCException + private static void reduce1(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { inferencelog.debug(" ================================"); inferencelog.debug(" REDUCE1"); inferencelog.debug(" ================================"); - Vector L1 = TA1.get_ParaList(); - Vector L2 = TA2.get_ParaList(); + Menge L1 = TA1.get_ParaList(); + Menge L2 = TA2.get_ParaList(); inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); @@ -1622,14 +1638,14 @@ throws MatchException /** * Implementiert die reduceExt Regel des sub_unify */ - private static void reduceExt(Vector H, RefType TA1, RefType TA2, Vector TTO) throws SCException + private static void reduceExt(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { inferencelog.debug(" ================================"); inferencelog.debug(" REDUCEEXT"); inferencelog.debug(" ================================"); - Vector L1 = TA1.get_ParaList(); - Vector L2 = TA2.get_ParaList(); + Menge L1 = TA1.get_ParaList(); + Menge L2 = TA2.get_ParaList(); inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- ReduceExt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); @@ -1647,14 +1663,14 @@ throws MatchException /** * Implementiert die reduceSup Regel des sub_unify */ - private static void reduceSup(Vector H, RefType TA1, RefType TA2, Vector TTO) throws SCException + private static void reduceSup(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { inferencelog.debug(" ================================"); inferencelog.debug(" REDUCEEXT"); inferencelog.debug(" ================================"); - Vector L1 = TA1.get_ParaList(); - Vector L2 = TA2.get_ParaList(); + Menge L1 = TA1.get_ParaList(); + Menge L2 = TA2.get_ParaList(); inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- ReduceExt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); @@ -1672,7 +1688,7 @@ throws MatchException * Implementiert die reduceEq Regel des sub_unify * Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren. */ - private static void reduceEq(Vector H, RefType TA1, RefType TA2, Vector TTO) throws SCException + private static void reduceEq(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { reduce2(H,TA1,TA2,TTO); } @@ -1680,14 +1696,14 @@ throws MatchException /** * Implementiert die reduce2 Regel des sub_unify */ - private static void reduce2(Vector H, RefType TA1, RefType TA2, Vector TTO) throws SCException + private static void reduce2(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { inferencelog.debug(" ================================"); inferencelog.debug(" REDUCE2"); inferencelog.debug(" ================================"); - Vector L1 = TA1.get_ParaList(); - Vector L2 = TA2.get_ParaList(); + Menge L1 = TA1.get_ParaList(); + Menge L2 = TA2.get_ParaList(); inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); @@ -1707,7 +1723,7 @@ throws MatchException /** * Implementiert die adapt Regel des sub_unify */ - private static void adapt(Vector H, Pair PFC, RefType TA1, RefType TA2,FC_TTO fc_tto) + private static void adapt(Menge H, Pair PFC, RefType TA1, RefType TA2,FC_TTO fc_tto) { Hashtable ht = new Hashtable(); RefType TA1neu = (RefType)Pair.copyType((RefType)PFC.TA2); @@ -1734,7 +1750,7 @@ throws MatchException /** * Implementiert die adaptExt Regel des sub_unify */ - private static void adaptExt(Vector H, Pair PFC, RefType TA1, RefType TA2, FC_TTO fc_tto) + private static void adaptExt(Menge H, Pair PFC, RefType TA1, RefType TA2, FC_TTO fc_tto) { Hashtable ht = new Hashtable(); RefType TA1neu = (RefType)Pair.copyType((RefType)PFC.TA2); @@ -1761,7 +1777,7 @@ throws MatchException /** * Implementiert die adaptSup Regel des sub_unify */ - private static void adaptSup(Vector H, Pair PFC, RefType TA1, RefType TA2, FC_TTO fc_tto) + private static void adaptSup(Menge H, Pair PFC, RefType TA1, RefType TA2, FC_TTO fc_tto) { Hashtable ht = new Hashtable(); RefType TA1neu = (RefType)Pair.copyType((RefType)PFC.TA2); @@ -1803,7 +1819,7 @@ throws MatchException return retHT; } - private static Pair isInFClinks( RefType RT1, RefType RT2, Vector FC) + private static Pair isInFClinks( RefType RT1, RefType RT2, Menge FC) { for(Pair p : FC) { @@ -1851,8 +1867,8 @@ throws MatchException if( RFC.get_ParaList() != null && RY.get_ParaList() != null ) { // beide Typen haben Parameter --> Parameterliste durchlaufen - Vector px = RFC.get_ParaList(); - Vector py = RY.get_ParaList(); + Menge px = RFC.get_ParaList(); + Menge py = RY.get_ParaList(); if( px.size() == py.size() ) { for( int i = 0; i < px.size(); i++ ) @@ -1890,16 +1906,16 @@ throws MatchException } // ino.end - // ino.method.SubstHashtable2VectorPair.28076.definition - public static Vector SubstHashtable2VectorPair (Hashtable ht) + // ino.method.SubstHashtable2MengePair.28076.definition + public static Menge SubstHashtable2MengePair (Hashtable ht) // ino.end - // ino.method.SubstHashtable2VectorPair.28076.body + // ino.method.SubstHashtable2MengePair.28076.body { //PL 05-01-23 wandelt eine Hashtable von Substitutionen //PL 05-02-12 true BEI KONSTRUKTOR Pair EINGEFUEGT - //in ein Vector von Paaren um. + //in ein Menge von Paaren um. - Vector ret = new Vector(); + Menge ret = new Menge(); for(Enumeration e=ht.keys();e.hasMoreElements();) { String k = e.nextElement().toString(); // #JB# 11.04.2005 @@ -1912,12 +1928,12 @@ throws MatchException } // ino.end - // ino.method.VectorPair2SubstHashtableVectorPair.28079.definition - public static Hashtable VectorPair2SubstHashtableVectorPair (Vector v) + // ino.method.MengePair2SubstHashtableMengePair.28079.definition + public static Hashtable MengePair2SubstHashtableMengePair (Menge v) // ino.end - // ino.method.VectorPair2SubstHashtableVectorPair.28079.body + // ino.method.MengePair2SubstHashtableMengePair.28079.body { - //PL 05-01-23 wandelt einen Vector von Paaren (a, ty) von Substitutionen + //PL 05-01-23 wandelt einen Menge von Paaren (a, ty) von Substitutionen //in eine Hashtable um. Hashtable ret = new Hashtable(); @@ -1929,14 +1945,14 @@ throws MatchException } // ino.end - // ino.method.copyVectorPair.28082.definition - public static Vector copyVectorPair (Vector vp) + // ino.method.copyMengePair.28082.definition + public static Menge copyMengePair (Menge vp) // ino.end - // ino.method.copyVectorPair.28082.body + // ino.method.copyMengePair.28082.body { - //PL 05-01-23 kopiert einen Vector von Typ-Paaren + //PL 05-01-23 kopiert einen Menge von Typ-Paaren - Vector ret = new Vector(); + Menge ret = new Menge(); for (int i=0; i < vp.size(); i++) { ret.addElement(vp.elementAt(i).copyPair()); } @@ -1944,16 +1960,16 @@ throws MatchException } // ino.end - // ino.method.copyVectorVectorPair.28085.definition - public static Vector> copyVectorVectorPair (Vector> vp) + // ino.method.copyMengeMengePair.28085.definition + public static Menge> copyMengeMengePair (Menge> vp) // ino.end - // ino.method.copyVectorVectorPair.28085.body + // ino.method.copyMengeMengePair.28085.body { - //PL 05-02-08 kopiert einen Vector von Vectoren von Typ-Paaren + //PL 05-02-08 kopiert einen Menge von Mengeen von Typ-Paaren - Vector> ret = new Vector>(); + Menge> ret = new Menge>(); for (int i=0; i < vp.size(); i++) { - ret.addElement(copyVectorPair(vp.elementAt(i))); + ret.addElement(copyMengePair(vp.elementAt(i))); } return ret; } @@ -1962,7 +1978,7 @@ throws MatchException // ino.method.instanceSmaller.28088.definition - public static Vector> instanceSmaller(Pair P, FC_TTO fc_tto ) + public static Menge> instanceSmaller(Pair P, FC_TTO fc_tto ) // ino.end // ino.method.instanceSmaller.28088.body { @@ -1970,9 +1986,9 @@ throws MatchException //die Menge der Menge aller Substitutionen a \leq^* \sigma(ty), wobei //\sigma = unify(ty', \ol{ty}') (ty, \ol{ty}') \in FC - Vector FC = fc_tto.getFC(); - Vector> ret = new Vector>(); - Vector element; + Menge FC = fc_tto.getFC(); + Menge> ret = new Menge>(); + Menge element; RefType ty = (RefType)P.TA2; //Menge der \sigma(\theta) bestimmen, die in FC als linke Seite @@ -1985,7 +2001,7 @@ throws MatchException //BEI INSTANZIERTEN TYPEN WEREDN KEINE SUBTYPEN GEBILDET //VERGLEICHE pl1.1.1.3.jav //match(ty, (RefType)(((Pair)FC.elementAt(i)).TA2), ht); - Vector subunifypair = new Vector (); + Menge subunifypair = new Menge (); RefType ob = ((RefType)(FC.elementAt(i).TA2)).clone();// !!!oder Pair.copyType!!! CSubstitutionSet sub = ob.GenericTypeVar2TypePlaceholder(); sub.applyThisSubstitutionSet(ob); @@ -1994,11 +2010,11 @@ throws MatchException //MEHRFACHES UNIFIZIEREN, WENN EIN TYP UND EINE INSTANZ DAVON AUCH IN FC //LIEGT //erlegigt 06-04-28 - Vector res = sub_unify(subunifypair, fc_tto); + Menge res = sub_unify(subunifypair, fc_tto); if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. inferencelog.debug("HasSolvedForm: "); printMenge("RES_SMALLER", res, 6); - ht = VectorPair2SubstHashtableVectorPair(res); + ht = MengePair2SubstHashtableMengePair(res); //RefType tynew = (RefType)Pair.copyType(ty); RefType tynew = (RefType)Pair.copyType((RefType)(FC.elementAt(i).TA1)); sub.applyThisSubstitutionSet(tynew); @@ -2008,11 +2024,11 @@ throws MatchException //falls Typvariablen bei Vererbung hinzugekommen sind. CSubstitutionSet sub1 = tynew.GenericTypeVar2TypePlaceholder(); sub1.applyThisSubstitutionSet(tynew); - element = SubstHashtable2VectorPair(ht); + element = SubstHashtable2MengePair(ht); printMenge("ELEMENT", element, 6); - //Vector smaller = new Vector (); + //Menge smaller = new Menge (); //smaller.addElement(tynew); - Vector smaller; + Menge smaller; //DIESER AUFRUF IS MOEGLICHERWEISE UNNOETIG, DA ALLE //KLEINEREN ELEMENTE BEREITS DURCH ANDERE ELEMENTE AUS @@ -2024,7 +2040,7 @@ throws MatchException smaller.addElement(tynew); for (int j = 0; j < smaller.size(); j++) { - Vector newelement = copyVectorPair(element); + Menge newelement = copyMengePair(element); if (smaller.size() >= 1) { RefType testreftype = testht.put(smaller.elementAt(j).Type2Key(), smaller.elementAt(j)); if (testreftype == null) @@ -2038,12 +2054,12 @@ throws MatchException // } // catch (matchException e) { // System.out.println("matchException " + e.getMessage() + " " + ((RefType)(((Pair)FC.elementAt(i)).TA2)).Type2String()); - // //smaller = new Vector(); - // //element = new Vector(); + // //smaller = new Menge(); + // //element = new Menge(); // } } } - Vector equalElement = new Vector(); + Menge equalElement = new Menge(); equalElement.addElement(new Pair(P.TA1, P.TA2, PairOperator.Equal)); ret.addElement(equalElement); printMengeUnifier("RES_SMALLERend", ret, 6); @@ -2052,13 +2068,13 @@ throws MatchException // ino.end // ino.method.allSmaller.28091.definition - public static Vector allSmaller(RefType ty, Vector FC) + public static Menge allSmaller(RefType ty, Menge FC) // ino.end // ino.method.allSmaller.28091.body { //PL 05-01-22 bestimmt alle Typen die kleiner sind als ty - Vector ret = new Vector(); + Menge ret = new Menge(); inferencelog.debug("New allSmaller " + ty.Type2String()); @@ -2112,7 +2128,7 @@ throws MatchException // ino.end // ino.method.allGreater.29428.definition - public static Vector allGreater (BoundedGenericTypeVar ty, Vector FC) + public static Menge allGreater (BoundedGenericTypeVar ty, Menge FC) // ino.end // ino.method.allGreater.29428.body { @@ -2121,21 +2137,21 @@ throws MatchException while(typeIt.hasNext()) { CRefTypeSet grBounds = new CRefTypeSet(); RefType act = (RefType)typeIt.next(); - grBounds.setVector(allGreater(act, FC)); + grBounds.setMenge(allGreater(act, FC)); grBounds.addElement(act); ret.unite(grBounds); } - return ret.getVector(); + return ret.getMenge(); } // ino.end // ino.method.allGreater.28094.definition - public static Vector allGreater (RefType ty, Vector FC) + public static Menge allGreater (RefType ty, Menge FC) // ino.end // ino.method.allGreater.28094.body { - Vector ret = new Vector(); + Menge ret = new Menge(); Hashtable testht = new Hashtable(); @@ -2170,13 +2186,13 @@ throws MatchException // ino.end // ino.method.isInFC.28097.definition - public static Pair isInFC( RefType R1, RefType R2, Vector FC ) + public static Pair isInFC( RefType R1, RefType R2, Menge FC ) // ino.end // ino.method.isInFC.28097.body { // otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten - // z.B. Vector w�re hier gleich wie Vector + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA @@ -2224,14 +2240,14 @@ throws MatchException { // otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten - // z.B. Vector w�re hier gleich wie Vector + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA // R2 = CC< DD< Char, a> > // FC durchlaufen - Vector FC = fc_tto.getFC(); + Menge FC = fc_tto.getFC(); RefType RFC = null; // temporaer, fuer Element von FC for( int i = 0; i < FC.size(); i++ ) { @@ -2250,7 +2266,7 @@ throws MatchException inferencelog.debug("SIMILAR1"); // linke Seiten gleich --> rechte Seiten testen RFC = (RefType)P.TA2; - Vector R2vec = new Vector (); + Menge R2vec = new Menge (); inferencelog.debug("New_Pair" + (new Pair(RFC, R2, PairOperator.Smaller)).toString()); //STIMMT DAS copyType??? @@ -2259,7 +2275,7 @@ throws MatchException R2vec.addElement(new Pair(RFC_new, R2.clone(), PairOperator.Smaller)); printMenge("R2vec", R2vec, 6); - Vector vp = sub_unify(R2vec, fc_tto); + Menge vp = sub_unify(R2vec, fc_tto); printMenge("VP", vp, 6); if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. @@ -2300,7 +2316,7 @@ throws MatchException else { // Parameterliste vorhanden --> durchiterieren - Vector P = RT.get_ParaList(); + Menge P = RT.get_ParaList(); for( int i = 0; i < P.size(); i++ ) { Type T = (Type)P.elementAt( i ); @@ -2368,7 +2384,7 @@ throws MatchException if( T instanceof RefType && ((RefType)T).get_ParaList() != null ) { // Parameterliste durchgehen - Vector vTemp = ((RefType)T).get_ParaList(); + Menge vTemp = ((RefType)T).get_ParaList(); Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs //sonst werden nicht alle Elemente der Forschleife durchlaufen for( int i = 0; i < vTemp.size(); i++ ) @@ -2385,7 +2401,7 @@ throws MatchException if( Temp.getName().equals(a.getName()) ) { // Typvariable ersetzen - Vector vParaListTemp = ((RefType)T).get_ParaList(); + Menge vParaListTemp = ((RefType)T).get_ParaList(); vParaListTemp.set( i, o ); // i. Element ersetzen ret &= true; //GEAENDERT PL 14-01-17 } @@ -2459,7 +2475,7 @@ throws MatchException // ino.end // ino.method.SubstHashtableGeneric.28109.body { - Vector para = typterm.get_ParaList(); + Menge para = typterm.get_ParaList(); if (para != null) { for (int i=0; i < para.size(); i++) { if (para.elementAt(i) instanceof GenericTypeVar) { @@ -2486,7 +2502,7 @@ throws MatchException // ino.end // ino.method.SubstHashtable.28112.body { - Vector para = typterm.get_ParaList(); + Menge para = typterm.get_ParaList(); if (para != null) { for (int i=0; i < para.size(); i++) { if (para.elementAt(i) instanceof TypePlaceholder) { @@ -2514,7 +2530,7 @@ throws MatchException // otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist // Basisklasse suchen - Vector tto = fc_tto.getTTO(); + Menge tto = fc_tto.getTTO(); for( int i = 0; i < tto.size(); i++ ) { //Class tempKlasse = (Class)KlassenVektor.elementAt(i); @@ -2525,19 +2541,19 @@ throws MatchException //if( tempKlasse.get_Superclass_Name() != null ) { // Zusatzbedingung: otth - falls Typkonstruktoren in Superklassen auftreten --> ungueltig ?? - //Vector s = ((UsedId)tempKlasse.superclassid).vParaOrg; - Vector s = ((RefType)tempPair.TA2).get_ParaList(); + //Menge s = ((UsedId)tempKlasse.superclassid).vParaOrg; + Menge s = ((RefType)tempPair.TA2).get_ParaList(); // HOTI: Bugfixing: Wenn die ParaList leer ist, wird schlich ein neuer Vektor angelegt,der leer ist if(s==null){ - s=new Vector(); + s=new Menge(); } /* * Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist. * Sollte ein anderes Element gefunden werden ist Reduce nicht möglich. - * Beispiel: Matrix <. Vector> ist nur durch adapt möglich. + * Beispiel: Matrix <. Menge> ist nur durch adapt möglich. */ for(Type t : s) { @@ -2587,7 +2603,7 @@ throws MatchException System.out.println( "P. K.: " + tempKlasse.get_ParaList() ); if( tempKlasse.get_Superclass_Name() != null ) { - Vector s = ((UsedId)tempKlasse.superclassid).vParaOrg; + Menge s = ((UsedId)tempKlasse.superclassid).vParaOrg; System.out.println( "S. Klasse: " + tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: " + tempKlasse.get_ParaList() ); @@ -2598,7 +2614,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.end // ino.method.pi.28118.definition - public static int pi( int n, String C, String D, Vector tto ) + public static int pi( int n, String C, String D, Menge tto ) throws SCException // ino.end // ino.method.pi.28118.body @@ -2662,8 +2678,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: throw F; // Fehler // Vektorlisten extrahieren - Vector vC = KlasseC.get_ParaList(); - Vector vD = KlasseD.get_ParaList(); + Menge vC = KlasseC.get_ParaList(); + Menge vD = KlasseD.get_ParaList(); if( vC == null || vD == null ) throw F; @@ -2698,7 +2714,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } // ino.end // ino.method.printMengeUnifier.28121.definition - public static void printMengeUnifier(String strMenge, Vector> Uni, int nDebug ) + public static void printMengeUnifier(String strMenge, Menge> Uni, int nDebug ) // ino.end // ino.method.printMengeUnifier.28121.body { @@ -2720,7 +2736,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.end // ino.method.printMenge.28124.definition - public static void printMenge( String strMenge, Vector E, int nDebug ) + public static void printMenge( String strMenge, Menge E, int nDebug ) // ino.end // ino.method.printMenge.28124.body { @@ -2749,14 +2765,14 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.end // ino.method.hasSolvedForm.28127.definition - public static boolean hasSolvedForm( Vector E ) + public static boolean hasSolvedForm( Menge E ) // ino.end // ino.method.hasSolvedForm.28127.body { // otth: prueft, ob Menge E in 'Solved form' // TV im Vektor speichern - Vector vTV = new Vector(); + Menge vTV = new Menge(); for(Pair P : E) { // linke Seite == TypePlaceholder @@ -2799,7 +2815,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.end // ino.method.varSubst.28130.body { - Vector para = typterm.get_ParaList(); + Menge para = typterm.get_ParaList(); if (para != null) { for (int i=0; i < para.size(); i++) { if (para.elementAt(i) instanceof TypePlaceholder) { @@ -2827,12 +2843,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** - * Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Vector TVec an. - * Rückgabe ist ein Ergebnisvector + * Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Menge TVec an. + * Rückgabe ist ein ErgebnisMenge */ - private static Vector CaptureConversion(Vector TVec, FC_TTO fc_tto) + private static Menge CaptureConversion(Menge TVec, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); for(ObjectType t : TVec) { ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto); @@ -2867,12 +2883,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(cl == null) //Keine Klasse gefunden? return null; - Vector ccTypes = new Vector(); + Menge ccTypes = new Menge(); RefType refT = (RefType)T.clone(); boolean ccDone = false; if(refT.get_ParaList() != null) { - Vector paras = refT.get_ParaList(); + Menge paras = refT.get_ParaList(); //Durch jeden Typ in der Paralist des RefTypes laufen. for(int i = 0; i in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - private static Vector greater(ObjectType T, FC_TTO fc_tto) + private static Menge greater(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 { - Vector retVec = new Vector(); - Vector greater0Erg = greater0(T,fc_tto); + Menge retVec = new Menge(); + Menge greater0Erg = greater0(T,fc_tto); for(ObjectType t : greater0Erg) { if(!DelFreshWildcardTypeVar(t)) @@ -2936,12 +2952,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater0 Schritt von greater. */ - private static Vector greater0(ObjectType T, FC_TTO fc_tto) + private static Menge greater0(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); //greater1 Erzeugen - Vector greater1Erg = greater1(T,fc_tto); + Menge greater1Erg = greater1(T,fc_tto); //Reflexivität, deshalb T hinzufügen. if(!greater1Erg.contains(T)) @@ -2953,13 +2969,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: retVec.add(t); //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen - Vector greater2Erg = greater2(greater1Erg,fc_tto); + Menge greater2Erg = greater2(greater1Erg,fc_tto); for(ObjectType t : greater2Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen - Vector greater3Erg = greater3(greater2Erg,fc_tto); + Menge greater3Erg = greater3(greater2Erg,fc_tto); for(ObjectType t : greater3Erg) if(!retVec.contains(t)) retVec.add(t); @@ -2971,25 +2987,25 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * greater1 Schritt von greater. * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - private static Vector greater1(ObjectType T, FC_TTO fc_tto) + private static Menge greater1(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); if(T instanceof RefType) { RefType refT = (RefType)T; if(refT.get_ParaList() != null && refT.get_ParaList().size() > 0) { - Vector> types = new Vector>(); - Vector paras = refT.get_ParaList(); + Menge> types = new Menge>(); + Menge paras = refT.get_ParaList(); //Greater Arg von jedem Parameter einsammeln. for(int i = 0; i> kart = cartProductType(types); + Menge> kart = cartProductType(types); //Mit den neuen Parameterlisten neue Typen erzeugen. - for(Vector t : kart) + for(Menge t : kart) { RefType dolly = refT.clone(); dolly.set_ParaList(t); @@ -3000,8 +3016,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: else if(T instanceof BoundedGenericTypeVar) //PL 15-02-03 angefuegt da BGTV Kleiner als alle seine Bounds ist { BoundedGenericTypeVar bgtv = (BoundedGenericTypeVar)T; - Vector types = bgtv.getBounds(); - retVec = types.stream().map(ty -> greater(ty, fc_tto)).reduce(new Vector(), (a,b) -> { a.addAll(b); return a;}); + Menge types = bgtv.getBounds(); + retVec = types.stream().map(ty -> greater(ty, fc_tto)).reduce(new Menge(), (a,b) -> { a.addAll(b); return a;}); } return retVec; } @@ -3010,30 +3026,30 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter * welcher für die rekursion erforderlich ist mit übergeben muss. */ - private static Vector> cartProductType (Vector> vec) + private static Menge> cartProductType (Menge> vec) { return cartProductType(vec,0); } /** - * Erzeugt das Kartesische Product von mehreren Vectoren von Typen. + * Erzeugt das Kartesische Product von mehreren Mengeen von Typen. * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf. */ - private static Vector> cartProductType (Vector> vec, int index) + private static Menge> cartProductType (Menge> vec, int index) { - Vector> retVec = new Vector>(); + Menge> retVec = new Menge>(); if(vec.isEmpty()) return retVec; - Vector myTypes = vec.get(index); + Menge myTypes = vec.get(index); if(index < (vec.size()-1)) { - Vector> nextTypes = cartProductType(vec,index+1); + Menge> nextTypes = cartProductType(vec,index+1); for(Type t : myTypes) { - for(Vector tt : nextTypes) + for(Menge tt : nextTypes) { - Vector actual = copyVectorType(tt); + Menge actual = copyMengeType(tt); actual.insertElementAt(t.clone(),0); retVec.add(actual); } @@ -3043,7 +3059,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { for(Type t : myTypes) { - Vector tVec = new Vector(); + Menge tVec = new Menge(); tVec.insertElementAt(t.clone(),0); retVec.add(tVec); } @@ -3055,30 +3071,30 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter * welcher für die rekursion erforderlich ist mit übergeben muss. */ - private static Vector> cartProductPair (Vector> vec) + private static Menge> cartProductPair (Menge> vec) { return cartProductPair(vec,0); } /** - * Erzeugt das Kartesische Product von mehreren Vectoren von Paaren. + * Erzeugt das Kartesische Product von mehreren Mengeen von Paaren. * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf. */ - private static Vector> cartProductPair (Vector> vec, int index) + private static Menge> cartProductPair (Menge> vec, int index) { - Vector> retVec = new Vector>(); + Menge> retVec = new Menge>(); if(vec.isEmpty()) return retVec; - Vector myPairs = vec.get(index); + Menge myPairs = vec.get(index); if(index < (vec.size()-1)) { - Vector> nextPairs = cartProductPair(vec,index+1); + Menge> nextPairs = cartProductPair(vec,index+1); for(Pair p : myPairs) { - for(Vector pp : nextPairs) + for(Menge pp : nextPairs) { - Vector actual = copyVectorPair(pp); + Menge actual = copyMengePair(pp); actual.insertElementAt(p.clone(),0); retVec.add(actual); } @@ -3088,7 +3104,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { for(Pair p : myPairs) { - Vector tVec = new Vector(); + Menge tVec = new Menge(); tVec.insertElementAt(p.clone(),0); retVec.add(tVec); } @@ -3096,11 +3112,11 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return retVec; } /** - * Kopiert einen Vector. Es ist eine Deep Copy, da die Elemente auch kopiert werden. + * Kopiert einen Menge. Es ist eine Deep Copy, da die Elemente auch kopiert werden. */ - private static Vector copyVectorType(Vector vec) + private static Menge copyMengeType(Menge vec) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); for(Type t : vec) retVec.add(t.clone()); @@ -3108,12 +3124,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Kopiert einen Vector. Es ist eine Deep Copy, da die Elemente auch kopiert werden. + * Kopiert einen Menge. Es ist eine Deep Copy, da die Elemente auch kopiert werden. * noetig wegen Type-Erasure */ - private static Vector copyVectorObjectType(Vector vec) + private static Menge copyMengeObjectType(Menge vec) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); for(ObjectType t : vec) retVec.add(t.clone()); @@ -3124,14 +3140,14 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: * greaterArg Schritt von greater * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt */ - private static Vector greaterArg(Type T, FC_TTO fc_tto) + private static Menge greaterArg(Type T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); if(T instanceof ExtendsWildcardType) { //Bei einer ExtendsWildcard Rekursiv greater0 aufrufen und neue ExtendsWildcars erzeugen ExtendsWildcardType exT = (ExtendsWildcardType)T; - Vector greaterTypes = greater0(exT.get_ExtendsType(),fc_tto); + Menge greaterTypes = greater0(exT.get_ExtendsType(),fc_tto); for(ObjectType t : greaterTypes) retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); } @@ -3139,7 +3155,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Bei einer SuperWildcard Rekursiv smaller0 aufrufen und neue SuperWildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; - Vector smallerTypes = smaller0(suT.get_SuperType(),fc_tto); + Menge smallerTypes = smaller0(suT.get_SuperType(),fc_tto); for(ObjectType t : smallerTypes) retVec.add(new SuperWildcardType(t.getOffset(),t.clone())); } @@ -3156,8 +3172,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: FreshExtendsWildcardType fexT = (FreshExtendsWildcardType)T; ExtendsWildcardType extT = new ExtendsWildcardType(fexT.get_ExtendsBound().getOffset(), fexT.get_ExtendsBound().clone()); - //Vector tmp = greaterArg(fexT.get_ExtendsBound(),fc_tto); //hier stimmt es nicht PL 07-07-21 - Vector tmp = greaterArg(extT,fc_tto); + //Menge tmp = greaterArg(fexT.get_ExtendsBound(),fc_tto); //hier stimmt es nicht PL 07-07-21 + Menge tmp = greaterArg(extT,fc_tto); //for(int i = 0; i(); + return new Menge(); */ //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 @@ -3188,8 +3204,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Bei allen anderen Typen greater0 und smaller0 aufrufen. retVec.add((ObjectType)T); - Vector greaterTypes = greater0((ObjectType)T,fc_tto); - Vector smallerTypes = smaller0((ObjectType)T,fc_tto); + Menge greaterTypes = greater0((ObjectType)T,fc_tto); + Menge smallerTypes = smaller0((ObjectType)T,fc_tto); for(ObjectType t : greaterTypes) retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); @@ -3202,9 +3218,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater2 Schritt von greater */ - private static Vector greater2(Vector greater1Erg, FC_TTO fc_tto) + private static Menge greater2(Menge greater1Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. @@ -3247,12 +3263,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater3 Schritt von greater */ - private static Vector greater3(Vector greater2Erg, FC_TTO fc_tto) + private static Menge greater3(Menge greater2Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); for(ObjectType t : greater2Erg) { - Vector greater1Erg = greater1(t,fc_tto); + Menge greater1Erg = greater1(t,fc_tto); for(ObjectType tt : greater1Erg) if(!retVec.contains(tt)) retVec.add(tt); @@ -3269,11 +3285,11 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. */ - private static Vector smaller(ObjectType T, FC_TTO fc_tto) + private static Menge smaller(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 { - Vector retVec = new Vector(); - Vector smaller0Erg = smaller0(T,fc_tto); + Menge retVec = new Menge(); + Menge smaller0Erg = smaller0(T,fc_tto); for(ObjectType t : smaller0Erg) { if(!DelFreshWildcardTypeVar(t)) @@ -3285,17 +3301,17 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller0 Schritt von smaller */ - private static Vector smaller0(ObjectType T, FC_TTO fc_tto) + private static Menge smaller0(ObjectType T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); - Vector smaller1Erg = smaller1(T,fc_tto); + Menge smaller1Erg = smaller1(T,fc_tto); - Vector smaller2Erg = smaller2(smaller1Erg,fc_tto); + Menge smaller2Erg = smaller2(smaller1Erg,fc_tto); //Unite von smaller 1 und 2 bilden, um dies an smaller 3 weiterzugeben. - Vector smaller12Erg = copyVectorObjectType(smaller1Erg); + Menge smaller12Erg = copyMengeObjectType(smaller1Erg); for(ObjectType t : smaller2Erg) if(!smaller12Erg.contains(t)) smaller12Erg.add(t); @@ -3309,13 +3325,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: retVec.add(t); //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. - Vector smaller3Erg = smaller3(smaller12Erg,fc_tto); + Menge smaller3Erg = smaller3(smaller12Erg,fc_tto); for(ObjectType t : smaller3Erg) if(!retVec.contains(t)) retVec.add(t); //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. - Vector smaller4Erg = smaller4(smaller3Erg); + Menge smaller4Erg = smaller4(smaller3Erg); for(ObjectType t : smaller4Erg) if(!retVec.contains(t)) retVec.add(t); @@ -3326,25 +3342,25 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller1 Schritt von smaller */ - private static Vector smaller1(Type T, FC_TTO fc_tto) + private static Menge smaller1(Type T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); if(T instanceof RefType) { RefType refT = (RefType)T; if(refT.get_ParaList() != null && refT.get_ParaList().size() > 0) { - Vector> types = new Vector>(); - Vector paras = refT.get_ParaList(); + Menge> types = new Menge>(); + Menge paras = refT.get_ParaList(); //Smaller Arg von jedem Parameter einsammeln. for(int i = 0; i> kart = cartProductType(types); + Menge> kart = cartProductType(types); //Mit den neuen Parameterlisten neue Typen klonen, Parameterlisten zuweisen - for(Vector t : kart) + for(Menge t : kart) { RefType dolly = refT.clone(); dolly.set_ParaList(t); @@ -3358,14 +3374,14 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smallerArg Schritt von smaller */ - private static Vector smallerArg(Type T, FC_TTO fc_tto) + private static Menge smallerArg(Type T, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); if(T instanceof ExtendsWildcardType) { //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. ExtendsWildcardType exT = (ExtendsWildcardType)T; - Vector smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); + Menge smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); for(ObjectType t : smallerTypes) { retVec.add(new ExtendsWildcardType(t.getOffset(),t.clone())); @@ -3376,7 +3392,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: { //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; - Vector greaterTypes = greater0(suT.get_SuperType(),fc_tto); + Menge greaterTypes = greater0(suT.get_SuperType(),fc_tto); for(ObjectType t : greaterTypes) { retVec.add(new SuperWildcardType(-1,t.clone())); @@ -3384,7 +3400,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } } else if(T instanceof FreshExtendsWildcardType) - return new Vector(); //HIER NOCH T EINFUEGEN 07-11-03 PL + return new Menge(); //HIER NOCH T EINFUEGEN 07-11-03 PL else if(T instanceof FreshSuperWildcardType) {//HIER AUCH NUR T EINFUEGEN 07-11-03 PL @@ -3400,7 +3416,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller2 Schritt von smaller */ - private static Vector smaller2(Vector smaller1Erg, FC_TTO fc_tto) + private static Menge smaller2(Menge smaller1Erg, FC_TTO fc_tto) { return CaptureConversion(smaller1Erg,fc_tto); } @@ -3408,9 +3424,9 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller3 Schritt von smaller */ - private static Vector smaller3(Vector smaller12Erg, FC_TTO fc_tto) + private static Menge smaller3(Menge smaller12Erg, FC_TTO fc_tto) { - Vector retVec = new Vector(); + Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. @@ -3451,13 +3467,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * smaller4 Schritt von smaller */ - private static Vector smaller4(Vector smallerErg) + private static Menge smaller4(Menge smallerErg) { /* smaller4 ist die inverse CaptureConversion. * Alle Typen in smallerErg werden durchlaufen, und evtl. gefundene * FreshWildcardTypes werden durch die entsprechenden Wildcards ersetzt. * */ - Vector retVec = new Vector(); + Menge retVec = new Menge(); for(ObjectType t : smallerErg) { if(t instanceof RefType) @@ -3465,7 +3481,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: RefType refT = (RefType)t.clone(); if(refT.get_ParaList() != null) { - Vector paras = refT.get_ParaList(); + Menge paras = refT.get_ParaList(); for(int i = 0; i testCodegen(String sourceCode){ + public static Menge testCodegen(String sourceCode){ MyCompilerAPI compiler = MyCompiler.getAPI(); compiler.parse(sourceCode); - Vector ret = null; + Menge ret = null; try { ret = compiler.codeGeneration(null); } catch (NullPointerException | JVMCodeException e) { @@ -33,7 +33,7 @@ public class BytecodeTester{ return ret; } - public static Vector readFileAndTestCodegen(String fileName) throws IOException{ + public static Menge readFileAndTestCodegen(String fileName) throws IOException{ return testCodegen(getFileContent(rootDirectory + fileName)); } diff --git a/test/bytecode/EmptyClassTest.java b/test/bytecode/EmptyClassTest.java index 56c3c848..c31f510a 100644 --- a/test/bytecode/EmptyClassTest.java +++ b/test/bytecode/EmptyClassTest.java @@ -1,6 +1,6 @@ package bytecode; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; diff --git a/test/bytecode/GeneralTest.java b/test/bytecode/GeneralTest.java index bf379b24..e9c9c12e 100644 --- a/test/bytecode/GeneralTest.java +++ b/test/bytecode/GeneralTest.java @@ -3,7 +3,7 @@ package bytecode; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -15,7 +15,7 @@ import sun.misc.IOUtils; public class GeneralTest extends TestCase{ @Test public void test(){ - Vector cfs = null; + Menge cfs = null; try { cfs = BytecodeTester.readFileAndTestCodegen("FieldTest.jav"); } catch (IOException e) { diff --git a/test/mycompiler/test/blocks/TestIfStmt.jav b/test/mycompiler/test/blocks/TestIfStmt.jav index a59a4c0f..de6e7e12 100755 --- a/test/mycompiler/test/blocks/TestIfStmt.jav +++ b/test/mycompiler/test/blocks/TestIfStmt.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class TestIfStmt { @@ -14,7 +14,7 @@ public class TestIfStmt { public m2() { a; c; - a = new Vector(); + a = new Menge(); if (a.isEmpty()) { c="empty"; } diff --git a/test/mycompiler/test/blocks/TestIfStmt.java b/test/mycompiler/test/blocks/TestIfStmt.java index 8c61f4cd..442bd0f0 100755 --- a/test/mycompiler/test/blocks/TestIfStmt.java +++ b/test/mycompiler/test/blocks/TestIfStmt.java @@ -1,6 +1,6 @@ package mycompiler.test.blocks; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -41,26 +41,26 @@ public class TestIfStmt extends AbstractInferenceTest { //var1.addExpectedType(new RefType("java.lang.Short",-1)); m1.getBlock().addLocalVar(var1); - Vector ret = new Vector(); + Menge ret = new Menge(); ret.add(new RefType("java.lang.Integer",-1)); - MethodExpect m2 = new MethodExpect("m2",new RefType("java.util.Vector",ret,-1)); + MethodExpect m2 = new MethodExpect("m2",new RefType("de.dhbwstuttgart.typeinference.Menge",ret,-1)); - Vector ret1 = new Vector(); + Menge ret1 = new Menge(); ret1.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector ret2 = new Vector(); + Menge ret2 = new Menge(); ret2.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - m2.addReturntype(new RefType("java.util.Vector",ret1,-1)); - m2.addReturntype(new RefType("java.util.Vector",ret2,-1)); + m2.addReturntype(new RefType("de.dhbwstuttgart.typeinference.Menge",ret1,-1)); + m2.addReturntype(new RefType("de.dhbwstuttgart.typeinference.Menge",ret2,-1)); - Vector a_param = new Vector(); + Menge a_param = new Menge(); a_param.add(new RefType("java.lang.Integer",-1)); - VarExpect var21 = new VarExpect("a",new RefType("java.util.Vector",a_param,-1)); - Vector a_param1 = new Vector(); + VarExpect var21 = new VarExpect("a",new RefType("de.dhbwstuttgart.typeinference.Menge",a_param,-1)); + Menge a_param1 = new Menge(); a_param1.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector a_param2 = new Vector(); + Menge a_param2 = new Menge(); a_param2.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - var21.addExpectedType(new RefType("java.util.Vector",a_param1,-1)); - var21.addExpectedType(new RefType("java.util.Vector",a_param2,-1)); + var21.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",a_param1,-1)); + var21.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",a_param2,-1)); VarExpect var22 = new VarExpect("c",new RefType("java.lang.String",-1)); diff --git a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java b/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java index 41896285..490c2721 100755 --- a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java +++ b/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java @@ -1,6 +1,6 @@ package mycompiler.test.blocks; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.RefType; diff --git a/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav b/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav index aef62902..3f01ac70 100755 --- a/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav +++ b/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav @@ -1,5 +1,5 @@ import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class TestStandardLibMethod { @@ -9,7 +9,7 @@ public class TestStandardLibMethod { a.put("2",-1); } - public m2(Vector> m){ + public m2(Menge> m){ k; k = 0; ret; diff --git a/test/mycompiler/test/complexTypes/TestStandardLibMethod.java b/test/mycompiler/test/complexTypes/TestStandardLibMethod.java index eca0c6a3..8e6c2919 100755 --- a/test/mycompiler/test/complexTypes/TestStandardLibMethod.java +++ b/test/mycompiler/test/complexTypes/TestStandardLibMethod.java @@ -1,6 +1,6 @@ package mycompiler.test.complexTypes; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import mycompiler.test.AbstractInferenceTest; @@ -30,14 +30,14 @@ public class TestStandardLibMethod extends AbstractInferenceTest{ //Methods MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - RefType aType = new RefType("java.util.HashMap",new Vector(),-1); + RefType aType = new RefType("java.util.HashMap",new Menge(),-1); aType.add_Parameter(new RefType("java.lang.String",-1)); aType.add_Parameter(new RefType("java.lang.Integer",-1)); m1.getBlock().addLocalVar(new VarExpect("a", aType)); MethodExpect m2 = new MethodExpect("m2", new RefType("java.lang.Integer",-1)); - RefType mType = new RefType("java.util.Vector",new Vector(),-1); - RefType mType1 = new RefType("java.util.Vector",new Vector(),-1); + RefType mType = new RefType("de.dhbwstuttgart.typeinference.Menge",new Menge(),-1); + RefType mType1 = new RefType("de.dhbwstuttgart.typeinference.Menge",new Menge(),-1); mType1.add_Parameter(new RefType("java.lang.Integer",-1)); mType.add_Parameter(mType1); m2.addParameter(new VarExpect("m", mType)); diff --git a/test/mycompiler/test/expectationTypes/BlockExpect.java b/test/mycompiler/test/expectationTypes/BlockExpect.java index 55fb52be..47e4b4e6 100755 --- a/test/mycompiler/test/expectationTypes/BlockExpect.java +++ b/test/mycompiler/test/expectationTypes/BlockExpect.java @@ -1,7 +1,7 @@ package mycompiler.test.expectationTypes; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; /** * 15-04-08 @@ -12,13 +12,13 @@ import java.util.Vector; public class BlockExpect implements IExpectation{ private HashMap localVars = null; - private Vector containedBlocks = null; + private Menge containedBlocks = null; private String blockID = null; public BlockExpect(String parentBlockID,String blockID) { this.localVars = new HashMap(); - this.containedBlocks = new Vector(); + this.containedBlocks = new Menge(); if (parentBlockID==null) this.blockID=blockID; else @@ -53,11 +53,11 @@ public class BlockExpect implements IExpectation{ this.localVars = localVar; } - public Vector getContainedBlocks() { + public Menge getContainedBlocks() { return containedBlocks; } - public void setContainedBlocks(Vector containedBlocks) { + public void setContainedBlocks(Menge containedBlocks) { this.containedBlocks = containedBlocks; } diff --git a/test/mycompiler/test/expectationTypes/ClassExpect.java b/test/mycompiler/test/expectationTypes/ClassExpect.java index 75f4e0e7..dcc9f693 100755 --- a/test/mycompiler/test/expectationTypes/ClassExpect.java +++ b/test/mycompiler/test/expectationTypes/ClassExpect.java @@ -1,7 +1,7 @@ package mycompiler.test.expectationTypes; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey; @@ -13,14 +13,14 @@ import mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey; */ public class ClassExpect implements IExpectation { private String name = null; - private Vector generics = null; + private Menge generics = null; private HashMap members = null; private HashMap methods = null; public ClassExpect(String name) { this.name = name; - this.generics= new Vector(); + this.generics= new Menge(); this.members = new HashMap(); this.methods = new HashMap(); } @@ -56,12 +56,12 @@ public class ClassExpect implements IExpectation { } - public Vector getGenerics() { + public Menge getGenerics() { return generics; } - public void setGenerics(Vector generics) { + public void setGenerics(Menge generics) { this.generics = generics; } diff --git a/test/mycompiler/test/expectationTypes/Expectation.java b/test/mycompiler/test/expectationTypes/Expectation.java index ddda0f13..1b80baec 100755 --- a/test/mycompiler/test/expectationTypes/Expectation.java +++ b/test/mycompiler/test/expectationTypes/Expectation.java @@ -1,7 +1,7 @@ package mycompiler.test.expectationTypes; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; /** * 15-04-08 * @author @@ -12,7 +12,7 @@ import java.util.Vector; public class Expectation implements IExpectation { private HashMap classes = null; - private Vector exceptions = null; + private Menge exceptions = null; private UnknownTypesMappingExpect mappings = null; public Expectation(ClassExpect classExpect) { @@ -20,7 +20,7 @@ public class Expectation implements IExpectation { this.classes = new HashMap(); this.classes.put(classExpect.getName(), classExpect); } - this.exceptions = new Vector(); + this.exceptions = new Menge(); this.mappings = new UnknownTypesMappingExpect(); } @@ -39,7 +39,7 @@ public class Expectation implements IExpectation { this.exceptions.add(e); } - public Vector getExceptions() { + public Menge getExceptions() { return this.exceptions; } diff --git a/test/mycompiler/test/expectationTypes/MethodExpect.java b/test/mycompiler/test/expectationTypes/MethodExpect.java index 584a0a4a..e2822f6e 100755 --- a/test/mycompiler/test/expectationTypes/MethodExpect.java +++ b/test/mycompiler/test/expectationTypes/MethodExpect.java @@ -1,7 +1,7 @@ package mycompiler.test.expectationTypes; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -16,10 +16,10 @@ public class MethodExpect implements IExpectation { private final static String METHODNAMEDELIMITER = "#"; private String name = null; - private Vector returntypes = null; - private Vector returntypesCopy = null; //used to ensure all expectations have been met + private Menge returntypes = null; + private Menge returntypesCopy = null; //used to ensure all expectations have been met private IUnknownTypeExpect unknownReturnType=null; - private Vector generics = null; + private Menge generics = null; private HashMap parameters = null; private BlockExpect block = null; private int overloadID = 0; @@ -32,10 +32,10 @@ public class MethodExpect implements IExpectation { public MethodExpect(String name, int overloadID) { this.name = name; - this.generics=new Vector(); + this.generics=new Menge(); this.parameters=new HashMap(); - this.returntypes = new Vector(); - this.returntypesCopy=(Vector)this.returntypes.clone(); + this.returntypes = new Menge(); + this.returntypesCopy=(Menge)this.returntypes.clone(); this.block = new BlockExpect(null,"1"); this.overloadID = overloadID; @@ -48,7 +48,7 @@ public class MethodExpect implements IExpectation { public MethodExpect(String name, Type returntype, int overloadID) { this(name,overloadID); this.returntypes.add(returntype); - this.returntypesCopy=(Vector)this.returntypes.clone(); + this.returntypesCopy=(Menge)this.returntypes.clone(); } public MethodExpect(String name, IUnknownTypeExpect unknownreturntype) { @@ -66,7 +66,7 @@ public class MethodExpect implements IExpectation { public void addReturntype(Type returntype) { if (this.returntypes==null) - this.returntypes = new Vector(); + this.returntypes = new Menge(); //to avoid usage of returntypes and unknownreturntypes at the same time if (this.unknownReturnType==null) { this.returntypes.add(returntype); @@ -97,19 +97,19 @@ public class MethodExpect implements IExpectation { this.name = name; } - public Vector getReturntypes() { + public Menge getReturntypes() { return returntypes; } - public void setReturntypes(Vector returntypes) { + public void setReturntypes(Menge returntypes) { this.returntypes = returntypes; } - public Vector getGenerics() { + public Menge getGenerics() { return generics; } - public void setGenerics(Vector generics) { + public void setGenerics(Menge generics) { this.generics = generics; } @@ -137,13 +137,13 @@ public class MethodExpect implements IExpectation { this.overloadID = overloadID; } - public Vector getReturntypesCopy() { + public Menge getReturntypesCopy() { return returntypesCopy; } - public void setReturntypesCopy(Vector returntypesCopy) { + public void setReturntypesCopy(Menge returntypesCopy) { this.returntypesCopy = returntypesCopy; - this.returntypesCopy=(Vector)this.returntypes.clone(); + this.returntypesCopy=(Menge)this.returntypes.clone(); } public IUnknownTypeExpect getUnknownReturnType() { diff --git a/test/mycompiler/test/expectationTypes/VarExpect.java b/test/mycompiler/test/expectationTypes/VarExpect.java index 5d538b06..f849841b 100755 --- a/test/mycompiler/test/expectationTypes/VarExpect.java +++ b/test/mycompiler/test/expectationTypes/VarExpect.java @@ -1,6 +1,6 @@ package mycompiler.test.expectationTypes; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.Type; /** @@ -10,21 +10,21 @@ import de.dhbwstuttgart.syntaxtree.type.Type; * classes used to define expectation of a particular variable */ public class VarExpect implements IExpectation { - private Vector expectedType = null; - private Vector expectedTypeCopy = null; + private Menge expectedType = null; + private Menge expectedTypeCopy = null; private IUnknownTypeExpect expectedUnknownType=null; private String name = null; public VarExpect(String name) { this.name=name; - this.expectedType=new Vector(); - this.expectedTypeCopy=(Vector)this.expectedType.clone(); + this.expectedType=new Menge(); + this.expectedTypeCopy=(Menge)this.expectedType.clone(); } public VarExpect(String name, Type expectedType) { this(name); this.expectedType.add(expectedType); - this.expectedTypeCopy=(Vector)this.expectedType.clone(); + this.expectedTypeCopy=(Menge)this.expectedType.clone(); } public VarExpect(String name, IUnknownTypeExpect expectedUnknownType) { @@ -34,22 +34,22 @@ public class VarExpect implements IExpectation { public void addExpectedType(Type type) { if (this.expectedType==null) - this.expectedType = new Vector(); + this.expectedType = new Menge(); this.expectedType.add(type); - this.expectedTypeCopy=(Vector)this.expectedType.clone(); + this.expectedTypeCopy=(Menge)this.expectedType.clone(); } public boolean verifyTypeExpectationsCompletelyMet() { return this.expectedTypeCopy.size()==0; } - public Vector getExpectedType() { + public Menge getExpectedType() { return expectedType; } - public void setExpectedType(Vector expectedType) { + public void setExpectedType(Menge expectedType) { this.expectedType = expectedType; - this.expectedTypeCopy=(Vector)this.expectedType.clone(); + this.expectedTypeCopy=(Menge)this.expectedType.clone(); } public String getName() { @@ -60,11 +60,11 @@ public class VarExpect implements IExpectation { this.name = name; } - public Vector getExpectedTypeCopy() { + public Menge getExpectedTypeCopy() { return expectedTypeCopy; } - public void setExpectedTypeCopy(Vector expectedTypeCopy) { + public void setExpectedTypeCopy(Menge expectedTypeCopy) { this.expectedTypeCopy = expectedTypeCopy; } diff --git a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java b/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java index 73bf38dd..9658e395 100755 --- a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java +++ b/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -33,11 +33,11 @@ public class TestAssignmentTwoGenericTypesNegative extends AbstractInferenceTest //Methods MethodExpect method = new MethodExpect("m",new RefType("void",-1)); RefType paramString = new RefType("java.lang.String",-1); - Vector param1 = new Vector(); + Menge param1 = new Menge(); param1.add(paramString); method.getBlock().addLocalVar(new VarExpect("ls", new RefType("java.util.ArrayList",param1,-1))); RefType paramObject = new RefType("java.lang.Object",-1); - Vector param2 = new Vector(); + Menge param2 = new Menge(); param2.add(paramObject); method.getBlock().addLocalVar(new VarExpect("lo", new RefType("java.util.ArrayList",param2,-1))); diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java index 0f8cec05..31c65b5e 100755 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java +++ b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -45,26 +45,26 @@ public class TestClassesWithBoundedGenericsOfTwoTypes extends AbstractInferenceT ClassExpect e = new ClassExpect("E"); //generics - Vector boundsA = new Vector(); + Menge boundsA = new Menge(); boundsA.add(new RefType("I1",-1)); a.addGeneric(new BoundedGenericTypeVar("T",boundsA,-1)); - Vector boundsB = new Vector(); + Menge boundsB = new Menge(); boundsB.add(new RefType("I1",-1)); boundsB.add(new RefType("I2",-1)); b.addGeneric(new BoundedGenericTypeVar("T",boundsB,-1)); - Vector boundsC = new Vector(); + Menge boundsC = new Menge(); boundsC.add(new RefType("I1",-1)); boundsC.add(new RefType("Implementation",-1)); c.addGeneric(new BoundedGenericTypeVar("T",boundsC,-1)); - Vector boundsD = new Vector(); + Menge boundsD = new Menge(); boundsD.add(new RefType("I2",-1)); boundsD.add(new RefType("Implementation",-1)); d.addGeneric(new BoundedGenericTypeVar("T",boundsD,-1)); - Vector boundsE = new Vector(); + Menge boundsE = new Menge(); boundsE.add(new RefType("Implementation",-1)); boundsE.add(new RefType("Implementation2",-1)); e.addGeneric(new BoundedGenericTypeVar("T",boundsE,-1)); diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java index c76e427c..6699b484 100755 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java +++ b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -40,10 +40,10 @@ public class TestClassesWithBoundedGenericsUsedInMethods extends AbstractInferen ClassExpect testClassesWithBoundedGenericsUsedInMethods = new ClassExpect(TestClassesWithBoundedGenericsUsedInMethods.TESTEDCLASSNAME); //generics - Vector boundsT = new Vector(); + Menge boundsT = new Menge(); boundsT.add(new RefType("I1",-1)); BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",boundsT,-1); - Vector boundsS = new Vector(); + Menge boundsS = new Menge(); boundsS.add(new RefType("I1",-1)); BoundedGenericTypeVar s = new BoundedGenericTypeVar("T",boundsS,-1); diff --git a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java b/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java index 0528d3e2..dacf3125 100755 --- a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java +++ b/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -42,7 +42,7 @@ public class TestExtendedClassesWithBoundedGenerics extends AbstractInferenceTes ClassExpect tester = new ClassExpect("Tester"); //generics - Vector bounds = new Vector(); + Menge bounds = new Menge(); bounds.add(new RefType("I1",-1)); bounds.add(new RefType("I2",-1)); BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",bounds,-1); @@ -70,9 +70,9 @@ public class TestExtendedClassesWithBoundedGenerics extends AbstractInferenceTes //x.addExpectedType(new RefType("I2",-1)); m.getBlock().addLocalVar(x); - Vector testerParams1 = new Vector(); + Menge testerParams1 = new Menge(); testerParams1.add(new RefType("Implementation",-1)); - Vector testerParams2 = new Vector(); + Menge testerParams2 = new Menge(); testerParams2.add(new SuperWildcardType(-1,new RefType("Implementation",-1))); VarExpect y = new VarExpect("y",new RefType("Tester",testerParams1,-1)); y.addExpectedType(new RefType("Tester",testerParams2,-1)); diff --git a/test/mycompiler/test/generics/TestNestedGenerics.java b/test/mycompiler/test/generics/TestNestedGenerics.java index 8ff2f845..6d2cc167 100755 --- a/test/mycompiler/test/generics/TestNestedGenerics.java +++ b/test/mycompiler/test/generics/TestNestedGenerics.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; @@ -40,7 +40,7 @@ public class TestNestedGenerics extends AbstractInferenceTest{ MethodExpect foo = new MethodExpect("foo",new RefType("void",-1)); BoundedGenericTypeVar genericT = new BoundedGenericTypeVar("T",-1); GenericTypeVar genericC = new GenericTypeVar("C",-1); - Vector param = new Vector(); + Menge param = new Menge(); param.add(genericC); genericT.addBound(new RefType("A",param,-1)); foo.addParameter(new VarExpect("a",genericT)); @@ -50,7 +50,7 @@ public class TestNestedGenerics extends AbstractInferenceTest{ m.getBlock().addLocalVar(new VarExpect("t", new RefType("TestNestedGenerics",-1))); m.getBlock().addLocalVar(new VarExpect("str",new RefType("java.lang.String",-1))); RefType typeString = new RefType("java.lang.String",-1); - Vectorparam2 = new Vector(); + Mengeparam2 = new Menge(); param2.add(typeString); m.getBlock().addLocalVar(new VarExpect("a", new RefType("A",param2,-1))); diff --git a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java b/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java index 64657905..263a51a1 100755 --- a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java +++ b/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; @@ -38,7 +38,7 @@ public class TestNestedGenericsNonExistingType extends AbstractInferenceTest{ MethodExpect foo = new MethodExpect("foo",new RefType("void",-1)); BoundedGenericTypeVar genericT = new BoundedGenericTypeVar("T",-1); GenericTypeVar genericC = new GenericTypeVar("C",-1); - Vector param = new Vector(); + Menge param = new Menge(); param.add(genericC); genericT.addBound(new RefType("A",param,-1)); foo.addParameter(new VarExpect("a",genericT)); diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav index 622a5007..8b43ff95 100755 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav +++ b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.HashMap; public class TestSimpleClassesWithBoundedGenerics { diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java index c946a674..77ea4fab 100755 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java +++ b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; @@ -46,17 +46,17 @@ public class TestSimpleClassesWithBoundedGenerics extends AbstractInferenceTest{ testSimpleClassesWithBoundedGenerics.addMethod(ma); MethodExpect m1 = new MethodExpect("m1", new RefType("java.lang.Integer",-1)); - Vector param = new Vector(); + Menge param = new Menge(); param.add(new RefType("java.lang.Integer",-1)); m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithBoundedGenerics.TESTEDCLASSNAME,param,-1))); a.addMethod(m1); MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - Vector testerParams1 = new Vector(); + Menge testerParams1 = new Menge(); testerParams1.add(new RefType("java.lang.Double",-1)); - Vector testerParams2 = new Vector(); + Menge testerParams2 = new Menge(); testerParams2.add(new SuperWildcardType(-1,new RefType("java.lang.Double",-1))); - Vector testerParams3 = new Vector(); + Menge testerParams3 = new Menge(); testerParams3.add(new ExtendsWildcardType(-1,new RefType("java.lang.Double",-1))); VarExpect x = new VarExpect("x",new RefType("TestSimpleClassesWithBoundedGenerics",testerParams1,-1)); x.addExpectedType(new RefType("TestSimpleClassesWithBoundedGenerics",testerParams2,-1)); diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java index 4f33ead6..68036d57 100755 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java +++ b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -46,7 +46,7 @@ public class TestSimpleClassesWithBoundedGenericsNegative extends AbstractInfere testSimpleClassesWithBoundedGenericsNegative.addMethod(m); MethodExpect m1 = new MethodExpect("m1", new RefType("java.lang.String",-1)); - Vector param = new Vector(); + Menge param = new Menge(); param.add(new RefType("java.lang.String",-1)); m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithBoundedGenericsNegative.TESTEDCLASSNAME,param,-1))); a.addMethod(m1); diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java b/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java index c422e82b..7dfed4f9 100755 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java +++ b/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -45,7 +45,7 @@ public class TestSimpleClassesWithGenerics extends AbstractInferenceTest{ testSimpleClassesWithGenerics.addMethod(m); MethodExpect m1 = new MethodExpect("method", new RefType("java.lang.Integer",-1)); - Vector param = new Vector(); + Menge param = new Menge(); param.add(new RefType("java.lang.Integer",-1)); m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithGenerics.TESTEDCLASSNAME,param,-1))); a.addMethod(m1); diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java b/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java index 80e5dfd5..2c00eae0 100755 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java +++ b/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java @@ -1,6 +1,6 @@ package mycompiler.test.generics; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -45,7 +45,7 @@ public class TestSimpleClassesWithGenericsNegative extends AbstractInferenceTest testSimpleClassesWithGenericsNegative.addMethod(m); MethodExpect m1 = new MethodExpect("method", new RefType("java.lang.String",-1)); - Vector param = new Vector(); + Menge param = new Menge(); param.add(new RefType("java.lang.Integer",-1)); m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithGenericsNegative.TESTEDCLASSNAME,param,-1))); a.addMethod(m1); diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java index 4aa74bcf..c6f5d942 100755 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java +++ b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java @@ -34,11 +34,11 @@ public class TestInferenceOwnTypeByMethodParameter extends AbstractInferenceTest MethodExpect m = new MethodExpect("m", new RefType("void",-1)); MethodExpect m1 = new MethodExpect("m1"); - m1.setReturntypes(createVectorAllNumberTypes()); + m1.setReturntypes(createMengeAllNumberTypes()); VarExpect m1a = new VarExpect("a"); VarExpect m1b = new VarExpect("b"); - m1a.setExpectedType(createVectorAllNumberTypes()); - m1b.setExpectedType(createVectorAllNumberTypes()); + m1a.setExpectedType(createMengeAllNumberTypes()); + m1b.setExpectedType(createMengeAllNumberTypes()); m1.addParameter(m1a); m1.addParameter(m1b); diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav index 9317cd98..7be9e282 100755 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav +++ b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav @@ -1,11 +1,11 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.ArrayList; public class TestInferenceStdTypeByReturnType { public void m1(a) { b; - b= new Vector(); + b= new Menge(); a = b.size(); } diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java index 5252b1f2..73368266 100755 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java +++ b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java @@ -1,6 +1,6 @@ package mycompiler.test.inferenceByCharacteristic; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -46,25 +46,25 @@ public class TestInferenceStdTypeByReturnType extends AbstractInferenceTest { //Vars VarExpect m1B= new VarExpect("b"); - Vector paramsm1B1 = new Vector(); + Menge paramsm1B1 = new Menge(); paramsm1B1.add(new RefType("java.lang.String",-1)); - m1B.addExpectedType(new RefType("java.util.Vector",paramsm1B1,-1)); - Vector paramsm1B2 = new Vector(); + m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B1,-1)); + Menge paramsm1B2 = new Menge(); paramsm1B2.add(new ExtendsWildcardType(-1,new RefType("java.lang.String",-1))); - m1B.addExpectedType(new RefType("java.util.Vector",paramsm1B2,-1)); - Vector paramsm1B3 = new Vector(); + m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B2,-1)); + Menge paramsm1B3 = new Menge(); paramsm1B3.add(new SuperWildcardType(-1,new RefType("java.lang.String",-1))); - m1B.addExpectedType(new RefType("java.util.Vector",paramsm1B3,-1)); + m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B3,-1)); m1.getBlock().addLocalVar(m1B); VarExpect m2B= new VarExpect("b"); - Vector paramsm2B1 = new Vector(); + Menge paramsm2B1 = new Menge(); paramsm2B1.add(new RefType("java.lang.String",-1)); m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B1,-1)); - Vector paramsm2B2 = new Vector(); + Menge paramsm2B2 = new Menge(); paramsm2B2.add(new ExtendsWildcardType(-1,new RefType("java.lang.String",-1))); m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B2,-1)); - Vector paramsm2B3 = new Vector(); + Menge paramsm2B3 = new Menge(); paramsm2B3.add(new SuperWildcardType(-1,new RefType("java.lang.String",-1))); m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B3,-1)); m2.getBlock().addLocalVar(m2B); diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav index cc8b080f..50bae3e0 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav @@ -5,9 +5,9 @@ class OverloadingGenericNotSameHierarchy{ void foo(){} void foo(T n){} - void foo(T v){} + void foo(T v){} /* - void foo(T n){} + void foo(T n){} */ } \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java index 7ddcf6b3..7c721a48 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java @@ -5,7 +5,7 @@ package mycompiler.test.javaConcepts.overloading; * * */ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -33,15 +33,15 @@ public class OverloadingGenericNotSameHierarchy extends AbstractInferenceTest { MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Vector bounds = new Vector(); + Menge bounds = new Menge(); bounds.add(new RefType("Number",-1)); BoundedGenericTypeVar boundedGenericT = new BoundedGenericTypeVar("T",bounds,-1); m1.addGeneric(boundedGenericT); m1.addParameter(new VarExpect("n",boundedGenericT)); MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Vector bounds2 = new Vector(); - bounds2.add(new RefType("java.util.Vector",-1)); + Menge bounds2 = new Menge(); + bounds2.add(new RefType("de.dhbwstuttgart.typeinference.Menge",-1)); BoundedGenericTypeVar boundedGenericT2 = new BoundedGenericTypeVar("T",bounds2,-1); m2.addGeneric(boundedGenericT2); m2.addParameter(new VarExpect("v",boundedGenericT2)); diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java index 7ae0f93f..fc4b6996 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java @@ -5,7 +5,7 @@ package mycompiler.test.javaConcepts.overloading; * * */ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -31,21 +31,21 @@ public class OverloadingGenericSameHierarchy extends AbstractInferenceTest { //methods MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - Vector bounds0 = new Vector(); + Menge bounds0 = new Menge(); bounds0.add(new RefType("Object",-1)); BoundedGenericTypeVar boundedGenericT0 = new BoundedGenericTypeVar("T",bounds0,-1); m0.addGeneric(boundedGenericT0); m0.addParameter(new VarExpect("o",boundedGenericT0)); MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - Vector bounds1 = new Vector(); + Menge bounds1 = new Menge(); bounds1.add(new RefType("Number",-1)); BoundedGenericTypeVar boundedGenericT1 = new BoundedGenericTypeVar("T",bounds1,-1); m1.addGeneric(boundedGenericT1); m1.addParameter(new VarExpect("n",boundedGenericT1)); MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),2); - Vector bounds2 = new Vector(); + Menge bounds2 = new Menge(); bounds2.add(new RefType("java.lang.Integer",-1)); BoundedGenericTypeVar boundedGenericT2 = new BoundedGenericTypeVar("T",bounds2,-1); m2.addGeneric(boundedGenericT2); diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav index cc0ff01a..b2dec67e 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav @@ -2,7 +2,7 @@ Diese Klasse ueberlaedt eine Methode durch Typinferenz erkannte generische typverschiedenen Tarametern (nicht gleiche Vererbungshierarchie) */ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class A { @@ -14,6 +14,6 @@ class OverloadingGenericTypeInferenceNotSameHierarchy{ i = new A(); } foo(s){ - s = new Vector(); + s = new Menge(); } } \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java index 28b2fa37..f924c18a 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java @@ -5,7 +5,7 @@ package mycompiler.test.javaConcepts.overloading; * * */ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -41,11 +41,11 @@ public class OverloadingGenericTypeInferenceNotSameHierarchy extends AbstractInf // m0.addParameter(new VarExpect("o",boundedGenericT0)); MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Vector bounds1a = new Vector(); + Menge bounds1a = new Menge(); bounds1a.add(new RefType("java.lang.Double",-1)); - Vector bounds1b = new Vector(); + Menge bounds1b = new Menge(); bounds1b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Double",-1))); - Vector bounds1c = new Vector(); + Menge bounds1c = new Menge(); bounds1c.add(new SuperWildcardType(-1,new RefType("java.lang.Double",-1))); VarExpect i = new VarExpect("i", new RefType("A",bounds1a,-1)); i.addExpectedType(new RefType("A",bounds1b,-1)); @@ -53,15 +53,15 @@ public class OverloadingGenericTypeInferenceNotSameHierarchy extends AbstractInf m1.addParameter(i); MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Vector bounds2a = new Vector(); + Menge bounds2a = new Menge(); bounds2a.add(new RefType("java.lang.Integer",-1)); - Vector bounds2b = new Vector(); + Menge bounds2b = new Menge(); bounds2b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector bounds2c = new Vector(); + Menge bounds2c = new Menge(); bounds2c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - VarExpect s = new VarExpect("s",new RefType("java.util.Vector",bounds2a,-1)); - s.addExpectedType(new RefType("java.util.Vector",bounds2b,-1)); - s.addExpectedType(new RefType("java.util.Vector",bounds2c,-1)); + VarExpect s = new VarExpect("s",new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2a,-1)); + s.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2b,-1)); + s.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2c,-1)); m2.addParameter(s); diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java index 7748b450..e2549b75 100755 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java +++ b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java @@ -1,6 +1,6 @@ package mycompiler.test.javaConcepts.overloading; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; @@ -38,11 +38,11 @@ public class OverloadingGenericTypeInferenceSameHierarchy extends AbstractInfere //methods MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Vector bounds1a = new Vector(); + Menge bounds1a = new Menge(); bounds1a.add(new RefType("java.lang.Integer",-1)); - Vector bounds1b = new Vector(); + Menge bounds1b = new Menge(); bounds1b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector bounds1c = new Vector(); + Menge bounds1c = new Menge(); bounds1c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); VarExpect i = new VarExpect("i", new RefType("B",bounds1a,-1)); i.addExpectedType(new RefType("B",bounds1b,-1)); @@ -50,11 +50,11 @@ public class OverloadingGenericTypeInferenceSameHierarchy extends AbstractInfere m1.addParameter(i); MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Vector bounds2a = new Vector(); + Menge bounds2a = new Menge(); bounds2a.add(new RefType("java.lang.Integer",-1)); - Vector bounds2b = new Vector(); + Menge bounds2b = new Menge(); bounds2b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector bounds2c = new Vector(); + Menge bounds2c = new Menge(); bounds2c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); VarExpect n = new VarExpect("n", new RefType("B",bounds2a,-1)); n.addExpectedType(new RefType("B",bounds2b,-1)); @@ -64,11 +64,11 @@ public class OverloadingGenericTypeInferenceSameHierarchy extends AbstractInfere n.addExpectedType(new RefType("C",bounds2c,-1)); m2.addParameter(n); MethodExpect m3 = new MethodExpect("foo",new RefType("void",-1),2); - Vector bounds3a = new Vector(); + Menge bounds3a = new Menge(); bounds3a.add(new RefType("java.lang.Integer",-1)); - Vector bounds3b = new Vector(); + Menge bounds3b = new Menge(); bounds3b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Vector bounds3c = new Vector(); + Menge bounds3c = new Menge(); bounds3c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); VarExpect o = new VarExpect("o", new RefType("B",bounds3a,-1)); o.addExpectedType(new RefType("B",bounds3b,-1)); diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java b/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java index 14531571..441599e6 100755 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java +++ b/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java @@ -1,5 +1,5 @@ package mycompiler.test.javaConcepts.staticAccess; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java index b0c9fa2f..aa4542be 100755 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java +++ b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java @@ -1,5 +1,5 @@ package mycompiler.test.javaConcepts.staticAccess; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/test/mycompiler/test/lambda/BasicAssumptions.jav b/test/mycompiler/test/lambda/BasicAssumptions.jav index 16726c82..91a38c9c 100755 --- a/test/mycompiler/test/lambda/BasicAssumptions.jav +++ b/test/mycompiler/test/lambda/BasicAssumptions.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class BasicAssumptionsTest{ diff --git a/test/mycompiler/test/lambda/ConstructorTest.java b/test/mycompiler/test/lambda/ConstructorTest.java index c26e204a..1ba00518 100755 --- a/test/mycompiler/test/lambda/ConstructorTest.java +++ b/test/mycompiler/test/lambda/ConstructorTest.java @@ -3,7 +3,7 @@ package mycompiler.test.lambda; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.mytest.LambdaTest; @@ -19,7 +19,7 @@ public class ConstructorTest { executeTest(); } - private static final Vector exampleJavFiles = new Vector(); + private static final Menge exampleJavFiles = new Menge(); static{ exampleJavFiles.add("ConstructorTestFile1.jav"); exampleJavFiles.add("ConstructorTestFile2.jav"); @@ -28,7 +28,7 @@ public class ConstructorTest { public void executeTest(){ LambdaTest tester = new LambdaTest(exampleJavFiles); - Vector results = tester.runTest(); + Menge results = tester.runTest(); int anzahlGeparsterKlassen = 0; for(TypeinferenceResultSet res : results){ de.dhbwstuttgart.syntaxtree.Class cl = res.getInterferedClass(); diff --git a/test/mycompiler/test/lambda/GenericParameterTest.jav b/test/mycompiler/test/lambda/GenericParameterTest.jav index 820e7b33..2655fe56 100644 --- a/test/mycompiler/test/lambda/GenericParameterTest.jav +++ b/test/mycompiler/test/lambda/GenericParameterTest.jav @@ -1,5 +1,5 @@ class GenericVarTest{ - Vector test; + Menge test; method(){ test = test; return 1; diff --git a/test/mycompiler/test/lambda/GenericVarTest.java b/test/mycompiler/test/lambda/GenericVarTest.java index 3999f8aa..9f546dad 100755 --- a/test/mycompiler/test/lambda/GenericVarTest.java +++ b/test/mycompiler/test/lambda/GenericVarTest.java @@ -2,7 +2,7 @@ package mycompiler.test.lambda; import static org.junit.Assert.*; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.mytest.LambdaTest; diff --git a/test/mycompiler/test/lambda/OverloadingTest.java b/test/mycompiler/test/lambda/OverloadingTest.java index 43fca0ac..869c3198 100755 --- a/test/mycompiler/test/lambda/OverloadingTest.java +++ b/test/mycompiler/test/lambda/OverloadingTest.java @@ -2,7 +2,7 @@ package mycompiler.test.lambda; import static org.junit.Assert.*; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.mytest.LambdaTest; @@ -22,7 +22,7 @@ public class OverloadingTest { public void executeTest(){ LambdaTest tester = new LambdaTest(exampleJavFile); - Vector result1 = tester.runTest(); + Menge result1 = tester.runTest(); } } diff --git a/test/mycompiler/test/lambda/ParseMultipleFilesTest.java b/test/mycompiler/test/lambda/ParseMultipleFilesTest.java index d2c05437..47a10a8a 100755 --- a/test/mycompiler/test/lambda/ParseMultipleFilesTest.java +++ b/test/mycompiler/test/lambda/ParseMultipleFilesTest.java @@ -1,6 +1,6 @@ package mycompiler.test.lambda; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import static org.junit.Assert.*; import mycompiler.mytest.LambdaTest; @@ -17,7 +17,7 @@ public class ParseMultipleFilesTest { executeTest(); } - private static final Vector exampleJavFiles = new Vector(); + private static final Menge exampleJavFiles = new Menge(); static{ exampleJavFiles.add("parseMultipleFilesFile1.jav"); exampleJavFiles.add("parseMultipleFilesFile2.jav"); @@ -26,7 +26,7 @@ public class ParseMultipleFilesTest { public void executeTest(){ LambdaTest tester = new LambdaTest(exampleJavFiles); - Vector results = tester.runTest(); + Menge results = tester.runTest(); int anzahlGeparsterKlassen = 0; for(TypeinferenceResultSet res : results){ de.dhbwstuttgart.syntaxtree.Class cl = res.getInterferedClass(); diff --git a/test/mycompiler/test/lambda/TestAssign.java b/test/mycompiler/test/lambda/TestAssign.java index 149a9213..f8aace82 100755 --- a/test/mycompiler/test/lambda/TestAssign.java +++ b/test/mycompiler/test/lambda/TestAssign.java @@ -1,7 +1,7 @@ package mycompiler.test.lambda; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; import mycompiler.mytest.LambdaTest; diff --git a/test/mycompiler/test/lambda/TestFunN.jav b/test/mycompiler/test/lambda/TestFunN.jav index b810f636..6488fdf7 100755 --- a/test/mycompiler/test/lambda/TestFunN.jav +++ b/test/mycompiler/test/lambda/TestFunN.jav @@ -1,2 +1,2 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { op = (m) -> (f) -> f.apply(this, m); } \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestWhile.java b/test/mycompiler/test/lambda/TestWhile.java index 974b14bd..1c193d6c 100755 --- a/test/mycompiler/test/lambda/TestWhile.java +++ b/test/mycompiler/test/lambda/TestWhile.java @@ -3,7 +3,7 @@ package mycompiler.test.lambda; import static org.junit.Assert.*; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.mytest.LambdaTest; import mycompiler.mytypereconstruction.set.CTypeAssumptionSet; diff --git a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java index 6ebc1e45..55da86ac 100755 --- a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java +++ b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java @@ -1,7 +1,7 @@ package mycompiler.test.notUsedAnymore; import java.util.HashMap; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; @@ -16,7 +16,7 @@ import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption; public abstract class AbstractInferenceTestExtendedOLD extends AbstractInferenceTestOLD_2 { protected HashMap expectedMethodTypeAssumptions = null; - protected HashMap> expectedMethodsTypeAssumptions = null; + protected HashMap> expectedMethodsTypeAssumptions = null; protected AbstractInferenceTestExtendedOLD(String name, String javFilename) { super(name,javFilename); @@ -34,7 +34,7 @@ public abstract class AbstractInferenceTestExtendedOLD extends AbstractInference return null; } - protected HashMap> getExpectedMethodsTypeAssumptions() { + protected HashMap> getExpectedMethodsTypeAssumptions() { return null; } @@ -46,11 +46,11 @@ public abstract class AbstractInferenceTestExtendedOLD extends AbstractInference runTest(); } - protected void checkForFoundClass(Vector foundClasses) { + protected void checkForFoundClass(Menge foundClasses) { AbstractInferenceTestExtendedOLD.assertTrue(foundClasses.contains(this.testedClasses.elementAt(0))); } - protected void checkForFoundGenerics(Vector foundGenerics) { + protected void checkForFoundGenerics(Menge foundGenerics) { } @@ -69,7 +69,7 @@ public abstract class AbstractInferenceTestExtendedOLD extends AbstractInference //number parameters // AbstractInferenceTestExtended.assertTrue(expected.getParaCount()==assumpt.getParaCount()); /* for (int i=0;i param = expected.getParaAssumptions(); + Menge param = expected.getParaAssumptions(); AbstractInferenceTestExtended.assertTrue(expected.getParaAssumptions().contains(param.get(i))); } */ @@ -84,15 +84,15 @@ public abstract class AbstractInferenceTestExtendedOLD extends AbstractInference } - protected void checkForValidMethodTypes(HashMap> assumptions) { + protected void checkForValidMethodTypes(HashMap> assumptions) { AbstractInferenceTestExtendedOLD.assertTrue(expectedMethodsTypeAssumptions.size()==assumptions.size()); AbstractInferenceTestExtendedOLD.assertTrue(expectedMethodsTypeAssumptions.keySet().equals(assumptions.keySet())); //call test for every method for(String method : assumptions.keySet()) { - Vector currentMethodExpectation = expectedMethodsTypeAssumptions.get(method); - Vector currentMethodAssumption = assumptions.get(method); + Menge currentMethodExpectation = expectedMethodsTypeAssumptions.get(method); + Menge currentMethodAssumption = assumptions.get(method); //verify amount of assumption for method AbstractInferenceTestExtendedOLD.assertTrue(currentMethodExpectation.size()==currentMethodAssumption.size()); @@ -104,16 +104,16 @@ public abstract class AbstractInferenceTestExtendedOLD extends AbstractInference //currentMethodAssumption.get(i).equalsAssumption(assumption) //number parameters AbstractInferenceTestExtendedOLD.assertTrue(currentMethodExpectation.elementAt(i).getParaCount()==currentMethodAssumption.elementAt(i).getParaCount()); - Vector paramExpected = currentMethodExpectation.elementAt(i).getParaAssumptions(); - Vector paramAssumpt = currentMethodAssumption.elementAt(i).getParaAssumptions(); + Menge paramExpected = currentMethodExpectation.elementAt(i).getParaAssumptions(); + Menge paramAssumpt = currentMethodAssumption.elementAt(i).getParaAssumptions(); //check for parameter assumptions for (int j=0;j genericsExpected = currentMethodExpectation.get(i).getGenericMethodParameters(); - Vector genericsAssumpt = currentMethodAssumption.get(i).getGenericMethodParameters(); + Menge genericsExpected = currentMethodExpectation.get(i).getGenericMethodParameters(); + Menge genericsAssumpt = currentMethodAssumption.get(i).getGenericMethodParameters(); //check amount AbstractInferenceTestExtendedOLD.assertTrue(genericsExpected.size()==genericsAssumpt.size()); for (int j=0;j assumption,Vector expected) { + protected boolean isEqualMethodTypeAssumption(Menge assumption,Menge expected) { //boolean ret=false; for (int i=0;i testedClasses = null; + protected Menge testedClasses = null; protected MyCompilerAPI compiler = MyCompiler.getAPI(); protected AbstractInferenceTestOLD_2(String name, String javFilename) { @@ -50,7 +50,7 @@ public abstract class AbstractInferenceTestOLD_2 extends TestCase{ throws Exception { // Typ-Rekonstruktion - Vector resultSet = compiler.typeReconstruction(); + Menge resultSet = compiler.typeReconstruction(); // Keine Typ-Rekonstruktion erforderlich if (resultSet == null || resultSet.size() == 0) throw new Exception("Typrekonstruktion nicht durchfuehrbar!"); @@ -83,7 +83,7 @@ public abstract class AbstractInferenceTestOLD_2 extends TestCase{ * test methods shall be implemented as needed in test class, * @param resultSet result from typeReconstruction() */ -// protected void checkResults(Vector resultSet, String testedClass) { +// protected void checkResults(Menge resultSet, String testedClass) { // // //check valid - implementation //System.out.println("Länge ResultSet: " + resultSet.size()); @@ -94,15 +94,15 @@ public abstract class AbstractInferenceTestOLD_2 extends TestCase{ // checkForFoundClass(resultSet.get(resIndex).getClassNameList()); // //--------- // //Generics: -// //---------Vector genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); +// //---------Menge genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); // checkForFoundGenerics(resultSet.get(resIndex).getGenericsTable().get(testedClass)); // //---------- // // Methods: // //---------- -// HashMap> assumptions = new HashMap>(); +// HashMap> assumptions = new HashMap>(); // Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); // while (iter1.hasNext()) { -// Vector vecAssumpt = iter1.next().getMethodTypeAssumptions(); +// Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); // //for (int i=0; i()); +// assumptions.put(assumpt.getIdentifier(), new Menge()); // } // // assumptions.get(assumpt.getIdentifier()).add(assumpt); @@ -155,7 +155,7 @@ public abstract class AbstractInferenceTestOLD_2 extends TestCase{ // } // } // } - protected void checkResults(Vector resultSet, String testedClass) { + protected void checkResults(Menge resultSet, String testedClass) { //check valid - implementation System.out.println("Länge ResultSet: " + resultSet.size()); @@ -166,15 +166,15 @@ System.out.println("L // checkForFoundClass(resultSet.get(resIndex).getClassNameList()); //--------- //Generics: - //---------Vector genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); + //---------Menge genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); // checkForFoundGenerics(resultSet.get(resIndex).getGenericsTable().get(testedClass)); //---------- // Methods: //---------- - HashMap> assumptions = new HashMap>(); + HashMap> assumptions = new HashMap>(); Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); while (iter1.hasNext()) { - Vector vecAssumpt = iter1.next().getMethodTypeAssumptions(); + Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); //for (int i=0; i()); + assumptions.put(assumpt.getIdentifier(), new Menge()); } assumptions.get(assumpt.getIdentifier()).add(assumpt); @@ -229,14 +229,14 @@ System.out.println("L } /** - * @return returns a vector of class names of tested file + * @return returns a Menge of class names of tested file */ - protected abstract Vector getTestedClasses(); - protected void checkForFoundClass(Vector foundClasses) {} - protected void checkForFoundGenerics(Vector foundGenerics) {} + protected abstract Menge getTestedClasses(); + protected void checkForFoundClass(Menge foundClasses) {} + protected void checkForFoundGenerics(Menge foundGenerics) {} @Deprecated protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) {} - protected void checkForValidMethodTypes(HashMap> assumptions) {} + protected void checkForValidMethodTypes(HashMap> assumptions) {} protected void checkForValidLocalVarTypes(CLocalVarTypeAssumption assumpt) {} protected void checkForValidMemberTypes(CInstVarTypeAssumption assumpt) {} protected void setUp() {} diff --git a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java index 72876e78..c008e6cb 100755 --- a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java +++ b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java @@ -3,7 +3,7 @@ package mycompiler.test.notUsedAnymore; import java.io.File; import java.util.HashMap; import java.util.Iterator; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; @@ -92,7 +92,7 @@ public abstract class AbstractInferenceTestOld extends TestCase { throws Exception { // Typ-Rekonstruktion - Vector resultSet = compiler.typeReconstruction(); + Menge resultSet = compiler.typeReconstruction(); // Keine Typ-Rekonstruktion erforderlich if (resultSet == null || resultSet.size() == 0) throw new Exception("Type reconstruction could not be done!"); @@ -126,7 +126,7 @@ public abstract class AbstractInferenceTestOld extends TestCase { * @param expect */ - protected void checkResults(Vector resultSet, Expectation expect) { + protected void checkResults(Menge resultSet, Expectation expect) { //iterates thru all available assumption-sets for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { @@ -138,7 +138,7 @@ public abstract class AbstractInferenceTestOld extends TestCase { //iterates through all found methods Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); while (iter1.hasNext()) { - Vector vecAssumpt = iter1.next().getMethodTypeAssumptions(); + Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); //for (int i=0; i assumpt, Vector expect) { + protected void checkFoundGenerics(Menge assumpt, Menge expect) { AbstractInferenceTest.assertTrue("amount of generic variables expected != assumed",((assumpt==null || assumpt.size()==0) && (expect==null || expect.size()==0)) || assumpt.size()==expect.size()); for (GenericTypeVar typ : assumpt) { //System.out.println("Generics: " + typ.get_Name() + ((BoundedGenericTypeVar)typ).getBounds() + ", " + expect.indexOf(typ)); @@ -268,7 +268,7 @@ System.out.println(" here " + t + " -- " + e); boolean ret=false; if (expect.getBlockID().equals(assumpt.getBlockId())) { AbstractInferenceTest.assertTrue("Variable "+assumpt.getIdentifier() + " is not defined in expectation",expect.getLocalVar().containsKey(assumpt.getIdentifier())); - Vector expTypes = expect.getLocalVar().get(assumpt.getIdentifier()).getExpectedType(); + Menge expTypes = expect.getLocalVar().get(assumpt.getIdentifier()).getExpectedType(); //check if a specific type for this variable is expected or whether it should be a typeplaceholder if (!expTypes.isEmpty()) { AbstractInferenceTest.assertTrue("Type " + assumpt.getAssumedType() + " for variable " + assumpt.getIdentifier() + " is not found in expectations", expTypes.contains(assumpt.getAssumedType())); @@ -298,7 +298,7 @@ System.out.println(" here " + t + " -- " + e); */ protected void checkParameters(CMethodTypeAssumption methodAssumpt, MethodExpect methodExpect) { - Vector assumpt = methodAssumpt.getParaAssumptions(); + Menge assumpt = methodAssumpt.getParaAssumptions(); HashMap expect = methodExpect.getParameter(); //amount of parameter AbstractInferenceTest.assertEquals("amount of parameters not equal!", assumpt.size(),expect.size()); @@ -306,7 +306,7 @@ System.out.println(" here " + t + " -- " + e); for (CParaTypeAssumption paraAssumpt : assumpt) { //check if variable is expected AbstractInferenceTest.assertTrue("variable " + paraAssumpt.getIdentifier() + " is not expected!", expect.containsKey(paraAssumpt.getIdentifier())); - Vector expectedTypes = expect.get(paraAssumpt.getIdentifier()).getExpectedType(); + Menge expectedTypes = expect.get(paraAssumpt.getIdentifier()).getExpectedType(); //check if variable's type is expected //case of undefined type (generic variable), add generic to generic list diff --git a/test/mycompiler/test/notUsedAnymore/IResultValidator.java b/test/mycompiler/test/notUsedAnymore/IResultValidator.java index 55f28f0c..ce4ce644 100755 --- a/test/mycompiler/test/notUsedAnymore/IResultValidator.java +++ b/test/mycompiler/test/notUsedAnymore/IResultValidator.java @@ -1,11 +1,11 @@ package mycompiler.test.notUsedAnymore; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; public interface IResultValidator { - public void checkResults(Vector resultSet); + public void checkResults(Menge resultSet); } diff --git a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java index a3d26b7e..f95cb61d 100755 --- a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java +++ b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java @@ -1,6 +1,6 @@ package mycompiler.test.notUsedAnymore; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption; @@ -17,8 +17,8 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { } - protected Vector getTestedClasses(){ - Vector testedclasses = new Vector(); + protected Menge getTestedClasses(){ + Menge testedclasses = new Menge(); testedclasses.add(TestAbstractInferenceTest.TESTEDCLASSNAME); return testedclasses; } @@ -27,7 +27,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { runTest(); } - protected void checkForValidClass(Vector testedClass) { + protected void checkForValidClass(Menge testedClass) { } protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) { @@ -42,13 +42,13 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { System.out.println("Member-Variable "+assumpt.getIdentifier()+", Typ:" +assumpt.getAssumedType().getName()); } -// public void checkResults(Vector resultSet) { +// public void checkResults(Menge resultSet) { // //check valid - implementation //System.out.println("checkResults called, Länge ResultSet: " + resultSet.size()); // //for (int resIndex=0; resIndex < resultSet.size(); ++resIndex) { // for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { // -// Vector genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); +// Menge genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); // System.out.println("Generics: " + genVec); // // Methoden: // // --------- @@ -72,7 +72,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // { // DummyMethodname=assumpt.getIdentifier()+new Integer(assumpt.getOverloadedMethodID()).toString(); // } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetVector(),assumpt.getAssumedType().getOffset()); +// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetMenge(),assumpt.getAssumedType().getOffset()); // //alleMethodenOffsets.addElement(assumpt.getOffset()); // System.out.println("Method "+assumpt.getIdentifier()+ ", &return:" + assumpt.getAssumedType().getName()); // @@ -81,7 +81,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // // assumpt.getLineNumber()); // // // Parameter hinzuf�gen -// Vector vec = assumpt.getParaAssumptions(); +// Menge vec = assumpt.getParaAssumptions(); // for (int j=0; j genTypVec = assumpt.getGenericMethodParameters(); +// Menge genTypVec = assumpt.getGenericMethodParameters(); // // method.setGenericMethodParameters(genTypVec); // for(GenericTypeVar GTV : genTypVec) // { @@ -136,21 +136,21 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // { // DummyMethodname=assu.getMethodName()+new Integer(assu.getMethodOverloadedID()).toString(); // } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector(),assu.getOffset()); +// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge(),assu.getOffset()); // String localVarName = assu.getIdentifier()+ "(" + assu.getBlockId() + ")"; // // // if (assu.isPlaceholderVariable()) { // // if (resIndex==0) { -// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // System.out.println("assu is TypePlaceholder:"); // } // } // else { // //method.addLocalVar(localVarName, // // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // } // } // @@ -166,20 +166,20 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // System.out.println("Member-Variable "+assu.getIdentifier()+", Typ:" +assu.getAssumedType().getName()); // //jClass.addMember(assu.getIdentifier(), // // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // } // } // } // } // } -//public void checkResults(Vector resultSet) { +//public void checkResults(Menge resultSet) { // //check valid - implementation //System.out.println("checkResults called, Länge ResultSet: " + resultSet.size()); // //for (int resIndex=0; resIndex < resultSet.size(); ++resIndex) { // for (int resIndex=0; resIndex < 1; resIndex++) { // -// Vector genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); +// Menge genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); // // // Methoden: // // --------- @@ -204,7 +204,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // { // DummyMethodname=assumpt.getIdentifier()+new Integer(assumpt.getOverloadedMethodID()).toString(); // } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetVector(),assumpt.getAssumedType().getOffset()); +// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetMenge(),assumpt.getAssumedType().getOffset()); // //alleMethodenOffsets.addElement(assumpt.getOffset()); // System.out.println("Method "+assumpt.getIdentifier()+ ", &return:" + assumpt.getAssumedType().getName()); // @@ -213,7 +213,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // // assumpt.getLineNumber()); // // // Parameter hinzuf�gen -// Vector vec = assumpt.getParaAssumptions(); +// Menge vec = assumpt.getParaAssumptions(); // for (int j=0; j genTypVec = assumpt.getGenericMethodParameters(); +// Menge genTypVec = assumpt.getGenericMethodParameters(); // // method.setGenericMethodParameters(genTypVec); // for(GenericTypeVar GTV : genTypVec) // { @@ -268,21 +268,21 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // { // DummyMethodname=assu.getMethodName()+new Integer(assu.getMethodOverloadedID()).toString(); // } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector(),assu.getOffset()); +// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge(),assu.getOffset()); // String localVarName = assu.getIdentifier()+ "(" + assu.getBlockId() + ")"; // // // if (assu.isPlaceholderVariable()) { // // if (resIndex==0) { -// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // System.out.println("assu is TypePlaceholder:"); // } // } // else { // //method.addLocalVar(localVarName, // // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // } // // } @@ -297,7 +297,7 @@ public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { // System.out.println("Member-Variable "+assu.getIdentifier()+", Typ:" +assu.getAssumedType().getName()); // //jClass.addMember(assu.getIdentifier(), // // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetVector()); +// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); // } // } // } diff --git a/test/mycompiler/test/notUsedAnymore/TestGenerics.jav b/test/mycompiler/test/notUsedAnymore/TestGenerics.jav index 337a1616..fa01ce32 100755 --- a/test/mycompiler/test/notUsedAnymore/TestGenerics.jav +++ b/test/mycompiler/test/notUsedAnymore/TestGenerics.jav @@ -2,7 +2,7 @@ public class TestGenerics { - > void foo(T n) {} + > void foo(T n) {} void foo(T i) {} } \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestGenerics.java b/test/mycompiler/test/notUsedAnymore/TestGenerics.java index 77f37f8d..2e2d5d00 100755 --- a/test/mycompiler/test/notUsedAnymore/TestGenerics.java +++ b/test/mycompiler/test/notUsedAnymore/TestGenerics.java @@ -1,6 +1,6 @@ package mycompiler.test.notUsedAnymore; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -36,17 +36,17 @@ public class TestGenerics extends AbstractInferenceTest { //Methods MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - Vector bounds1 = new Vector(); - Vector parameter = new Vector(); + Menge bounds1 = new Menge(); + Menge parameter = new Menge(); parameter.add(new RefType("java.lang.Integer",-1)); - RefType test = new RefType("Vector",parameter,-1); + RefType test = new RefType("Menge",parameter,-1); bounds1.add(test); BoundedGenericTypeVar generic1 = new BoundedGenericTypeVar("T",bounds1,-1); m0.addGeneric(generic1); m0.addParameter(new VarExpect("n",generic1)); MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - Vector bounds2 = new Vector(); + Menge bounds2 = new Menge(); bounds2.add(new RefType("Number",-1)); BoundedGenericTypeVar generic2 = new BoundedGenericTypeVar("T",bounds2,-1); m1.addGeneric(generic2); diff --git a/test/mycompiler/test/operators/TestOperatorArithmetic.java b/test/mycompiler/test/operators/TestOperatorArithmetic.java index 0a2aa597..1e0cc08c 100755 --- a/test/mycompiler/test/operators/TestOperatorArithmetic.java +++ b/test/mycompiler/test/operators/TestOperatorArithmetic.java @@ -1,5 +1,5 @@ package mycompiler.test.operators; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -34,11 +34,11 @@ public class TestOperatorArithmetic extends AbstractInferenceTest { //Methods VarExpect m1_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m1_i.setExpectedType(createVectorAllNumberTypes()); + m1_i.setExpectedType(createMengeAllNumberTypes()); VarExpect m1_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createVectorAllNumberTypes()); + m1_j.setExpectedType(createMengeAllNumberTypes()); MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1),0); - m1.setReturntypes(createVectorAllNumberTypes()); + m1.setReturntypes(createMengeAllNumberTypes()); m1.addParameter(m1_i); m1.addParameter(m1_j); @@ -56,11 +56,11 @@ public class TestOperatorArithmetic extends AbstractInferenceTest { VarExpect m5_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m5_i.setExpectedType(createVectorAllNumberTypes()); + m5_i.setExpectedType(createMengeAllNumberTypes()); VarExpect m5_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m5_j.setExpectedType(createVectorAllNumberTypes()); + m5_j.setExpectedType(createMengeAllNumberTypes()); MethodExpect m5 = new MethodExpect("m5",new RefType("java.lang.Integer",-1),0); - m5.setReturntypes(createVectorAllNumberTypes()); + m5.setReturntypes(createMengeAllNumberTypes()); m5.addParameter(m5_i); m5.addParameter(m5_j); @@ -68,29 +68,29 @@ public class TestOperatorArithmetic extends AbstractInferenceTest { m6.addParameter(new VarExpect("i", new RefType("java.lang.Integer",-1))); VarExpect m7_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m7_i.setExpectedType(createVectorAllNumberTypes()); + m7_i.setExpectedType(createMengeAllNumberTypes()); VarExpect m7_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m7_j.setExpectedType(createVectorAllNumberTypes()); + m7_j.setExpectedType(createMengeAllNumberTypes()); MethodExpect m7 = new MethodExpect("m7",new RefType("java.lang.Integer",-1),0); - m7.setReturntypes(createVectorAllNumberTypes()); + m7.setReturntypes(createMengeAllNumberTypes()); m7.addParameter(m7_i); m7.addParameter(m7_j); VarExpect m8_i = new VarExpect("i",new RefType("java.lang.Float",-1)); - m8_i.setExpectedType(createVectorAllNumberTypes()); + m8_i.setExpectedType(createMengeAllNumberTypes()); VarExpect m8_j = new VarExpect("j",new RefType("java.lang.Float",-1)); - m8_j.setExpectedType(createVectorAllNumberTypes()); + m8_j.setExpectedType(createMengeAllNumberTypes()); MethodExpect m8 = new MethodExpect("m8",new RefType("java.lang.Float",-1),0); - m8.setReturntypes(createVectorAllNumberTypes()); + m8.setReturntypes(createMengeAllNumberTypes()); m8.addParameter(m8_i); m8.addParameter(m8_j); VarExpect m9_i = new VarExpect("i",new RefType("java.lang.Long",-1)); - m9_i.setExpectedType(createVectorAllNumberTypes()); + m9_i.setExpectedType(createMengeAllNumberTypes()); VarExpect m9_j = new VarExpect("j",new RefType("java.lang.Long",-1)); - m9_j.setExpectedType(createVectorAllNumberTypes()); + m9_j.setExpectedType(createMengeAllNumberTypes()); MethodExpect m9 = new MethodExpect("m9",new RefType("java.lang.Long",-1),0); - m9.setReturntypes(createVectorAllNumberTypes()); + m9.setReturntypes(createMengeAllNumberTypes()); m9.addParameter(m9_i); m9.addParameter(m9_j); diff --git a/test/mycompiler/test/operators/TestOperatorComparison.java b/test/mycompiler/test/operators/TestOperatorComparison.java index e8ecd727..3beda3a4 100755 --- a/test/mycompiler/test/operators/TestOperatorComparison.java +++ b/test/mycompiler/test/operators/TestOperatorComparison.java @@ -1,5 +1,5 @@ package mycompiler.test.operators; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.IntegerType; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -37,18 +37,18 @@ public class TestOperatorComparison extends AbstractInferenceTest { //Methods MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Boolean",-1)); VarExpect m1a = new VarExpect("a"); - m1a.setExpectedType(createVectorAllNumberTypes()); + m1a.setExpectedType(createMengeAllNumberTypes()); m1.addParameter(m1a); VarExpect m1b = new VarExpect("b"); - m1b.setExpectedType(createVectorAllNumberTypes()); + m1b.setExpectedType(createMengeAllNumberTypes()); m1.addParameter(m1b); MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Boolean",-1)); VarExpect m2a = new VarExpect("a"); - m2a.setExpectedType(createVectorAllNumberTypes()); + m2a.setExpectedType(createMengeAllNumberTypes()); m2.addParameter(m2a); VarExpect m2b = new VarExpect("b"); - m2b.setExpectedType(createVectorAllNumberTypes()); + m2b.setExpectedType(createMengeAllNumberTypes()); m2.addParameter(m2b); MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Boolean",-1)); @@ -72,8 +72,8 @@ public class TestOperatorComparison extends AbstractInferenceTest { return new Expectation(testOperatorComparison); } - private Vector createVectorAllDiscreteNumberTypes() { - Vector ret = new Vector(); + private Menge createMengeAllDiscreteNumberTypes() { + Menge ret = new Menge(); ret.add(new RefType("java.lang.Integer",-1)); // ret.add(new RefType("java.lang.Long",-1)); // ret.add(new RefType("java.lang.Short",-1)); diff --git a/test/mycompiler/test/operators/TestOperatorIncrement.java b/test/mycompiler/test/operators/TestOperatorIncrement.java index 0af78906..b5980ab8 100755 --- a/test/mycompiler/test/operators/TestOperatorIncrement.java +++ b/test/mycompiler/test/operators/TestOperatorIncrement.java @@ -1,5 +1,5 @@ package mycompiler.test.operators; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -34,13 +34,13 @@ public class TestOperatorIncrement extends AbstractInferenceTest { //Methods VarExpect m1_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m1_i.setExpectedType(createVectorAllDiscreteNumberTypes()); + m1_i.setExpectedType(createMengeAllDiscreteNumberTypes()); VarExpect m1_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createVectorAllDiscreteNumberTypes()); + m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); VarExpect m1_k = new VarExpect("k",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createVectorAllDiscreteNumberTypes()); + m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); VarExpect m1_l = new VarExpect("l",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createVectorAllDiscreteNumberTypes()); + m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); MethodExpect m1 = new MethodExpect("m",new RefType("void",-1),0); m1.addParameter(m1_i); @@ -53,8 +53,8 @@ public class TestOperatorIncrement extends AbstractInferenceTest { return new Expectation(testOperatorIncrement); } - private Vector createVectorAllDiscreteNumberTypes() { - Vector ret = new Vector(); + private Menge createMengeAllDiscreteNumberTypes() { + Menge ret = new Menge(); ret.add(new RefType("java.lang.Integer",-1)); // ret.add(new RefType("java.lang.Long",-1)); // ret.add(new RefType("java.lang.Short",-1)); diff --git a/test/mycompiler/test/trivial/TestClassMember.jav b/test/mycompiler/test/trivial/TestClassMember.jav index 89a4b51d..3fc799e5 100755 --- a/test/mycompiler/test/trivial/TestClassMember.jav +++ b/test/mycompiler/test/trivial/TestClassMember.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; public class TestClassMember { Integer member; - Vector member2; + Menge member2; } \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassMember.java b/test/mycompiler/test/trivial/TestClassMember.java index 6c36a636..64fae908 100755 --- a/test/mycompiler/test/trivial/TestClassMember.java +++ b/test/mycompiler/test/trivial/TestClassMember.java @@ -1,6 +1,6 @@ package mycompiler.test.trivial; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -31,9 +31,9 @@ public class TestClassMember extends AbstractInferenceTest { ClassExpect testClassMember = new ClassExpect(TestClassMember.TESTEDCLASSNAME); //member VarExpect member = new VarExpect("member",new RefType("java.lang.Integer",-1)); - Vector param = new Vector(); + Menge param = new Menge(); param.add(new RefType("java.lang.String",-1)); - RefType member2Type = new RefType("java.util.Vector",param,-1); + RefType member2Type = new RefType("de.dhbwstuttgart.typeinference.Menge",param,-1); VarExpect member2 = new VarExpect("member2",member2Type); testClassMember.addMember(member); testClassMember.addMember(member2); diff --git a/test/mycompiler/test/trivial/TestClassMemberAssignment.java b/test/mycompiler/test/trivial/TestClassMemberAssignment.java index 9d244ea9..25d0caad 100755 --- a/test/mycompiler/test/trivial/TestClassMemberAssignment.java +++ b/test/mycompiler/test/trivial/TestClassMemberAssignment.java @@ -1,6 +1,6 @@ package mycompiler.test.trivial; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java b/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java index 18d8c7a1..cfd0ef82 100755 --- a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java +++ b/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java @@ -1,6 +1,6 @@ package mycompiler.test.trivial; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -29,13 +29,13 @@ public class TestMethodEmptyParameterGenericExtends extends AbstractInferenceTes //methods MethodExpect m1 = new MethodExpect("emptyMethodGenericExtends2",new RefType("void",-1)); - Vector bounds1 = new Vector(); + Menge bounds1 = new Menge(); bounds1.add(new RefType("java.lang.Number",-1)); m1.addGeneric(new BoundedGenericTypeVar("T",bounds1,-1)); m1.addParameter(new VarExpect("a",new BoundedGenericTypeVar("T",bounds1,-1))); MethodExpect m2 = new MethodExpect("emptyMethodGenericExtends3",new RefType("void",-1)); - Vector bounds2 = new Vector(); + Menge bounds2 = new Menge(); bounds2.add(new RefType("java.lang.Number",-1)); m2.addGeneric(new GenericTypeVar("T",-1)); m2.addGeneric(new BoundedGenericTypeVar("S",bounds2,-1)); diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java index ae4f48cd..f516cc97 100755 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java +++ b/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java @@ -1,6 +1,6 @@ package mycompiler.test.unittest.typeReconstructionTest; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -49,15 +49,15 @@ public class TrMakeFCTest extends TestCase{ //start environment //Classes for (int i=0;i<3;i++) - this.src.addElement(new Class("Test"+i,new Modifiers(),new ClassBody(),new Vector(),null,null,new Vector(),null)); + this.src.addElement(new Class("Test"+i,new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),null)); //Interfaces for (int i=0;i<3;i++) this.src.addElement(new Interface("ITest"+i,new Modifiers())); //expected result - Vector fc = new Vector(); + Menge fc = new Menge(); //fc.add(new Pair(new RefType("Test",-1),new RefType("",-1))); - Vector tto=(Vector)fc.clone(); + Menge tto=(Menge)fc.clone(); expected = new FC_TTO(fc,tto,this.src.KlassenVektor); testlog.debug("Test-Setup: " + this.src.KlassenVektor); @@ -84,7 +84,7 @@ public class TrMakeFCTest extends TestCase{ //Interface //(1) GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Vector paralist = new Vector(); + Menge paralist = new Menge(); paralist.add(gtv_a); Interface abstractlist = new Interface("AbstractList"); abstractlist.setParaList(paralist); @@ -93,35 +93,35 @@ public class TrMakeFCTest extends TestCase{ //Classes with superclasses //(1) // GenericTypeVar param = new GenericTypeVar("A",20); -// Vector paralist = new Vector(); +// Menge paralist = new Menge(); // paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Vector(),null,null,new Vector(),paralist); +// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); // this.src.addElement(abstractlist); //(2) UsedId superclass = new UsedId(1); superclass.set_Name(abstractlist.getName()); - Vector paralist2=abstractlist.getParaList(); + Menge paralist2=abstractlist.getParaList(); superclass.set_ParaList(paralist2); //implements AbstractList - Vector superif = new Vector(); + Menge superif = new Menge(); superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Vector(),null,null,superif,paralist); + Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); this.src.addElement(vektor); //(3) UsedId superclass2 = new UsedId(2); superclass2.set_Name(vektor.getName()); RefType param2 = new RefType("Vektor",paralist,20); - Vector paralist3 = new Vector(); + Menge paralist3 = new Menge(); paralist3.add(param2); superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Vector(),null,superclass2,new Vector(),paralist); + Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); this.src.addElement(matrix); //(4) UsedId superclass3 = new UsedId(3); superclass3.set_Name(matrix.getName()); superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Vector(),null,superclass3, new Vector(),paralist); + Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); this.src.addElement(exmatrix); //Interfaces @@ -131,7 +131,7 @@ public class TrMakeFCTest extends TestCase{ //expected Result GenericTypeVar gtv = new GenericTypeVar("A",20); - Vector gtvparameter = new Vector(); + Menge gtvparameter = new Menge(); gtvparameter.add(gtv); RefType vektortype = new RefType("Vektor",gtvparameter,-1); @@ -139,16 +139,16 @@ public class TrMakeFCTest extends TestCase{ RefType matrixtype = new RefType("Matrix",gtvparameter,-1); RefType exmatrixtype = new RefType("ExMatrix",gtvparameter,-1); - Vector vektorparameter = new Vector(); + Menge vektorparameter = new Menge(); vektorparameter.add(vektortype); - Vector fc = new Vector(); + Menge fc = new Menge(); // set "=" fc.add(new Pair(vektortype,abstractlisttype)); fc.add(new Pair(matrixtype,new RefType("Vektor",vektorparameter,-1))); fc.add(new Pair(exmatrixtype,matrixtype)); - Vector tto=(Vector)fc.clone(); + Menge tto=(Menge)fc.clone(); // set "=*" fc.add(new Pair(matrixtype,new RefType("AbstractList",vektorparameter,-1))); fc.add(new Pair(exmatrixtype,new RefType("Vektor",vektorparameter,-1))); diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java index e9ea300f..bdde2e51 100755 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java +++ b/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java @@ -1,7 +1,7 @@ package mycompiler.test.unittest.typeReconstructionTest; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -67,14 +67,14 @@ public class TrSubUnifyTest extends TestCase{ //(2) UsedId superclass = new UsedId(1); superclass.set_Name(a.getName()); - Vector superif = new Vector(); + Menge superif = new Menge(); superif.add(superclass); - Class b= new Class("B",new Modifiers(),new ClassBody(),new Vector(),null,null,superif,null); + Class b= new Class("B",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,null); src.addElement(b); //(3) UsedId superclass2 = new UsedId(2); superclass2.set_Name(b.getName()); - Class c = new Class("C",new Modifiers(), new ClassBody(), new Vector(),null,superclass2,new Vector(),null); + Class c = new Class("C",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),null); src.addElement(c); FC_TTO fca = src.makeFC(); testlog.info(fca.getTTO()); @@ -96,7 +96,7 @@ public class TrSubUnifyTest extends TestCase{ //Interface //(1) GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Vector paralist = new Vector(); + Menge paralist = new Menge(); paralist.add(gtv_a); Interface abstractlist = new Interface("AbstractList"); abstractlist.setParaList(paralist); @@ -105,35 +105,35 @@ public class TrSubUnifyTest extends TestCase{ //Classes with superclasses //(1) (either as a class or as an interface // GenericTypeVar param = new GenericTypeVar("A",20); -// Vector paralist = new Vector(); +// Menge paralist = new Menge(); // paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Vector(),null,null,new Vector(),paralist); +// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); // this.src.addElement(abstractlist); //(2) UsedId superclass = new UsedId(1); superclass.set_Name(abstractlist.getName()); - Vector paralist2=abstractlist.getParaList(); + Menge paralist2=abstractlist.getParaList(); superclass.set_ParaList(paralist2); //implements AbstractList - Vector superif = new Vector(); + Menge superif = new Menge(); superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Vector(),null,null,superif,paralist); + Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); src.addElement(vektor); //(3) UsedId superclass2 = new UsedId(2); superclass2.set_Name(vektor.getName()); RefType param2 = new RefType("Vektor",paralist,20); - Vector paralist3 = new Vector(); + Menge paralist3 = new Menge(); paralist3.add(param2); superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Vector(),null,superclass2,new Vector(),paralist); + Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); src.addElement(matrix); //(4) UsedId superclass3 = new UsedId(3); superclass3.set_Name(matrix.getName()); superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Vector(),null,superclass3, new Vector(),paralist); + Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); src.addElement(exmatrix); return src.makeFC(); } @@ -172,23 +172,23 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug("Test-Setup: " + ty3 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); //testlog.debug("expected: " + expected); // // //actual // //(1) -// Vector types1 = new Vector(); +// Menge types1 = new Menge(); // types1.add(new Pair(ty2,ty1,PairOperator.Smaller)); // //(2) -// Vector types2 = new Vector(); +// Menge types2 = new Menge(); // types2.add(new Pair(ty3,ty1,PairOperator.Smaller)); // //(3) -// Vector types3 = new Vector(); +// Menge types3 = new Menge(); // types3.add(new Pair(ty3,ty2,PairOperator.Smaller)); // //execution of tested method -// Vector ret1 = Unify.sub_unify(types1 ,fc); -// Vector ret2 = Unify.sub_unify(types2 ,fc); -// Vector ret3 = Unify.sub_unify(types3 ,fc); +// Menge ret1 = Unify.sub_unify(types1 ,fc); +// Menge ret2 = Unify.sub_unify(types2 ,fc); +// Menge ret3 = Unify.sub_unify(types3 ,fc); // //comparisons //testlog.debug("returned: "+ ret1); //testlog.debug("returned: "+ ret2); @@ -217,23 +217,23 @@ public class TrSubUnifyTest extends TestCase{ ////testlog.debug("Test-Setup: " + ty3 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); //testlog.debug("expected: " + expected); // // //actual // //(1) -// Vector types1 = new Vector(); +// Menge types1 = new Menge(); // types1.add(new Pair(ty2,ty1,PairOperator.SmallerExtends)); // //(2) -// Vector types2 = new Vector(); +// Menge types2 = new Menge(); // types2.add(new Pair(ty2,ty3,PairOperator.SmallerExtends)); // //(3) -//// Vector types3 = new Vector(); +//// Menge types3 = new Menge(); //// types3.add(new Pair(ty3,ty2,PairOperator.SmallerExtends)); // //execution of tested method -// Vector ret1 = Unify.sub_unify(types1 ,fc); -// Vector ret2 = Unify.sub_unify(types2 ,fc); -//// Vector ret3 = Unify.sub_unify(types3 ,fc); +// Menge ret1 = Unify.sub_unify(types1 ,fc); +// Menge ret2 = Unify.sub_unify(types2 ,fc); +//// Menge ret3 = Unify.sub_unify(types3 ,fc); // //comparisons //testlog.debug("returned: "+ ret1); //testlog.debug("returned: "+ ret2); @@ -254,15 +254,15 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // //expected.add(new Pair(ty1,ty2,PairOperator.Equal)); //testlog.debug("expected: " + expected); // // //actual // //execution of tested method -// Vector types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Equal)); -// Vector ret = Unify.sub_unify(types ,fc); +// Menge ret = Unify.sub_unify(types ,fc); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("erase3",expected.toString(), ret.toString()); @@ -292,7 +292,7 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug(ty1d + " = " + ty2d + "; "); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // expected.add(new Pair(ty2a,ty1a,PairOperator.Equal)); // expected.add(new Pair(ty2b,ty1b,PairOperator.Equal)); // expected.add(new Pair(ty2c,ty1c,PairOperator.Equal)); @@ -301,12 +301,12 @@ public class TrSubUnifyTest extends TestCase{ // // //actual // //execution of tested method -// Vector types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1a,ty2a,PairOperator.Equal)); // types.add(new Pair(ty1b,ty2b,PairOperator.Equal)); // types.add(new Pair(ty1c,ty2c,PairOperator.Equal)); // types.add(new Pair(ty1d,ty2d,PairOperator.Equal)); -// Vector ret = Unify.sub_unify(types ,fc); +// Menge ret = Unify.sub_unify(types ,fc); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("swap",expected.toString(), ret.toString()); @@ -319,16 +319,16 @@ public class TrSubUnifyTest extends TestCase{ //testlog.info("-------testSubUnifyAdapt---------"); // //Type 1 // //Parameter -// Vector paramAa = new Vector(); +// Menge paramAa = new Menge(); // paramAa.add(new RefType("java.lang.Integer",-1)); // paramAa.add(TypePlaceholder.fresh()); // //paramAa.add(TypePlaceholder.fresh()); -// Vector paramAb = new Vector(); +// Menge paramAb = new Menge(); // paramAb.add(new RefType("Vektor",paramAa,-1)); // Type ty1 = new RefType("Vektor",paramAa,-1); // // //Type2 -// Vector paramB = new Vector(); +// Menge paramB = new Menge(); // //paramB.add(new RefType("java.lang.Number",-1)); // paramB.add(TypePlaceholder.fresh()); // Type ty2 = new RefType("AbstractList",paramB,-1); @@ -336,7 +336,7 @@ public class TrSubUnifyTest extends TestCase{ // testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); //// for (int i = 0;i types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Vector ret = Unify.sub_unify(types ,fcWithPara); +// Menge ret = Unify.sub_unify(types ,fcWithPara); // testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("adapt",expected.toString(), ret.toString()); @@ -368,15 +368,15 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // expected.add(new Pair(((ExtendsWildcardType)ty1).get_ExtendsType(),ty2,PairOperator.Smaller)); //testlog.debug("expected: " + expected); // // //actual // //execution of tested method -// Vector types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Vector ret = Unify.sub_unify(types ,fc); +// Menge ret = Unify.sub_unify(types ,fc); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("reduceLow",expected.toString(), ret.toString()); @@ -394,15 +394,15 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // expected.add(new Pair(ty1,((SuperWildcardType)ty2).get_SuperType(),PairOperator.Smaller)); //testlog.debug("expected: " + expected); ////ReduceU // //actual // //execution of tested method -// Vector types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Vector ret = Unify.sub_unify(types ,fc); +// Menge ret = Unify.sub_unify(types ,fc); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("reduceUp",expected.toString(), ret.toString()); @@ -420,15 +420,15 @@ public class TrSubUnifyTest extends TestCase{ //testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // expected.add(new Pair(((ExtendsWildcardType)ty1).get_ExtendsType(),((SuperWildcardType)ty2).get_SuperType(),PairOperator.Smaller)); //testlog.debug("expected: " + expected); // // //actual // //execution of tested method -// Vector types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Vector ret = Unify.sub_unify(types ,fc); +// Menge ret = Unify.sub_unify(types ,fc); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("reduceUpLow",expected.toString(), ret.toString()); @@ -440,19 +440,19 @@ public class TrSubUnifyTest extends TestCase{ //testlog.info("-------testSubUnifyReduce1---------"); // //Type 1 // //Parameter -// Vector paramA = new Vector(); +// Menge paramA = new Menge(); // paramA.add(TypePlaceholder.fresh()); // Type ty1 = new RefType("Vektor",paramA,-1); // // //Type2 -// Vector paramB = new Vector(); +// Menge paramB = new Menge(); // paramB.add(TypePlaceholder.fresh()); // Type ty2 = new RefType("AbstractList",paramB,-1); // //testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // for (int i = 0;i types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Vector ret = Unify.sub_unify(types ,fcWithPara); +// Menge ret = Unify.sub_unify(types ,fcWithPara); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("reduce1",expected.toString(), ret.toString()); @@ -478,14 +478,14 @@ public class TrSubUnifyTest extends TestCase{ testlog.info("-------testSubUnifyReduce2---------"); //Type 1 //Parameter - Vector paramA = new Vector(); + Menge paramA = new Menge(); paramA.add(new GenericTypeVar("a",-1)); paramA.add(new GenericTypeVar("b",-1)); paramA.add(new GenericTypeVar("c",-1)); Type ty1 = new RefType("A",paramA,-1); //Type2 - Vector paramB = new Vector(); + Menge paramB = new Menge(); paramB.add(new GenericTypeVar("d",-1)); paramB.add(new GenericTypeVar("e",-1)); paramB.add(new GenericTypeVar("f",-1)); @@ -494,7 +494,7 @@ testlog.info("-------testSubUnifyReduce2---------"); testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); //expected - Vector expected = new Vector(); + Menge expected = new Menge(); for (int i = 0;i types = new Vector(); + Menge types = new Menge(); types.add(new Pair(ty1,ty2,PairOperator.Equal)); - Vector ret = Unify.sub_unify(types ,fc); + Menge ret = Unify.sub_unify(types ,fc); testlog.debug("returned: "+ ret); //comparison TrMakeFCTest.assertEquals("reduce2",expected.toString(), ret.toString()); @@ -516,20 +516,20 @@ testlog.debug("returned: "+ ret); //testlog.info("-------testSubUnifyReduceExt---------"); // //Type 1 // //Parameter -// Vector paramA = new Vector(); +// Menge paramA = new Menge(); // paramA.add(TypePlaceholder.fresh()); // Type ty1a = new RefType("Vektor",paramA,-1); // Type ty1b = new ExtendsWildcardType(-1, new RefType("Vektor",paramA,-1)); // // //Type2 -// Vector paramB = new Vector(); +// Menge paramB = new Menge(); // paramB.add(TypePlaceholder.fresh()); // Type ty2 = new ExtendsWildcardType(-1,new RefType("AbstractList",paramB,-1)); // //testlog.debug("Test-Setup: " + ty1a + " -> " + ty2 + "; " + ty1b + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // for (int i = 0;i typesa = new Vector(); +// Menge typesa = new Menge(); // typesa.add(new Pair(ty1a,ty2,PairOperator.SmallerExtends)); -// Vector reta = Unify.sub_unify(typesa ,fcWithPara); +// Menge reta = Unify.sub_unify(typesa ,fcWithPara); // //b -// Vector typesb = new Vector(); +// Menge typesb = new Menge(); // typesb.add(new Pair(ty1b,ty2,PairOperator.SmallerExtends)); -// Vector retb = Unify.sub_unify(typesb ,fcWithPara); +// Menge retb = Unify.sub_unify(typesb ,fcWithPara); // //testlog.debug("returned: "+ reta); //testlog.debug("returned: "+ retb); @@ -559,20 +559,20 @@ testlog.debug("returned: "+ ret); //testlog.info("-------testSubUnifyReduceSup---------"); // //Type 1 // //Parameter -// Vector paramA = new Vector(); +// Menge paramA = new Menge(); // paramA.add(TypePlaceholder.fresh()); // Type ty1a = new RefType("AbstractList",paramA,-1); // Type ty1b = new SuperWildcardType(-1, new RefType("AbstractList",paramA,-1)); // // //Type2 -// Vector paramB = new Vector(); +// Menge paramB = new Menge(); // paramB.add(TypePlaceholder.fresh()); // Type ty2 = new SuperWildcardType(-1,new RefType("Vektor",paramB,-1)); // //testlog.debug("Test-Setup: " + ty1a + " -> " + ty2 + "; " + ty1b + " -> " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // for (int i = 0;i typesa = new Vector(); +// Menge typesa = new Menge(); // typesa.add(new Pair(ty1a,ty2,PairOperator.SmallerExtends)); -// Vector reta = Unify.sub_unify(typesa ,fcWithPara); +// Menge reta = Unify.sub_unify(typesa ,fcWithPara); // //b -// Vector typesb = new Vector(); +// Menge typesb = new Menge(); // typesb.add(new Pair(ty1b,ty2,PairOperator.SmallerExtends)); -// Vector retb = Unify.sub_unify(typesb ,fcWithPara); +// Menge retb = Unify.sub_unify(typesb ,fcWithPara); // //testlog.debug("returned: "+ reta); //testlog.debug("returned: "+ retb); @@ -601,14 +601,14 @@ testlog.debug("returned: "+ ret); //System.out.println("-------testSubUnifyReduceEq---------"); // //Type 1 // //Parameter -// Vector paramA = new Vector(); +// Menge paramA = new Menge(); // paramA.add(TypePlaceholder.fresh()); // paramA.add(TypePlaceholder.fresh()); // paramA.add(TypePlaceholder.fresh()); // Type ty1 = new RefType("Vektor",paramA,-1); // // //Type2 -// Vector paramB = new Vector(); +// Menge paramB = new Menge(); // paramB.add(TypePlaceholder.fresh()); // paramB.add(TypePlaceholder.fresh()); // paramB.add(TypePlaceholder.fresh()); @@ -617,7 +617,7 @@ testlog.debug("returned: "+ ret); //testlog.debug("Test-Setup: " + ty1 + " ->? " + ty2); // // //expected -// Vector expected = new Vector(); +// Menge expected = new Menge(); // for (int i = 0;i types = new Vector(); +// Menge types = new Menge(); // types.add(new Pair(ty1,ty2,PairOperator.SmallerExtends)); -// Vector ret = Unify.sub_unify(types ,fcWithPara); +// Menge ret = Unify.sub_unify(types ,fcWithPara); //testlog.debug("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals("reduceEq",expected.toString(), ret.toString()); diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java index 7a42c8d2..01b948e8 100755 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java +++ b/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java @@ -1,6 +1,6 @@ package mycompiler.test.unittest.typeReconstructionTest; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -51,7 +51,7 @@ public class TrUnifyTest extends TestCase { //Interface //(1) GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Vector paralist = new Vector(); + Menge paralist = new Menge(); paralist.add(gtv_a); Interface abstractlist = new Interface("AbstractList"); abstractlist.setParaList(paralist); @@ -60,35 +60,35 @@ public class TrUnifyTest extends TestCase { //Classes with superclasses //(1) (either as a class or as an interface // GenericTypeVar param = new GenericTypeVar("A",20); -// Vector paralist = new Vector(); +// Menge paralist = new Menge(); // paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Vector(),null,null,new Vector(),paralist); +// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); // this.src.addElement(abstractlist); //(2) UsedId superclass = new UsedId(1); superclass.set_Name(abstractlist.getName()); - Vector paralist2=abstractlist.getParaList(); + Menge paralist2=abstractlist.getParaList(); superclass.set_ParaList(paralist2); //implements AbstractList - Vector superif = new Vector(); + Menge superif = new Menge(); superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Vector(),null,null,superif,paralist); + Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); src.addElement(vektor); //(3) UsedId superclass2 = new UsedId(2); superclass2.set_Name(vektor.getName()); RefType param2 = new RefType("Vektor",paralist,20); - Vector paralist3 = new Vector(); + Menge paralist3 = new Menge(); paralist3.add(param2); superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Vector(),null,superclass2,new Vector(),paralist); + Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); src.addElement(matrix); //(4) UsedId superclass3 = new UsedId(3); superclass3.set_Name(matrix.getName()); superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Vector(),null,superclass3, new Vector(),paralist); + Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); src.addElement(exmatrix); return src.makeFC(); } @@ -108,13 +108,13 @@ public class TrUnifyTest extends TestCase { //Type 1 TypePlaceholder th1 = TypePlaceholder.fresh(); // TypePlaceholder ty2 = TypePlaceholder.fresh(); - Vector param = new Vector(); + Menge param = new Menge(); //param.add(new GenericTypeVar("A",-1)); param.add(th1); - Vector param2 = new Vector(); + Menge param2 = new Menge(); param2.add(new RefType("B",-1)); - Vector param1 = new Vector(); + Menge param1 = new Menge(); param1.add(new RefType("Vektor",param2,-1)); Type ty1 = new RefType("Vektor",param,-1); // ty1.replaceWithType(ty3); @@ -122,16 +122,16 @@ public class TrUnifyTest extends TestCase { Type ty2 = new RefType("Matrix",param1,-1); //expected - Vector> expected = new Vector>(); - Vector result1 = new Vector(); + Menge> expected = new Menge>(); + Menge result1 = new Menge(); result1.add(new Pair(ty1,ty2,PairOperator.Equal)); expected.add(result1); System.out.println("expected: " + expected); //actual //execution of tested method - // Vector> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Vector(),new Vector(),new Vector())); - Vector> ret = Unify.unify(ty1, ty2 ,fc); + // Menge> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Menge(),new Menge(),new Menge())); + Menge> ret = Unify.unify(ty1, ty2 ,fc); System.out.println("returned: "+ ret); //comparison //TrMakeFCTest.assertEquals(expected, ret); @@ -145,15 +145,15 @@ System.out.println("returned: "+ ret); // Type ty2 = new RefType("java.lang.Boolean",-1); // // //expected -// Vector> expected = new Vector>(); -// Vector result1 = new Vector(); +// Menge> expected = new Menge>(); +// Menge result1 = new Menge(); // result1.add(new Pair(ty1,ty2,PairOperator.Equal)); // expected.add(result1); //System.out.println("expected: " + expected); // // //actual // //execution of tested method -// Vector> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Vector(),new Vector(),new Vector())); +// Menge> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Menge(),new Menge(),new Menge())); //System.out.println("returned: "+ ret); // //comparison // TrMakeFCTest.assertEquals(expected, ret); diff --git a/test/parser/GeneralParserTest.java b/test/parser/GeneralParserTest.java index 6f0985db..6432d850 100644 --- a/test/parser/GeneralParserTest.java +++ b/test/parser/GeneralParserTest.java @@ -8,7 +8,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -28,7 +28,7 @@ public class GeneralParserTest{ @Test public void run(){ - Vector filenames = new Vector(); + Menge filenames = new Menge(); filenames.add("FieldInitializationTest.jav"); filenames.add("ImportTest.jav"); filenames.add("BoundedParameter.jav"); diff --git a/test/plugindevelopment/InsertSingleTypeTest.java b/test/plugindevelopment/InsertSingleTypeTest.java index 56c735f6..d09a2a1f 100644 --- a/test/plugindevelopment/InsertSingleTypeTest.java +++ b/test/plugindevelopment/InsertSingleTypeTest.java @@ -6,7 +6,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -40,7 +40,7 @@ public class InsertSingleTypeTest { MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); return results.firstElement(); } catch (IOException | yyException e) { diff --git a/test/plugindevelopment/KarthesischesProduktTest.java b/test/plugindevelopment/KarthesischesProduktTest.java index 4665f29e..0828b165 100644 --- a/test/plugindevelopment/KarthesischesProduktTest.java +++ b/test/plugindevelopment/KarthesischesProduktTest.java @@ -1,6 +1,6 @@ package plugindevelopment; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -15,8 +15,8 @@ public class KarthesischesProduktTest { @Test public void test(){ - Vector> testV = new Vector<>(); - Vector dummy = new Vector<>(); + Menge> testV = new Menge<>(); + Menge dummy = new Menge<>(); dummy.add("1"); dummy.add("2"); dummy.add("3"); @@ -28,7 +28,7 @@ public class KarthesischesProduktTest { //oc.addConstraint(new SingleConstraint(new RefType(""))); cs.add(oc); - Vector out = new KarthesischesProdukt().berechneKarthesischesProdukt(testV); + Menge out = new KarthesischesProdukt().berechneKarthesischesProdukt(testV); System.out.println(out); } diff --git a/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav index 5aa6ee45..50bad19a 100644 --- a/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav +++ b/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { - mvmul(Vector v) { + mvmul(Menge v) { i; ele; v.add(1); diff --git a/test/plugindevelopment/MartinTestCases/MatrixWhile.jav b/test/plugindevelopment/MartinTestCases/MatrixWhile.jav index e696ea61..7096ba0c 100644 --- a/test/plugindevelopment/MartinTestCases/MatrixWhile.jav +++ b/test/plugindevelopment/MartinTestCases/MatrixWhile.jav @@ -1,10 +1,10 @@ -class Matrix extends Vector> { +class Matrix extends Menge> { Matrix mul_rec(Matrix m) { v1; - v1 = new Vector(); + v1 = new Menge(); v2; - v2 = new Vector(); + v2 = new Menge(); i; i = 0; while(i < m.size()) { @@ -21,7 +21,7 @@ class Matrix extends Vector> { ret = new Matrix(); i = 0; while (i < this.size()) { - ret.addElement(new Vector()); + ret.addElement(new Menge()); i++; } } diff --git a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav index 293f776e..8b318125 100644 --- a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav +++ b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav @@ -1,5 +1,5 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { op = (Matrix m) -> (f) -> f.apply(this, m); } \ No newline at end of file diff --git a/test/plugindevelopment/MartinTestCases/OL2.jav b/test/plugindevelopment/MartinTestCases/OL2.jav index 799d586d..87b63a44 100755 --- a/test/plugindevelopment/MartinTestCases/OL2.jav +++ b/test/plugindevelopment/MartinTestCases/OL2.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class OL2 { diff --git a/test/plugindevelopment/MartinTestCases/Probleme b/test/plugindevelopment/MartinTestCases/Probleme index 4a69c5d0..f4ebc5a2 100755 --- a/test/plugindevelopment/MartinTestCases/Probleme +++ b/test/plugindevelopment/MartinTestCases/Probleme @@ -4,7 +4,7 @@ - Parameter gehen nicht Matrix Use-Rase - gleiche TypePlaceHolder in unterschiedlichen Intersections werden durch unterschiedliche GentypeVars ersetzt (BoundedType2.jav) - Mail von Juergen, welche Usecases machen ihm Probleme? -- UsedId bei bei "extends" in RefType bzw. bei "implements" in Vector umwandeln. (siehe mail an Timo) +- UsedId bei bei "extends" in RefType bzw. bei "implements" in Menge umwandeln. (siehe mail an Timo) - Roundtrip fuer den Innovator einbauen erledigt 06-06 - Schnittstelle mit syntaktischen Angaben fuer den Konstantenpool wird bei unbeboxten Typen nicht richtig erzeugt - Boxing und Unboxing geht noch nicht bei allen primitiven Typen und Operatoren diff --git a/test/plugindevelopment/MartinTestCases/SMatrix.jav b/test/plugindevelopment/MartinTestCases/SMatrix.jav index 80dd631a..bbb6bb5f 100755 --- a/test/plugindevelopment/MartinTestCases/SMatrix.jav +++ b/test/plugindevelopment/MartinTestCases/SMatrix.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { mul(){ - Vector> ret1; - Vector ret; + Menge> ret1; + Menge ret; return ret; } diff --git a/test/plugindevelopment/MartinTestCases/Tester.java b/test/plugindevelopment/MartinTestCases/Tester.java index a63eeaf7..3e9efc8f 100644 --- a/test/plugindevelopment/MartinTestCases/Tester.java +++ b/test/plugindevelopment/MartinTestCases/Tester.java @@ -2,7 +2,7 @@ package plugindevelopment.MartinTestCases; import java.io.File; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -19,13 +19,13 @@ public class Tester extends TypeInsertTester{ public final static String rootDirectory = System.getProperty("user.dir")+"/test/plugindevelopment/MartinTestCases/"; - public static void test(String sourceFileToInfere, Vector mustContain){ + public static void test(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); @@ -51,7 +51,7 @@ public class Tester extends TypeInsertTester{ @Test public void runTests(){ - Vector testFiles = new Vector(); + Menge testFiles = new Menge(); //testFiles.add("OL3.jav"); testFiles.add("Plus1_Float_Double.jav"); ///* @@ -88,7 +88,7 @@ public class Tester extends TypeInsertTester{ //*/ for(String file : testFiles){ System.out.println("Testfile: "+file); - Tester.test(file, new Vector()); + Tester.test(file, new Menge()); } } diff --git a/test/plugindevelopment/MartinTestCases/UnifyTest1.jav b/test/plugindevelopment/MartinTestCases/UnifyTest1.jav index 88d59e58..810baa61 100755 --- a/test/plugindevelopment/MartinTestCases/UnifyTest1.jav +++ b/test/plugindevelopment/MartinTestCases/UnifyTest1.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import java.util.Stack; diff --git a/test/plugindevelopment/MartinTestCases/UsecaseFive_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseFive_pl.jav index 5e25f6d8..b6622553 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseFive_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseFive_pl.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseFive_pl { foo() { - Vector c; - c = new Vector() ; + Menge c; + c = new Menge() ; return c; } diff --git a/test/plugindevelopment/MartinTestCases/UsecaseFour_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseFour_pl.jav index b40233f6..415318d4 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseFour_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseFour_pl.jav @@ -2,7 +2,7 @@ class UsecaseFour_pl { foo() { c; - c = new Vector() ; + c = new Menge() ; return c; } diff --git a/test/plugindevelopment/MartinTestCases/UsecaseOne_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseOne_pl.jav index cf614cbe..5156ae48 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseOne_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseOne_pl.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseOne_pl { @@ -11,7 +11,7 @@ class UsecaseOne_pl { /* foo1(a) { c; - c = new Vector(); + c = new Menge(); b; b = new UsecaseOne_pl(); return c.addElement(a); diff --git a/test/plugindevelopment/MartinTestCases/UsecaseSeven_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseSeven_pl.jav index 9833b49b..5744f550 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseSeven_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseSeven_pl.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseSeven_pl { @@ -9,7 +9,7 @@ class UsecaseSeven_pl { foo1(a) { c; - c = new Vector(); + c = new Menge(); b; b = new UsecaseSeven_pl(); return c.addElement(a); diff --git a/test/plugindevelopment/MartinTestCases/UsecaseSix_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseSix_pl.jav index e6a1a5cc..45c140af 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseSix_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseSix_pl.jav @@ -1,5 +1,5 @@ class uuu {} class vvv {} -class UsecaseSix_pl extends Vector> { +class UsecaseSix_pl extends Menge> { } \ No newline at end of file diff --git a/test/plugindevelopment/MartinTestCases/UsecaseTen_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseTen_pl.jav index 3a679aa9..ab5b8d00 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseTen_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseTen_pl.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseTen_pl { - Vector c; + Menge c; foo1() { a; diff --git a/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.jav b/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.jav index 7ce53593..b0351814 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.jav @@ -2,7 +2,7 @@ class UsecaseThree_pl { foo() { c; - c = new Vector(); + c = new Menge(); return c; } diff --git a/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.orig.jav b/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.orig.jav index 074acc31..aecefabd 100755 --- a/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.orig.jav +++ b/test/plugindevelopment/MartinTestCases/UsecaseThree_pl.orig.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class UsecaseThree_pl_org { - Vector foo() { - Vector c; - c = new Vector(); + Menge foo() { + Menge c; + c = new Menge(); return c; } diff --git a/test/plugindevelopment/MartinTestCases/ZweiKlassen.jav b/test/plugindevelopment/MartinTestCases/ZweiKlassen.jav index 2e396884..e74b9b9f 100755 --- a/test/plugindevelopment/MartinTestCases/ZweiKlassen.jav +++ b/test/plugindevelopment/MartinTestCases/ZweiKlassen.jav @@ -1,10 +1,10 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ZweiKlassen { foo() { c; - c = new Vector() ; + c = new Menge() ; return c; } diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav index 5aa6ee45..50bad19a 100644 --- a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav +++ b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { - mvmul(Vector v) { + mvmul(Menge v) { i; ele; v.add(1); diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav index f9d2f4e0..51150cc1 100644 --- a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav +++ b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav @@ -1,5 +1,5 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { Fun1>, Matrix> op = (Matrix m) -> (f) -> f.apply(this, m); } \ No newline at end of file diff --git a/test/plugindevelopment/TRMEqualTest.java b/test/plugindevelopment/TRMEqualTest.java index a9a2549a..375b3da1 100644 --- a/test/plugindevelopment/TRMEqualTest.java +++ b/test/plugindevelopment/TRMEqualTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.*; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -27,7 +27,7 @@ import junit.framework.TestCase; import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; public class TRMEqualTest { - Vector replaceSet = new Vector(); + Menge replaceSet = new Menge(); TestNode node; TypePlaceholder tph; @@ -51,12 +51,12 @@ public class TRMEqualTest { } private void addTestNode(String type){ - Vector resultContent = new Vector(); + Menge resultContent = new Menge(); Pair pair = new Pair(tph,new RefType(type,0)); pair.SetOperator(PairOperator.Equal); resultContent.add(pair); ResultSet resultSet = new ResultSet(resultContent); - Vector tphs = tph.getTypeInsertPoints(resultSet); + Menge tphs = tph.getTypeInsertPoints(resultSet); TypeInsertSet toAdd = new TypeInsertSet(resultSet); for(TypeInsertPoint tip : tphs){ toAdd.add(tip); @@ -123,9 +123,9 @@ class TestNode extends SyntaxTreeNode implements TypeInsertable{ } @Override - public Vector getChildren() { + public Menge getChildren() { // TODO Auto-generated method stub - return new Vector<>(); + return new Menge<>(); } } diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.jav b/test/plugindevelopment/TypeInsertSetEqualTest.jav index cf9cf8ba..b07d5db4 100644 --- a/test/plugindevelopment/TypeInsertSetEqualTest.jav +++ b/test/plugindevelopment/TypeInsertSetEqualTest.jav @@ -1,7 +1,7 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ImportTest{ -Vector var; +Menge var; var2; methode(){ var.add(var2); diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.java b/test/plugindevelopment/TypeInsertSetEqualTest.java index 0f993a54..a3d70056 100644 --- a/test/plugindevelopment/TypeInsertSetEqualTest.java +++ b/test/plugindevelopment/TypeInsertSetEqualTest.java @@ -2,7 +2,7 @@ package plugindevelopment; import java.io.File; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -25,9 +25,9 @@ public class TypeInsertSetEqualTest { MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(TypeInsertTester.rootDirectory + TEST_FILE)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); - Vector insertSets = new Vector(); + Menge insertSets = new Menge(); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); if(!insertSets.contains(point))insertSets.add(point); diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java index c4f48cd7..d8e36e1f 100755 --- a/test/plugindevelopment/TypeInsertTester.java +++ b/test/plugindevelopment/TypeInsertTester.java @@ -8,7 +8,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.LoggerConfiguration; @@ -44,7 +44,7 @@ public class TypeInsertTester{ MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); diff --git a/test/plugindevelopment/TypeInsertTests/Add.jav b/test/plugindevelopment/TypeInsertTests/Add.jav index 4e7599b3..720aa04a 100644 --- a/test/plugindevelopment/TypeInsertTests/Add.jav +++ b/test/plugindevelopment/TypeInsertTests/Add.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { - mvmul(Vector v) { + mvmul(Menge v) { return v.size() + 5; } } diff --git a/test/plugindevelopment/TypeInsertTests/Add.java b/test/plugindevelopment/TypeInsertTests/Add.java index 577d24c1..2aaf7b0f 100644 --- a/test/plugindevelopment/TypeInsertTests/Add.java +++ b/test/plugindevelopment/TypeInsertTests/Add.java @@ -2,7 +2,7 @@ package plugindevelopment.TypeInsertTests; import java.util.ArrayList; import java.util.List; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -11,7 +11,7 @@ public class Add { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); ArrayList l = new ArrayList(); diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java b/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java index 6e2c772c..ae1d0f92 100644 --- a/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java +++ b/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class BoundedGenericsTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("java.lang.String var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav index b92a7a3b..a3aa400e 100644 --- a/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class Matrix{ diff --git a/test/plugindevelopment/TypeInsertTests/ConstructorTest.java b/test/plugindevelopment/TypeInsertTests/ConstructorTest.java index d8f9e9ab..eb9004fb 100644 --- a/test/plugindevelopment/TypeInsertTests/ConstructorTest.java +++ b/test/plugindevelopment/TypeInsertTests/ConstructorTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -14,7 +14,7 @@ public class ConstructorTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java index 161e4e80..3ea54b4f 100644 --- a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java +++ b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class FunNInsertTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Fun1, Object2>, Object1> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenTypeTest.java b/test/plugindevelopment/TypeInsertTests/GenTypeTest.java index e150b2dd..19e75bd7 100644 --- a/test/plugindevelopment/TypeInsertTests/GenTypeTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenTypeTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class GenTypeTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("A b"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java index d88ca52c..c9919058 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericParaListInsertTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("<"); //Es muss eine Parameterliste generiert werden. MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java index 8a706d8e..d428731d 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java +++ b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericParaListInsertTest2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("<"); //Es muss eine Parameterliste generiert werden. MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java index 0721692c..62627002 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -15,7 +15,7 @@ public class GenericTypeVarTest { @Test public void run(){ Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.ASSUMPTIONS, System.out)); - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("String methode"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java index cbeae139..810219c2 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class GenericTypeVarTest2 { @Test public void run2(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("String var2"); MultipleTypesInsertTester.test(TEST_FILE2, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java index 453e46e7..04e2910a 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericVarInsertTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Fun1, Object2>, Object1> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav index 1f3d9f46..b6cfbec7 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav @@ -1,5 +1,5 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class WildcardTest extends Vector{ +class WildcardTest extends Menge{ Fun1> op = (f) -> f.apply(this); } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest.java index ef787454..576bf0c9 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericVarTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun1, Object2>, Object1> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java index 9195de50..ddf5ee67 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericVarTest2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun1, Object2>, Object1> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java index 431fafa3..e8cbfc1f 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest3.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class GenericVarTest3 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun1, Object2>, Object1> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/Id.java b/test/plugindevelopment/TypeInsertTests/Id.java index 0bc010ba..797886be 100644 --- a/test/plugindevelopment/TypeInsertTests/Id.java +++ b/test/plugindevelopment/TypeInsertTests/Id.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class Id { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.jav b/test/plugindevelopment/TypeInsertTests/ImportTest.jav index 7e761863..465ee6dd 100755 --- a/test/plugindevelopment/TypeInsertTests/ImportTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest.jav @@ -1,7 +1,7 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ImportTest{ -Vector var; +Menge var; methode(var2){ var.add(var2); diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.java b/test/plugindevelopment/TypeInsertTests/ImportTest.java index 54fd6612..f7e6ec96 100644 --- a/test/plugindevelopment/TypeInsertTests/ImportTest.java +++ b/test/plugindevelopment/TypeInsertTests/ImportTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class ImportTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("String var2"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav index 10075ef9..45a7e159 100755 --- a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ImportTest{ diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.java b/test/plugindevelopment/TypeInsertTests/ImportTest2.java index 7d241e6a..be3d09ff 100644 --- a/test/plugindevelopment/TypeInsertTests/ImportTest2.java +++ b/test/plugindevelopment/TypeInsertTests/ImportTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class ImportTest2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.java b/test/plugindevelopment/TypeInsertTests/IntTest.java index 95fd200f..4a2e2814 100644 --- a/test/plugindevelopment/TypeInsertTests/IntTest.java +++ b/test/plugindevelopment/TypeInsertTests/IntTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class IntTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java index 740c8df4..e6d6a5af 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest1 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Fun0<"); mustContain.add("java.lang.String>>> op"); diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.java b/test/plugindevelopment/TypeInsertTests/LambdaTest10.java index ef9af4c8..c0f17fed 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest10.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest10.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest10 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.java b/test/plugindevelopment/TypeInsertTests/LambdaTest11.java index f39b7e14..99a4e09a 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest11.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest11.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest11 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest12.java b/test/plugindevelopment/TypeInsertTests/LambdaTest12.java index 9f4a7be4..33b04b42 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest12.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest12.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest12 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest13.java b/test/plugindevelopment/TypeInsertTests/LambdaTest13.java index 44f02d9b..44748a7b 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest13.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest13.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest13 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest14.java b/test/plugindevelopment/TypeInsertTests/LambdaTest14.java index 8cbadd0d..4087a1ee 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest14.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest14.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest14 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest15.java b/test/plugindevelopment/TypeInsertTests/LambdaTest15.java index d90f8a9e..981107a4 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest15.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest15.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest15 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest16.java b/test/plugindevelopment/TypeInsertTests/LambdaTest16.java index 94b7fb21..c5ad8ca1 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest16.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest16.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest16 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest17.java b/test/plugindevelopment/TypeInsertTests/LambdaTest17.java index 5cfc558a..2e185fc4 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest17.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest17.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest17 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest18.java b/test/plugindevelopment/TypeInsertTests/LambdaTest18.java index 69332a60..26b37ddc 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest18.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest18.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest18 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("java.lang.Integer var2"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest19.java b/test/plugindevelopment/TypeInsertTests/LambdaTest19.java index f6c4a5e8..8cdbe362 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest19.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest19.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest19 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java index 223d0108..dce2a469 100755 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -15,7 +15,7 @@ public class LambdaTest2 { @Test public void run(){ Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("S m"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest20.java b/test/plugindevelopment/TypeInsertTests/LambdaTest20.java index 1cae420a..afc30361 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest20.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest20.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest20 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest22.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest22.jav index 0cdc36b1..397e890e 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest22.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest22.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { Matrix mul(m){ ret; @@ -11,7 +11,7 @@ class Matrix extends Vector> { v1; v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); j; j = 0; while(j < v1.size()) { diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav index 4bc270c4..6e8887c3 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { void mul(m){ v1; diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest23.java b/test/plugindevelopment/TypeInsertTests/LambdaTest23.java index f97260c9..03d2d755 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest23.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest23.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,8 +9,8 @@ public class LambdaTest23 { @Test public void run(){ - Vector mustContain = new Vector(); - mustContain.add("java.util.Vector v1;"); + Menge mustContain = new Menge(); + mustContain.add("de.dhbwstuttgart.typeinference.Menge v1;"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest24.java b/test/plugindevelopment/TypeInsertTests/LambdaTest24.java index fcc9233f..d1a2f209 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest24.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest24.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest24 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Fun1"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav index a499b2bd..b89c4b86 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class ImportGeneric { - m (Vector x) { + m (Menge x) { return x.elementAt(1); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest25.java b/test/plugindevelopment/TypeInsertTests/LambdaTest25.java index 1737acee..ef845f8b 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest25.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest25.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class LambdaTest25 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer m"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest26.java b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java index 9b0c2e67..183dd938 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest26.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest26 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest27.java b/test/plugindevelopment/TypeInsertTests/LambdaTest27.java index 69c2f0bd..bd8d41ab 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest27.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest27.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest27 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java index 8625a71e..481ec5e0 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -15,7 +15,7 @@ public class LambdaTest2_2 { @Test public void run(){ Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("S m"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.java b/test/plugindevelopment/TypeInsertTests/LambdaTest3.java index e7b8f4ba..e48ed6c3 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest3.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest3.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest3 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("String var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java index a2cabe22..55d46367 100755 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest4.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest4.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest4 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("String var2;"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.java b/test/plugindevelopment/TypeInsertTests/LambdaTest5.java index 34cc8c9e..1dfcbad3 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest5.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest5.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest5 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest6.java b/test/plugindevelopment/TypeInsertTests/LambdaTest6.java index 6ba600d1..34b8d322 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest6.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest6.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest6 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest7.java b/test/plugindevelopment/TypeInsertTests/LambdaTest7.java index f29dabdf..ded681d0 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest7.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest7.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest7 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest8.java b/test/plugindevelopment/TypeInsertTests/LambdaTest8.java index 04e85bf2..db910e57 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest8.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest8.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest8 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest9.java b/test/plugindevelopment/TypeInsertTests/LambdaTest9.java index ca336ef5..6baa2fa1 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest9.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest9.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class LambdaTest9 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java index fc17951e..69b51979 100755 --- a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -11,7 +11,7 @@ public class LambdaTest22 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Matrix ret"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java index 7884d9d3..8db48ec7 100755 --- a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -14,7 +14,7 @@ public class Matrix { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java index ae298b5c..5eeb7887 100755 --- a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -11,7 +11,7 @@ public class TypedMatrixSimpleTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer i;"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java index 08a5a74a..e6ea571e 100755 --- a/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -11,7 +11,7 @@ public class TypedMatrixTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer erg;"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/Matrix.jav b/test/plugindevelopment/TypeInsertTests/Matrix.jav index 33277653..d30e2a07 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix.jav +++ b/test/plugindevelopment/TypeInsertTests/Matrix.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { mul(m){ ret; @@ -11,7 +11,7 @@ class Matrix extends Vector> { v1; v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); j; j = 0; while(true) { diff --git a/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav b/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav index 5aa6ee45..50bad19a 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav +++ b/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav @@ -1,8 +1,8 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { - mvmul(Vector v) { + mvmul(Menge v) { i; ele; v.add(1); diff --git a/test/plugindevelopment/TypeInsertTests/Matrix_simple.java b/test/plugindevelopment/TypeInsertTests/Matrix_simple.java index e9c16aaa..94d6019c 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix_simple.java +++ b/test/plugindevelopment/TypeInsertTests/Matrix_simple.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class Matrix_simple { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("TestIfStmt var"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index f550ebcc..66e4a8d8 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -2,7 +2,7 @@ package plugindevelopment.TypeInsertTests; import java.io.File; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; @@ -25,13 +25,13 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); } - public static void test(String sourceFileToInfere, Vector mustContain){ + public static void test(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); System.out.println("Typinferenz ausgeführt!"); //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ @@ -56,13 +56,13 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ } } - public static void testSingleInsert(String sourceFileToInfere, Vector mustContain){ + public static void testSingleInsert(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Vector results = compiler.typeReconstruction(); + Menge results = compiler.typeReconstruction(); //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); diff --git a/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java b/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java index 82fa17a8..5c26ee99 100644 --- a/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java +++ b/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -12,14 +12,14 @@ public class MutlitpleTestCases { @Test public void test1(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("OverloadingTest testMethode"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } @Test public void test2(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); MultipleTypesInsertTester.test(this.TEST_FILE2, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/OL.java b/test/plugindevelopment/TypeInsertTests/OL.java index 4e50e174..40b85747 100644 --- a/test/plugindevelopment/TypeInsertTests/OL.java +++ b/test/plugindevelopment/TypeInsertTests/OL.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class OL { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer main"); mustContain.add("Boolean main"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/OperatorTest.java b/test/plugindevelopment/TypeInsertTests/OperatorTest.java index 48d5c671..6437c66f 100644 --- a/test/plugindevelopment/TypeInsertTests/OperatorTest.java +++ b/test/plugindevelopment/TypeInsertTests/OperatorTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class OperatorTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Integer i"); mustContain.add("Integer j"); mustContain.add("Integer k"); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingExample.java b/test/plugindevelopment/TypeInsertTests/OverloadingExample.java index 45088fd7..27a6c628 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingExample.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingExample.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class OverloadingExample { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Example variable"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.java index 6a7a97f5..e243cc1d 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class OverloadingInMethod { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java index af53fcdb..1db86fb9 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class OverloadingInMethod2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java index 6a8057fc..5472ee82 100755 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class OverloadingInMethod2Simple { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java index 7e4cd1eb..843284b4 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java @@ -2,7 +2,7 @@ package plugindevelopment.TypeInsertTests; import java.io.File; import java.io.IOException; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; @@ -19,7 +19,7 @@ public class OverloadingInsertTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Overloading2 methode"); mustContain.add("Overloading2 overload"); mustContain.add("Overloading2 var2"); diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java index 65833bb1..0236a37f 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingRecursive.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class OverloadingRecursive { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); //Untypisierbar diff --git a/test/plugindevelopment/TypeInsertTests/RelOpTest.java b/test/plugindevelopment/TypeInsertTests/RelOpTest.java index 76e264c0..ed068679 100644 --- a/test/plugindevelopment/TypeInsertTests/RelOpTest.java +++ b/test/plugindevelopment/TypeInsertTests/RelOpTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,7 +9,7 @@ public class RelOpTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); mustContain.add("Boolean i"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest.java index 9afb090c..4af879a0 100644 --- a/test/plugindevelopment/TypeInsertTests/ReursiveTest.java +++ b/test/plugindevelopment/TypeInsertTests/ReursiveTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class ReursiveTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java index 95040a8d..a68e19fc 100644 --- a/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java +++ b/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class ReursiveTest2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("A a"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/SuperTest.jav b/test/plugindevelopment/TypeInsertTests/SuperTest.jav index 3b28814a..96fd427e 100644 --- a/test/plugindevelopment/TypeInsertTests/SuperTest.jav +++ b/test/plugindevelopment/TypeInsertTests/SuperTest.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class Klasse1{ Klasse1(var){} diff --git a/test/plugindevelopment/TypeInsertTests/SuperTest.java b/test/plugindevelopment/TypeInsertTests/SuperTest.java index f9d6d375..025ef614 100644 --- a/test/plugindevelopment/TypeInsertTests/SuperTest.java +++ b/test/plugindevelopment/TypeInsertTests/SuperTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class SuperTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/ThisTest.jav b/test/plugindevelopment/TypeInsertTests/ThisTest.jav index c0316b9f..89383e3d 100644 --- a/test/plugindevelopment/TypeInsertTests/ThisTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ThisTest.jav @@ -1,4 +1,4 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class Matrix{ diff --git a/test/plugindevelopment/TypeInsertTests/ThisTest.java b/test/plugindevelopment/TypeInsertTests/ThisTest.java index 5412e721..2ebe429a 100644 --- a/test/plugindevelopment/TypeInsertTests/ThisTest.java +++ b/test/plugindevelopment/TypeInsertTests/ThisTest.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class ThisTest { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } diff --git a/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.jav b/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.jav index 0324151c..62e2994f 100644 --- a/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.jav +++ b/test/plugindevelopment/TypeInsertTests/TypedMatrixSimpleTest.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { Matrix mul(Matrix m){ Matrix ret; @@ -8,10 +8,10 @@ class Matrix extends Vector> { i; i = 0; while(i < this.size()) { - Vector v1; - Vector v2; + Menge v1; + Menge v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); Integer j; j = 0; diff --git a/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.jav b/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.jav index c9bbd601..a660b2e4 100644 --- a/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.jav +++ b/test/plugindevelopment/TypeInsertTests/TypedMatrixTest.jav @@ -1,6 +1,6 @@ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; -class Matrix extends Vector> { +class Matrix extends Menge> { Matrix mul(Matrix m){ Matrix ret; @@ -8,10 +8,10 @@ class Matrix extends Vector> { Integer i; i = 0; while(i < this.size()) { - Vector v1; - Vector v2; + Menge v1; + Menge v2; v1 = this.elementAt(i); - v2 = new Vector(); + v2 = new Menge(); Integer j; j = 0; while(j < this.size()) { diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java index 04d7872f..ed056925 100644 --- a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class WildcardTestForLambda { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java index c302fbdb..78028983 100644 --- a/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java +++ b/test/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.java @@ -1,6 +1,6 @@ package plugindevelopment.TypeInsertTests; -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -10,7 +10,7 @@ public class WildcardTestForLambda2 { @Test public void run(){ - Vector mustContain = new Vector(); + Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); diff --git a/tools/JavaParser.jay b/tools/JavaParser.jay index 521c1b0f..1c3f562a 100755 --- a/tools/JavaParser.jay +++ b/tools/JavaParser.jay @@ -1,7 +1,7 @@ %{ -import java.util.Vector; +import de.dhbwstuttgart.typeinference.Menge; class JavaParser{ -public Vector path = new Vector(); +public Menge path = new Menge(); %} %token ABSTRACT @@ -410,7 +410,7 @@ classtype : classorinterfacetype $1.set_ParaList($3.get_ParaList()); /* otth: originale (also diese) Parameterliste retten */ - ((UsedId)$1).vParaOrg = new Vector( $3.get_ParaList() ); + ((UsedId)$1).vParaOrg = new Menge( $3.get_ParaList() ); $$ = $1; } diff --git a/tools/cygwin/Cygwin-Files/ftp%3a%2f%2fftp-stud.fht-esslingen.de%2fpub%2fMirrors%2fsources.redhat.com%2fcygwin/setup.ini b/tools/cygwin/Cygwin-Files/ftp%3a%2f%2fftp-stud.fht-esslingen.de%2fpub%2fMirrors%2fsources.redhat.com%2fcygwin/setup.ini index 0de4eb51..3142986a 100755 --- a/tools/cygwin/Cygwin-Files/ftp%3a%2f%2fftp-stud.fht-esslingen.de%2fpub%2fMirrors%2fsources.redhat.com%2fcygwin/setup.ini +++ b/tools/cygwin/Cygwin-Files/ftp%3a%2f%2fftp-stud.fht-esslingen.de%2fpub%2fMirrors%2fsources.redhat.com%2fcygwin/setup.ini @@ -4855,17 +4855,17 @@ install: release/libungif/libungif-4.1.2-1.tar.bz2 204872 d6c07e89eb18cd0694f79a source: release/libungif/libungif-4.1.2-1-src.tar.bz2 434126 e6ffdb303d8b628a89af90214f66dc2b @ libwmf -sdesc: "Library for reading vector images Windøws Metafile Format (WMF)" -ldesc: "libwmf is a library for reading vector images in Microsøft's +sdesc: "Library for reading Menge images Windøws Metafile Format (WMF)" +ldesc: "libwmf is a library for reading Menge images in Microsøft's native Windøws Metafile Format (WMF) and for either (a) displaying them in, e.g., an X window; or (b) converting them to more standard/open file -formats such as, e.g., the W3C's XML-based Scaleable Vector Graphic +formats such as, e.g., the W3C's XML-based Scaleable Menge Graphic (SVG) format. Currently bindings exist for conversion to: -- the following vector image formats: +- the following Menge image formats: (& Encapsulated) PostScript (EPS & PS) Facility for Interactive Generation of graphics (FIG) - Scaleable Vector Graphic (SVG) + Scaleable Menge Graphic (SVG) - the following raster image formats: Portable Network Graphics (PNG) @@ -6577,8 +6577,8 @@ of the features: - underlining, overlining and overstriking is supported -- new encoding vectors may be loaded at runtime and fonts may be - reencoded using these encoding vectors +- new encoding Menges may be loaded at runtime and fonts may be + reencoded using these encoding Menges - antialiasing is implemented @@ -6635,8 +6635,8 @@ of the features: - underlining, overlining and overstriking is supported -- new encoding vectors may be loaded at runtime and fonts may be - reencoded using these encoding vectors +- new encoding Menges may be loaded at runtime and fonts may be + reencoded using these encoding Menges - antialiasing is implemented diff --git a/tools/skeleton b/tools/skeleton index 9ba7e82a..10eb1996 100755 --- a/tools/skeleton +++ b/tools/skeleton @@ -54,7 +54,7 @@ . /** (syntax) error message. . Can be overwritten to control message format. . @param message text to be displayed. -. @param expected vector of acceptable tokens, if available. +. @param expected Menge of acceptable tokens, if available. . */ . public String yyerror (String message, String[] expected) { . if (expected != null && expected.length > 0) { From 1cb335b46b296a15feac79e313f26e3c186c6e76 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 28 Apr 2015 15:27:16 +0200 Subject: [PATCH 083/186] ConstraintsSet umgebaut in eine KomplexeMenge von Pairs --- .../dhbwstuttgart/syntaxtree/SourceFile.java | 4 +- .../typeinference/ConstraintsSet.java | 37 +++++++++++++++---- .../typeinference/SingleConstraint.java | 22 ++++++----- .../typeinference/UndConstraint.java | 13 +++++-- .../typeinference/unify/CSubstitutionSet.java | 2 +- .../typeinference/unify/CVectorSet.java | 18 ++++----- .../TypeInsertTests/LambdaTest25.jav | 4 +- 7 files changed, 68 insertions(+), 32 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 13e176f9..2732fac9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -712,7 +712,8 @@ public class SourceFile oderConstraints.unifyUndConstraints(unifier); typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): - Menge> xConstraints = new Menge>();// = oderConstraints.getConstraints(); + Menge> xConstraints = oderConstraints.cartesianProduct(); + /* for(Menge uC : oderConstraints.getConstraints()){ //mit dem getConstraints-Aufruf wird das Karthesische Produkt erzeugt. Menge cons = new Menge(); for(UndConstraint undCons:uC){ @@ -720,6 +721,7 @@ public class SourceFile } xConstraints.add(cons); } + */ typinferenzLog.debug("Karthesisches Produkt der Constraints: "+xConstraints, Section.TYPEINFERENCE); finiteClosure.generateFullyNamedTypes(globalAssumptions); diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 905eb82a..e31ddfa7 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -6,8 +6,20 @@ import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class ConstraintsSet{ +public class ConstraintsSet extends UndMenge{ private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); + + public void add(ConstraintsSet CSet){ + for(KomplexeMenge i : CSet.set){ + this.addItems(i); + } + } + + public void add(KomplexeMenge constraint){ + this.addItems(constraint); + } + + /* private UndConstraint constraintsSet; public ConstraintsSet(){ @@ -15,38 +27,44 @@ public class ConstraintsSet{ } public void add(ConstraintsSet CSet){ - for(OderConstraint element : CSet) - add(element); + constraintsSet.addItems(CSet.getConstraints()); } public void add(OderConstraint constraint){ constraintsSet.addItems(constraint); } + public UndConstraint getConstraints(){ + return constraintsSet; + } + */ /** * Liefert alle Constraint-Variationen * @return */ + /* public Menge> getConstraints(){ - /* + Menge> ret = new Menge>(); for(OderConstraint con : constraintsSet){ ret.add(con.getUndConstraints()); } ret = new KarthesischesProdukt().berechneKarthesischesProdukt(ret); return ret; - */ + } + @Override public String toString(){ return constraintsSet.toString(); } - - public void filterWrongConstraints(Unifier unify) { +*/ + public void filterWrongConstraints(Unifier unify) {/* for(OderConstraint constraint : this){ constraint.filterWrongConstraints(unify); } + */ } /** @@ -54,6 +72,7 @@ public class ConstraintsSet{ * @param unifier */ public void unifyUndConstraints(Unifier unifier) { + /* Menge uCons = this.filterUndConstraints(); Menge alleUndConstraints = new Menge<>(); for(UndConstraint undConstraint : uCons){ @@ -69,6 +88,7 @@ public class ConstraintsSet{ Menge> unifyResult = unifier.apply(undConstraintsUndPairs); return unifyResult; }); + */ } /** @@ -77,11 +97,14 @@ public class ConstraintsSet{ * @return [u1, ... , uN] */ private Menge filterUndConstraints() { + /* Menge ret = new Menge<>(); for(OderConstraint con : constraintsSet){ UndConstraint filtered = con.filterUndConstraints(); if(filtered != null)ret.add(filtered); } return ret; + */ + return null; } } diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 4aa140c4..49639533 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -20,22 +20,24 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; * Die Klasse stellt ein OderConstraint-Set dar, welches nur aus einem Constraint besteht. * */ -public class SingleConstraint extends UndConstraint{ - private Pair constraintPair; //entspricht θ condition θ' +public class SingleConstraint extends EinzelElement{ + //private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) public SingleConstraint(ConstraintType p1, ConstraintType p2){ + super(new ConstraintPair(p1,p2).getPair()); //super(p1,p2); - ConstraintPair constraintPair = new ConstraintPair(p1,p2);//super.getConstraintPairs().firstElement(); - this.addConstraint(constraintPair); + //ConstraintPair constraintPair = new ConstraintPair(p1,p2);//super.getConstraintPairs().firstElement(); + //this.addConstraint(constraintPair); } public SingleConstraint(ConstraintPair toAdd) { - this.addConstraint(toAdd); + super(toAdd.getPair()); + //this.addConstraint(toAdd); } public Pair getPair(){ - return constraintPair; + return this.getItems().firstElement(); } /* @@ -48,12 +50,12 @@ public class SingleConstraint extends UndConstraint{ */ public void addConstraint(ConstraintPair toAdd){ - if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); + //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); Type p1 = toAdd.getPair().TA1; Type p2 = toAdd.getPair().TA2; if(p1==null || p2 == null)throw new NullPointerException(); - + this.addItem(toAdd.getPair()); //Hier werden die GTVs zu TPH gewandelt. //if(p1 instanceof RefType)((RefType)p1).GTV2TPH(); @@ -73,11 +75,13 @@ public class SingleConstraint extends UndConstraint{ //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); - constraintPair = new Pair(p1,p2); + //constraintPair = new Pair(p1,p2); } + /* @Override public String toString(){ return ""+constraintPair.TA1.toString()+" < "+constraintPair.TA2.toString(); } + */ } diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 7375eaf4..d2f6694a 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -11,10 +11,11 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * @author janulrich * */ -public class UndConstraint extends OderConstraint implements Iterable{ +public class UndConstraint extends UndMenge implements Iterable{ public UndConstraint(ConstraintType p1, ConstraintType p2) { - super(p1, p2); + //super(p1, p2); + this.addItem(new SingleConstraint(p1,p2).getPair()); } public UndConstraint() { @@ -41,6 +42,7 @@ public class UndConstraint extends OderConstraint implements Iterable{ return ret+"]"; } + /* @Override void filterWrongConstraints(Unifier unifier) { //In einem UndConstraint gibt es keine falschen Constraints @@ -50,9 +52,14 @@ public class UndConstraint extends OderConstraint implements Iterable{ UndConstraint filterUndConstraints(){ return this; } - + */ + @Override public Iterator iterator() { return this.getItems().iterator(); } + + public void addConstraint(ConstraintType type, ConstraintType type2) { + this.addItem(new ConstraintPair(type,type2).getPair()); + } } diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java index 7c4b60a7..f02fd605 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java @@ -17,7 +17,7 @@ import de.dhbwstuttgart.typeinference.Pair; */ // ino.end // ino.class.CSubstitutionSet.27471.declaration -public class CSubstitutionSet extends CMengeSet +public class CSubstitutionSet extends CVectorSet // ino.end // ino.class.CSubstitutionSet.27471.body { diff --git a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java index 527382a8..e126c557 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java @@ -14,7 +14,7 @@ import de.dhbwstuttgart.typeinference.Menge; */ // ino.end // ino.class.CMengeSet.27519.declaration -public abstract class CMengeSet extends CSet +public abstract class CVectorSet extends CSet // ino.end // ino.class.CMengeSet.27519.body { @@ -23,7 +23,7 @@ public abstract class CMengeSet extends CSet // ino.end // ino.method.CMengeSet.27526.definition - public CMengeSet() + public CVectorSet() // ino.end // ino.method.CMengeSet.27526.body { @@ -49,7 +49,7 @@ public abstract class CMengeSet extends CSet } // ino.end - public void addAll( CMengeSet set ) + public void addAll( CVectorSet set ) { for( int i=0;i extends CSet // ino.end // ino.method.unite.27544.body { - if(!(anotherSet instanceof CMengeSet)){ + if(!(anotherSet instanceof CVectorSet)){ return; } - CMengeSet MengeSet = (CMengeSet)anotherSet; + CVectorSet MengeSet = (CVectorSet)anotherSet; // Elemente der anderen Menge hinzuf�gen: Iterator it = MengeSet.getIterator(); @@ -116,10 +116,10 @@ public abstract class CMengeSet extends CSet // ino.end // ino.method.subtract.27547.body { - if(!(anotherSet instanceof CMengeSet)){ + if(!(anotherSet instanceof CVectorSet)){ return; } - CMengeSet MengeSet = (CMengeSet)anotherSet; + CVectorSet MengeSet = (CVectorSet)anotherSet; // Elemente der anderen Menge entfernen: m_Elements.removeAll(MengeSet.m_Elements); @@ -140,8 +140,8 @@ public abstract class CMengeSet extends CSet // ino.end // ino.method.equals.27553.body { - if(obj instanceof CMengeSet){ - CMengeSet tripSet= (CMengeSet)obj; + if(obj instanceof CVectorSet){ + CVectorSet tripSet= (CVectorSet)obj; boolean ret = true; ret &= (m_Elements.containsAll(tripSet.m_Elements)); ret &= (tripSet.m_Elements.containsAll(m_Elements)); diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav index b89c4b86..6a9130f5 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav @@ -1,8 +1,8 @@ -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Vector; class ImportGeneric { - m (Menge x) { + m (Vector x) { return x.elementAt(1); } } From d343c27edbd3a2b3514d79148a14fa14cc6bd037 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 7 May 2015 01:01:39 +0200 Subject: [PATCH 084/186] =?UTF-8?q?Logger=20angepasst.=20MyCompiler.getAPI?= =?UTF-8?q?=20erfordert=20nun=20einen=20Logger=20als=20Parameter.=20Filter?= =?UTF-8?q?ung=20im=20Unify=20eingef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/core/MyCompiler.java | 8 +- src/de/dhbwstuttgart/logger/Logger.java | 18 +-- .../logger/LoggerConfiguration.java | 27 +++- .../typeinference/ConstraintsSet.java | 19 ++- src/de/dhbwstuttgart/typeinference/Menge.java | 7 ++ .../typeinference/OderMenge.java | 78 ++++++++++++ .../typeinference/UndConstraint.java | 4 + .../dhbwstuttgart/typeinference/UndMenge.java | 116 ++++++++++++++++++ .../typeinference/unify/ParallelUnify.java | 2 +- .../typeinference/unify/Unify.java | 32 ++++- .../KarthesischesProduktTest.java | 81 ++++++++++++ .../KomplexeMenge/KeineDoppeltenVerweise.java | 66 ++++++++++ test/plugindevelopment/TypeInsertTester.java | 7 +- .../plugindevelopment/TypeInsertTests/Add.jav | 6 +- .../TypeInsertTests/ConstructorTest.jav | 2 +- .../TypeInsertTests/GenericVarTest.jav | 4 +- .../TypeInsertTests/ImportSubClassTest.jav | 13 ++ .../TypeInsertTests/ImportSubClassTest.java | 16 +++ .../TypeInsertTests/ImportTest.jav | 4 +- .../TypeInsertTests/ImportTest2.jav | 2 +- .../TypeInsertTests/LambdaTest2.java | 4 +- .../TypeInsertTests/LambdaTest23.jav | 4 +- .../TypeInsertTests/LambdaTest25.jav | 2 +- .../TypeInsertTests/LambdaTest25.java | 3 + .../TypeInsertTests/LambdaTest2_2.java | 6 +- .../TypeInsertTests/Matrix.jav | 4 +- .../TypeInsertTests/Matrix_simple.jav | 6 +- .../MultipleTypesInsertTester.java | 16 ++- test/syntaxTree/NodeEqualTest.java | 8 +- 29 files changed, 518 insertions(+), 47 deletions(-) create mode 100644 src/de/dhbwstuttgart/typeinference/Menge.java create mode 100644 src/de/dhbwstuttgart/typeinference/OderMenge.java create mode 100644 src/de/dhbwstuttgart/typeinference/UndMenge.java create mode 100644 test/KomplexeMenge/KarthesischesProduktTest.java create mode 100644 test/KomplexeMenge/KeineDoppeltenVerweise.java create mode 100644 test/plugindevelopment/TypeInsertTests/ImportSubClassTest.jav create mode 100644 test/plugindevelopment/TypeInsertTests/ImportSubClassTest.java diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index e1b624cf..bd7fe90d 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -11,9 +11,10 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -116,10 +117,11 @@ public class MyCompiler implements MyCompilerAPI */ // ino.end // ino.method.getAPI.21286.definition - public static MyCompilerAPI getAPI() + public static MyCompilerAPI getAPI(LoggerConfiguration loggerConfig) // ino.end // ino.method.getAPI.21286.body { + Logger.setStandardConfiguration(loggerConfig); return new MyCompiler(); } // ino.end @@ -591,7 +593,7 @@ public class MyCompiler implements MyCompilerAPI // ino.end // ino.method.main.21313.body { - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration()); // Hier koennten ggf. Aenderungen der Ausgabeeinstellungen // (Debuginfos) vorgenommen werden -> LOG4J diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java index 1af96f70..983369bb 100755 --- a/src/de/dhbwstuttgart/logger/Logger.java +++ b/src/de/dhbwstuttgart/logger/Logger.java @@ -8,7 +8,7 @@ import java.util.logging.LogRecord; public class Logger { - private static LoggerConfiguration standardConfiguration = new LoggerConfiguration(); + private static LoggerConfiguration standardConfiguration = null; private static final HashMap LOGGER_DIRECTORY = new HashMap<>(); private String name; @@ -17,17 +17,21 @@ public class Logger { protected Logger(String name, LoggerConfiguration config) { this.name = name; this.logger = new HashMap<>(); - config.forEach((s,o)->{ - java.util.logging.Logger log = java.util.logging.Logger.getLogger( name ); - log.setLevel(Level.FINE); - log.addHandler(new OutputHandler(o)); - logger.put(s, log); - }); + if(config != null){ + config.forEach((s,o)->{ + java.util.logging.Logger log = java.util.logging.Logger.getLogger( name ); + log.setLevel(Level.FINE); + log.addHandler(new OutputHandler(o)); + logger.put(s, log); + }); + } } + /* public static LoggerConfiguration getConfiguration(){ return Logger.standardConfiguration; } + */ /** * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. diff --git a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java index d9ae2c0e..56d57d99 100644 --- a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java +++ b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java @@ -3,23 +3,42 @@ package de.dhbwstuttgart.logger; import java.io.PrintStream; import java.util.HashMap; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.exceptions.DebugException; public class LoggerConfiguration{ - private final HashMap outputs = new HashMap<>(Section.values().length); + private final HashMap> outputs = new HashMap<>(Section.values().length); public LoggerConfiguration setOutput(Section forSection, PrintStream output){ if(outputs.containsKey(forSection)){ - throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); + //throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); + if(outputs.get(forSection).equals(output)){ + //do nothing + }else{ + outputs.get(forSection).add(output); + } + }else{ + Menge outMenge = new Menge<>(); + outMenge.add(output); + outputs.put(forSection, outMenge); } - outputs.put(forSection, output); return this; } public void forEach(ConfigurationEvaluater action){ for(Section key : outputs.keySet()){ - action.apply(key, outputs.get(key)); + for(PrintStream out : outputs.get(key)){ + action.apply(key, out); + } + } + } + + public void mergeConfiguration(LoggerConfiguration config){ + for(Section key : config.outputs.keySet()){ + for(PrintStream out : config.outputs.get(key)){ + this.setOutput(key, out); + } } } } diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index e31ddfa7..49a0f5f8 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -1,11 +1,12 @@ package de.dhbwstuttgart.typeinference; import java.util.Iterator; + import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; + public class ConstraintsSet extends UndMenge{ private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); @@ -60,7 +61,21 @@ public class ConstraintsSet extends UndMenge{ } */ - public void filterWrongConstraints(Unifier unify) {/* + public void filterWrongConstraints(Unifier unify) { + Menge> newSet = new Menge>(); + for(OderMenge orSet : this.getOrSets()){ + Menge> res = unify.apply(orSet.getItems()); + if(res.size()>0){ + newSet.add(orSet); + }else{ + Logger.getLogger("Filter").debug("Ausgesondertes Constraint: "+orSet, Section.TYPEINFERENCE); + } + } + for(KomplexeMenge i : set){ + newSet.addAll(i.getAndSets()); + } + this.set = newSet; + /* for(OderConstraint constraint : this){ constraint.filterWrongConstraints(unify); } diff --git a/src/de/dhbwstuttgart/typeinference/Menge.java b/src/de/dhbwstuttgart/typeinference/Menge.java new file mode 100644 index 00000000..0a727c61 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/Menge.java @@ -0,0 +1,7 @@ +package de.dhbwstuttgart.typeinference; + +import java.util.Vector; + +public class Menge extends Vector{ + +} diff --git a/src/de/dhbwstuttgart/typeinference/OderMenge.java b/src/de/dhbwstuttgart/typeinference/OderMenge.java new file mode 100644 index 00000000..0d17bf09 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/OderMenge.java @@ -0,0 +1,78 @@ +package de.dhbwstuttgart.typeinference; + +import java.util.Collection; +import java.util.Iterator; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.unify.Unifier; + +/* + * KomplexeMenge + * OderMenge + * Menge + * Item + */ + +interface KomplexeMenge{ + void addItems(KomplexeMenge item); + void addItem(A item); + Menge> cartesianProduct(); + Menge getItems(); + Menge> getOrSets(); + Menge> getAndSets(); +} + +public class OderMenge implements KomplexeMenge{ + Menge> set = new Menge<>(); + + @Override + public void addItems(KomplexeMenge item) { + set.add(item); + } + + public Menge getItems(){ + Menge ret = new Menge<>(); + for(KomplexeMenge i : set){ + ret.addAll(i.getItems()); + } + return ret; + } + + @Override + public void addItem(A item) { + set.add(new EinzelElement(item)); + } + + @Override + public Menge> cartesianProduct() { + Menge> ret = new Menge<>(); + for(KomplexeMenge km : this.set){ + ret.addAll(km.cartesianProduct()); + } + return ret; + } + + @Override + public Menge> getOrSets() { + Menge> ret = new Menge<>(); + ret.add(this); + for(KomplexeMenge i : set){ + ret.addAll(i.getOrSets()); + } + return ret; + } + + @Override + public Menge> getAndSets() { + Menge> ret = new Menge<>(); + for(KomplexeMenge i : set){ + ret.addAll(i.getAndSets()); + } + return ret; + } +} diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index d2f6694a..55d3e67c 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -62,4 +62,8 @@ public class UndConstraint extends UndMenge implements Iterable{ public void addConstraint(ConstraintType type, ConstraintType type2) { this.addItem(new ConstraintPair(type,type2).getPair()); } + + public void addConstraint(ConstraintPair constraintPair) { + this.addItem(constraintPair.getPair()); + } } diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java new file mode 100644 index 00000000..49087949 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -0,0 +1,116 @@ +package de.dhbwstuttgart.typeinference; + +import java.util.Collection; +import java.util.Iterator; + +import com.rits.cloning.Cloner; + +public class UndMenge implements KomplexeMenge{ + Menge> set = new Menge<>(); + + @Override + public void addItems(KomplexeMenge item) { + set.add(item); + } + + public void addItem(A item){ + set.add(new EinzelElement(item)); + } + + public Menge getItems(){ + Menge ret = new Menge<>(); + for(KomplexeMenge i : set){ + ret.addAll(i.getItems()); + } + return ret; + } + + @Override + public Menge> cartesianProduct() { + Menge> ret = null; + Cloner cloner = new Cloner(); + for(KomplexeMenge km : this.set){ + if(ret == null){ + ret = km.cartesianProduct(); + }else{ + Menge> cartesianProduct = new Menge<>(); + for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: + Menge undElement = new Menge(); + undElement.addAll(cloner.deepClone(r)); + undElement.addAll(m); + cartesianProduct.add(undElement); + } + ret = cartesianProduct; + } + } + return ret; + } + + @Override + public Menge> getOrSets() { + Menge> ret = new Menge<>(); + for(KomplexeMenge i : set){ + ret.addAll(i.getOrSets()); + } + return ret; + } + + @Override + public Menge> getAndSets() { + Menge> ret = new Menge<>(); + ret.add(this); + for(KomplexeMenge i : set){ + ret.addAll(i.getAndSets()); + } + return ret; + } +} + + +class EinzelElement implements KomplexeMenge{ + private A item; + + public EinzelElement(A element){ + item = element; + } + + @Override + public void addItems(KomplexeMenge item) { + + } + + @Override + public Menge getItems() { + Menge ret = new Menge<>(); + ret.add(item); + return ret; + } + + @Override + public void addItem(A item) { + + } + + @Override + public Menge> cartesianProduct() { + Cloner cloner = new Cloner(); + Menge> ret = new Menge<>(); + Menge i = new Menge(); + i.add(cloner.deepClone(item)); + ret.add(i); + return ret; + } + + @Override + public Menge> getOrSets() { + Menge> ret = new Menge<>(); + return ret; + } + + @Override + public Menge> getAndSets() { + Menge> ret = new Menge<>(); + return ret; + } + +} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java b/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java index 5f852819..fffceb53 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/ParallelUnify.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.typeinference.Pair; public class ParallelUnify { public ParallelUnify(ConstraintsSet constraints){ - constraints.getConstraints(); + //constraints.getConstraints(); } private CartesianProduct parallelCartProd(){ diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index b5489102..37e1857e 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -6,7 +6,9 @@ package de.dhbwstuttgart.typeinference.unify; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + import de.dhbwstuttgart.typeinference.Menge; + import java.util.stream.Stream; import de.dhbwstuttgart.logger.Logger; @@ -33,6 +35,7 @@ import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.ConstraintPair; +import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.Pair.PairOperator; @@ -115,8 +118,13 @@ public class Unify * oder [] = fail * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ - //public static Menge> unifyWC (Menge E, FC_TTO fc_tto) public static Menge> unify (Menge E, FC_TTO fc_tto) + { + return unifyFiltered(E, fc_tto,true); + } + + //public static Menge> unifyWC (Menge E, FC_TTO fc_tto) + public static Menge> unifyFiltered (Menge E, FC_TTO fc_tto, boolean filter) { //Schritt 1: Aufrufen der Regeln durch sub_unify. Menge Eq = sub_unify(E,fc_tto); @@ -625,6 +633,28 @@ public class Unify //Schritt 4, Teil 2: Kartesisches Produkt bilden. //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: + ConstraintsSet cSet = new ConstraintsSet(); + for (Menge> vecvecpair : cartProduktSets){ + OderConstraint orConstraints = new OderConstraint(); + for(Menge pairs : vecvecpair){ + UndConstraint uCons = new UndConstraint(); + for(Pair p : pairs){ + uCons.addItem(p); + } + orConstraints.addItems(uCons); + } + cSet.addItems(orConstraints); + } + if(filter){ + Unifier filterUnify = (pairs)->{ + Menge> retValue = new Menge<>(); + retValue = Unify.unifyFiltered(pairs,fc_tto,false); + //Unify.unify(pairs, fc_tto, (i)->{}); + return retValue;}; + + cSet.filterWrongConstraints(filterUnify); + } + /* for (Menge> vecvecpair : cartProduktSets){ OderConstraint orConstraints = new OderConstraint(); diff --git a/test/KomplexeMenge/KarthesischesProduktTest.java b/test/KomplexeMenge/KarthesischesProduktTest.java new file mode 100644 index 00000000..327c37ea --- /dev/null +++ b/test/KomplexeMenge/KarthesischesProduktTest.java @@ -0,0 +1,81 @@ +package KomplexeMenge; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.OderMenge; +import de.dhbwstuttgart.typeinference.UndMenge; + +public class KarthesischesProduktTest { + + @Test + public void test() { + OderMenge oM1 = new OderMenge<>(); + OderMenge oM2 = new OderMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM1.addItem("Menge 1, Item 1"); + oM1.addItem("Menge 1, Item 2"); + oM2.addItem("Menge 2, Item 1"); + oM2.addItem("Menge 2, Item 2"); + oM3.addItems(oM1); + oM3.addItems(oM2); + System.out.println(oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==4); + } + + @Test + public void test2(){ + UndMenge oM1 = new UndMenge<>(); + UndMenge oM2 = new UndMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM1.addItem("Menge 1, Item 1"); + oM1.addItem("Menge 1, Item 2"); + oM2.addItem("Menge 2, Item 1"); + oM2.addItem("Menge 2, Item 2"); + oM3.addItems(oM1); + oM3.addItems(oM2); + System.out.println("undMenge:"+oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==1); + } + + @Test + public void test3(){ + OderMenge oM1 = new OderMenge<>(); + UndMenge oM2 = new UndMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM1.addItem("Menge 1, Item 1"); + oM1.addItem("Menge 1, Item 2"); + oM2.addItem("Menge 2, Item 1"); + oM2.addItem("Menge 2, Item 2"); + oM3.addItems(oM1); + oM3.addItems(oM2); + //System.out.println("undMenge:"+oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==2); + } + + @Test + public void test4(){ + OderMenge oM1 = new OderMenge<>(); + UndMenge oM2 = new UndMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM2.addItem("Menge 2, Item 1"); + oM2.addItem("Menge 2, Item 2"); + oM3.addItems(oM1); + oM3.addItems(oM2); + //System.out.println("undMenge:"+oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==0); + } + + @Test + public void test5(){ + OderMenge oM1 = new OderMenge<>(); + UndMenge oM2 = new UndMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM3.addItems(oM1); + oM3.addItems(oM2); + //System.out.println("undMenge:"+oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==0); + } +} diff --git a/test/KomplexeMenge/KeineDoppeltenVerweise.java b/test/KomplexeMenge/KeineDoppeltenVerweise.java new file mode 100644 index 00000000..d7c3f431 --- /dev/null +++ b/test/KomplexeMenge/KeineDoppeltenVerweise.java @@ -0,0 +1,66 @@ +package KomplexeMenge; + +import static org.junit.Assert.*; + +import java.util.Vector; + +import org.junit.Test; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.OderMenge; +import de.dhbwstuttgart.typeinference.UndMenge; + +class TestKlasse { + static int identifier = 0; + public String name; + int id; + + TestKlasse(String name){ + this.name = name; + id = 0; + } + + public String toString(){ + return name+" #"+id; + } +} + +public class KeineDoppeltenVerweise { + + @Test + public void test() { + OderMenge oM1 = new OderMenge<>(); + OderMenge oM2 = new OderMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM1.addItem(new TestKlasse("Menge 1, Item 1")); + oM1.addItem(new TestKlasse("Menge 1, Item 2")); + oM2.addItem(new TestKlasse("Menge 2, Item 1")); + oM2.addItem(new TestKlasse("Menge 2, Item 2")); + oM3.addItems(oM1); + oM3.addItems(oM2); + Menge> cP = oM3.cartesianProduct(); + System.out.println(cP); + cP.firstElement().firstElement().name="neu"; + System.out.println(cP); + check(cP); + } + + private void check(Menge> cP){ + Menge allElements = new Menge<>(); + for(Vector v : cP)for(A i : v){ + Object o = containsRef(allElements, i); + if(o!=null){ + fail("Ein Verweis ist im Karthesischen Produkt doppelt vorhanden: "+o+" == "+i); + }else{ + allElements.add(i); + } + } + } + + private Object containsRef(Menge v, Object i){ + for(Object o : v){ + if(i == o)return o; + } + return null; + } +} diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java index d8e36e1f..27154bb2 100755 --- a/test/plugindevelopment/TypeInsertTester.java +++ b/test/plugindevelopment/TypeInsertTester.java @@ -24,10 +24,11 @@ import junit.framework.TestCase; public class TypeInsertTester{ - private static Logger inferencelog = Logger.getLogger(TypeInsertTester.class.getName()); + //private static Logger inferencelog = Logger.getLogger(TypeInsertTester.class.getName()); + private static LoggerConfiguration logConfig = new LoggerConfiguration(); static{ { - Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); + logConfig.setOutput(Section.TYPEINFERENCE, System.out); /* // Ausgabeoptionen fuer die Logger ConsoleAppender logAppender = new ConsoleAppender(new SimpleLayout()); @@ -41,7 +42,7 @@ public class TypeInsertTester{ public static void test(String sourceFileToInfere, String solutionFile){ String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); diff --git a/test/plugindevelopment/TypeInsertTests/Add.jav b/test/plugindevelopment/TypeInsertTests/Add.jav index 720aa04a..4e7599b3 100644 --- a/test/plugindevelopment/TypeInsertTests/Add.jav +++ b/test/plugindevelopment/TypeInsertTests/Add.jav @@ -1,8 +1,8 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; -class Matrix extends Menge> { +class Matrix extends Vector> { - mvmul(Menge v) { + mvmul(Vector v) { return v.size() + 5; } } diff --git a/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav index a3aa400e..b92a7a3b 100644 --- a/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ConstructorTest.jav @@ -1,4 +1,4 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; class Matrix{ diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav index b6cfbec7..1f3d9f46 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav +++ b/test/plugindevelopment/TypeInsertTests/GenericVarTest.jav @@ -1,5 +1,5 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; -class WildcardTest extends Menge{ +class WildcardTest extends Vector{ Fun1> op = (f) -> f.apply(this); } \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.jav b/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.jav new file mode 100644 index 00000000..92ee5482 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.jav @@ -0,0 +1,13 @@ +import java.util.ArrayList; +import java.util.List; +import de.dhbwstuttgart.typeinference.Menge; + +class ImportSubClassTest{ +methode(){ +Menge var1; +ArrayList var2; +var3; +var3 = var1; +var3 = var2; +} +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.java b/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.java new file mode 100644 index 00000000..f33f3160 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/ImportSubClassTest.java @@ -0,0 +1,16 @@ +package plugindevelopment.TypeInsertTests; + +import de.dhbwstuttgart.typeinference.Menge; + +import org.junit.Test; + +public class ImportSubClassTest { + private static final String TEST_FILE = "ImportSubClassTest.jav"; + + @Test + public void run(){ + Menge mustContain = new Menge(); + //mustContain.add("TestIfStmt var"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.jav b/test/plugindevelopment/TypeInsertTests/ImportTest.jav index 465ee6dd..7e761863 100755 --- a/test/plugindevelopment/TypeInsertTests/ImportTest.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest.jav @@ -1,7 +1,7 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; class ImportTest{ -Menge var; +Vector var; methode(var2){ var.add(var2); diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav index 45a7e159..10075ef9 100755 --- a/test/plugindevelopment/TypeInsertTests/ImportTest2.jav +++ b/test/plugindevelopment/TypeInsertTests/ImportTest2.jav @@ -1,4 +1,4 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; class ImportTest{ diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java index dce2a469..c1c11870 100755 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2.java @@ -14,10 +14,10 @@ public class LambdaTest2 { @Test public void run(){ - Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); Menge mustContain = new Menge(); //mustContain.add("S m"); - MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain, + new LoggerConfiguration().setOutput(Section.ASSUMPTIONS, System.out)); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav index 6e8887c3..cd4550ba 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav @@ -1,6 +1,6 @@ -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Vector; -class Matrix extends Menge> { +class Matrix extends Vector> { void mul(m){ v1; diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav index 6a9130f5..a499b2bd 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest25.jav @@ -1,4 +1,4 @@ -import de.dhbwstuttgart.typeinference.Vector; +import java.util.Vector; class ImportGeneric { diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest25.java b/test/plugindevelopment/TypeInsertTests/LambdaTest25.java index ef845f8b..8dbeb3fb 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest25.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest25.java @@ -1,5 +1,7 @@ package plugindevelopment.TypeInsertTests; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -9,6 +11,7 @@ public class LambdaTest25 { @Test public void run(){ + //de.dhbwstuttgart.logger.Logger.setStandardConfiguration(Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); Menge mustContain = new Menge(); mustContain.add("Integer m"); MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java index 481ec5e0..5503c7fe 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java @@ -14,10 +14,12 @@ public class LambdaTest2_2 { @Test public void run(){ - Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); + //Logger.getConfiguration().setOutput(Section.ASSUMPTIONS, System.out); + LoggerConfiguration logConfig = new LoggerConfiguration(); + logConfig.setOutput(Section.ASSUMPTIONS, System.out); Menge mustContain = new Menge(); //mustContain.add("S m"); - MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain, logConfig); } } diff --git a/test/plugindevelopment/TypeInsertTests/Matrix.jav b/test/plugindevelopment/TypeInsertTests/Matrix.jav index d30e2a07..b71f5c1f 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix.jav +++ b/test/plugindevelopment/TypeInsertTests/Matrix.jav @@ -1,6 +1,6 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; -class Matrix extends Menge> { +class Matrix extends Vector> { mul(m){ ret; diff --git a/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav b/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav index 50bad19a..5aa6ee45 100644 --- a/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav +++ b/test/plugindevelopment/TypeInsertTests/Matrix_simple.jav @@ -1,8 +1,8 @@ -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; -class Matrix extends Menge> { +class Matrix extends Vector> { - mvmul(Menge v) { + mvmul(Vector v) { i; ele; v.add(1); diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index 66e4a8d8..79dce804 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -20,15 +20,25 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ public final static String rootDirectory = System.getProperty("user.dir")+"/test/plugindevelopment/TypeInsertTests/"; + static LoggerConfiguration logConfig = new LoggerConfiguration(); + static{ + logConfig.setOutput(Section.TYPEINFERENCE, System.out); + } + public MultipleTypesInsertTester(){ //Output von TYPEINFERENCE auf die Console setzen: - Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); + //Logger.getConfiguration().setOutput(Section.TYPEINFERENCE, System.out); + } + + public static void test(String sourceFileToInfere, Menge mustContain, LoggerConfiguration additionalConfig){ + logConfig.mergeConfiguration(additionalConfig); + MultipleTypesInsertTester.test(sourceFileToInfere, mustContain); } public static void test(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); @@ -59,7 +69,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ public static void testSingleInsert(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); diff --git a/test/syntaxTree/NodeEqualTest.java b/test/syntaxTree/NodeEqualTest.java index 010cdf8c..1082379d 100644 --- a/test/syntaxTree/NodeEqualTest.java +++ b/test/syntaxTree/NodeEqualTest.java @@ -8,6 +8,8 @@ import org.junit.Test; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -19,8 +21,10 @@ public class NodeEqualTest extends TestCase{ @Test public void test(){ - MyCompilerAPI compiler = MyCompiler.getAPI(); - MyCompilerAPI compiler2 = MyCompiler.getAPI(); + LoggerConfiguration logConfig = new LoggerConfiguration(); + logConfig.setOutput(Section.TYPEINFERENCE, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + MyCompilerAPI compiler2 = MyCompiler.getAPI(logConfig); SourceFile tree = null; SourceFile tree2 = null; try { From 5e5a17b265bc3635de953f6ce071ca33fb430a70 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 7 May 2015 14:41:13 +0200 Subject: [PATCH 085/186] =?UTF-8?q?toString=20zu=20UndMenge=20hinzugef?= =?UTF-8?q?=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/typeinference/UndMenge.java | 8 ++++++++ test/plugindevelopment/TypeInsertTests/LambdaTest23.jav | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index 49087949..1f4d75df 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -64,6 +64,14 @@ public class UndMenge implements KomplexeMenge{ } return ret; } + + public String toString(){ + String ret = "["; + for(KomplexeMenge item : set){ + ret += item.toString() + "\n"; + } + return ret + "]"; + } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav index cd4550ba..4bc270c4 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest23.jav @@ -1,4 +1,4 @@ -import de.dhbwstuttgart.typeinference.Vector; +import java.util.Vector; class Matrix extends Vector> { From 76ee7bb5496e318c6dd05022f0a71f4e5f2e9313 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 12 May 2015 11:40:29 +0200 Subject: [PATCH 086/186] =?UTF-8?q?Veraltete=20Javadoc=20gel=C3=B6scht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/LambdaJavadoc/allclasses-frame.html | 382 -- doc/LambdaJavadoc/allclasses-noframe.html | 382 -- doc/LambdaJavadoc/constant-values.html | 724 ---- doc/LambdaJavadoc/deprecated-list.html | 115 - doc/LambdaJavadoc/help-doc.html | 220 - doc/LambdaJavadoc/index-files/index-1.html | 561 --- doc/LambdaJavadoc/index-files/index-10.html | 166 - doc/LambdaJavadoc/index-files/index-11.html | 138 - doc/LambdaJavadoc/index-files/index-12.html | 262 -- doc/LambdaJavadoc/index-files/index-13.html | 302 -- doc/LambdaJavadoc/index-files/index-14.html | 225 -- doc/LambdaJavadoc/index-files/index-15.html | 209 - doc/LambdaJavadoc/index-files/index-16.html | 393 -- doc/LambdaJavadoc/index-files/index-17.html | 251 -- doc/LambdaJavadoc/index-files/index-18.html | 980 ----- doc/LambdaJavadoc/index-files/index-19.html | 1339 ------ doc/LambdaJavadoc/index-files/index-2.html | 230 -- doc/LambdaJavadoc/index-files/index-20.html | 200 - doc/LambdaJavadoc/index-files/index-21.html | 167 - doc/LambdaJavadoc/index-files/index-22.html | 236 -- doc/LambdaJavadoc/index-files/index-23.html | 120 - doc/LambdaJavadoc/index-files/index-24.html | 138 - doc/LambdaJavadoc/index-files/index-3.html | 928 ----- doc/LambdaJavadoc/index-files/index-4.html | 242 -- doc/LambdaJavadoc/index-files/index-5.html | 374 -- doc/LambdaJavadoc/index-files/index-6.html | 293 -- doc/LambdaJavadoc/index-files/index-7.html | 1346 ------- doc/LambdaJavadoc/index-files/index-8.html | 130 - doc/LambdaJavadoc/index-files/index-9.html | 513 --- doc/LambdaJavadoc/index.html | 67 - .../myJvmDisassembler/package-frame.html | 13 - .../myJvmDisassembler/package-summary.html | 114 - .../myJvmDisassembler/package-tree.html | 118 - .../myJvmDisassembler/package-use.html | 115 - .../mycompiler/AClassOrInterface.html | 413 -- .../mycompiler/IItemWithOffset.html | 223 - doc/LambdaJavadoc/mycompiler/MyCompiler.html | 604 --- .../mycompiler/MyCompilerAPI.html | 399 -- doc/LambdaJavadoc/mycompiler/SourceFile.html | 508 --- .../class-use/AClassOrInterface.html | 207 - .../mycompiler/class-use/IItemWithOffset.html | 605 --- .../mycompiler/class-use/MyCompiler.html | 115 - .../mycompiler/class-use/MyCompilerAPI.html | 171 - .../mycompiler/class-use/SourceFile.html | 245 -- .../mycompiler/mybytecode/Attribute.html | 306 -- .../mycompiler/mybytecode/AttributeInfo.html | 347 -- .../mybytecode/CONSTANT_Class_info.html | 319 -- .../mybytecode/CONSTANT_Double_info.html | 345 -- .../mybytecode/CONSTANT_Fieldref_info.html | 345 -- .../mybytecode/CONSTANT_Float_info.html | 319 -- .../mybytecode/CONSTANT_Integer_info.html | 319 -- .../CONSTANT_InterfaceMethodref_info.html | 345 -- .../mybytecode/CONSTANT_Long_info.html | 345 -- .../mybytecode/CONSTANT_Methodref_info.html | 345 -- .../mybytecode/CONSTANT_NameAndType_info.html | 345 -- .../mybytecode/CONSTANT_String_info.html | 319 -- .../mybytecode/CONSTANT_Utf8_info.html | 319 -- .../mycompiler/mybytecode/CPInfo.html | 308 -- .../mycompiler/mybytecode/ClassFile.html | 926 ----- .../mycompiler/mybytecode/CodeAttribute.html | 527 --- .../mycompiler/mybytecode/ExceptionTable.html | 261 -- .../mycompiler/mybytecode/FieldInfo.html | 445 -- .../mycompiler/mybytecode/JVMCode.html | 3576 ----------------- .../mycompiler/mybytecode/Key.html | 329 -- .../mycompiler/mybytecode/MethodInfo.html | 367 -- .../mycompiler/mybytecode/SignatureInfo.html | 384 -- .../mybytecode/class-use/Attribute.html | 232 -- .../mybytecode/class-use/AttributeInfo.html | 115 - .../class-use/CONSTANT_Class_info.html | 115 - .../class-use/CONSTANT_Double_info.html | 115 - .../class-use/CONSTANT_Fieldref_info.html | 115 - .../class-use/CONSTANT_Float_info.html | 115 - .../class-use/CONSTANT_Integer_info.html | 115 - .../CONSTANT_InterfaceMethodref_info.html | 115 - .../class-use/CONSTANT_Long_info.html | 115 - .../class-use/CONSTANT_Methodref_info.html | 115 - .../class-use/CONSTANT_NameAndType_info.html | 115 - .../class-use/CONSTANT_String_info.html | 115 - .../class-use/CONSTANT_Utf8_info.html | 115 - .../mybytecode/class-use/CPInfo.html | 221 - .../mybytecode/class-use/ClassFile.html | 927 ----- .../mybytecode/class-use/CodeAttribute.html | 690 ---- .../mybytecode/class-use/ExceptionTable.html | 168 - .../mybytecode/class-use/FieldInfo.html | 168 - .../mybytecode/class-use/JVMCode.html | 115 - .../mycompiler/mybytecode/class-use/Key.html | 155 - .../mybytecode/class-use/MethodInfo.html | 168 - .../mybytecode/class-use/SignatureInfo.html | 115 - .../mycompiler/mybytecode/package-frame.html | 40 - .../mybytecode/package-summary.html | 225 -- .../mycompiler/mybytecode/package-tree.html | 155 - .../mycompiler/mybytecode/package-use.html | 261 -- .../myclass/BasicAssumptionClass.html | 281 -- .../mycompiler/myclass/Class.html | 915 ----- .../mycompiler/myclass/ClassBody.html | 531 --- .../mycompiler/myclass/ClassHelper.html | 272 -- .../mycompiler/myclass/Constant.html | 478 --- .../mycompiler/myclass/Constructor.html | 324 -- .../mycompiler/myclass/DeclId.html | 565 --- .../mycompiler/myclass/ExceptionList.html | 256 -- .../mycompiler/myclass/FieldDecl.html | 361 -- .../myclass/FieldInitialization.html | 403 -- .../mycompiler/myclass/FormalParameter.html | 483 --- .../myclass/ImportDeclarations.html | 259 -- .../mycompiler/myclass/InstVarDecl.html | 466 --- .../mycompiler/myclass/Method.html | 866 ---- .../mycompiler/myclass/ParameterList.html | 407 -- .../mycompiler/myclass/Status.html | 273 -- .../mycompiler/myclass/UsedId.html | 614 --- .../mycompiler/myclass/UserDef.html | 240 -- .../class-use/BasicAssumptionClass.html | 115 - .../mycompiler/myclass/class-use/Class.html | 720 ---- .../myclass/class-use/ClassBody.html | 188 - .../myclass/class-use/ClassHelper.html | 115 - .../myclass/class-use/Constant.html | 168 - .../myclass/class-use/Constructor.html | 115 - .../mycompiler/myclass/class-use/DeclId.html | 237 -- .../myclass/class-use/ExceptionList.html | 168 - .../myclass/class-use/FieldDecl.html | 224 -- .../class-use/FieldInitialization.html | 168 - .../myclass/class-use/FormalParameter.html | 194 - .../myclass/class-use/ImportDeclarations.html | 178 - .../myclass/class-use/InstVarDecl.html | 155 - .../mycompiler/myclass/class-use/Method.html | 263 -- .../myclass/class-use/ParameterList.html | 254 -- .../mycompiler/myclass/class-use/Status.html | 177 - .../mycompiler/myclass/class-use/UsedId.html | 562 --- .../mycompiler/myclass/class-use/UserDef.html | 155 - .../mycompiler/myclass/package-frame.html | 36 - .../mycompiler/myclass/package-summary.html | 208 - .../mycompiler/myclass/package-tree.html | 176 - .../mycompiler/myclass/package-use.html | 389 -- .../CTypeReconstructionException.html | 388 -- .../myexception/JVMCodeException.html | 250 -- .../myexception/MatchException.html | 250 -- .../myexception/SCClassBodyException.html | 291 -- .../myexception/SCClassException.html | 304 -- .../mycompiler/myexception/SCExcept.html | 347 -- .../mycompiler/myexception/SCException.html | 291 -- .../myexception/SCMethodException.html | 291 -- .../myexception/SCStatementException.html | 291 -- .../CTypeReconstructionException.html | 428 -- .../class-use/JVMCodeException.html | 1027 ----- .../myexception/class-use/MatchException.html | 157 - .../class-use/SCClassBodyException.html | 175 - .../class-use/SCClassException.html | 183 - .../myexception/class-use/SCExcept.html | 197 - .../myexception/class-use/SCException.html | 204 - .../class-use/SCMethodException.html | 158 - .../class-use/SCStatementException.html | 350 -- .../mycompiler/myexception/package-frame.html | 30 - .../myexception/package-summary.html | 176 - .../mycompiler/myexception/package-tree.html | 148 - .../mycompiler/myexception/package-use.html | 374 -- .../mycompiler/myinterface/Interface.html | 427 -- .../mycompiler/myinterface/InterfaceBody.html | 335 -- .../myinterface/class-use/Interface.html | 191 - .../myinterface/class-use/InterfaceBody.html | 168 - .../mycompiler/myinterface/package-frame.html | 20 - .../myinterface/package-summary.html | 142 - .../mycompiler/myinterface/package-tree.html | 133 - .../mycompiler/myinterface/package-use.html | 193 - .../mycompiler/mymodifier/Abstract.html | 289 -- .../mycompiler/mymodifier/Final.html | 289 -- .../mymodifier/InterfaceModifier.html | 290 -- .../mycompiler/mymodifier/Modifier.html | 278 -- .../mycompiler/mymodifier/Modifiers.html | 365 -- .../mycompiler/mymodifier/Private.html | 288 -- .../mycompiler/mymodifier/Protected.html | 288 -- .../mycompiler/mymodifier/Public.html | 288 -- .../mycompiler/mymodifier/Static.html | 288 -- .../mycompiler/mymodifier/Super.html | 290 -- .../mymodifier/class-use/Abstract.html | 115 - .../mymodifier/class-use/Final.html | 115 - .../class-use/InterfaceModifier.html | 115 - .../mymodifier/class-use/Modifier.html | 234 -- .../mymodifier/class-use/Modifiers.html | 293 -- .../mymodifier/class-use/Private.html | 115 - .../mymodifier/class-use/Protected.html | 115 - .../mymodifier/class-use/Public.html | 115 - .../mymodifier/class-use/Static.html | 115 - .../mymodifier/class-use/Super.html | 115 - .../mycompiler/mymodifier/package-frame.html | 28 - .../mymodifier/package-summary.html | 176 - .../mycompiler/mymodifier/package-tree.html | 140 - .../mycompiler/mymodifier/package-use.html | 214 - .../mycompiler/myoperator/AddOp.html | 292 -- .../mycompiler/myoperator/AndOp.html | 258 -- .../mycompiler/myoperator/DivideOp.html | 293 -- .../mycompiler/myoperator/EqualOp.html | 351 -- .../mycompiler/myoperator/GreaterEquOp.html | 318 -- .../mycompiler/myoperator/GreaterOp.html | 318 -- .../mycompiler/myoperator/LessEquOp.html | 318 -- .../mycompiler/myoperator/LessOp.html | 318 -- .../mycompiler/myoperator/LogOp.html | 398 -- .../mycompiler/myoperator/MinusOp.html | 293 -- .../mycompiler/myoperator/ModuloOp.html | 293 -- .../mycompiler/myoperator/MulOp.html | 250 -- .../mycompiler/myoperator/NotEqualOp.html | 351 -- .../mycompiler/myoperator/Operator.html | 384 -- .../mycompiler/myoperator/OrOp.html | 258 -- .../mycompiler/myoperator/PlusOp.html | 293 -- .../mycompiler/myoperator/RelOp.html | 287 -- .../mycompiler/myoperator/TimesOp.html | 293 -- .../myoperator/class-use/AddOp.html | 159 - .../myoperator/class-use/AndOp.html | 115 - .../myoperator/class-use/DivideOp.html | 115 - .../myoperator/class-use/EqualOp.html | 115 - .../myoperator/class-use/GreaterEquOp.html | 115 - .../myoperator/class-use/GreaterOp.html | 115 - .../myoperator/class-use/LessEquOp.html | 115 - .../myoperator/class-use/LessOp.html | 115 - .../myoperator/class-use/LogOp.html | 159 - .../myoperator/class-use/MinusOp.html | 115 - .../myoperator/class-use/ModuloOp.html | 115 - .../myoperator/class-use/MulOp.html | 163 - .../myoperator/class-use/NotEqualOp.html | 115 - .../myoperator/class-use/Operator.html | 267 -- .../mycompiler/myoperator/class-use/OrOp.html | 115 - .../myoperator/class-use/PlusOp.html | 115 - .../myoperator/class-use/RelOp.html | 175 - .../myoperator/class-use/TimesOp.html | 115 - .../mycompiler/myoperator/package-frame.html | 36 - .../myoperator/package-summary.html | 201 - .../mycompiler/myoperator/package-tree.html | 160 - .../mycompiler/myoperator/package-use.html | 179 - .../myparser/ClassAndParameter.html | 328 -- .../myparser/InterfaceAndParameter.html | 328 -- .../mycompiler/myparser/InterfaceList.html | 274 -- .../mycompiler/myparser/JavaLexer.html | 275 -- .../mycompiler/myparser/JavaParser.html | 1446 ------- .../myparser/JavaParser.yyException.html | 293 -- .../myparser/JavaParser.yyInput.html | 258 -- .../mycompiler/myparser/Scanner.html | 328 -- .../mycompiler/myparser/Token.html | 375 -- .../myparser/class-use/ClassAndParameter.html | 115 - .../class-use/InterfaceAndParameter.html | 115 - .../myparser/class-use/InterfaceList.html | 115 - .../myparser/class-use/JavaLexer.html | 155 - .../myparser/class-use/JavaParser.html | 155 - .../class-use/JavaParser.yyException.html | 210 - .../class-use/JavaParser.yyInput.html | 177 - .../myparser/class-use/Scanner.html | 115 - .../mycompiler/myparser/class-use/Token.html | 167 - .../mycompiler/myparser/package-frame.html | 33 - .../mycompiler/myparser/package-summary.html | 200 - .../mycompiler/myparser/package-tree.html | 150 - .../mycompiler/myparser/package-use.html | 201 - .../mycompiler/mystatement/ArgumentList.html | 384 -- .../mycompiler/mystatement/Assign.html | 623 --- .../mycompiler/mystatement/Binary.html | 687 ---- .../mycompiler/mystatement/BinaryExpr.html | 296 -- .../mycompiler/mystatement/Block.html | 622 --- .../mycompiler/mystatement/BoolLiteral.html | 530 --- .../mycompiler/mystatement/CastExpr.html | 561 --- .../mycompiler/mystatement/CharLiteral.html | 530 --- .../mycompiler/mystatement/DoubleLiteral.html | 563 --- .../mycompiler/mystatement/EmptyStmt.html | 445 -- .../mycompiler/mystatement/Expr.html | 560 --- .../mycompiler/mystatement/ExprStmt.html | 319 -- .../mycompiler/mystatement/FloatLiteral.html | 563 --- .../mycompiler/mystatement/ForStmt.html | 502 --- .../mycompiler/mystatement/IfStmt.html | 571 --- .../mycompiler/mystatement/InstVar.html | 576 --- .../mycompiler/mystatement/InstanceOf.html | 551 --- .../mycompiler/mystatement/IntLiteral.html | 563 --- .../mystatement/LambdaExpression.html | 636 --- .../mycompiler/mystatement/Literal.html | 406 -- .../mystatement/LocalOrFieldVar.html | 566 --- .../mycompiler/mystatement/LocalVarDecl.html | 695 ---- .../mycompiler/mystatement/LongLiteral.html | 563 --- .../mycompiler/mystatement/MethodCall.html | 817 ---- .../mycompiler/mystatement/NegativeExpr.html | 581 --- .../mycompiler/mystatement/NewArray.html | 580 --- .../mycompiler/mystatement/NewClass.html | 593 --- .../mycompiler/mystatement/NotExpr.html | 594 --- .../mycompiler/mystatement/Null.html | 485 --- .../mycompiler/mystatement/PositivExpr.html | 549 --- .../mycompiler/mystatement/PostDecExpr.html | 545 --- .../mycompiler/mystatement/PostIncExpr.html | 545 --- .../mycompiler/mystatement/PreDecExpr.html | 545 --- .../mycompiler/mystatement/PreIncExpr.html | 545 --- .../mycompiler/mystatement/Receiver.html | 345 -- .../mycompiler/mystatement/Return.html | 529 --- .../mycompiler/mystatement/Statement.html | 482 --- .../mycompiler/mystatement/StringLiteral.html | 496 --- .../mycompiler/mystatement/This.html | 586 --- .../mycompiler/mystatement/UnaryExpr.html | 334 -- .../mycompiler/mystatement/UnaryMinus.html | 265 -- .../mycompiler/mystatement/UnaryNot.html | 283 -- .../mycompiler/mystatement/UnaryPlus.html | 228 -- .../mycompiler/mystatement/WhileStmt.html | 552 --- .../mystatement/class-use/ArgumentList.html | 197 - .../mystatement/class-use/Assign.html | 168 - .../mystatement/class-use/Binary.html | 191 - .../mystatement/class-use/BinaryExpr.html | 159 - .../mystatement/class-use/Block.html | 250 -- .../mystatement/class-use/BoolLiteral.html | 115 - .../mystatement/class-use/CastExpr.html | 115 - .../mystatement/class-use/CharLiteral.html | 115 - .../mystatement/class-use/DoubleLiteral.html | 115 - .../mystatement/class-use/EmptyStmt.html | 115 - .../mystatement/class-use/Expr.html | 768 ---- .../mystatement/class-use/ExprStmt.html | 306 -- .../mystatement/class-use/FloatLiteral.html | 115 - .../mystatement/class-use/ForStmt.html | 115 - .../mystatement/class-use/IfStmt.html | 115 - .../mystatement/class-use/InstVar.html | 115 - .../mystatement/class-use/InstanceOf.html | 115 - .../mystatement/class-use/IntLiteral.html | 115 - .../class-use/LambdaExpression.html | 115 - .../mystatement/class-use/Literal.html | 183 - .../class-use/LocalOrFieldVar.html | 115 - .../mystatement/class-use/LocalVarDecl.html | 115 - .../mystatement/class-use/LongLiteral.html | 115 - .../mystatement/class-use/MethodCall.html | 157 - .../mystatement/class-use/NegativeExpr.html | 115 - .../mystatement/class-use/NewArray.html | 115 - .../mystatement/class-use/NewClass.html | 115 - .../mystatement/class-use/NotExpr.html | 115 - .../mystatement/class-use/Null.html | 115 - .../mystatement/class-use/PositivExpr.html | 115 - .../mystatement/class-use/PostDecExpr.html | 115 - .../mystatement/class-use/PostIncExpr.html | 115 - .../mystatement/class-use/PreDecExpr.html | 115 - .../mystatement/class-use/PreIncExpr.html | 115 - .../mystatement/class-use/Receiver.html | 168 - .../mystatement/class-use/Return.html | 155 - .../mystatement/class-use/Statement.html | 462 --- .../mystatement/class-use/StringLiteral.html | 115 - .../mystatement/class-use/This.html | 115 - .../mystatement/class-use/UnaryExpr.html | 183 - .../mystatement/class-use/UnaryMinus.html | 155 - .../mystatement/class-use/UnaryNot.html | 155 - .../mystatement/class-use/UnaryPlus.html | 155 - .../mystatement/class-use/WhileStmt.html | 115 - .../mycompiler/mystatement/package-frame.html | 62 - .../mystatement/package-summary.html | 305 -- .../mycompiler/mystatement/package-tree.html | 189 - .../mycompiler/mystatement/package-use.html | 278 -- .../mycompiler/mytest/APITest.html | 257 -- .../mycompiler/mytest/CByteCodeTest.html | 262 -- .../mycompiler/mytest/CInferenceTest.html | 262 -- .../mycompiler/mytest/CSimpleTest.html | 264 -- .../mycompiler/mytest/CWildcardTest.html | 262 -- .../mycompiler/mytest/CompilerTestCase.html | 273 -- .../mycompiler/mytest/JUnitTests.html | 273 -- .../mycompiler/mytest/LambdaTest.html | 320 -- .../mycompiler/mytest/class-use/APITest.html | 115 - .../mytest/class-use/CByteCodeTest.html | 115 - .../mytest/class-use/CInferenceTest.html | 115 - .../mytest/class-use/CSimpleTest.html | 115 - .../mytest/class-use/CWildcardTest.html | 115 - .../mytest/class-use/CompilerTestCase.html | 115 - .../mytest/class-use/JUnitTests.html | 115 - .../mytest/class-use/LambdaTest.html | 115 - .../mycompiler/mytest/package-frame.html | 26 - .../mycompiler/mytest/package-summary.html | 174 - .../mycompiler/mytest/package-tree.html | 143 - .../mycompiler/mytest/package-use.html | 115 - .../mycompiler/mytype/BaseType.html | 361 -- .../mycompiler/mytype/BooleanType.html | 329 -- .../mytype/BoundedGenericTypeVar.html | 390 -- .../mycompiler/mytype/CRefTypeSet.html | 318 -- .../mycompiler/mytype/CharacterType.html | 329 -- .../mycompiler/mytype/DoubleType.html | 329 -- .../mytype/ExtendsWildcardType.html | 485 --- .../mycompiler/mytype/FloatType.html | 329 -- .../mytype/FreshExtendsWildcardType.html | 410 -- .../mytype/FreshSuperWildcardType.html | 410 -- .../mycompiler/mytype/FreshWildcardType.html | 407 -- .../mycompiler/mytype/GenericTypeVar.html | 418 -- .../mycompiler/mytype/IMatchable.html | 220 - .../mycompiler/mytype/ITypeContainer.html | 220 - .../mycompiler/mytype/IntegerType.html | 329 -- .../mycompiler/mytype/LongType.html | 329 -- .../mycompiler/mytype/Pair.PairOperator.html | 337 -- doc/LambdaJavadoc/mycompiler/mytype/Pair.html | 620 --- .../mycompiler/mytype/ParaList.html | 308 -- .../mycompiler/mytype/RefType.html | 782 ---- .../mycompiler/mytype/ReturnType.html | 317 -- .../mycompiler/mytype/SuperWildcardType.html | 495 --- doc/LambdaJavadoc/mycompiler/mytype/Type.html | 539 --- .../mycompiler/mytype/TypePlaceholder.html | 646 --- doc/LambdaJavadoc/mycompiler/mytype/Void.html | 312 -- .../mycompiler/mytype/WildcardType.html | 411 -- .../mycompiler/mytype/class-use/BaseType.html | 188 - .../mytype/class-use/BooleanType.html | 157 - .../class-use/BoundedGenericTypeVar.html | 178 - .../mytype/class-use/CRefTypeSet.html | 159 - .../mytype/class-use/CharacterType.html | 157 - .../mytype/class-use/DoubleType.html | 157 - .../mytype/class-use/ExtendsWildcardType.html | 165 - .../mytype/class-use/FloatType.html | 157 - .../class-use/FreshExtendsWildcardType.html | 165 - .../class-use/FreshSuperWildcardType.html | 165 - .../mytype/class-use/FreshWildcardType.html | 182 - .../mytype/class-use/GenericTypeVar.html | 619 --- .../mytype/class-use/IMatchable.html | 201 - .../mytype/class-use/ITypeContainer.html | 163 - .../mytype/class-use/IntegerType.html | 157 - .../mycompiler/mytype/class-use/LongType.html | 157 - .../mytype/class-use/Pair.PairOperator.html | 206 - .../mycompiler/mytype/class-use/Pair.html | 625 --- .../mycompiler/mytype/class-use/ParaList.html | 192 - .../mycompiler/mytype/class-use/RefType.html | 475 --- .../mytype/class-use/ReturnType.html | 157 - .../mytype/class-use/SuperWildcardType.html | 186 - .../mycompiler/mytype/class-use/Type.html | 2042 ---------- .../mytype/class-use/TypePlaceholder.html | 263 -- .../mycompiler/mytype/class-use/Void.html | 157 - .../mytype/class-use/WildcardType.html | 186 - .../mycompiler/mytype/package-frame.html | 50 - .../mycompiler/mytype/package-summary.html | 275 -- .../mycompiler/mytype/package-tree.html | 193 - .../mycompiler/mytype/package-use.html | 606 --- .../mytypereconstruction/CHelper.html | 279 -- .../CIntersectionType.html | 372 -- .../mytypereconstruction/CMultiplyTuple.html | 434 -- .../CReconstructionTuple.html | 366 -- .../mytypereconstruction/CSubstitution.html | 460 --- .../CSubstitutionGenVar.html | 314 -- .../mytypereconstruction/CSupportData.html | 655 --- .../mytypereconstruction/CTriple.html | 447 --- .../CTypeReconstructionResult.html | 536 --- .../class-use/CHelper.html | 115 - .../class-use/CIntersectionType.html | 172 - .../class-use/CMultiplyTuple.html | 224 -- .../class-use/CReconstructionTuple.html | 190 - .../class-use/CSubstitution.html | 218 - .../class-use/CSubstitutionGenVar.html | 115 - .../class-use/CSupportData.html | 774 ---- .../class-use/CTriple.html | 210 - .../class-use/CTypeReconstructionResult.html | 371 -- .../mytypereconstruction/package-frame.html | 27 - .../mytypereconstruction/package-summary.html | 186 - .../mytypereconstruction/package-tree.html | 139 - .../mytypereconstruction/package-use.html | 415 -- .../CReplaceTypeEvent.html | 275 -- .../IReplaceTypeEventProvider.html | 281 -- .../ITypeReplacementListener.html | 241 -- .../class-use/CReplaceTypeEvent.html | 295 -- .../class-use/IReplaceTypeEventProvider.html | 158 - .../class-use/ITypeReplacementListener.html | 465 --- .../replacementlistener/package-frame.html | 24 - .../replacementlistener/package-summary.html | 158 - .../replacementlistener/package-tree.html | 133 - .../replacementlistener/package-use.html | 260 -- .../set/CHashtableSet.html | 527 --- .../set/CMultiplyTupleSet.html | 322 -- .../set/CReconstructionTupleSet.html | 325 -- .../mytypereconstruction/set/CSet.html | 420 -- .../set/CSubstitutionSet.html | 389 -- .../mytypereconstruction/set/CTripleSet.html | 330 -- .../set/CTypeAssumptionSet.html | 335 -- .../mytypereconstruction/set/CVectorSet.html | 459 --- .../set/IHashSetElement.html | 227 -- .../mytypereconstruction/set/IHashSetKey.html | 166 - .../set/class-use/CHashtableSet.html | 155 - .../set/class-use/CMultiplyTupleSet.html | 195 - .../class-use/CReconstructionTupleSet.html | 161 - .../set/class-use/CSet.html | 257 -- .../set/class-use/CSubstitutionSet.html | 881 ---- .../set/class-use/CTripleSet.html | 737 ---- .../set/class-use/CTypeAssumptionSet.html | 831 ---- .../set/class-use/CVectorSet.html | 206 - .../set/class-use/IHashSetElement.html | 197 - .../set/class-use/IHashSetKey.html | 294 -- .../set/package-frame.html | 31 - .../set/package-summary.html | 184 - .../set/package-tree.html | 149 - .../mytypereconstruction/set/package-use.html | 350 -- .../CInstVarTypeAssumption.html | 346 -- .../CLocalVarTypeAssumption.html | 445 -- .../typeassumption/CMethodTypeAssumption.html | 490 --- .../typeassumption/CParaTypeAssumption.html | 407 -- .../typeassumption/CTypeAssumption.html | 555 --- .../class-use/CInstVarTypeAssumption.html | 179 - .../class-use/CLocalVarTypeAssumption.html | 155 - .../class-use/CMethodTypeAssumption.html | 272 -- .../class-use/CParaTypeAssumption.html | 239 -- .../class-use/CTypeAssumption.html | 617 --- .../typeassumption/package-frame.html | 23 - .../typeassumption/package-summary.html | 153 - .../typeassumption/package-tree.html | 135 - .../typeassumption/package-use.html | 314 -- .../typeassumptionkey/CInstVarKey.html | 286 -- .../typeassumptionkey/CLocalVarKey.html | 439 -- .../typeassumptionkey/CMethodKey.html | 431 -- .../typeassumptionkey/CMethodParaKey.html | 435 -- .../typeassumptionkey/CTypeAssumptionKey.html | 336 -- .../typeassumptionkey/IMethodBoundKey.html | 288 -- .../class-use/CInstVarKey.html | 157 - .../class-use/CLocalVarKey.html | 183 - .../class-use/CMethodKey.html | 270 -- .../class-use/CMethodParaKey.html | 183 - .../class-use/CTypeAssumptionKey.html | 224 -- .../class-use/IMethodBoundKey.html | 194 - .../typeassumptionkey/package-frame.html | 27 - .../typeassumptionkey/package-summary.html | 167 - .../typeassumptionkey/package-tree.html | 139 - .../typeassumptionkey/package-use.html | 241 -- .../mytypereconstruction/unify/FC_TTO.html | 308 -- .../mytypereconstruction/unify/MUB.html | 235 -- .../mytypereconstruction/unify/Unify.html | 753 ---- .../unify/class-use/FC_TTO.html | 304 -- .../unify/class-use/MUB.html | 157 - .../unify/class-use/Unify.html | 115 - .../unify/package-frame.html | 21 - .../unify/package-summary.html | 145 - .../unify/package-tree.html | 130 - .../unify/package-use.html | 195 - .../mycompiler/package-frame.html | 26 - .../mycompiler/package-summary.html | 164 - .../mycompiler/package-tree.html | 135 - doc/LambdaJavadoc/mycompiler/package-use.html | 323 -- .../test/AbstractInferenceTest.html | 270 -- .../mycompiler/test/AllTests.html | 256 -- .../test/LambdaInterferenzTest.html | 256 -- .../mycompiler/test/Log4jWrapper.html | 238 -- .../test/blocks/AllTestsBlocks.html | 256 -- .../mycompiler/test/blocks/TestForStmt.html | 271 -- .../mycompiler/test/blocks/TestIfStmt.html | 271 -- .../blocks/TestInferenceAcrossBlocks.html | 271 -- .../test/blocks/TestSimpleBlocks.html | 271 -- .../test/blocks/TestSimpleVariable.html | 272 -- .../TestUndeterminedReturnNegative.html | 272 -- .../blocks/TestUninitializedVariable.html | 272 -- .../mycompiler/test/blocks/TestWhileStmt.html | 271 -- .../test/blocks/class-use/AllTestsBlocks.html | 115 - .../test/blocks/class-use/TestForStmt.html | 115 - .../test/blocks/class-use/TestIfStmt.html | 115 - .../class-use/TestInferenceAcrossBlocks.html | 115 - .../blocks/class-use/TestSimpleBlocks.html | 115 - .../blocks/class-use/TestSimpleVariable.html | 115 - .../TestUndeterminedReturnNegative.html | 115 - .../class-use/TestUninitializedVariable.html | 115 - .../test/blocks/class-use/TestWhileStmt.html | 115 - .../mycompiler/test/blocks/package-frame.html | 27 - .../test/blocks/package-summary.html | 181 - .../mycompiler/test/blocks/package-tree.html | 148 - .../mycompiler/test/blocks/package-use.html | 115 - .../test/class-use/AbstractInferenceTest.html | 845 ---- .../mycompiler/test/class-use/AllTests.html | 115 - .../test/class-use/LambdaInterferenzTest.html | 115 - .../test/class-use/Log4jWrapper.html | 155 - .../complexTypes/AllTestsComplexTypes.html | 256 -- .../test/complexTypes/TestOwnClassMember.html | 271 -- .../test/complexTypes/TestOwnClassMethod.html | 271 -- .../TestStandardLibInheritanceInference.html | 271 -- .../complexTypes/TestStandardLibMethod.html | 271 -- .../class-use/AllTestsComplexTypes.html | 115 - .../class-use/TestOwnClassMember.html | 115 - .../class-use/TestOwnClassMethod.html | 115 - .../TestStandardLibInheritanceInference.html | 115 - .../class-use/TestStandardLibMethod.html | 115 - .../test/complexTypes/package-frame.html | 23 - .../test/complexTypes/package-summary.html | 157 - .../test/complexTypes/package-tree.html | 144 - .../test/complexTypes/package-use.html | 115 - .../test/expectationTypes/BlockExpect.html | 374 -- .../test/expectationTypes/ClassExpect.html | 411 -- .../test/expectationTypes/Expectation.html | 347 -- .../GenericTypeVarExpect.html | 268 -- .../test/expectationTypes/IExpectation.html | 213 - .../expectationTypes/IUnknownTypeExpect.html | 213 - .../test/expectationTypes/MethodExpect.html | 589 --- .../TypePlaceholderExpect.html | 268 -- .../UnknownTypesMappingExpect.html | 306 -- .../test/expectationTypes/VarExpect.html | 413 -- .../class-use/BlockExpect.html | 198 - .../class-use/ClassExpect.html | 192 - .../class-use/Expectation.html | 115 - .../class-use/GenericTypeVarExpect.html | 115 - .../class-use/IExpectation.html | 181 - .../class-use/IUnknownTypeExpect.html | 214 - .../class-use/MethodExpect.html | 181 - .../class-use/TypePlaceholderExpect.html | 115 - .../class-use/UnknownTypesMappingExpect.html | 155 - .../expectationTypes/class-use/VarExpect.html | 205 - .../test/expectationTypes/package-frame.html | 31 - .../expectationTypes/package-summary.html | 200 - .../test/expectationTypes/package-tree.html | 140 - .../test/expectationTypes/package-use.html | 180 - .../test/generics/AllTestsGenerics.html | 256 -- ...TestAssignmentTwoGenericTypesNegative.html | 271 -- ...tClassesWithBoundedGenericsOfTwoTypes.html | 271 -- ...assesWithBoundedGenericsUsedInMethods.html | 271 -- ...estExtendedClassesWithBoundedGenerics.html | 271 -- .../test/generics/TestNestedGenerics.html | 271 -- .../TestNestedGenericsNonExistingType.html | 271 -- .../TestSimpleClassesWithBoundedGenerics.html | 271 -- ...pleClassesWithBoundedGenericsNegative.html | 271 -- .../TestSimpleClassesWithGenerics.html | 271 -- ...TestSimpleClassesWithGenericsNegative.html | 271 -- .../generics/class-use/AllTestsGenerics.html | 115 - ...TestAssignmentTwoGenericTypesNegative.html | 115 - ...tClassesWithBoundedGenericsOfTwoTypes.html | 115 - ...assesWithBoundedGenericsUsedInMethods.html | 115 - ...estExtendedClassesWithBoundedGenerics.html | 115 - .../class-use/TestNestedGenerics.html | 115 - .../TestNestedGenericsNonExistingType.html | 115 - .../TestSimpleClassesWithBoundedGenerics.html | 115 - ...pleClassesWithBoundedGenericsNegative.html | 115 - .../TestSimpleClassesWithGenerics.html | 115 - ...TestSimpleClassesWithGenericsNegative.html | 115 - .../test/generics/package-frame.html | 29 - .../test/generics/package-summary.html | 193 - .../test/generics/package-tree.html | 150 - .../mycompiler/test/generics/package-use.html | 115 - .../AllTestsInferenceByCharacteristic.html | 256 -- .../TestInferenceOwnTypeByMember.html | 271 -- ...InferenceOwnTypeByMemberAcrossClasses.html | 271 -- .../TestInferenceOwnTypeByMethodCall.html | 271 -- ...renceOwnTypeByMethodCallAcrossClasses.html | 271 -- ...TestInferenceOwnTypeByMethodParameter.html | 271 -- ...erenceOwnTypeByMethodReturnTypeMixed1.html | 268 -- .../TestInferenceOwnTypeByReturnType.html | 271 -- ...renceOwnTypeByReturnTypeAcrossClasses.html | 271 -- .../TestInferenceStdTypeByOperation.html | 271 -- .../TestInferenceStdTypeByReturnType.html | 271 -- .../AllTestsInferenceByCharacteristic.html | 115 - .../TestInferenceOwnTypeByMember.html | 115 - ...InferenceOwnTypeByMemberAcrossClasses.html | 115 - .../TestInferenceOwnTypeByMethodCall.html | 115 - ...renceOwnTypeByMethodCallAcrossClasses.html | 115 - ...TestInferenceOwnTypeByMethodParameter.html | 115 - ...erenceOwnTypeByMethodReturnTypeMixed1.html | 115 - .../TestInferenceOwnTypeByReturnType.html | 115 - ...renceOwnTypeByReturnTypeAcrossClasses.html | 115 - .../TestInferenceStdTypeByOperation.html | 115 - .../TestInferenceStdTypeByReturnType.html | 115 - .../package-frame.html | 29 - .../package-summary.html | 191 - .../package-tree.html | 150 - .../package-use.html | 115 - .../inheritance/AllTestsInheritance.html | 256 -- .../TestInheritanceAcrossLevel.html | 268 -- .../inheritance/TestInheritanceCircle.html | 268 -- .../TestInheritanceConstructor.html | 268 -- .../inheritance/TestInheritanceMultiple.html | 268 -- .../TestInheritanceMultipleClasses.html | 268 -- .../TestInheritanceOverriding.html | 268 -- .../TestInheritanceTwoHierarchies.html | 268 -- .../inheritance/TestSimpleInheritance.html | 268 -- .../class-use/AllTestsInheritance.html | 115 - .../class-use/TestInheritanceAcrossLevel.html | 115 - .../class-use/TestInheritanceCircle.html | 115 - .../class-use/TestInheritanceConstructor.html | 115 - .../class-use/TestInheritanceMultiple.html | 115 - .../TestInheritanceMultipleClasses.html | 115 - .../class-use/TestInheritanceOverriding.html | 115 - .../TestInheritanceTwoHierarchies.html | 115 - .../class-use/TestSimpleInheritance.html | 115 - .../inheritance/package-frame.html | 27 - .../inheritance/package-summary.html | 165 - .../inheritance/package-tree.html | 148 - .../javaConcepts/inheritance/package-use.html | 115 - .../overloading/AllTestsOverloading.html | 256 -- ...verloadingDifferentNumberOfParameters.html | 268 -- ...ntNumberOfParametersAndDifferentTypes.html | 268 -- .../OverloadingGenericNotSameHierarchy.html | 268 -- .../OverloadingGenericSameHierarchy.html | 268 -- ...gGenericTypeInferenceNotSameHierarchy.html | 268 -- ...dingGenericTypeInferenceSameHierarchy.html | 268 -- .../OverloadingNotSameHierarchy.html | 268 -- .../overloading/OverloadingSameHierarchy.html | 268 -- .../overloading/OverloadingSameSignature.html | 268 -- ...dingSameSignatureDifferentReturnTypes.html | 268 -- .../OverloadingSameSignatureGenerics.html | 268 -- ...rloadingTypeInferenceNotSameHierarchy.html | 268 -- ...OverloadingTypeInferenceSameHierarchy.html | 268 -- .../class-use/AllTestsOverloading.html | 115 - ...verloadingDifferentNumberOfParameters.html | 115 - ...ntNumberOfParametersAndDifferentTypes.html | 115 - .../OverloadingGenericNotSameHierarchy.html | 115 - .../OverloadingGenericSameHierarchy.html | 115 - ...gGenericTypeInferenceNotSameHierarchy.html | 115 - ...dingGenericTypeInferenceSameHierarchy.html | 115 - .../OverloadingNotSameHierarchy.html | 115 - .../class-use/OverloadingSameHierarchy.html | 115 - .../class-use/OverloadingSameSignature.html | 115 - ...dingSameSignatureDifferentReturnTypes.html | 115 - .../OverloadingSameSignatureGenerics.html | 115 - ...rloadingTypeInferenceNotSameHierarchy.html | 115 - ...OverloadingTypeInferenceSameHierarchy.html | 115 - .../overloading/package-frame.html | 32 - .../overloading/package-summary.html | 185 - .../overloading/package-tree.html | 153 - .../javaConcepts/overloading/package-use.html | 115 - .../staticAccess/AllTestsStaticAccess.html | 256 -- .../staticAccess/TestNonStaticAccess.html | 271 -- .../staticAccess/TestStaticAccess.html | 271 -- .../staticAccess/TestStaticAccessError.html | 271 -- .../class-use/AllTestsStaticAccess.html | 115 - .../class-use/TestNonStaticAccess.html | 115 - .../class-use/TestStaticAccess.html | 115 - .../class-use/TestStaticAccessError.html | 115 - .../staticAccess/package-frame.html | 22 - .../staticAccess/package-summary.html | 151 - .../staticAccess/package-tree.html | 143 - .../staticAccess/package-use.html | 115 - .../test/lambda/BasicAssumptionsTest.html | 269 -- .../test/lambda/ConstructorTest.html | 269 -- .../test/lambda/GenericVarTest.html | 269 -- .../test/lambda/OverloadingTest.html | 269 -- .../test/lambda/ParseMultipleFilesTest.html | 269 -- .../mycompiler/test/lambda/TestAssign.html | 297 -- .../mycompiler/test/lambda/TestFunN.html | 269 -- .../mycompiler/test/lambda/TestIfStmt.html | 269 -- .../mycompiler/test/lambda/TestLambda.html | 269 -- .../test/lambda/TestMethodCall.html | 269 -- .../mycompiler/test/lambda/TestThis.html | 269 -- .../mycompiler/test/lambda/TestWhile.html | 269 -- .../class-use/BasicAssumptionsTest.html | 115 - .../lambda/class-use/ConstructorTest.html | 115 - .../test/lambda/class-use/GenericVarTest.html | 115 - .../lambda/class-use/OverloadingTest.html | 115 - .../class-use/ParseMultipleFilesTest.html | 115 - .../test/lambda/class-use/TestAssign.html | 115 - .../test/lambda/class-use/TestFunN.html | 115 - .../test/lambda/class-use/TestIfStmt.html | 115 - .../test/lambda/class-use/TestLambda.html | 115 - .../test/lambda/class-use/TestMethodCall.html | 115 - .../test/lambda/class-use/TestThis.html | 115 - .../test/lambda/class-use/TestWhile.html | 115 - .../mycompiler/test/lambda/package-frame.html | 30 - .../test/lambda/package-summary.html | 177 - .../mycompiler/test/lambda/package-tree.html | 147 - .../mycompiler/test/lambda/package-use.html | 115 - .../AbstractInferenceTestExtendedOLD.html | 261 -- .../AbstractInferenceTestOLD_2.html | 220 - .../AbstractInferenceTestOld.html | 267 -- .../CTypeAssumptionWrapper.html | 355 -- .../test/notUsedAnymore/IResultValidator.html | 206 - .../test/notUsedAnymore/TEst_2.html | 256 -- .../mycompiler/test/notUsedAnymore/Test.html | 256 -- .../TestAbstractInferenceTest.html | 292 -- .../TestAbstractInferenceTest2.html | 268 -- .../TestClassMemberWithoutType.html | 273 -- .../TestConstantsWithoutType.html | 271 -- .../test/notUsedAnymore/TestGenerics.html | 271 -- ...CheckValidImplementationFromInterface.html | 268 -- .../notUsedAnymore/TestMethodReturnType.html | 268 -- .../TestMethodReturnTypeNegative.html | 268 -- .../TestMethodReturnTypeNegative2.html | 268 -- .../AbstractInferenceTestExtendedOLD.html | 115 - .../class-use/AbstractInferenceTestOLD_2.html | 159 - .../class-use/AbstractInferenceTestOld.html | 115 - .../class-use/CTypeAssumptionWrapper.html | 115 - .../class-use/IResultValidator.html | 115 - .../test/notUsedAnymore/class-use/TEst_2.html | 115 - .../test/notUsedAnymore/class-use/Test.html | 115 - .../class-use/TestAbstractInferenceTest.html | 115 - .../class-use/TestAbstractInferenceTest2.html | 115 - .../class-use/TestClassMemberWithoutType.html | 115 - .../class-use/TestConstantsWithoutType.html | 115 - .../class-use/TestGenerics.html | 115 - ...CheckValidImplementationFromInterface.html | 115 - .../class-use/TestMethodReturnType.html | 115 - .../TestMethodReturnTypeNegative.html | 115 - .../TestMethodReturnTypeNegative2.html | 115 - .../test/notUsedAnymore/package-frame.html | 37 - .../test/notUsedAnymore/package-summary.html | 215 - .../test/notUsedAnymore/package-tree.html | 161 - .../test/notUsedAnymore/package-use.html | 148 - .../test/operators/AllTestsOperators.html | 256 -- .../operators/TestOperatorArithmetic.html | 271 -- .../test/operators/TestOperatorBitwise.html | 271 -- .../test/operators/TestOperatorBool.html | 271 -- .../operators/TestOperatorComparison.html | 271 -- .../test/operators/TestOperatorIncrement.html | 271 -- .../test/operators/TestOperatorObjects.html | 271 -- .../test/operators/TestOperatorString.html | 271 -- .../class-use/AllTestsOperators.html | 115 - .../class-use/TestOperatorArithmetic.html | 115 - .../class-use/TestOperatorBitwise.html | 115 - .../operators/class-use/TestOperatorBool.html | 115 - .../class-use/TestOperatorComparison.html | 115 - .../class-use/TestOperatorIncrement.html | 115 - .../class-use/TestOperatorObjects.html | 115 - .../class-use/TestOperatorString.html | 115 - .../test/operators/package-frame.html | 26 - .../test/operators/package-summary.html | 175 - .../test/operators/package-tree.html | 147 - .../test/operators/package-use.html | 115 - .../mycompiler/test/package-frame.html | 22 - .../mycompiler/test/package-summary.html | 156 - .../mycompiler/test/package-tree.html | 139 - .../mycompiler/test/package-use.html | 458 --- .../AllTestsPrimitiveTypes.html | 256 -- .../test/primitiveTypes/BooleanTest.html | 271 -- .../test/primitiveTypes/ByteTest.html | 271 -- .../test/primitiveTypes/CharTest.html | 271 -- .../test/primitiveTypes/DoubleTest.html | 271 -- .../test/primitiveTypes/FloatTest.html | 271 -- .../test/primitiveTypes/IntegerTest.html | 271 -- .../test/primitiveTypes/LongTest.html | 271 -- .../test/primitiveTypes/StringTest.html | 271 -- .../test/primitiveTypes/TestSimpleTypes.html | 271 -- .../class-use/AllTestsPrimitiveTypes.html | 115 - .../primitiveTypes/class-use/BooleanTest.html | 115 - .../primitiveTypes/class-use/ByteTest.html | 115 - .../primitiveTypes/class-use/CharTest.html | 115 - .../primitiveTypes/class-use/DoubleTest.html | 115 - .../primitiveTypes/class-use/FloatTest.html | 115 - .../primitiveTypes/class-use/IntegerTest.html | 115 - .../primitiveTypes/class-use/LongTest.html | 115 - .../primitiveTypes/class-use/StringTest.html | 115 - .../class-use/TestSimpleTypes.html | 115 - .../test/primitiveTypes/package-frame.html | 28 - .../test/primitiveTypes/package-summary.html | 187 - .../test/primitiveTypes/package-tree.html | 149 - .../test/primitiveTypes/package-use.html | 115 - .../test/trivial/AllTestsTrivial.html | 256 -- .../test/trivial/TestClassEmpty.html | 271 -- .../test/trivial/TestClassEmptyGenerics.html | 271 -- .../test/trivial/TestClassMember.html | 271 -- .../trivial/TestClassMemberAssignment.html | 271 -- .../test/trivial/TestConstants.html | 271 -- .../test/trivial/TestConstructor.html | 271 -- .../test/trivial/TestConstructorNegative.html | 271 -- .../test/trivial/TestInterfaceEmpty.html | 271 -- .../test/trivial/TestInterfaceMember.html | 271 -- .../test/trivial/TestInterfaceMethod.html | 271 -- .../trivial/TestInterfaceNotInferenced.html | 271 -- .../test/trivial/TestMethodEmpty.html | 271 -- .../test/trivial/TestMethodEmptyGeneric.html | 271 -- .../trivial/TestMethodEmptyParameter.html | 273 -- ...estMethodEmptyParameterGenericExtends.html | 268 -- .../trivial/class-use/AllTestsTrivial.html | 115 - .../trivial/class-use/TestClassEmpty.html | 115 - .../class-use/TestClassEmptyGenerics.html | 115 - .../trivial/class-use/TestClassMember.html | 115 - .../class-use/TestClassMemberAssignment.html | 115 - .../test/trivial/class-use/TestConstants.html | 115 - .../trivial/class-use/TestConstructor.html | 115 - .../class-use/TestConstructorNegative.html | 115 - .../trivial/class-use/TestInterfaceEmpty.html | 115 - .../class-use/TestInterfaceMember.html | 115 - .../class-use/TestInterfaceMethod.html | 115 - .../class-use/TestInterfaceNotInferenced.html | 115 - .../trivial/class-use/TestMethodEmpty.html | 115 - .../class-use/TestMethodEmptyGeneric.html | 115 - .../class-use/TestMethodEmptyParameter.html | 115 - ...estMethodEmptyParameterGenericExtends.html | 115 - .../test/trivial/package-frame.html | 34 - .../test/trivial/package-summary.html | 221 - .../mycompiler/test/trivial/package-tree.html | 155 - .../mycompiler/test/trivial/package-use.html | 115 - .../TrAlgorithmTestSuite.html | 259 -- .../typeReconstructionTest/TrMakeFCTest.html | 331 -- .../TrSubUnifyTest.html | 338 -- .../typeReconstructionTest/TrUnifyTest.html | 361 -- .../class-use/TrAlgorithmTestSuite.html | 115 - .../class-use/TrMakeFCTest.html | 115 - .../class-use/TrSubUnifyTest.html | 115 - .../class-use/TrUnifyTest.html | 115 - .../typeReconstructionTest/package-frame.html | 22 - .../package-summary.html | 145 - .../typeReconstructionTest/package-tree.html | 139 - .../typeReconstructionTest/package-use.html | 115 - .../unused/ConstantValueAttribute.html | 228 -- .../mycompiler/unused/Import.html | 240 -- .../mycompiler/unused/JavaCompiler.html | 298 -- .../mycompiler/unused/TestClass.html | 260 -- .../class-use/ConstantValueAttribute.html | 115 - .../mycompiler/unused/class-use/Import.html | 155 - .../unused/class-use/JavaCompiler.html | 115 - .../unused/class-use/TestClass.html | 115 - .../mycompiler/unused/package-frame.html | 22 - .../mycompiler/unused/package-summary.html | 145 - .../mycompiler/unused/package-tree.html | 139 - .../mycompiler/unused/package-use.html | 148 - doc/LambdaJavadoc/overview-frame.html | 54 - doc/LambdaJavadoc/overview-summary.html | 262 -- doc/LambdaJavadoc/overview-tree.html | 683 ---- doc/LambdaJavadoc/package-list | 35 - doc/LambdaJavadoc/resources/background.gif | Bin 2313 -> 0 bytes doc/LambdaJavadoc/resources/tab.gif | Bin 291 -> 0 bytes doc/LambdaJavadoc/resources/titlebar.gif | Bin 10701 -> 0 bytes doc/LambdaJavadoc/resources/titlebar_end.gif | Bin 849 -> 0 bytes doc/LambdaJavadoc/serialized-form.html | 329 -- doc/LambdaJavadoc/stylesheet.css | 474 --- doc/LambdaJavadoc/typinferenz/Constraint.html | 331 -- .../typinferenz/ConstraintsSet.html | 325 -- .../typinferenz/FreshTypeVariable.html | 325 -- doc/LambdaJavadoc/typinferenz/FunN.html | 395 -- .../typinferenz/KarthesischesProdukt.html | 256 -- .../typinferenz/Overloading.html | 282 -- doc/LambdaJavadoc/typinferenz/ResultSet.html | 318 -- .../typinferenz/SingleConstraint.html | 315 -- doc/LambdaJavadoc/typinferenz/Typable.html | 224 -- .../typinferenz/TypeAssumptions.html | 643 --- .../typinferenz/TypinferenzException.html | 259 -- .../typinferenz/class-use/Constraint.html | 200 - .../typinferenz/class-use/ConstraintsSet.html | 388 -- .../class-use/FreshTypeVariable.html | 115 - .../typinferenz/class-use/FunN.html | 115 - .../class-use/KarthesischesProdukt.html | 115 - .../typinferenz/class-use/Overloading.html | 115 - .../typinferenz/class-use/ResultSet.html | 529 --- .../class-use/SingleConstraint.html | 115 - .../typinferenz/class-use/Typable.html | 329 -- .../class-use/TypeAssumptions.html | 489 --- .../class-use/TypinferenzException.html | 115 - .../typinferenz/package-frame.html | 35 - .../typinferenz/package-summary.html | 205 - .../typinferenz/package-tree.html | 164 - .../typinferenz/package-use.html | 288 -- 910 files changed, 229651 deletions(-) delete mode 100755 doc/LambdaJavadoc/allclasses-frame.html delete mode 100755 doc/LambdaJavadoc/allclasses-noframe.html delete mode 100755 doc/LambdaJavadoc/constant-values.html delete mode 100755 doc/LambdaJavadoc/deprecated-list.html delete mode 100755 doc/LambdaJavadoc/help-doc.html delete mode 100755 doc/LambdaJavadoc/index-files/index-1.html delete mode 100755 doc/LambdaJavadoc/index-files/index-10.html delete mode 100755 doc/LambdaJavadoc/index-files/index-11.html delete mode 100755 doc/LambdaJavadoc/index-files/index-12.html delete mode 100755 doc/LambdaJavadoc/index-files/index-13.html delete mode 100755 doc/LambdaJavadoc/index-files/index-14.html delete mode 100755 doc/LambdaJavadoc/index-files/index-15.html delete mode 100755 doc/LambdaJavadoc/index-files/index-16.html delete mode 100755 doc/LambdaJavadoc/index-files/index-17.html delete mode 100755 doc/LambdaJavadoc/index-files/index-18.html delete mode 100755 doc/LambdaJavadoc/index-files/index-19.html delete mode 100755 doc/LambdaJavadoc/index-files/index-2.html delete mode 100755 doc/LambdaJavadoc/index-files/index-20.html delete mode 100755 doc/LambdaJavadoc/index-files/index-21.html delete mode 100755 doc/LambdaJavadoc/index-files/index-22.html delete mode 100755 doc/LambdaJavadoc/index-files/index-23.html delete mode 100755 doc/LambdaJavadoc/index-files/index-24.html delete mode 100755 doc/LambdaJavadoc/index-files/index-3.html delete mode 100755 doc/LambdaJavadoc/index-files/index-4.html delete mode 100755 doc/LambdaJavadoc/index-files/index-5.html delete mode 100755 doc/LambdaJavadoc/index-files/index-6.html delete mode 100755 doc/LambdaJavadoc/index-files/index-7.html delete mode 100755 doc/LambdaJavadoc/index-files/index-8.html delete mode 100755 doc/LambdaJavadoc/index-files/index-9.html delete mode 100755 doc/LambdaJavadoc/index.html delete mode 100755 doc/LambdaJavadoc/myJvmDisassembler/package-frame.html delete mode 100755 doc/LambdaJavadoc/myJvmDisassembler/package-summary.html delete mode 100755 doc/LambdaJavadoc/myJvmDisassembler/package-tree.html delete mode 100755 doc/LambdaJavadoc/myJvmDisassembler/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/AClassOrInterface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/IItemWithOffset.html delete mode 100755 doc/LambdaJavadoc/mycompiler/MyCompiler.html delete mode 100755 doc/LambdaJavadoc/mycompiler/MyCompilerAPI.html delete mode 100755 doc/LambdaJavadoc/mycompiler/SourceFile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/class-use/AClassOrInterface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/class-use/IItemWithOffset.html delete mode 100755 doc/LambdaJavadoc/mycompiler/class-use/MyCompiler.html delete mode 100755 doc/LambdaJavadoc/mycompiler/class-use/MyCompilerAPI.html delete mode 100755 doc/LambdaJavadoc/mycompiler/class-use/SourceFile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/Attribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/AttributeInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Class_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Double_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Float_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Long_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_String_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CPInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/ClassFile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/CodeAttribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/ExceptionTable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/FieldInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/JVMCode.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/Key.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/MethodInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/SignatureInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Attribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/AttributeInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CPInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ClassFile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CodeAttribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ExceptionTable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/FieldInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/JVMCode.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Key.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/MethodInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/class-use/SignatureInfo.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mybytecode/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/BasicAssumptionClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/Class.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/ClassBody.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/ClassHelper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/Constant.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/Constructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/DeclId.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/ExceptionList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/FieldDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/FieldInitialization.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/FormalParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/ImportDeclarations.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/InstVarDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/Method.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/ParameterList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/Status.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/UsedId.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/UserDef.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/BasicAssumptionClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/Class.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassBody.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassHelper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/Constant.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/Constructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/DeclId.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/ExceptionList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldInitialization.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/FormalParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/ImportDeclarations.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/InstVarDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/Method.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/ParameterList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/Status.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/UsedId.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/class-use/UserDef.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myclass/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/CTypeReconstructionException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/JVMCodeException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/MatchException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCClassBodyException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCClassException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCExcept.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCMethodException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/SCStatementException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/JVMCodeException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/MatchException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassBodyException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCExcept.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCMethodException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/class-use/SCStatementException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myexception/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/Interface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/InterfaceBody.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/class-use/Interface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/class-use/InterfaceBody.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myinterface/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Abstract.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Final.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/InterfaceModifier.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Modifier.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Modifiers.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Private.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Protected.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Public.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Static.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/Super.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Abstract.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Final.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/InterfaceModifier.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifier.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifiers.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Private.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Protected.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Public.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Static.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Super.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mymodifier/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/AddOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/AndOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/DivideOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/EqualOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/GreaterEquOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/GreaterOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/LessEquOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/LessOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/LogOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/MinusOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/ModuloOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/MulOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/NotEqualOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/Operator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/OrOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/PlusOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/RelOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/TimesOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/AddOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/AndOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/DivideOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/EqualOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterEquOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessEquOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/LogOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/MinusOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/ModuloOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/MulOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/NotEqualOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/Operator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/OrOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/PlusOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/RelOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/class-use/TimesOp.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myoperator/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/ClassAndParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/InterfaceAndParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/InterfaceList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/JavaLexer.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/JavaParser.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyInput.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/Scanner.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/Token.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/ClassAndParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceAndParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaLexer.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyException.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/Scanner.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/class-use/Token.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/myparser/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/ArgumentList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Assign.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Binary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/BinaryExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Block.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/BoolLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/CastExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/CharLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/DoubleLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/EmptyStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Expr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/ExprStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/FloatLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/ForStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/IfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/InstVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/InstanceOf.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/IntLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/LambdaExpression.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Literal.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/LocalOrFieldVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/LocalVarDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/LongLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/MethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/NegativeExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/NewArray.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/NewClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/NotExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Null.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/PositivExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/PostDecExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/PostIncExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/PreDecExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/PreIncExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Receiver.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Return.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/Statement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/StringLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/This.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/UnaryExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/UnaryMinus.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/UnaryNot.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/UnaryPlus.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/WhileStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/ArgumentList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Assign.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Binary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/BinaryExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Block.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/BoolLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/CastExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/CharLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/DoubleLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/EmptyStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Expr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/ExprStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/FloatLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/ForStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/IfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstanceOf.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/IntLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/LambdaExpression.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Literal.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalVarDecl.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/LongLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/MethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/NegativeExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewArray.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/NotExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Null.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/PositivExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostDecExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostIncExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreDecExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreIncExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Receiver.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Return.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/Statement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/StringLiteral.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/This.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryExpr.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryMinus.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryNot.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryPlus.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/class-use/WhileStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mystatement/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/APITest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/CByteCodeTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/CInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/CSimpleTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/CWildcardTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/CompilerTestCase.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/JUnitTests.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/LambdaTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/APITest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/CByteCodeTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/CInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/CSimpleTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/CWildcardTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/CompilerTestCase.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/JUnitTests.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/class-use/LambdaTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytest/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/BaseType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/BooleanType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/BoundedGenericTypeVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/CRefTypeSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/CharacterType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/DoubleType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/ExtendsWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/FloatType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/FreshExtendsWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/FreshSuperWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/FreshWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/GenericTypeVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/IMatchable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/ITypeContainer.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/IntegerType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/LongType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/Pair.PairOperator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/Pair.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/ParaList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/RefType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/ReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/SuperWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/Type.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/TypePlaceholder.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/Void.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/WildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/BaseType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/BooleanType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/BoundedGenericTypeVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/CRefTypeSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/CharacterType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/DoubleType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/ExtendsWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/FloatType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshExtendsWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshSuperWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/GenericTypeVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/IMatchable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/ITypeContainer.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/IntegerType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/LongType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.PairOperator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/ParaList.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/RefType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/ReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/SuperWildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/Type.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/TypePlaceholder.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/Void.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/class-use/WildcardType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytype/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CHelper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CIntersectionType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitution.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitutionGenVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSupportData.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTriple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CHelper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitutionGenVar.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTriple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTripleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CVectorSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/IMethodBoundKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/IMethodBoundKey.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/MUB.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/Unify.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/MUB.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/AbstractInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/AllTests.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/LambdaInterferenzTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/Log4jWrapper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/AllTestsBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestForStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestIfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestInferenceAcrossBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleVariable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestUndeterminedReturnNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestUninitializedVariable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/TestWhileStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/AllTestsBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestForStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestIfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestInferenceAcrossBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleBlocks.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleVariable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUndeterminedReturnNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUninitializedVariable.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestWhileStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/blocks/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/class-use/AbstractInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/class-use/AllTests.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/class-use/LambdaInterferenzTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/class-use/Log4jWrapper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/AllTestsComplexTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/AllTestsComplexTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibInheritanceInference.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/complexTypes/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/GenericTypeVarExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/IExpectation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/IUnknownTypeExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/TypePlaceholderExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/ClassExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/Expectation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/GenericTypeVarExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IExpectation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IUnknownTypeExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/MethodExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/TypePlaceholderExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/UnknownTypesMappingExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/VarExpect.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/AllTestsGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenericsNonExistingType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/AllTestsGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestAssignmentTwoGenericTypesNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsOfTwoTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsUsedInMethods.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestExtendedClassesWithBoundedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenericsNonExistingType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenericsNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenericsNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/generics/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/AllTestsInferenceByCharacteristic.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMemberAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCallAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodReturnTypeMixed1.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnTypeAcrossClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByOperation.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/AllTestsInheritance.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceAcrossLevel.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceCircle.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceConstructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultiple.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultipleClasses.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceOverriding.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceTwoHierarchies.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestSimpleInheritance.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/AllTestsOverloading.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParameters.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParametersAndDifferentTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignature.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureDifferentReturnTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceNotSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceSameHierarchy.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/AllTestsStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestNonStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccess.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccessError.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/BasicAssumptionsTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/ConstructorTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/GenericVarTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/OverloadingTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/ParseMultipleFilesTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestAssign.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestFunN.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestIfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestLambda.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestMethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestThis.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/TestWhile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/BasicAssumptionsTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ConstructorTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/GenericVarTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/OverloadingTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ParseMultipleFilesTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestAssign.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestFunN.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestIfStmt.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestLambda.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestMethodCall.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestThis.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestWhile.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/lambda/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOLD_2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TEst_2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/Test.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestExtendedOLD.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOLD_2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOld.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/CTypeAssumptionWrapper.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/IResultValidator.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TEst_2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/Test.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestClassMemberWithoutType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestConstantsWithoutType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestInheritanceCheckValidImplementationFromInterface.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnType.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative2.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/AllTestsOperators.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorArithmetic.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBitwise.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBool.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorComparison.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorIncrement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorObjects.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorString.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/AllTestsOperators.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorArithmetic.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBitwise.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBool.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorComparison.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorIncrement.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorObjects.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorString.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/operators/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/BooleanTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/ByteTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/CharTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/DoubleTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/FloatTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/IntegerTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/LongTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/StringTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/TestSimpleTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/AllTestsPrimitiveTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/BooleanTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/ByteTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/CharTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/DoubleTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/FloatTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/IntegerTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/LongTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/StringTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/TestSimpleTypes.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/AllTestsTrivial.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmptyGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMemberAssignment.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestConstants.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructorNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceNotInferenced.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyGeneric.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/AllTestsTrivial.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmptyGenerics.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMemberAssignment.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstants.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructor.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructorNegative.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMember.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMethod.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceNotInferenced.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmpty.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyGeneric.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameter.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameterGenericExtends.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/trivial/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrAlgorithmTestSuite.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrMakeFCTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrSubUnifyTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrUnifyTest.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-use.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/ConstantValueAttribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/Import.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/JavaCompiler.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/TestClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/class-use/ConstantValueAttribute.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/class-use/Import.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/class-use/JavaCompiler.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/class-use/TestClass.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/package-frame.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/package-summary.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/package-tree.html delete mode 100755 doc/LambdaJavadoc/mycompiler/unused/package-use.html delete mode 100755 doc/LambdaJavadoc/overview-frame.html delete mode 100755 doc/LambdaJavadoc/overview-summary.html delete mode 100755 doc/LambdaJavadoc/overview-tree.html delete mode 100755 doc/LambdaJavadoc/package-list delete mode 100755 doc/LambdaJavadoc/resources/background.gif delete mode 100755 doc/LambdaJavadoc/resources/tab.gif delete mode 100755 doc/LambdaJavadoc/resources/titlebar.gif delete mode 100755 doc/LambdaJavadoc/resources/titlebar_end.gif delete mode 100755 doc/LambdaJavadoc/serialized-form.html delete mode 100755 doc/LambdaJavadoc/stylesheet.css delete mode 100755 doc/LambdaJavadoc/typinferenz/Constraint.html delete mode 100755 doc/LambdaJavadoc/typinferenz/ConstraintsSet.html delete mode 100755 doc/LambdaJavadoc/typinferenz/FreshTypeVariable.html delete mode 100755 doc/LambdaJavadoc/typinferenz/FunN.html delete mode 100755 doc/LambdaJavadoc/typinferenz/KarthesischesProdukt.html delete mode 100755 doc/LambdaJavadoc/typinferenz/Overloading.html delete mode 100755 doc/LambdaJavadoc/typinferenz/ResultSet.html delete mode 100755 doc/LambdaJavadoc/typinferenz/SingleConstraint.html delete mode 100755 doc/LambdaJavadoc/typinferenz/Typable.html delete mode 100755 doc/LambdaJavadoc/typinferenz/TypeAssumptions.html delete mode 100755 doc/LambdaJavadoc/typinferenz/TypinferenzException.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/Constraint.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/ConstraintsSet.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/FreshTypeVariable.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/FunN.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/KarthesischesProdukt.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/Overloading.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/ResultSet.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/SingleConstraint.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/Typable.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/TypeAssumptions.html delete mode 100755 doc/LambdaJavadoc/typinferenz/class-use/TypinferenzException.html delete mode 100755 doc/LambdaJavadoc/typinferenz/package-frame.html delete mode 100755 doc/LambdaJavadoc/typinferenz/package-summary.html delete mode 100755 doc/LambdaJavadoc/typinferenz/package-tree.html delete mode 100755 doc/LambdaJavadoc/typinferenz/package-use.html diff --git a/doc/LambdaJavadoc/allclasses-frame.html b/doc/LambdaJavadoc/allclasses-frame.html deleted file mode 100755 index 78e0e2f6..00000000 --- a/doc/LambdaJavadoc/allclasses-frame.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - -All Classes - - - - -

    All Classes

    -
    - -
    - - diff --git a/doc/LambdaJavadoc/allclasses-noframe.html b/doc/LambdaJavadoc/allclasses-noframe.html deleted file mode 100755 index 931ced08..00000000 --- a/doc/LambdaJavadoc/allclasses-noframe.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - -All Classes - - - - -

    All Classes

    -
    - -
    - - diff --git a/doc/LambdaJavadoc/constant-values.html b/doc/LambdaJavadoc/constant-values.html deleted file mode 100755 index 4ea03e74..00000000 --- a/doc/LambdaJavadoc/constant-values.html +++ /dev/null @@ -1,724 +0,0 @@ - - - - - -Constant Field Values - - - - - - - -
    - - - - - -
    - - -
    -

    Constant Field Values

    -

    Contents

    - -
    -
    - - -

    mycompiler.*

    - - - - -

    mycompiler.myparser.*

    - - - - -

    mycompiler.mytypereconstruction.*

    -
      -
    • - - - - - - - - - - - - - - -
      mycompiler.mytypereconstruction.CSupportData 
      Modifier and TypeConstant FieldValue
      - -public static final java.lang.StringNO_METHOD"#nomethod#"
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/deprecated-list.html b/doc/LambdaJavadoc/deprecated-list.html deleted file mode 100755 index 144cdb2c..00000000 --- a/doc/LambdaJavadoc/deprecated-list.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Deprecated List - - - - - - - -
    - - - - - -
    - - -
    -

    Deprecated API

    -

    Contents

    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/help-doc.html b/doc/LambdaJavadoc/help-doc.html deleted file mode 100755 index 50f05cad..00000000 --- a/doc/LambdaJavadoc/help-doc.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -API Help - - - - - - - -
    - - - - - -
    - - -
    -

    How This API Document Is Organized

    -
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    -
    -
    -
      -
    • -

      Overview

      -

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      -
    • -
    • -

      Package

      -

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

      -
        -
      • Interfaces (italic)
      • -
      • Classes
      • -
      • Enums
      • -
      • Exceptions
      • -
      • Errors
      • -
      • Annotation Types
      • -
      -
    • -
    • -

      Class/Interface

      -

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      -
        -
      • Class inheritance diagram
      • -
      • Direct Subclasses
      • -
      • All Known Subinterfaces
      • -
      • All Known Implementing Classes
      • -
      • Class/interface declaration
      • -
      • Class/interface description
      • -
      -
        -
      • Nested Class Summary
      • -
      • Field Summary
      • -
      • Constructor Summary
      • -
      • Method Summary
      • -
      -
        -
      • Field Detail
      • -
      • Constructor Detail
      • -
      • Method Detail
      • -
      -

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      -
    • -
    • -

      Annotation Type

      -

      Each annotation type has its own separate page with the following sections:

      -
        -
      • Annotation Type declaration
      • -
      • Annotation Type description
      • -
      • Required Element Summary
      • -
      • Optional Element Summary
      • -
      • Element Detail
      • -
      -
    • -
    • -

      Enum

      -

      Each enum has its own separate page with the following sections:

      -
        -
      • Enum declaration
      • -
      • Enum description
      • -
      • Enum Constant Summary
      • -
      • Enum Constant Detail
      • -
      -
    • -
    • -

      Use

      -

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      -
    • -
    • -

      Tree (Class Hierarchy)

      -

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

      -
        -
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • -
      • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
      • -
      -
    • -
    • -

      Deprecated API

      -

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      -
    • -
    • -

      Index

      -

      The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

      -
    • -
    • -

      Prev/Next

      -

      These links take you to the next or previous class, interface, package, or related page.

      -
    • -
    • -

      Frames/No Frames

      -

      These links show and hide the HTML frames. All pages are available with or without frames.

      -
    • -
    • -

      All Classes

      -

      The All Classes link shows all classes and interfaces except non-static nested types.

      -
    • -
    • -

      Serialized Form

      -

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      -
    • -
    • -

      Constant Field Values

      -

      The Constant Field Values page lists the static final fields and their values.

      -
    • -
    -This help file applies to API documentation generated using the standard doclet.
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-1.html b/doc/LambdaJavadoc/index-files/index-1.html deleted file mode 100755 index 02e566c9..00000000 --- a/doc/LambdaJavadoc/index-files/index-1.html +++ /dev/null @@ -1,561 +0,0 @@ - - - - - -A-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    A

    -
    -
    aaload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    aastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    Abstract - Class in mycompiler.mymodifier
    -
    -
    Stellt den Modifier Abstract dar.
    -
    -
    Abstract() - Constructor for class mycompiler.mymodifier.Abstract
    -
     
    -
    ABSTRACT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    AbstractInferenceTest - Class in mycompiler.test
    -
    -
    Todo: - - exception handling cannot verify correct exception yet - - done: - exception handling - - commented asserts - - log4j - - cmethodkey usage - - Typeplaceholder support
    -
    -
    AbstractInferenceTestExtendedOLD - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    AbstractInferenceTestOld - Class in mycompiler.test.notUsedAnymore
    -
    -
    Todo: - inheritance - - exception handling cannot verify correct exception yet - - generic returntype does not work well - - cmethodkey-usage?
    -
    -
    AbstractInferenceTestOLD_2 - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    AClassOrInterface - Class in mycompiler
    -
    -
    Superklasse von Class und Interface.
    -
    -
    AClassOrInterface() - Constructor for class mycompiler.AClassOrInterface
    -
     
    -
    AClassOrInterface(String) - Constructor for class mycompiler.AClassOrInterface
    -
     
    -
    AClassOrInterface(String, Modifiers) - Constructor for class mycompiler.AClassOrInterface
    -
     
    -
    aconst_null - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    add(ConstraintsSet) - Method in class typinferenz.ConstraintsSet
    -
     
    -
    add(Constraint) - Method in class typinferenz.ConstraintsSet
    -
     
    -
    add(CTypeAssumption) - Method in class typinferenz.TypeAssumptions
    -
    -
    F�gt dem Assumption-Set eine neue Assumption hinzu.
    -
    -
    add(TypeAssumptions) - Method in class typinferenz.TypeAssumptions
    -
     
    -
    add(CTypeAssumptionSet) - Method in class typinferenz.TypeAssumptions
    -
     
    -
    add_class(String, String, String, short) - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Fuegt Informationen ueber eine neue Klasse ein.
    -
    -
    add_classblock_Element(Assign) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_classexceptions(SCClassException) - Method in exception mycompiler.myexception.SCException
    -
     
    -
    add_code(Byte) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_code_byte(int) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_code_byte_array(byte[]) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_code_int(int) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_code_short(int) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_CONSTANT_Class_info(String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_CONSTANT_Integer_info(int) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_CONSTANT_NameAndType_info(String, String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_CONSTANT_String_info(String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_CONSTANT_Utf8_info(String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_Expr(Expr) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    add_field(String, String, short, Attribute) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_field_ref(String, String, String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_interface(String, String, String, short) - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Fuegt Informationen ueber ein neues Interface ein.
    -
    -
    add_local(String, Type) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    add_method(String, String, ParameterList, Type, Block, short, Menge, boolean) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_method_ref(String, String, String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    add_ParaList(Type) - Method in class mycompiler.mytype.ParaList
    -
     
    -
    add_Parameter(Type) - Method in class mycompiler.mytype.RefType
    -
     
    -
    addAll(CMengeSet<E>) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    addBlock(BlockExpect) - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    addBound(Type) - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    addClass(ClassExpect) - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    addClassname(String) - Method in exception mycompiler.myexception.SCClassException
    -
     
    -
    addClassName(String) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    addConstraint(Pair) - Method in class typinferenz.Constraint
    -
    -
    Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw.
    -
    -
    addConstraint(Pair) - Method in class typinferenz.SingleConstraint
    -
     
    -
    addDataFromTupel(CReconstructionTuple) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    addElement(FieldDecl) - Method in class mycompiler.myinterface.InterfaceBody
    -
    -
    Fuegt ein neues Element (Konstantendefinition oder abstrakte - Methode) ein.
    -
    -
    addElement(E) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
    -
    Diese Methode f�gt das Element element unter dem Key des Elements - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
    -
    -
    addElement(IHashSetKey, E) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
    -
    Diese Methode f�gt das Element element unter dem Key elementKey - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
    -
    -
    addElement(E) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    addElement(E) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    addElement(AClassOrInterface) - Method in class mycompiler.SourceFile
    -
    -
    Fuegt ein neues Element (Interface oder Klasse) hinzu.
    -
    -
    addException(SCExcept) - Method in exception mycompiler.myexception.SCClassBodyException
    -
     
    -
    addException(Menge<SCExcept>) - Method in exception mycompiler.myexception.SCClassException
    -
     
    -
    addException(SCExcept) - Method in exception mycompiler.myexception.SCStatementException
    -
     
    -
    addException(Exception) - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    addExpectedType(Type) - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    addFieldInitialization(FieldInitialization) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    addFieldOrLocalVarAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    addGeneric(GenericTypeVar) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    addGeneric(GenericTypeVar) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    addGenerics(Menge<Type>, UsedId, Menge<UsedId>) - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Fuegt ggf.
    -
    -
    addGenericTypeVars(String, Menge<GenericTypeVar>) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    addImports(ImportDeclarations) - Method in class mycompiler.SourceFile
    -
     
    -
    addInstVarAssumption(String, String, Type) - Method in class typinferenz.TypeAssumptions
    -
    -
    Erstellt eine CInstVarTypeAssumption und f�gt sie den Assumptions hinzu.
    -
    -
    addInterface(UsedId) - Method in class mycompiler.myparser.InterfaceList
    -
     
    -
    addLocalVar(VarExpect) - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    addLocalVarAssumption() - Method in class typinferenz.TypeAssumptions
    -
     
    -
    addMapping(String, String) - Method in class mycompiler.test.expectationTypes.UnknownTypesMappingExpect
    -
     
    -
    addMember(VarExpect) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    addMethod(MethodExpect) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    addMethodAssumption(Type, String, Type, Menge<CParaTypeAssumption>) - Method in class typinferenz.TypeAssumptions
    -
    -
    Ruft createMethodAssumption auf und f�gt die Assumption dem AssumptionSet hinzu
    -
    -
    addMethodIntersectionType(CIntersectionType) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    addMethodTypeAssumption(CMethodTypeAssumption) - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    addModifier(Modifier) - Method in class mycompiler.mymodifier.Modifiers
    -
    -
    Fuegt den angegebenen Modifier zur Auflistung hinzu.
    -
    -
    addOderConstraint(Type, Type) - Method in class typinferenz.Constraint
    -
    -
    F�gt ein Pair(p1, p2) dem Constraint hinzu
    -
    -
    addOffset(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    addOffsetsToAssumption(CTypeAssumption, Block, String, boolean) - Static method in class mycompiler.myclass.Class
    -
    -
    Methode f�gt zu einer CTypeAssumption alle - Offsets hinzu, wo die Variable benutzt wird.
    -
    -
    addOffsetsToAssumption(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Block
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, Expr, String, boolean) - Static method in class mycompiler.myclass.Class
    -
    -
    Hilfs-Methode f�r die Offset-Zuweisung - durchsucht eine Expression rekursiv -
    Author: Thomas Hornberger 07.04.2006 -
    Authos: Arne L�dtke 20.01.2007, Auf Polymorphie umgebaut.
    -
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Literal
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    addOffsetsToExpression(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.This
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, Statement, String, boolean) - Static method in class mycompiler.myclass.Class
    -
    -
    Hilfs-Methode f�r die Offset-Zuweisung - durchsucht ein Statement rekursiv -
    Author: Thomas Hornberger 08.04.2006 -
    Author: Arne L�dtke 20.10.2007, Auf Polymorphie umgebaut.
    -
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Block
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Return
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    addOffsetsToStatement(CTypeAssumption, String, boolean) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    AddOp - Class in mycompiler.myoperator
    -
     
    -
    AddOp(int, int) - Constructor for class mycompiler.myoperator.AddOp
    -
     
    -
    addParaAssumption(CParaTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    addParameter(VarExpect) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    addReplacementListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    addReplacementListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    addReturntype(Type) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    addSuperInterfaces(Menge<UsedId>) - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Fuegt die erweiterten (bei Interfaces) implementierten (bei Klassen) - Interfaces ein.
    -
    -
    addThisToAssumptions(CTypeReconstructionResult) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    advance() - Method in interface mycompiler.myparser.JavaParser.yyInput
    -
    -
    move on to next token.
    -
    -
    advance() - Method in class mycompiler.myparser.Scanner
    -
     
    -
    allGreater(BoundedGenericTypeVar, Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    allGreater(RefType, Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    allSmaller(RefType, Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    AllTests - Class in mycompiler.test
    -
     
    -
    AllTests() - Constructor for class mycompiler.test.AllTests
    -
     
    -
    AllTestsBlocks - Class in mycompiler.test.blocks
    -
     
    -
    AllTestsBlocks() - Constructor for class mycompiler.test.blocks.AllTestsBlocks
    -
     
    -
    AllTestsComplexTypes - Class in mycompiler.test.complexTypes
    -
     
    -
    AllTestsComplexTypes() - Constructor for class mycompiler.test.complexTypes.AllTestsComplexTypes
    -
     
    -
    AllTestsGenerics - Class in mycompiler.test.generics
    -
     
    -
    AllTestsGenerics() - Constructor for class mycompiler.test.generics.AllTestsGenerics
    -
     
    -
    AllTestsInferenceByCharacteristic - Class in mycompiler.test.inferenceByCharacteristic
    -
     
    -
    AllTestsInferenceByCharacteristic() - Constructor for class mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic
    -
     
    -
    AllTestsInheritance - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    AllTestsInheritance() - Constructor for class mycompiler.test.javaConcepts.inheritance.AllTestsInheritance
    -
     
    -
    AllTestsOperators - Class in mycompiler.test.operators
    -
     
    -
    AllTestsOperators() - Constructor for class mycompiler.test.operators.AllTestsOperators
    -
     
    -
    AllTestsOverloading - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    AllTestsOverloading() - Constructor for class mycompiler.test.javaConcepts.overloading.AllTestsOverloading
    -
     
    -
    AllTestsPrimitiveTypes - Class in mycompiler.test.primitiveTypes
    -
     
    -
    AllTestsPrimitiveTypes() - Constructor for class mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes
    -
     
    -
    AllTestsStaticAccess - Class in mycompiler.test.javaConcepts.staticAccess
    -
     
    -
    AllTestsStaticAccess() - Constructor for class mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess
    -
     
    -
    AllTestsTrivial - Class in mycompiler.test.trivial
    -
     
    -
    AllTestsTrivial() - Constructor for class mycompiler.test.trivial.AllTestsTrivial
    -
     
    -
    aload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    aload_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    aload_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    aload_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    aload_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ANDEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    AndOp - Class in mycompiler.myoperator
    -
     
    -
    AndOp(int, int) - Constructor for class mycompiler.myoperator.AndOp
    -
     
    -
    anewarray - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    APITest - Class in mycompiler.mytest
    -
     
    -
    APITest() - Constructor for class mycompiler.mytest.APITest
    -
     
    -
    applyThisSubstitution(Type) - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    applyThisSubstitutionSet(Type) - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    applyUnifier(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Wendet den Unifier auf die rechte Seite dieser Substitution an.
    -
    -
    applyUnifier(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
    -
    Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
    -
    -
    areturn - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    arglist - Variable in class mycompiler.mystatement.This
    -
     
    -
    argumentAt(int) - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    ArgumentList - Class in mycompiler.mystatement
    -
     
    -
    ArgumentList() - Constructor for class mycompiler.mystatement.ArgumentList
    -
     
    -
    arraylength - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    Assign - Class in mycompiler.mystatement
    -
     
    -
    Assign(int, int) - Constructor for class mycompiler.mystatement.Assign
    -
     
    -
    astore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    astore_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    astore_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    astore_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    astore_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    athrow - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    Attribute - Class in mycompiler.mybytecode
    -
     
    -
    Attribute() - Constructor for class mycompiler.mybytecode.Attribute
    -
     
    -
    AttributeInfo - Class in mycompiler.mybytecode
    -
     
    -
    AttributeInfo() - Constructor for class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-10.html b/doc/LambdaJavadoc/index-files/index-10.html deleted file mode 100755 index ebe9f7c8..00000000 --- a/doc/LambdaJavadoc/index-files/index-10.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - -J-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    J

    -
    -
    JavaCompiler - Class in mycompiler.unused
    -
     
    -
    JavaCompiler() - Constructor for class mycompiler.unused.JavaCompiler
    -
     
    -
    JavaLexer - Class in mycompiler.myparser
    -
     
    -
    JavaLexer(Reader) - Constructor for class mycompiler.myparser.JavaLexer
    -
     
    -
    JavaLexer(InputStream) - Constructor for class mycompiler.myparser.JavaLexer
    -
     
    -
    JavaParser - Class in mycompiler.myparser
    -
     
    -
    JavaParser() - Constructor for class mycompiler.myparser.JavaParser
    -
     
    -
    JavaParser.yyException - Exception in mycompiler.myparser
    -
    -
    thrown for irrecoverable syntax errors and stack overflow.
    -
    -
    JavaParser.yyException(String, Token) - Constructor for exception mycompiler.myparser.JavaParser.yyException
    -
     
    -
    JavaParser.yyInput - Interface in mycompiler.myparser
    -
    -
    must be implemented by a scanner object to supply input to the parser.
    -
    -
    JNULL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    jsr - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    jsr_w - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    JUnitTests - Class in mycompiler.mytest
    -
    -
    Erstellt eine JUnit-Testsuite, die saemtliche Testcases enthaelt und - ausfuehrt.
    -
    -
    JUnitTests() - Constructor for class mycompiler.mytest.JUnitTests
    -
     
    -
    JVMCode - Class in mycompiler.mybytecode
    -
    -
    Enthaelt die Befehle fuer die Umsetzung in JVM-Code und - Konstantendefinitionen.
    -
    -
    JVMCode() - Constructor for class mycompiler.mybytecode.JVMCode
    -
     
    -
    JVMCodeException - Exception in mycompiler.myexception
    -
     
    -
    JVMCodeException(String) - Constructor for exception mycompiler.myexception.JVMCodeException
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-11.html b/doc/LambdaJavadoc/index-files/index-11.html deleted file mode 100755 index 0ecb5385..00000000 --- a/doc/LambdaJavadoc/index-files/index-11.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -K-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    K

    -
    -
    KarthesischesProdukt<M> - Class in typinferenz
    -
     
    -
    KarthesischesProdukt() - Constructor for class typinferenz.KarthesischesProdukt
    -
     
    -
    Key - Class in mycompiler.mybytecode
    -
     
    -
    Key(byte, String) - Constructor for class mycompiler.mybytecode.Key
    -
     
    -
    KEYPREFIX - Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey
    -
     
    -
    KEYPREFIX - Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    KEYPREFIX - Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    KEYPREFIX - Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    kill - Variable in class mycompiler.myclass.ClassBody
    -
     
    -
    KlassenVektor - Variable in class mycompiler.SourceFile
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-12.html b/doc/LambdaJavadoc/index-files/index-12.html deleted file mode 100755 index ddb889cd..00000000 --- a/doc/LambdaJavadoc/index-files/index-12.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - -L-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    L

    -
    -
    l2d - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    l2f - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    l2i - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ladd - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    laload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    LAMBDAASSIGNMENT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    LambdaExpression - Class in mycompiler.mystatement
    -
     
    -
    LambdaExpression(int, int) - Constructor for class mycompiler.mystatement.LambdaExpression
    -
     
    -
    LambdaInterferenzTest - Class in mycompiler.test
    -
     
    -
    LambdaInterferenzTest() - Constructor for class mycompiler.test.LambdaInterferenzTest
    -
     
    -
    LambdaTest - Class in mycompiler.mytest
    -
     
    -
    LambdaTest(String) - Constructor for class mycompiler.mytest.LambdaTest
    -
     
    -
    LambdaTest(Menge<String>) - Constructor for class mycompiler.mytest.LambdaTest
    -
     
    -
    land - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lcmp - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lconst_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lconst_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ldc - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ldc2_w - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ldc_w - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ldiv - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    LESSEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    LessEquOp - Class in mycompiler.myoperator
    -
     
    -
    LessEquOp(int, int) - Constructor for class mycompiler.myoperator.LessEquOp
    -
     
    -
    LessOp - Class in mycompiler.myoperator
    -
     
    -
    LessOp(int, int) - Constructor for class mycompiler.myoperator.LessOp
    -
     
    -
    Literal - Class in mycompiler.mystatement
    -
     
    -
    Literal(int, int) - Constructor for class mycompiler.mystatement.Literal
    -
     
    -
    lload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lload_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lload_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lload_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lload_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lmul - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lneg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    LocalOrFieldVar - Class in mycompiler.mystatement
    -
     
    -
    LocalOrFieldVar(int, int) - Constructor for class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    LocalOrFieldVar(String, int) - Constructor for class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    LocalVarDecl - Class in mycompiler.mystatement
    -
     
    -
    LocalVarDecl(int, int) - Constructor for class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    Log4jWrapper - Class in mycompiler.test
    -
    -
    needed to assure one-time execution of configure script
    -
    -
    LOGICALAND - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    LOGICALOR - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    LogOp - Class in mycompiler.myoperator
    -
     
    -
    LogOp(int, int) - Constructor for class mycompiler.myoperator.LogOp
    -
     
    -
    LONGLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    LongLiteral - Class in mycompiler.mystatement
    -
     
    -
    LongLiteral() - Constructor for class mycompiler.mystatement.LongLiteral
    -
     
    -
    LongTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    LongTest(String) - Constructor for class mycompiler.test.primitiveTypes.LongTest
    -
     
    -
    LongType - Class in mycompiler.mytype
    -
     
    -
    LongType() - Constructor for class mycompiler.mytype.LongType
    -
     
    -
    lookupswitch - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    loop_block - Variable in class mycompiler.mystatement.WhileStmt
    -
     
    -
    loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Menge) - Method in class mycompiler.myoperator.LogOp
    -
     
    -
    loop_codegen(ClassFile, CodeAttribute, int, boolean, Menge) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    lor - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lrem - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lreturn - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lshl - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lshr - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lstore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lstore_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lstore_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lstore_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lstore_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lsub - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lushr - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    lxor - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-13.html b/doc/LambdaJavadoc/index-files/index-13.html deleted file mode 100755 index 985d8f49..00000000 --- a/doc/LambdaJavadoc/index-files/index-13.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - -M-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    M

    -
    -
    m2(Object) - Method in class mycompiler.test.notUsedAnymore.TEst_2
    -
     
    -
    main(String[]) - Static method in class mycompiler.MyCompiler
    -
    -
    Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet - werden kann.
    -
    -
    main(String[]) - Static method in class mycompiler.mytest.APITest
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.CByteCodeTest
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.CInferenceTest
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.CSimpleTest
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.CWildcardTest
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.JUnitTests
    -
     
    -
    main(String[]) - Static method in class mycompiler.mytest.LambdaTest
    -
     
    -
    main(String[]) - Static method in class mycompiler.test.notUsedAnymore.Test
    -
     
    -
    main(String[]) - Static method in class mycompiler.unused.JavaCompiler
    -
     
    -
    main(String[]) - Static method in class mycompiler.unused.TestClass
    -
     
    -
    makeFC() - Method in class mycompiler.SourceFile
    -
    -
    Erstellt die Finite Closure
    -
    -
    makeGenericTypeVars2TypePlaceHolders(Type) - Static method in class mycompiler.MyCompiler
    -
     
    -
    makePrimitive(ClassFile, CodeAttribute) - Method in class mycompiler.myoperator.Operator
    -
     
    -
    makeRefTypesFullyQualified(Menge<Type>, ImportDeclarations) - Static method in class mycompiler.MyCompiler
    -
     
    -
    makeWrapper(ClassFile, CodeAttribute) - Method in class mycompiler.myoperator.Operator
    -
     
    -
    match(RefType, RefType, Hashtable<String, Type>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    MatchException - Exception in mycompiler.myexception
    -
     
    -
    MatchException(String) - Constructor for exception mycompiler.myexception.MatchException
    -
     
    -
    Method - Class in mycompiler.myclass
    -
     
    -
    Method() - Constructor for class mycompiler.myclass.Method
    -
     
    -
    MethodCall - Class in mycompiler.mystatement
    -
     
    -
    MethodCall(int, int) - Constructor for class mycompiler.mystatement.MethodCall
    -
     
    -
    MethodExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    MethodExpect(String) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodExpect(String, int) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodExpect(String, Type) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodExpect(String, Type, int) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodExpect(String, IUnknownTypeExpect) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodExpect(String, IUnknownTypeExpect, int) - Constructor for class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    MethodInfo - Class in mycompiler.mybytecode
    -
     
    -
    MethodInfo() - Constructor for class mycompiler.mybytecode.MethodInfo
    -
     
    -
    MINUSEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    MinusOp - Class in mycompiler.myoperator
    -
     
    -
    MinusOp(int, int) - Constructor for class mycompiler.myoperator.MinusOp
    -
     
    -
    Modifier - Class in mycompiler.mymodifier
    -
     
    -
    Modifier() - Constructor for class mycompiler.mymodifier.Modifier
    -
     
    -
    modifiers - Variable in class mycompiler.myclass.DeclId
    -
     
    -
    Modifiers - Class in mycompiler.mymodifier
    -
    -
    Die Klasse beinhaltet die Liste der Access-Modifier fuer eine Klasse, - Methode usw.
    -
    -
    Modifiers() - Constructor for class mycompiler.mymodifier.Modifiers
    -
     
    -
    modifyToGenericTypeVar() - Method in class mycompiler.mytype.RefType
    -
     
    -
    MODULOEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    ModuloOp - Class in mycompiler.myoperator
    -
     
    -
    ModuloOp(int, int) - Constructor for class mycompiler.myoperator.ModuloOp
    -
     
    -
    monitorenter - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    monitorexit - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    MUB - Class in mycompiler.mytypereconstruction.unify
    -
     
    -
    MulOp - Class in mycompiler.myoperator
    -
     
    -
    MulOp(int, int) - Constructor for class mycompiler.myoperator.MulOp
    -
     
    -
    multianewarray - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    MyCompiler - Class in mycompiler
    -
     
    -
    mycompiler.mybytecode - package mycompiler.mybytecode
    -
     
    -
    mycompiler.myclass - package mycompiler.myclass
    -
     
    -
    mycompiler.myexception - package mycompiler.myexception
    -
     
    -
    mycompiler.myinterface - package mycompiler.myinterface
    -
     
    -
    mycompiler.mymodifier - package mycompiler.mymodifier
    -
     
    -
    mycompiler.myoperator - package mycompiler.myoperator
    -
     
    -
    mycompiler.myparser - package mycompiler.myparser
    -
     
    -
    mycompiler.mystatement - package mycompiler.mystatement
    -
     
    -
    mycompiler.mytest - package mycompiler.mytest
    -
     
    -
    mycompiler.mytype - package mycompiler.mytype
    -
     
    -
    mycompiler.mytypereconstruction - package mycompiler.mytypereconstruction
    -
     
    -
    mycompiler.mytypereconstruction.replacementlistener - package mycompiler.mytypereconstruction.replacementlistener
    -
     
    -
    mycompiler.mytypereconstruction.set - package mycompiler.mytypereconstruction.set
    -
     
    -
    mycompiler.mytypereconstruction.typeassumption - package mycompiler.mytypereconstruction.typeassumption
    -
     
    -
    mycompiler.mytypereconstruction.typeassumptionkey - package mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    mycompiler.mytypereconstruction.unify - package mycompiler.mytypereconstruction.unify
    -
     
    -
    mycompiler.test - package mycompiler.test
    -
     
    -
    mycompiler.test.blocks - package mycompiler.test.blocks
    -
     
    -
    mycompiler.test.complexTypes - package mycompiler.test.complexTypes
    -
     
    -
    mycompiler.test.expectationTypes - package mycompiler.test.expectationTypes
    -
     
    -
    mycompiler.test.generics - package mycompiler.test.generics
    -
     
    -
    mycompiler.test.inferenceByCharacteristic - package mycompiler.test.inferenceByCharacteristic
    -
     
    -
    mycompiler.test.javaConcepts.inheritance - package mycompiler.test.javaConcepts.inheritance
    -
     
    -
    mycompiler.test.javaConcepts.overloading - package mycompiler.test.javaConcepts.overloading
    -
     
    -
    mycompiler.test.javaConcepts.staticAccess - package mycompiler.test.javaConcepts.staticAccess
    -
     
    -
    mycompiler.test.lambda - package mycompiler.test.lambda
    -
     
    -
    mycompiler.test.notUsedAnymore - package mycompiler.test.notUsedAnymore
    -
     
    -
    mycompiler.test.operators - package mycompiler.test.operators
    -
     
    -
    mycompiler.test.primitiveTypes - package mycompiler.test.primitiveTypes
    -
     
    -
    mycompiler.test.trivial - package mycompiler.test.trivial
    -
     
    -
    mycompiler.test.unittest.typeReconstructionTest - package mycompiler.test.unittest.typeReconstructionTest
    -
     
    -
    mycompiler.unused - package mycompiler.unused
    -
     
    -
    MyCompilerAPI - Interface in mycompiler
    -
    -
    Schnittstellen-Klasse zum Compiler.
    -
    -
    myJvmDisassembler - package myJvmDisassembler
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-14.html b/doc/LambdaJavadoc/index-files/index-14.html deleted file mode 100755 index 034aca17..00000000 --- a/doc/LambdaJavadoc/index-files/index-14.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - -N-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    N

    -
    -
    n2n(String, String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nadd(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    naload(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    name - Variable in class mycompiler.myclass.DeclId
    -
     
    -
    name - Variable in class mycompiler.myclass.UsedId
    -
     
    -
    nand(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nastore(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ncmpg(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ncmpl(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nconst_n(String, int) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ndiv(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    needsSignature(Type) - Static method in class mycompiler.mybytecode.SignatureInfo
    -
    -
    Gibt zurueck, ob eine Signaturdefinition fuer den Typ erforderlich ist.
    -
    -
    needsSignature(ParameterList, Type) - Static method in class mycompiler.mybytecode.SignatureInfo
    -
    -
    Gibt zurueck, ob eine Signaturdefinition fuer die Methode erforderlich ist.
    -
    -
    neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    neg_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    NegativeExpr - Class in mycompiler.mystatement
    -
     
    -
    NegativeExpr(int, int) - Constructor for class mycompiler.mystatement.NegativeExpr
    -
     
    -
    NEW - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    new_ - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    newarray - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    NewArray - Class in mycompiler.mystatement
    -
     
    -
    NewArray(int, int) - Constructor for class mycompiler.mystatement.NewArray
    -
     
    -
    NewClass - Class in mycompiler.mystatement
    -
     
    -
    NewClass(int, int) - Constructor for class mycompiler.mystatement.NewClass
    -
     
    -
    nload(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nload_n(String, int) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nmul(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nneg(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    NO_LINENUMBER - Static variable in class mycompiler.MyCompiler
    -
     
    -
    NO_METHOD - Static variable in class mycompiler.mytypereconstruction.CSupportData
    -
    -
    Gibt Namensstring fr den Classbody auerhalb einer Methode - fr m_CurrentMethod.
    -
    -
    nop - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nor(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    not_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    not_codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    NOTEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    NotEqualOp - Class in mycompiler.myoperator
    -
     
    -
    NotEqualOp(int, int) - Constructor for class mycompiler.myoperator.NotEqualOp
    -
     
    -
    NotExpr - Class in mycompiler.mystatement
    -
     
    -
    NotExpr(int, int) - Constructor for class mycompiler.mystatement.NotExpr
    -
     
    -
    nrem(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nreturn(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nshl(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nshr(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nstore(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nstore_n(String, int) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nsub(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    Null - Class in mycompiler.mystatement
    -
     
    -
    Null() - Constructor for class mycompiler.mystatement.Null
    -
     
    -
    nushr(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    nxor(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-15.html b/doc/LambdaJavadoc/index-files/index-15.html deleted file mode 100755 index 812d211b..00000000 --- a/doc/LambdaJavadoc/index-files/index-15.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - -O-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    O

    -
    -
    OP - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    op - Variable in class mycompiler.mystatement.Binary
    -
     
    -
    Operator - Class in mycompiler.myoperator
    -
     
    -
    Operator(int, int) - Constructor for class mycompiler.myoperator.Operator
    -
     
    -
    OperatorEqual() - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Abfrage, ob Operator vom Typ Equal ist.
    -
    -
    OperatorSmaller() - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Abfrage, ob Operator vom Typ Smaller ist.
    -
    -
    OperatorSmallerExtends() - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Abfrage, ob Operator vom Typ SmallerExtends ist.
    -
    -
    OREQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    OrOp - Class in mycompiler.myoperator
    -
     
    -
    OrOp(int, int) - Constructor for class mycompiler.myoperator.OrOp
    -
     
    -
    Overloading - Class in typinferenz
    -
     
    -
    Overloading(TypeAssumptions, MethodCall, Type) - Constructor for class typinferenz.Overloading
    -
    -
    methodCall : type
    -
    -
    OverloadingDifferentNumberOfParameters - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingDifferentNumberOfParameters(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParameters
    -
     
    -
    OverloadingDifferentNumberOfParametersAndDifferentTypes - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingDifferentNumberOfParametersAndDifferentTypes(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParametersAndDifferentTypes
    -
     
    -
    OverloadingGenericNotSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingGenericNotSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingGenericNotSameHierarchy
    -
     
    -
    OverloadingGenericSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingGenericSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingGenericSameHierarchy
    -
     
    -
    OverloadingGenericTypeInferenceNotSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingGenericTypeInferenceNotSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceNotSameHierarchy
    -
     
    -
    OverloadingGenericTypeInferenceSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingGenericTypeInferenceSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceSameHierarchy
    -
     
    -
    OverloadingNotSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingNotSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingNotSameHierarchy
    -
     
    -
    OverloadingSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingSameHierarchy
    -
     
    -
    OverloadingSameSignature - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingSameSignature(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingSameSignature
    -
     
    -
    OverloadingSameSignatureDifferentReturnTypes - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingSameSignatureDifferentReturnTypes(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureDifferentReturnTypes
    -
     
    -
    OverloadingSameSignatureGenerics - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingSameSignatureGenerics(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureGenerics
    -
     
    -
    OverloadingTest - Class in mycompiler.test.lambda
    -
     
    -
    OverloadingTest() - Constructor for class mycompiler.test.lambda.OverloadingTest
    -
     
    -
    OverloadingTypeInferenceNotSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingTypeInferenceNotSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceNotSameHierarchy
    -
     
    -
    OverloadingTypeInferenceSameHierarchy - Class in mycompiler.test.javaConcepts.overloading
    -
     
    -
    OverloadingTypeInferenceSameHierarchy(String) - Constructor for class mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceSameHierarchy
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-16.html b/doc/LambdaJavadoc/index-files/index-16.html deleted file mode 100755 index fac9940a..00000000 --- a/doc/LambdaJavadoc/index-files/index-16.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - -P-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    P

    -
    -
    PACKAGE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Pair - Class in mycompiler.mytype
    -
     
    -
    Pair(Type, Type) - Constructor for class mycompiler.mytype.Pair
    -
     
    -
    Pair(Type, Type, Pair.PairOperator) - Constructor for class mycompiler.mytype.Pair
    -
     
    -
    Pair(Type, Type, Pair.PairOperator, boolean) - Constructor for class mycompiler.mytype.Pair
    -
     
    -
    Pair.PairOperator - Enum in mycompiler.mytype
    -
     
    -
    Pair_isEquiv(Pair) - Method in class mycompiler.mytype.Pair
    -
     
    -
    para_check(Menge<Class>, boolean) - Method in class mycompiler.myclass.Class
    -
     
    -
    ParaList - Class in mycompiler.mytype
    -
     
    -
    ParaList() - Constructor for class mycompiler.mytype.ParaList
    -
     
    -
    parameterlist - Variable in class mycompiler.myclass.Method
    -
     
    -
    ParameterList - Class in mycompiler.myclass
    -
     
    -
    ParameterList() - Constructor for class mycompiler.myclass.ParameterList
    -
     
    -
    paratyp - Variable in class mycompiler.myclass.DeclId
    -
     
    -
    parentExceptions - Variable in exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    parse(File) - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Ruft die Parse-Methode.
    -
    -
    parse(String) - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Ruft die Parse-Methode.
    -
    -
    parse(Menge<String>) - Method in class mycompiler.MyCompiler
    -
    -
    Alle �bergebenen Dateien werden zu einem String zusammengef�gt und gemeinsam in einer SourceFile geparst.
    -
    -
    parse(File) - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
    -
    -
    parse(String) - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Parst einen String und baut den abstrakten Syntaxbaum auf.
    -
    -
    parse(Menge<String>) - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Parst zusammenh�ngende JavaKlassen in verschiedenen Dateien.
    -
    -
    ParseMultipleFilesTest - Class in mycompiler.test.lambda
    -
     
    -
    ParseMultipleFilesTest() - Constructor for class mycompiler.test.lambda.ParseMultipleFilesTest
    -
     
    -
    path - Variable in class mycompiler.myparser.JavaParser
    -
     
    -
    pi(int, String, String, Menge) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    PLUSEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    PlusOp - Class in mycompiler.myoperator
    -
     
    -
    PlusOp(int, int) - Constructor for class mycompiler.myoperator.PlusOp
    -
     
    -
    pop - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    pop2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    PositivExpr - Class in mycompiler.mystatement
    -
     
    -
    PositivExpr(int, int) - Constructor for class mycompiler.mystatement.PositivExpr
    -
     
    -
    PostDecExpr - Class in mycompiler.mystatement
    -
     
    -
    PostDecExpr(int, int) - Constructor for class mycompiler.mystatement.PostDecExpr
    -
     
    -
    PostIncExpr - Class in mycompiler.mystatement
    -
     
    -
    PostIncExpr(int, int) - Constructor for class mycompiler.mystatement.PostIncExpr
    -
     
    -
    PreDecExpr - Class in mycompiler.mystatement
    -
     
    -
    PreDecExpr(int, int) - Constructor for class mycompiler.mystatement.PreDecExpr
    -
     
    -
    PreIncExpr - Class in mycompiler.mystatement
    -
     
    -
    PreIncExpr(int, int) - Constructor for class mycompiler.mystatement.PreIncExpr
    -
     
    -
    print(String) - Static method in class mycompiler.mytypereconstruction.CHelper
    -
    -
    Author: J�rg B�uerle
    - Gibt einen String aus.
    -
    -
    printJavaCode(CTypeReconstructionResult) - Method in class mycompiler.myclass.Class
    -
    -
    Generiert den JavaCode dieser Klasse im Falle f�r das �bergebene resultSet.
    -
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.Constant
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.Method
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.myclass.UsedId
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Abstract
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Final
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.InterfaceModifier
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Modifier
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Modifiers
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Private
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Protected
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Public
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Static
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mymodifier.Super
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Block
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Null
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Receiver
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Return
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.This
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.BooleanType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.CharacterType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.DoubleType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.FloatType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.FreshWildcardType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.GenericTypeVar
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.IntegerType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.LongType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.RefType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.ReturnType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.SuperWildcardType
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.Type
    -
     
    -
    printJavaCode() - Method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    printJavaCode(ResultSet) - Method in class mycompiler.mytype.WildcardType
    -
     
    -
    printJavaCode(ResultSet) - Method in class typinferenz.FreshTypeVariable
    -
     
    -
    printJavaCode(ResultSet) - Method in class typinferenz.FunN
    -
     
    -
    printMenge(String, Menge<Pair>, int) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    printMengeUnifier(String, Menge<Menge<Pair>>, int) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    Private - Class in mycompiler.mymodifier
    -
     
    -
    Private() - Constructor for class mycompiler.mymodifier.Private
    -
     
    -
    PRIVATE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Protected - Class in mycompiler.mymodifier
    -
     
    -
    Protected() - Constructor for class mycompiler.mymodifier.Protected
    -
     
    -
    PROTECTED - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Public - Class in mycompiler.mymodifier
    -
     
    -
    Public() - Constructor for class mycompiler.mymodifier.Public
    -
     
    -
    PUBLIC - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    putfield - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    putstatic - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-17.html b/doc/LambdaJavadoc/index-files/index-17.html deleted file mode 100755 index f26ca663..00000000 --- a/doc/LambdaJavadoc/index-files/index-17.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - -R-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    R

    -
    -
    READ_OBJECT_SUPERCLASSES_FROM_JRE - Static variable in class mycompiler.SourceFile
    -
     
    -
    Receiver - Class in mycompiler.mystatement
    -
     
    -
    Receiver(Expr) - Constructor for class mycompiler.mystatement.Receiver
    -
    -
    Autor: J�rg B�uerle
    -
    -
    RefType - Class in mycompiler.mytype
    -
     
    -
    RefType(int) - Constructor for class mycompiler.mytype.RefType
    -
     
    -
    RefType(String, int) - Constructor for class mycompiler.mytype.RefType
    -
     
    -
    RefType(String, Menge, int) - Constructor for class mycompiler.mytype.RefType
    -
     
    -
    RefType(RefType, int) - Constructor for class mycompiler.mytype.RefType
    -
     
    -
    RefType(Type) - Constructor for class mycompiler.mytype.RefType
    -
    -
    Erstellt einen Referenztyp aus dem �bergebenen Type.
    -
    -
    RelOp - Class in mycompiler.myoperator
    -
     
    -
    RelOp(int, int) - Constructor for class mycompiler.myoperator.RelOp
    -
     
    -
    RELOP - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    remove(CTypeAssumption) - Method in class typinferenz.TypeAssumptions
    -
     
    -
    removeAllReplacementListeners() - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    removeAllReplacementListeners() - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    removeClassParameters() - Method in class mycompiler.mytype.Type
    -
     
    -
    removeElement(E) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    removeElement(IHashSetKey) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    removeElement(E) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    removeElement(E) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    removeLast() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    removeMethodTypeAssumption(CMethodTypeAssumption) - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    removeReplacementListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    removeReplacementListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    replace_index(CodeAttribute, Menge<Integer>, int, int) - Static method in class mycompiler.myoperator.LogOp
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.FormalParameter
    -
    -

    Author: J�rg B�uerle
    -
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.InstVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.myclass.Method
    -
    -

    Author: Jrg Buerle
    -
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.Block
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.Return
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    replaceType(CReplaceTypeEvent) - Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener
    -
    -
    Tauscht einen Typ gegen einen anderen aus.
    -
    -
    replaceType(CReplaceTypeEvent) - Method in class typinferenz.FunN
    -
     
    -
    replaceWithType(Type) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus.
    -
    -
    resetBlockId() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    ResultSet - Class in typinferenz
    -
    -
    Im Grunde Sammlung von Pair s mit Equal-Operatoren.
    -
    -
    ResultSet(Menge<Pair>) - Constructor for class typinferenz.ResultSet
    -
     
    -
    ret - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    retexpr - Variable in class mycompiler.mystatement.Return
    -
     
    -
    RETURN - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Return - Class in mycompiler.mystatement
    -
     
    -
    Return(int, int) - Constructor for class mycompiler.mystatement.Return
    -
     
    -
    return_ - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ReturnType - Class in mycompiler.mytype
    -
     
    -
    ReturnType(int) - Constructor for class mycompiler.mytype.ReturnType
    -
     
    -
    runTest() - Method in class mycompiler.mytest.LambdaTest
    -
     
    -
    runTestAndCheckResultSet(String, HashMap<String, String>) - Method in class mycompiler.mytest.LambdaTest
    -
    -
    F�hrt einen Test aus, bei dem beliebig viele ResultSets entstehen d�rfen.
    -
    -
    runTestAndGetSingularResultSet() - Method in class mycompiler.mytest.LambdaTest
    -
    -
    F�hrt den Test aus und geht davon aus, dass es bei der Testdatei nur eine richtige Aufl�sung f�r die Typvariablen gibt.
    -
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-18.html b/doc/LambdaJavadoc/index-files/index-18.html deleted file mode 100755 index 8c9a5c2a..00000000 --- a/doc/LambdaJavadoc/index-files/index-18.html +++ /dev/null @@ -1,980 +0,0 @@ - - - - - -S-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    S

    -
    -
    saload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    sastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    sc_check(Menge<Class>, boolean) - Method in class mycompiler.myclass.Class
    -
     
    -
    sc_check(Menge<Class>, boolean) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.Block
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.Null
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.Receiver
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class mycompiler.mystatement.This
    -
     
    -
    sc_check(boolean) - Method in class mycompiler.SourceFile
    -
    -
    DEPRECATED.
    -
    -
    sc_check_for_extended_classes(Menge<Class>, Hashtable<String, String>, boolean) - Method in class mycompiler.myclass.Class
    -
     
    -
    sc_check_get_Method(Menge<Class>, String, boolean, Hashtable, Hashtable) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    sc_check_method_kleiner(Menge<Class>, String, String, boolean) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    sc_check_uebergabe(Menge<Class>, Menge<Method>, boolean, int, Hashtable, Hashtable) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    sc_get_Formalparalist() - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    sc_init_extended_fcts(Menge<Method>, Menge<Class>, String, String, boolean) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    sc_init_hashtable(Menge<Class>, String, String, boolean) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    sc_init_hashtable_for_extended_classes(Menge<Class>, String, Hashtable<String, String>, Menge, Hashtable, Hashtable, boolean) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    sc_init_parameterlist(boolean) - Method in class mycompiler.myclass.Method
    -
     
    -
    Scanner - Class in mycompiler.myparser
    -
     
    -
    Scanner(Reader) - Constructor for class mycompiler.myparser.Scanner
    -
     
    -
    SCClassBodyException - Exception in mycompiler.myexception
    -
     
    -
    SCClassBodyException() - Constructor for exception mycompiler.myexception.SCClassBodyException
    -
     
    -
    SCClassException - Exception in mycompiler.myexception
    -
     
    -
    SCClassException() - Constructor for exception mycompiler.myexception.SCClassException
    -
     
    -
    SCExcept - Class in mycompiler.myexception
    -
     
    -
    SCExcept() - Constructor for class mycompiler.myexception.SCExcept
    -
     
    -
    SCException - Exception in mycompiler.myexception
    -
     
    -
    SCException() - Constructor for exception mycompiler.myexception.SCException
    -
     
    -
    SCMethodException - Exception in mycompiler.myexception
    -
     
    -
    SCMethodException() - Constructor for exception mycompiler.myexception.SCMethodException
    -
     
    -
    SCStatementException - Exception in mycompiler.myexception
    -
     
    -
    SCStatementException() - Constructor for exception mycompiler.myexception.SCStatementException
    -
     
    -
    set_a(String) - Method in class mycompiler.mybytecode.Key
    -
     
    -
    set_access_flags(short) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_access_flags(short) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_access_flags(short) - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    set_addElem(RefType) - Method in class mycompiler.myclass.ExceptionList
    -
     
    -
    set_AddParameter(FormalParameter) - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    set_ArgumentList(ArgumentList) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    set_ArgumentList(ArgumentList) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    set_ArgumentList(ArgumentList) - Method in class mycompiler.mystatement.This
    -
     
    -
    set_attribute_name_index(short) - Method in class mycompiler.mybytecode.Attribute
    -
     
    -
    set_attributes(Menge<Attribute>) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_attributes(Menge<Attribute>) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_attributes(Menge<Attribute>) - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    set_attributes_Menge(Menge<Attribute>) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    set_Block(Block) - Method in class mycompiler.myclass.Method
    -
     
    -
    set_body_Loop_block(Statement) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    set_Bool(boolean) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    set_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Float_info
    -
     
    -
    set_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Integer_info
    -
     
    -
    set_bytes(byte[]) - Method in class mycompiler.mybytecode.CONSTANT_Utf8_info
    -
     
    -
    set_Char(char) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    set_class_block(Block) - Method in class mycompiler.myclass.Class
    -
     
    -
    set_class_index(short) - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    set_class_index(short) - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    set_class_index(short) - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    set_Class_Name(String) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_ClassBody(ClassBody) - Method in class mycompiler.myclass.Class
    -
     
    -
    set_classname(String) - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    set_code(Byte, int) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    set_code_short(int, int) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    set_constant_pool(Menge<CPInfo>) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_constructor_founded(boolean) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_DeclId(DeclId) - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    set_DeclId(DeclId) - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    set_DeclId(DeclId) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    set_descriptor_index(short) - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    set_descriptor_index(short) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_descriptor_index(short) - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    set_Double(double) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    set_Else_block(Statement) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    set_error(String) - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    set_exception_table_Menge(Menge<ExceptionTable>) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    set_ExceptionList(ExceptionList) - Method in class mycompiler.myclass.Method
    -
     
    -
    set_exlist(Menge<SCExcept>) - Method in exception mycompiler.myexception.SCMethodException
    -
     
    -
    set_Expr(Expr, Expr) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.Receiver
    -
     
    -
    set_Expr(Expr) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    set_Expr1(Expr) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    set_Expr2(Expr) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    set_Expr_Menge(Menge<Expr>) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    set_FieldDecl(FieldDecl) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    set_fields(Menge<FieldInfo>) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_Float(float) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    set_function(String) - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    set_head_Condition(Expr) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    set_head_Initializer(Expr) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    set_head_Loop_expr(Expr) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    set_high_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    set_high_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    set_Import(Import) - Method in class mycompiler.myclass.Status
    -
     
    -
    set_info(byte[]) - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    set_info(Menge) - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    set_Int(int) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    set_ListType(Type) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    set_Long(long) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    set_Loop_block(Statement) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    set_low_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    set_low_bytes(int) - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    set_Method_Name(String) - Method in class mycompiler.myclass.Method
    -
     
    -
    set_methods(Menge<MethodInfo>) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_Modifiers(Modifiers) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    set_Modifiers(Modifiers) - Method in class mycompiler.myclass.Method
    -
     
    -
    set_Name(String) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_Name(String) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    set_Name(String) - Method in class mycompiler.myclass.UsedId
    -
     
    -
    set_Name(String) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    set_name_and_type_index(short) - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    set_name_and_type_index(short) - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    set_name_and_type_index(short) - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    set_name_index(short) - Method in class mycompiler.mybytecode.CONSTANT_Class_info
    -
     
    -
    set_name_index(short) - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    set_name_index(short) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_name_index(short) - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    set_Operator(Operator) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    set_ParaHash(Hashtable<String, String>) - Method in class mycompiler.myclass.Class
    -
     
    -
    set_ParaList(Menge<Type>) - Method in class mycompiler.myclass.Class
    -
     
    -
    set_ParaList(Menge<Type>) - Method in class mycompiler.myclass.UsedId
    -
     
    -
    set_ParaList(Menge) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    set_ParaList(Menge<Type>) - Method in class mycompiler.mytype.RefType
    -
     
    -
    set_Paratyp(Menge) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    set_Receiver(Receiver) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    set_ReturnExpr(Expr) - Method in class mycompiler.mystatement.Return
    -
     
    -
    set_statement(String) - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    set_Statement(Statement) - Method in class mycompiler.mystatement.Block
    -
     
    -
    set_Statement_Menge(Menge<Statement>) - Method in class mycompiler.mystatement.Block
    -
     
    -
    set_String(String) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    set_string_index(short) - Method in class mycompiler.mybytecode.CONSTANT_String_info
    -
     
    -
    set_super_class(short) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_tag(byte) - Method in class mycompiler.mybytecode.CPInfo
    -
     
    -
    set_tag(byte) - Method in class mycompiler.mybytecode.Key
    -
     
    -
    set_Then_block(Statement) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    set_this_class(short) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    set_Type(String) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    set_Type(Type) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    set_Type(Type) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    set_Type(RefType) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    set_Typen(Menge) - Method in class mycompiler.myclass.UsedId
    -
     
    -
    set_UnaryMinus(UnaryMinus) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    set_UnaryNot(UnaryNot) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    set_UnaryPlus(UnaryPlus) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    set_UpperBounds(Menge<Type>) - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Setzt den Menge der oberen Grenzen
    -
    -
    set_UsedId(UsedId) - Method in class mycompiler.myclass.Class
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mystatement.This
    -
     
    -
    set_UsedId(UsedId) - Method in class mycompiler.mytype.Type
    -
     
    -
    set_UserDef(UserDef) - Method in class mycompiler.myclass.Status
    -
     
    -
    set_Wert(ExprStmt) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    setA(Menge<CTypeReconstructionResult>) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setAbstract(boolean) - Method in class mycompiler.myclass.Method
    -
    -
    Legt fuer die ByteCodeGen fest, ob Bytecode - innerhalb der Methode generiert wird.
    -
    -
    setArray(boolean) - Method in class mycompiler.mytype.BaseType
    -
    -
    Author: Daniel Feinler
    - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    -
    -
    setArray(boolean) - Method in class mycompiler.mytype.RefType
    -
    -
    Author: Daniel Feinler
    - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    -
    -
    setAssumedType(Type) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    setAssumedType(Type) - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    setAssumptionSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setAssumptionSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setAssumSet(CTypeAssumptionSet) - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    setBlock(BlockExpect) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setBlockId(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    setBlockID(String) - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    setBlockIdList(Menge<Integer>) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setBody(Block) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    setBounds(Menge<Type>) - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    setClasses(HashMap<String, ClassExpect>) - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    setClassName(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    setClassName(String) - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    setConstantVektor(Menge<Constant>) - Method in class mycompiler.myinterface.InterfaceBody
    -
     
    -
    setConstraints(Menge<Pair>) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    setContainedBlocks(Menge<BlockExpect>) - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    setContainedTypes(Menge<Type>) - Method in class mycompiler.myclass.Class
    -
     
    -
    setContainedTypes(Menge<Type>) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    setCurrentBlockDepth(int) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setCurrentClass(String) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setCurrentClassPara(Menge<GenericTypeVar>) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setCurrentMethod(String) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setCurrentMethodOverloadedID(int) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setCurrentMethodParaCount(int) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setDeclIdMenge(Menge<DeclId>) - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    setDeclidMenge(Menge<DeclId>) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    setDeclType(Type) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    setExpectedType(Menge<Type>) - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    setExpectedTypeCopy(Menge<Type>) - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    setExpectedUnknownType(IUnknownTypeExpect) - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    setExpr(Expr) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    setFieldAndLocalVarAssumptions(Hashtable<CTypeAssumptionKey, CTypeAssumption>) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    setFiniteClosure(FC_TTO) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    setGenericMethodParameters(Menge<GenericTypeVar>) - Method in class mycompiler.myclass.Method
    -
     
    -
    setGenerics(Menge<GenericTypeVar>) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    setGenerics(Menge<GenericTypeVar>) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setHashtable(Hashtable<IHashSetKey, E>) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    setIdentifier(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    setInterfaceBody(InterfaceBody) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    setIntersectionTypeKey(CMethodKey) - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    setLineNumber(int) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    setLineNumber(int) - Method in class mycompiler.myclass.Method
    -
     
    -
    setLineNumber(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    setLocalVar(HashMap<String, VarExpect>) - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    setMembers(HashMap<String, VarExpect>) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    setMethodName(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    setMethodName(String) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    setMethodParaCount(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    setMethodParaCount(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    setMethods(HashMap<CMethodKey, MethodExpect>) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    setMethodTypeAssumptions(Menge<CMethodTypeAssumption>) - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    setMethodVektor(Menge<Method>) - Method in class mycompiler.myinterface.InterfaceBody
    -
     
    -
    setModifier(Menge<Modifier>) - Method in class mycompiler.mymodifier.Modifiers
    -
     
    -
    setModifiers(Modifiers) - Method in class mycompiler.AClassOrInterface
    -
     
    -
    setModifiers(Modifiers) - Method in class mycompiler.myclass.Constant
    -
     
    -
    setName(String) - Method in class mycompiler.AClassOrInterface
    -
     
    -
    setName(String) - Method in class mycompiler.myclass.Constant
    -
     
    -
    setName(String) - Method in class mycompiler.myparser.ClassAndParameter
    -
     
    -
    setName(String) - Method in class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    setName(String) - Method in class mycompiler.mytype.RefType
    -
     
    -
    setName(String) - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    setName(String) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setName(String) - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    setOffset(int) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    setOffset(int) - Method in class mycompiler.myclass.Method
    -
     
    -
    setOffset(int) - Method in class mycompiler.myclass.UsedId
    -
     
    -
    setOffset(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    SetOperator(Pair.PairOperator) - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Setzt den Operator
    -
    -
    setOutputDir(String) - Method in class mycompiler.MyCompiler
    -
     
    -
    setOutputDir(String) - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: Juergen Schmiing
    - Legt das Ausgabeverzeichnis fuer die class-Files fest.
    -
    -
    setOverloadedID(int) - Method in class mycompiler.myclass.Method
    -
     
    -
    setOverloadID(int) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setPackageName(UsedId) - Method in class mycompiler.AClassOrInterface
    -
     
    -
    setPackageName(UsedId) - Method in class mycompiler.SourceFile
    -
     
    -
    setParaList(Menge<Type>) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    setParalist(ParaList) - Method in class mycompiler.myparser.ClassAndParameter
    -
     
    -
    setParalist(ParaList) - Method in class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    setParalist(Menge<Type>) - Method in class mycompiler.mytype.ParaList
    -
     
    -
    setParameter(HashMap<String, VarExpect>) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setParameterList(ParameterList) - Method in class mycompiler.myclass.Method
    -
     
    -
    setParameterList(ParameterList) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    setPrimitiveFlag(boolean) - Method in class mycompiler.mystatement.Literal
    -
     
    -
    setPrimitiveFlag(boolean) - Method in class mycompiler.mytype.RefType
    -
     
    -
    setResultType(Type) - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setResultTypes(Menge<Type>) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setReturnType(Type) - Method in class mycompiler.myclass.Method
    -
    -

    Author: Jrg Buerle
    -
    -
    setReturntypes(Menge<Type>) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setReturntypesCopy(Menge<Type>) - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    setSubSet(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    setSubstitutions(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    setSuperInterfaces(Menge<UsedId>) - Method in class mycompiler.AClassOrInterface
    -
     
    -
    setThisClassname(String) - Method in class typinferenz.TypeAssumptions
    -
    -
    Im AssumptionSet muss je nach Umfeld der Wert von "this" neu gesetzt werden.
    -
    -
    setType(Type) - Method in class mycompiler.myclass.Constant
    -
    -
    Legt den Typ der Konstantendefinition fest
    -
    -
    setType(Type) - Method in class mycompiler.myclass.FormalParameter
    -
    -

    Author: J�rg B�uerle
    -
    -
    setType(Type) - Method in class mycompiler.myclass.InstVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    setType(Type) - Method in class mycompiler.mystatement.NewArray
    -
    -
    Author: J�rg B�uerle
    -
    -
    setType(Type) - Method in class mycompiler.mystatement.Statement
    -
    -

    Author: J�rg B�uerle - Verschoben aus ExprStmt von Andreas Stadelmeier, a10023
    -
    -
    setType(Type) - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Author: J�rg B�uerle
    -
    -
    setTypeVar(TypePlaceholder) - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Author: J�rg B�uerle
    -
    -
    setTypeVariable(Type) - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    setTypeVariable(Type) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    setTypeVariable(Type) - Method in interface typinferenz.Typable
    -
     
    -
    setUnifiedConstraints(Menge<Pair>) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    setUnknownTypeNameMapping(HashMap<String, String>) - Method in class mycompiler.test.expectationTypes.UnknownTypesMappingExpect
    -
     
    -
    setUp() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    -
     
    -
    setUp() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    -
     
    -
    setUp() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    setUpBeforeClass() - Static method in class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    -
     
    -
    setUpBeforeClass() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    setValue(Expr) - Method in class mycompiler.myclass.Constant
    -
    -
    Legt den Wert der Konstantendefinition fest.
    -
    -
    setMenge(Menge<E>) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    setWert(Expr) - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    SetWildcardType(Type) - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Setzt den Typ in der Wildcard
    -
    -
    SetWildcardType(Type) - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Setzt den Typ in der Wildcard
    -
    -
    SetWildcardType(Type) - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
    -
    -
    shallowCopy() - Method in class mycompiler.mytype.CRefTypeSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CMultiplyTupleSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CReconstructionTupleSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CTripleSet
    -
     
    -
    shallowCopy() - Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet
    -
     
    -
    SHIFTLEFT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    SHIFTLEFTEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    SHIFTRIGHT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    shortToBytes(short) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    SignatureInfo - Class in mycompiler.mybytecode
    -
    -
    Generiert die Attribute eines Fields, einer Methode oder einer Klasse/Interface - zur Integration der Signatur (Generics).
    -
    -
    SignatureInfo(Menge<Type>, UsedId, Menge<UsedId>, ClassFile) - Constructor for class mycompiler.mybytecode.SignatureInfo
    -
    -
    Konstruktor fuer die Signatur einer Klasse bzw. eines Interfaces.
    -
    -
    SignatureInfo(Type, ClassFile) - Constructor for class mycompiler.mybytecode.SignatureInfo
    -
    -
    Konstruktor fuer eine Signatur einer Instanzvariable.
    -
    -
    SignatureInfo(ParameterList, Type, ClassFile) - Constructor for class mycompiler.mybytecode.SignatureInfo
    -
    -
    Konstruktor fuer eine Methodensignatur.
    -
    -
    SIGNEDSHIFTRIGHT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    SIGNEDSHIFTRIGHTEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    SingleConstraint - Class in typinferenz
    -
    -
    Beschreibung von Herrn Plümicke: - "The set of constraints consists of constraints of the form θ R θ' , where θ and - θ' are Java types and R (R ∈ { < , -
    -
    SingleConstraint(Type, Type) - Constructor for class typinferenz.SingleConstraint
    -
     
    -
    sipush - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    size() - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    SourceFile - Class in mycompiler
    -
     
    -
    SourceFile() - Constructor for class mycompiler.SourceFile
    -
     
    -
    Statement - Class in mycompiler.mystatement
    -
     
    -
    Statement(int, int) - Constructor for class mycompiler.mystatement.Statement
    -
     
    -
    statements - Variable in class mycompiler.mystatement.Block
    -
     
    -
    Static - Class in mycompiler.mymodifier
    -
     
    -
    Static() - Constructor for class mycompiler.mymodifier.Static
    -
     
    -
    STATIC - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Status - Class in mycompiler.myclass
    -
     
    -
    Status() - Constructor for class mycompiler.myclass.Status
    -
     
    -
    String2Bool() - Method in class mycompiler.myparser.Token
    -
     
    -
    String2Double() - Method in class mycompiler.myparser.Token
    -
     
    -
    String2Float() - Method in class mycompiler.myparser.Token
    -
     
    -
    String2Int() - Method in class mycompiler.myparser.Token
    -
     
    -
    String2Long() - Method in class mycompiler.myparser.Token
    -
     
    -
    STRINGLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    StringLiteral - Class in mycompiler.mystatement
    -
     
    -
    StringLiteral() - Constructor for class mycompiler.mystatement.StringLiteral
    -
     
    -
    StringTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    StringTest(String) - Constructor for class mycompiler.test.primitiveTypes.StringTest
    -
     
    -
    sub(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet
    -
     
    -
    sub(CSubstitution) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    sub(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    sub(CSubstitution) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    sub_unify(Menge<Pair>, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    sub_unify(Menge<Pair>, FC_TTO, boolean) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    Subst(Pair, int, TypePlaceholder, Type, boolean) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    SubstHashtable(RefType, Hashtable<String, Type>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    SubstHashtable2MengePair(Hashtable) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    SubstHashtableGeneric(RefType, Hashtable<String, Type>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    subtract(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    subtract(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    subtract(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    suite() - Static method in class mycompiler.mytest.JUnitTests
    -
     
    -
    suite() - Static method in class mycompiler.test.AllTests
    -
     
    -
    suite() - Static method in class mycompiler.test.blocks.AllTestsBlocks
    -
     
    -
    suite() - Static method in class mycompiler.test.complexTypes.AllTestsComplexTypes
    -
     
    -
    suite() - Static method in class mycompiler.test.generics.AllTestsGenerics
    -
     
    -
    suite() - Static method in class mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic
    -
     
    -
    suite() - Static method in class mycompiler.test.javaConcepts.inheritance.AllTestsInheritance
    -
     
    -
    suite() - Static method in class mycompiler.test.javaConcepts.overloading.AllTestsOverloading
    -
     
    -
    suite() - Static method in class mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess
    -
     
    -
    suite() - Static method in class mycompiler.test.LambdaInterferenzTest
    -
     
    -
    suite() - Static method in class mycompiler.test.operators.AllTestsOperators
    -
     
    -
    suite() - Static method in class mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes
    -
     
    -
    suite() - Static method in class mycompiler.test.trivial.AllTestsTrivial
    -
     
    -
    suite() - Static method in class mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite
    -
    -
    JUnit Tests for main type reconstruction algorithms
    -
    -
    Super - Class in mycompiler.mymodifier
    -
     
    -
    Super() - Constructor for class mycompiler.mymodifier.Super
    -
     
    -
    SUPER - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    superclassid - Variable in class mycompiler.myclass.Class
    -
     
    -
    SuperWildcardType - Class in mycompiler.mytype
    -
    -
    Stellt eine Wildcard mit unterer Grenze dar.
    -
    -
    SuperWildcardType(int, Type) - Constructor for class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine SuperWildcard
    -
    -
    swap - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    SWITCH - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-19.html b/doc/LambdaJavadoc/index-files/index-19.html deleted file mode 100755 index 35955a5f..00000000 --- a/doc/LambdaJavadoc/index-files/index-19.html +++ /dev/null @@ -1,1339 +0,0 @@ - - - - - -T-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    T

    -
    -
    TA1 - Variable in class mycompiler.mytype.Pair
    -
     
    -
    TA2 - Variable in class mycompiler.mytype.Pair
    -
     
    -
    tableswitch - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    tearDown() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    -
     
    -
    tearDown() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    -
     
    -
    tearDown() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.BasicAssumptionsTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.ConstructorTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.GenericVarTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.OverloadingTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.ParseMultipleFilesTest
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestAssign
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestFunN
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestIfStmt
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestLambda
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestMethodCall
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestThis
    -
     
    -
    test() - Method in class mycompiler.test.lambda.TestWhile
    -
     
    -
    Test - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    Test() - Constructor for class mycompiler.test.notUsedAnymore.Test
    -
     
    -
    TEst_2 - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TEst_2() - Constructor for class mycompiler.test.notUsedAnymore.TEst_2
    -
     
    -
    TestAbstractInferenceTest - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestAbstractInferenceTest(String) - Constructor for class mycompiler.test.notUsedAnymore.TestAbstractInferenceTest
    -
     
    -
    TestAbstractInferenceTest2 - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestAbstractInferenceTest2(String) - Constructor for class mycompiler.test.notUsedAnymore.TestAbstractInferenceTest2
    -
     
    -
    testAllMakeFC() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    -
     
    -
    TestAssign - Class in mycompiler.test.lambda
    -
     
    -
    TestAssign() - Constructor for class mycompiler.test.lambda.TestAssign
    -
     
    -
    TestAssignmentTwoGenericTypesNegative - Class in mycompiler.test.generics
    -
    -
    verifies correct detection of incompatible type assignments of two templates
    -
    -
    TestAssignmentTwoGenericTypesNegative(String) - Constructor for class mycompiler.test.generics.TestAssignmentTwoGenericTypesNegative
    -
     
    -
    TestClass - Class in mycompiler.unused
    -
     
    -
    TestClass() - Constructor for class mycompiler.unused.TestClass
    -
     
    -
    TestClassEmpty - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestClassEmpty(String) - Constructor for class mycompiler.test.trivial.TestClassEmpty
    -
     
    -
    TestClassEmptyGenerics - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestClassEmptyGenerics(String) - Constructor for class mycompiler.test.trivial.TestClassEmptyGenerics
    -
     
    -
    TestClassesWithBoundedGenericsOfTwoTypes - Class in mycompiler.test.generics
    -
    -
    checks inference upon bounds, however test fails up to now, bounds are not considered
    -
    -
    TestClassesWithBoundedGenericsOfTwoTypes(String) - Constructor for class mycompiler.test.generics.TestClassesWithBoundedGenericsOfTwoTypes
    -
     
    -
    TestClassesWithBoundedGenericsUsedInMethods - Class in mycompiler.test.generics
    -
    -
    checks case of bounds being two classes, which should not be possible: multiple inheritance is not allowed in java
    -
    -
    TestClassesWithBoundedGenericsUsedInMethods(String) - Constructor for class mycompiler.test.generics.TestClassesWithBoundedGenericsUsedInMethods
    -
     
    -
    TestClassMember - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestClassMember(String) - Constructor for class mycompiler.test.trivial.TestClassMember
    -
     
    -
    TestClassMemberAssignment - Class in mycompiler.test.trivial
    -
    -
    18-04-08
    -
    -
    TestClassMemberAssignment(String) - Constructor for class mycompiler.test.trivial.TestClassMemberAssignment
    -
     
    -
    TestClassMemberWithoutType - Class in mycompiler.test.notUsedAnymore
    -
    -
    18-04-08
    -
    -
    TestClassMemberWithoutType(String) - Constructor for class mycompiler.test.notUsedAnymore.TestClassMemberWithoutType
    -
     
    -
    TestConstants - Class in mycompiler.test.trivial
    -
    -
    18-04-08
    -
    -
    TestConstants(String) - Constructor for class mycompiler.test.trivial.TestConstants
    -
     
    -
    TestConstantsWithoutType - Class in mycompiler.test.notUsedAnymore
    -
    -
    18-04-08
    -
    -
    TestConstantsWithoutType(String) - Constructor for class mycompiler.test.notUsedAnymore.TestConstantsWithoutType
    -
     
    -
    TestConstructor - Class in mycompiler.test.trivial
    -
    -
    13-04-08
    -
    -
    TestConstructor(String) - Constructor for class mycompiler.test.trivial.TestConstructor
    -
     
    -
    TestConstructorNegative - Class in mycompiler.test.trivial
    -
    -
    13-04-08
    -
    -
    TestConstructorNegative(String) - Constructor for class mycompiler.test.trivial.TestConstructorNegative
    -
     
    -
    TestExtendedClassesWithBoundedGenerics - Class in mycompiler.test.generics
    -
    -
    checks extended usage of generics, however test fails up to now because of no relation between class generics and method generics
    -
    -
    TestExtendedClassesWithBoundedGenerics(String) - Constructor for class mycompiler.test.generics.TestExtendedClassesWithBoundedGenerics
    -
     
    -
    TestForStmt - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestForStmt(String) - Constructor for class mycompiler.test.blocks.TestForStmt
    -
     
    -
    TestFunN - Class in mycompiler.test.lambda
    -
     
    -
    TestFunN() - Constructor for class mycompiler.test.lambda.TestFunN
    -
     
    -
    TestGenerics - Class in mycompiler.test.notUsedAnymore
    -
    -
    01-04-08
    -
    -
    TestGenerics(String) - Constructor for class mycompiler.test.notUsedAnymore.TestGenerics
    -
     
    -
    TestIfStmt - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestIfStmt(String) - Constructor for class mycompiler.test.blocks.TestIfStmt
    -
     
    -
    TestIfStmt - Class in mycompiler.test.lambda
    -
     
    -
    TestIfStmt() - Constructor for class mycompiler.test.lambda.TestIfStmt
    -
     
    -
    TestInferenceAcrossBlocks - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestInferenceAcrossBlocks(String) - Constructor for class mycompiler.test.blocks.TestInferenceAcrossBlocks
    -
     
    -
    TestInferenceOwnTypeByMember - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    28-04-08
    -
    -
    TestInferenceOwnTypeByMember(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMember
    -
     
    -
    TestInferenceOwnTypeByMemberAcrossClasses - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    28-04-08
    -
    -
    TestInferenceOwnTypeByMemberAcrossClasses(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMemberAcrossClasses
    -
     
    -
    TestInferenceOwnTypeByMethodCall - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    29-04-08
    -
    -
    TestInferenceOwnTypeByMethodCall(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCall
    -
     
    -
    TestInferenceOwnTypeByMethodCallAcrossClasses - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    28-04-08
    -
    -
    TestInferenceOwnTypeByMethodCallAcrossClasses(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCallAcrossClasses
    -
     
    -
    TestInferenceOwnTypeByMethodParameter - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    28-04-08
    -
    -
    TestInferenceOwnTypeByMethodParameter(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodParameter
    -
     
    -
    TestInferenceOwnTypeByMethodReturnTypeMixed1 - Class in mycompiler.test.inferenceByCharacteristic
    -
     
    -
    TestInferenceOwnTypeByMethodReturnTypeMixed1(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodReturnTypeMixed1
    -
     
    -
    TestInferenceOwnTypeByReturnType - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    28-04-08
    -
    -
    TestInferenceOwnTypeByReturnType(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnType
    -
     
    -
    TestInferenceOwnTypeByReturnTypeAcrossClasses - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    27-04-08
    -
    -
    TestInferenceOwnTypeByReturnTypeAcrossClasses(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnTypeAcrossClasses
    -
     
    -
    TestInferenceStdTypeByOperation - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    4-05-08
    -
    -
    TestInferenceStdTypeByOperation(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByOperation
    -
     
    -
    TestInferenceStdTypeByReturnType - Class in mycompiler.test.inferenceByCharacteristic
    -
    -
    4-05-08
    -
    -
    TestInferenceStdTypeByReturnType(String) - Constructor for class mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByReturnType
    -
     
    -
    TestInheritanceAcrossLevel - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceAcrossLevel(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceAcrossLevel
    -
     
    -
    TestInheritanceCheckValidImplementationFromInterface - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestInheritanceCheckValidImplementationFromInterface(String) - Constructor for class mycompiler.test.notUsedAnymore.TestInheritanceCheckValidImplementationFromInterface
    -
     
    -
    TestInheritanceCircle - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceCircle(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceCircle
    -
     
    -
    TestInheritanceConstructor - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceConstructor(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceConstructor
    -
     
    -
    TestInheritanceMultiple - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceMultiple(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceMultiple
    -
     
    -
    TestInheritanceMultipleClasses - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceMultipleClasses(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceMultipleClasses
    -
     
    -
    TestInheritanceOverriding - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceOverriding(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceOverriding
    -
     
    -
    TestInheritanceTwoHierarchies - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestInheritanceTwoHierarchies(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestInheritanceTwoHierarchies
    -
     
    -
    TestInterfaceEmpty - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestInterfaceEmpty(String) - Constructor for class mycompiler.test.trivial.TestInterfaceEmpty
    -
     
    -
    TestInterfaceMember - Class in mycompiler.test.trivial
    -
    -
    18-04-08
    -
    -
    TestInterfaceMember(String) - Constructor for class mycompiler.test.trivial.TestInterfaceMember
    -
     
    -
    TestInterfaceMethod - Class in mycompiler.test.trivial
    -
    -
    10-04-08
    -
    -
    TestInterfaceMethod(String) - Constructor for class mycompiler.test.trivial.TestInterfaceMethod
    -
     
    -
    TestInterfaceNotInferenced - Class in mycompiler.test.trivial
    -
    -
    20-05-08
    -
    -
    TestInterfaceNotInferenced(String) - Constructor for class mycompiler.test.trivial.TestInterfaceNotInferenced
    -
     
    -
    TestLambda - Class in mycompiler.test.lambda
    -
     
    -
    TestLambda() - Constructor for class mycompiler.test.lambda.TestLambda
    -
     
    -
    TestMethodCall - Class in mycompiler.test.lambda
    -
     
    -
    TestMethodCall() - Constructor for class mycompiler.test.lambda.TestMethodCall
    -
     
    -
    TestMethodEmpty - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestMethodEmpty(String) - Constructor for class mycompiler.test.trivial.TestMethodEmpty
    -
     
    -
    TestMethodEmptyGeneric - Class in mycompiler.test.trivial
    -
    -
    01-04-08
    -
    -
    TestMethodEmptyGeneric(String) - Constructor for class mycompiler.test.trivial.TestMethodEmptyGeneric
    -
     
    -
    TestMethodEmptyParameter - Class in mycompiler.test.trivial
    -
    -
    TODO:
    -
    -
    TestMethodEmptyParameter(String) - Constructor for class mycompiler.test.trivial.TestMethodEmptyParameter
    -
     
    -
    TestMethodEmptyParameterGenericExtends - Class in mycompiler.test.trivial
    -
     
    -
    TestMethodEmptyParameterGenericExtends(String) - Constructor for class mycompiler.test.trivial.TestMethodEmptyParameterGenericExtends
    -
     
    -
    TestMethodReturnType - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestMethodReturnType(String) - Constructor for class mycompiler.test.notUsedAnymore.TestMethodReturnType
    -
     
    -
    TestMethodReturnTypeNegative - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestMethodReturnTypeNegative(String) - Constructor for class mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative
    -
     
    -
    TestMethodReturnTypeNegative2 - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    TestMethodReturnTypeNegative2(String) - Constructor for class mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative2
    -
     
    -
    TestNestedGenerics - Class in mycompiler.test.generics
    -
    -
    16-05-08
    -
    -
    TestNestedGenerics(String) - Constructor for class mycompiler.test.generics.TestNestedGenerics
    -
     
    -
    TestNestedGenericsNonExistingType - Class in mycompiler.test.generics
    -
    -
    16-05-08
    -
    -
    TestNestedGenericsNonExistingType(String) - Constructor for class mycompiler.test.generics.TestNestedGenericsNonExistingType
    -
     
    -
    TestNonStaticAccess - Class in mycompiler.test.javaConcepts.staticAccess
    -
    -
    22-04-08
    -
    -
    TestNonStaticAccess(String) - Constructor for class mycompiler.test.javaConcepts.staticAccess.TestNonStaticAccess
    -
     
    -
    TestOperatorArithmetic - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorArithmetic(String) - Constructor for class mycompiler.test.operators.TestOperatorArithmetic
    -
     
    -
    TestOperatorBitwise - Class in mycompiler.test.operators
    -
    -
    29-05-08
    -
    -
    TestOperatorBitwise(String) - Constructor for class mycompiler.test.operators.TestOperatorBitwise
    -
     
    -
    TestOperatorBool - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorBool(String) - Constructor for class mycompiler.test.operators.TestOperatorBool
    -
     
    -
    TestOperatorComparison - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorComparison(String) - Constructor for class mycompiler.test.operators.TestOperatorComparison
    -
     
    -
    TestOperatorIncrement - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorIncrement(String) - Constructor for class mycompiler.test.operators.TestOperatorIncrement
    -
     
    -
    TestOperatorObjects - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorObjects(String) - Constructor for class mycompiler.test.operators.TestOperatorObjects
    -
     
    -
    TestOperatorString - Class in mycompiler.test.operators
    -
    -
    12-04-08
    -
    -
    TestOperatorString(String) - Constructor for class mycompiler.test.operators.TestOperatorString
    -
     
    -
    TestOwnClassMember - Class in mycompiler.test.complexTypes
    -
    -
    25-04-08
    -
    -
    TestOwnClassMember(String) - Constructor for class mycompiler.test.complexTypes.TestOwnClassMember
    -
     
    -
    TestOwnClassMethod - Class in mycompiler.test.complexTypes
    -
    -
    18-04-08
    -
    -
    TestOwnClassMethod(String) - Constructor for class mycompiler.test.complexTypes.TestOwnClassMethod
    -
     
    -
    testPair - Variable in class mycompiler.MyCompiler
    -
     
    -
    testPair - Variable in class mycompiler.myparser.JavaParser
    -
     
    -
    testSetup() - Method in class mycompiler.test.AbstractInferenceTest
    -
    -
    runs the JUnit-Test, calls all compiler steps
    -
    -
    testSetup() - Method in class mycompiler.test.notUsedAnymore.AbstractInferenceTestExtendedOLD
    -
    -
    start test according to JUnit conventions
    -
    -
    testSetup() - Method in class mycompiler.test.notUsedAnymore.AbstractInferenceTestOld
    -
    -
    runs the JUnit-Test, calls all compiler steps
    -
    -
    TestSimpleBlocks - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestSimpleBlocks(String) - Constructor for class mycompiler.test.blocks.TestSimpleBlocks
    -
     
    -
    TestSimpleClassesWithBoundedGenerics - Class in mycompiler.test.generics
    -
    -
    13-05-08
    -
    -
    TestSimpleClassesWithBoundedGenerics(String) - Constructor for class mycompiler.test.generics.TestSimpleClassesWithBoundedGenerics
    -
     
    -
    TestSimpleClassesWithBoundedGenericsNegative - Class in mycompiler.test.generics
    -
    -
    verifies correct identification of a bounded generic which is instanciated with a type not included in bounds
    -
    -
    TestSimpleClassesWithBoundedGenericsNegative(String) - Constructor for class mycompiler.test.generics.TestSimpleClassesWithBoundedGenericsNegative
    -
     
    -
    TestSimpleClassesWithGenerics - Class in mycompiler.test.generics
    -
    -
    checks simple usage of generics without bounds
    -
    -
    TestSimpleClassesWithGenerics(String) - Constructor for class mycompiler.test.generics.TestSimpleClassesWithGenerics
    -
     
    -
    TestSimpleClassesWithGenericsNegative - Class in mycompiler.test.generics
    -
    -
    checks whether wrong usage of generics is detected
    -
    -
    TestSimpleClassesWithGenericsNegative(String) - Constructor for class mycompiler.test.generics.TestSimpleClassesWithGenericsNegative
    -
     
    -
    TestSimpleInheritance - Class in mycompiler.test.javaConcepts.inheritance
    -
     
    -
    TestSimpleInheritance(String) - Constructor for class mycompiler.test.javaConcepts.inheritance.TestSimpleInheritance
    -
     
    -
    TestSimpleTypes - Class in mycompiler.test.primitiveTypes
    -
    -
    01-04-08
    -
    -
    TestSimpleTypes(String) - Constructor for class mycompiler.test.primitiveTypes.TestSimpleTypes
    -
     
    -
    TestSimpleVariable - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestSimpleVariable(String) - Constructor for class mycompiler.test.blocks.TestSimpleVariable
    -
     
    -
    TestStandardLibInheritanceInference - Class in mycompiler.test.complexTypes
    -
    -
    25-05-08
    -
    -
    TestStandardLibInheritanceInference(String) - Constructor for class mycompiler.test.complexTypes.TestStandardLibInheritanceInference
    -
     
    -
    TestStandardLibMethod - Class in mycompiler.test.complexTypes
    -
    -
    18-04-08
    -
    -
    TestStandardLibMethod(String) - Constructor for class mycompiler.test.complexTypes.TestStandardLibMethod
    -
     
    -
    TestStaticAccess - Class in mycompiler.test.javaConcepts.staticAccess
    -
    -
    22-04-08
    -
    -
    TestStaticAccess(String) - Constructor for class mycompiler.test.javaConcepts.staticAccess.TestStaticAccess
    -
     
    -
    TestStaticAccessError - Class in mycompiler.test.javaConcepts.staticAccess
    -
    -
    22-04-08
    -
    -
    TestStaticAccessError(String) - Constructor for class mycompiler.test.javaConcepts.staticAccess.TestStaticAccessError
    -
     
    -
    testSubUnifyReduce2() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    -
     
    -
    TestThis - Class in mycompiler.test.lambda
    -
     
    -
    TestThis() - Constructor for class mycompiler.test.lambda.TestThis
    -
     
    -
    testThisCase() - Method in class mycompiler.test.notUsedAnymore.TestAbstractInferenceTest
    -
     
    -
    testTrivialMakeFC() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    -
     
    -
    TestUndeterminedReturnNegative - Class in mycompiler.test.blocks
    -
    -
    16-05-08
    -
    -
    TestUndeterminedReturnNegative(String) - Constructor for class mycompiler.test.blocks.TestUndeterminedReturnNegative
    -
     
    -
    testUnifyErase1() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    testUnifyReduce1() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    testUnifytesting() - Method in class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    TestUninitializedVariable - Class in mycompiler.test.blocks
    -
    -
    29-05-08
    -
    -
    TestUninitializedVariable(String) - Constructor for class mycompiler.test.blocks.TestUninitializedVariable
    -
     
    -
    TestWhile - Class in mycompiler.test.lambda
    -
     
    -
    TestWhile() - Constructor for class mycompiler.test.lambda.TestWhile
    -
     
    -
    TestWhileStmt - Class in mycompiler.test.blocks
    -
    -
    18-04-08
    -
    -
    TestWhileStmt(String) - Constructor for class mycompiler.test.blocks.TestWhileStmt
    -
     
    -
    then_block - Variable in class mycompiler.mystatement.IfStmt
    -
     
    -
    THIS - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    This - Class in mycompiler.mystatement
    -
     
    -
    This(int, int) - Constructor for class mycompiler.mystatement.This
    -
     
    -
    THROW - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    THROWS - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    time() - Static method in class mycompiler.mytypereconstruction.CHelper
    -
     
    -
    TIMESEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    TimesOp - Class in mycompiler.myoperator
    -
     
    -
    TimesOp(int, int) - Constructor for class mycompiler.myoperator.TimesOp
    -
     
    -
    toCMethodTypeAssumption() - Method in class typinferenz.FunN
    -
     
    -
    token - Variable in exception mycompiler.myparser.JavaParser.yyException
    -
     
    -
    token() - Method in interface mycompiler.myparser.JavaParser.yyInput
    -
    -
    classifies current token.
    -
    -
    token() - Method in class mycompiler.myparser.Scanner
    -
     
    -
    Token - Class in mycompiler.myparser
    -
     
    -
    token - Variable in class mycompiler.myparser.Token
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Class_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Float_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Integer_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_String_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CONSTANT_Utf8_info
    -
     
    -
    toString() - Method in class mycompiler.mybytecode.CPInfo
    -
     
    -
    toString() - Method in class mycompiler.myclass.Class
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.myclass.ClassBody
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.myclass.DeclId
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    toString() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    toString() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    toString() - Method in class mycompiler.myclass.Method
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    toString() - Method in class mycompiler.myclass.UsedId
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    toString() - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    toString() - Method in class mycompiler.mystatement.Assign
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.Block
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.DoubleLiteral
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.FloatLiteral
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    toString() - Method in class mycompiler.mystatement.InstVar
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.IntLiteral
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    toString() - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.LongLiteral
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.MethodCall
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.NewClass
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.Receiver
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mystatement.Return
    -
     
    -
    toString() - Method in class mycompiler.mystatement.This
    -
     
    -
    toString() - Method in class mycompiler.mystatement.WhileStmt
    -
    -

    Author: Martin Pl�micke
    -
    -
    toString() - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    toString() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytype.GenericTypeVar
    -
     
    -
    toString() - Method in class mycompiler.mytype.Pair
    -
     
    -
    toString() - Method in class mycompiler.mytype.RefType
    -
     
    -
    toString() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytype.Type
    -
    -

    Author: J�rg B�uerle
    -
    -
    toString() - Method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    toString() - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt String Entsprechung zur�ck.
    -
    -
    toString() - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
    -

    Author: Jrg Buerle
    -
    -
    toString() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.CSubstitutionGenVar
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.CTriple
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    toString() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
    -
    -

    Author: Jrg Buerle
    -
    -
    toString() - Method in class mycompiler.mytypereconstruction.unify.FC_TTO
    -
     
    -
    toString() - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    toString() - Method in class typinferenz.Constraint
    -
     
    -
    toString() - Method in class typinferenz.ConstraintsSet
    -
     
    -
    toString() - Method in class typinferenz.FreshTypeVariable
    -
     
    -
    toString() - Method in class typinferenz.SingleConstraint
    -
     
    -
    toString() - Method in class typinferenz.TypeAssumptions
    -
     
    -
    TrAlgorithmTestSuite - Class in mycompiler.test.unittest.typeReconstructionTest
    -
     
    -
    TrAlgorithmTestSuite() - Constructor for class mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite
    -
     
    -
    TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.EqualOp
    -
    -
    Implementierung des Algorithmus 5.53 von Martin Pl�micke -
    Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, - dann sollte der RefType "Boolean" �berall durch den BaseType "BooleanType" - ersetzt werden!!!
    -
    -
    TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.NotEqualOp
    -
    -
    Implementierung des Algorithmus 5.54 von Martin Pl�micke -
    Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, - dann sollte der RefType "Boolean" �berall durch den BaseType "BooleanType" - ersetzt werden!!!
    -
    -
    TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.myoperator.Operator
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Assign
    -
    -
    Implementierung des Algorithmus 5.30 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.BoolLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CastExpr
    -
    -
    Implementierung des Algorithmus 5.43 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CharLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.DoubleLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.FloatLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstVar
    -
    -
    Implementierung des Algorithmus 5.38 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.IntLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Literal
    -
    -
    Implementierung des Algorithmus 5.40 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
    -
    Implementierung des Algorithmus 5.37 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LongLiteral
    -
    -
    Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.MethodCall
    -
    -
    Implementierung des Algorithmus 5.33 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NegativeExpr
    -
    -
    Implementierung des Algorithmus 5.41 von Martin Pl�micke -
    Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, - dann sollte der RefType "Integer" �berall durch den BaseType "IntegerType" - ersetzt werden!!!
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewArray
    -
    -
    Implementierung des Algorithmus 5.32 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewClass
    -
    -
    Implementierung des Algorithmus 5.31 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NotExpr
    -
    -
    Implementierung des Algorithmus 5.42 von Martin Pl�micke -
    Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, - dann sollte der RefType "Boolean" �berall durch den BaseType "BooleanType" - ersetzt werden!!!
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Null
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PostDecExpr
    -
    -
    Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType - IntegerType ausgetauscht werden.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PostIncExpr
    -
    -
    Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType - IntegerType ausgetauscht werden.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PreDecExpr
    -
    -
    Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType - IntegerType ausgetauscht werden.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PreIncExpr
    -
    -
    Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType - IntegerType ausgetauscht werden.
    -
    -
    TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.This
    -
    -
    Implementierung des Algorithmus 5.35 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRExpPossibility(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData, RefType, RefType) - Method in class mycompiler.myoperator.Operator
    -
     
    -
    TRInstVar(CTriple, CSupportData) - Method in class mycompiler.mystatement.InstVar
    -
    -
    Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TrMakeFCTest - Class in mycompiler.test.unittest.typeReconstructionTest
    -
     
    -
    TrMakeFCTest(String) - Constructor for class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    -
     
    -
    TRMCallApp(CMultiplyTuple, String, String, int, boolean, CSupportData) - Method in class mycompiler.mystatement.MethodCall
    -
    -
    Implementierung des Algorithmus 5.34 von Martin Pl�micke
    -
    -
    TRMultiply(CMultiplyTuple, Expr, CSupportData) - Method in class mycompiler.mystatement.Expr
    -
    -
    (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
    Author: J�rg B�uerle
    -
    -
    TRProg(CSupportData, TypeAssumptions) - Method in class mycompiler.myclass.Class
    -
    -
    Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Assign
    -
    -
    Implementierung des Algorithmus 5.25 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Block
    -
    -
    Implementierung des Algorithmus 5.20 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.ForStmt
    -
    -
    Implementierung des Algorithmus 5.23 von Martin Pl�micke -
    Achtung Workaround: RefType "Boolean" muss noch durch BaseType - "BooleanType" ersetzt werden.
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.IfStmt
    -
    -
    Implementierung des Algorithmus 5.21 von Martin Pl�micke -
    Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} - ersetzen.
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -
    Implementierung des Algorithmus 5.24 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.MethodCall
    -
    -
    Implementierung des Algorithmus 5.27 von Martin Pl�micke
    - Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NewClass
    -
    -
    Implementierung des Algorithmus 5.26 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Null
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Return
    -
    -
    Implementierung des Algorithmus 5.22 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.This
    -
     
    -
    TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.WhileStmt
    -
    -
    Implementierung des Algorithmus 5.23 von Martin Pl�micke -
    Achtung Workaround: RefType "Boolean" muss noch durch BaseType - "BooleanType" ersetzt werden.
    -
    -
    TRStatements(CSubstitutionSet, CTypeAssumptionSet, Menge<Statement>, int, CTypeAssumptionSet, CSupportData) - Method in class mycompiler.mystatement.Block
    -
    -
    Implementierung des Algorithmus 5.19 von Martin Pl�micke -
    Author: J�rg B�uerle
    -
    -
    TrSubUnifyTest - Class in mycompiler.test.unittest.typeReconstructionTest
    -
     
    -
    TrSubUnifyTest(String) - Constructor for class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    -
     
    -
    TRTuple(CMultiplyTuple, Menge<Expr>, CSupportData) - Method in class mycompiler.mystatement.Expr
    -
    -
    (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
    Author: J�rg B�uerle
    -
    -
    TrUnifyTest - Class in mycompiler.test.unittest.typeReconstructionTest
    -
     
    -
    TrUnifyTest(String) - Constructor for class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    -
     
    -
    TRY - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Typable - Interface in typinferenz
    -
     
    -
    TYPE(Menge<Method>, Menge<Expr>, TypeAssumptions) - Method in class mycompiler.myclass.Class
    -
     
    -
    TYPE(TypeAssumptions) - Method in class mycompiler.myclass.Method
    -
     
    -
    Type - Class in mycompiler.mytype
    -
     
    -
    Type(String, int) - Constructor for class mycompiler.mytype.Type
    -
     
    -
    Type(int) - Constructor for class mycompiler.mytype.Type
    -
     
    -
    Type2Key() - Method in class mycompiler.mytype.RefType
    -
     
    -
    Type2Key() - Method in class mycompiler.mytype.Type
    -
     
    -
    Type2String() - Method in class mycompiler.mytype.RefType
    -
     
    -
    Type2String() - Method in class mycompiler.mytype.Type
    -
     
    -
    type_check(CodeAttribute) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    TypeAssumptions - Class in typinferenz
    -
    -
    Eine Sammlung von TypeAssumptions.
    -
    -
    TypeAssumptions() - Constructor for class typinferenz.TypeAssumptions
    -
     
    -
    TypeAssumptions(String) - Constructor for class typinferenz.TypeAssumptions
    -
    -
    Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
    -
    -
    TypeAssumptions(CTypeAssumptionSet, String) - Constructor for class typinferenz.TypeAssumptions
    -
     
    -
    TypeAssumptions(TypeAssumptions) - Constructor for class typinferenz.TypeAssumptions
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.LambdaExpression
    -
    -
    Spezifikation: - - TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) = - let - AssArgs = { xi : ai | ai fresh type variables } - (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) - | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt ) - in - (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a, - ConS ∪ { (FunN a) }), - where a is a fresh type variable
    -
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.Null
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    TYPEExpr(TypeAssumptions) - Method in class mycompiler.mystatement.This
    -
     
    -
    TypePlaceholder - Class in mycompiler.mytype
    -
    -
    Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben - Typ.
    -
    -
    TypePlaceholderExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-05-08
    -
    -
    TypePlaceholderExpect(String) - Constructor for class mycompiler.test.expectationTypes.TypePlaceholderExpect
    -
     
    -
    typeReconstruction() - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Ruft den Typrekonstruktionsalgorithmus auf.
    -
    -
    typeReconstruction() - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Ruft den Typrekonstruktionsalgorithmus auf.
    -
    -
    typeReconstruction() - Method in class mycompiler.SourceFile
    -
    -
    Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
    -
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.Assign
    -
    -
    Spezifikation: - TYPEStmt( Ass, stmt ) = - let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) - in (stmt : Void, ConS)
    -
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.Block
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.Expr
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.MethodCall
    -
    -
    Spezifikation: - TYPEStmt( Ass, stmt ) = - let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) - in (stmt : Void, ConS)
    -
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.NewClass
    -
    -
    Spezifikation: - TYPEStmt( Ass, stmt ) = - let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) - in (stmt : Void, ConS)
    -
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.Return
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    TYPEStmt(TypeAssumptions) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    typinferenz - package typinferenz
    -
     
    -
    TypinferenzException - Exception in typinferenz
    -
    -
    Eine RuntimeException, welche bei einem Fehler w�hrend des Typinferenzalgorithmus ausgel�st wird.
    -
    -
    TypinferenzException(String) - Constructor for exception typinferenz.TypinferenzException
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-2.html b/doc/LambdaJavadoc/index-files/index-2.html deleted file mode 100755 index 72dc023e..00000000 --- a/doc/LambdaJavadoc/index-files/index-2.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - -B-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    B

    -
    -
    backdoorCreate(String) - Static method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in - der zentralen Registry eingetragen wird.
    -
    -
    backdoorFresh() - Static method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, um neue TypePlaceholders zu erzeugen.
    -
    -
    backdoorSetName(String) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    -
    -
    baload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    BaseType - Class in mycompiler.mytype
    -
     
    -
    BaseType(int) - Constructor for class mycompiler.mytype.BaseType
    -
     
    -
    BaseType(String, int) - Constructor for class mycompiler.mytype.BaseType
    -
     
    -
    BasicAssumptionClass - Class in mycompiler.myclass
    -
     
    -
    BasicAssumptionClass(String) - Constructor for class mycompiler.myclass.BasicAssumptionClass
    -
     
    -
    BasicAssumptionClass(String, Modifiers) - Constructor for class mycompiler.myclass.BasicAssumptionClass
    -
     
    -
    BasicAssumptionsTest - Class in mycompiler.test.lambda
    -
     
    -
    BasicAssumptionsTest() - Constructor for class mycompiler.test.lambda.BasicAssumptionsTest
    -
     
    -
    bastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    berechneKarthesischesProdukt(Menge<Menge<M>>) - Method in class typinferenz.KarthesischesProdukt
    -
     
    -
    Binary - Class in mycompiler.mystatement
    -
     
    -
    Binary(int, int) - Constructor for class mycompiler.mystatement.Binary
    -
     
    -
    BinaryExpr - Class in mycompiler.mystatement
    -
     
    -
    BinaryExpr(int, int) - Constructor for class mycompiler.mystatement.BinaryExpr
    -
     
    -
    bipush - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    Block - Class in mycompiler.mystatement
    -
     
    -
    Block() - Constructor for class mycompiler.mystatement.Block
    -
     
    -
    block - Variable in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    BlockExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    BlockExpect(String, String) - Constructor for class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    BOOLEAN - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    BooleanTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    BooleanTest(String) - Constructor for class mycompiler.test.primitiveTypes.BooleanTest
    -
     
    -
    BooleanType - Class in mycompiler.mytype
    -
     
    -
    BooleanType() - Constructor for class mycompiler.mytype.BooleanType
    -
     
    -
    BOOLLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    BoolLiteral - Class in mycompiler.mystatement
    -
     
    -
    BoolLiteral() - Constructor for class mycompiler.mystatement.BoolLiteral
    -
     
    -
    BoundedGenericTypeVar - Class in mycompiler.mytype
    -
    -
    Entspricht einem GenericTypeVar, jedoch mit Bounds - (d.h. vorgaben, von welchem Typ die Typevar sein darf - => extends Class x - => implements Interface y - ...
    -
    -
    BoundedGenericTypeVar(String, int) - Constructor for class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    BoundedGenericTypeVar(String, Menge<Type>, int) - Constructor for class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    BRACE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    BREAK - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    breakpoint - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    bSubst - Variable in class mycompiler.mytype.Pair
    -
     
    -
    build(ClassFile, CodeAttribute, Expr, Menge<Integer>, boolean, boolean, boolean, Menge) - Static method in class mycompiler.myoperator.LogOp
    -
     
    -
    bytes_to_int(Byte, Byte, Byte, Byte) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    bytes_to_int(Byte, Byte) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    bytes_to_int(Byte) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ByteTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    ByteTest(String) - Constructor for class mycompiler.test.primitiveTypes.ByteTest
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-20.html b/doc/LambdaJavadoc/index-files/index-20.html deleted file mode 100755 index 5ac8ca54..00000000 --- a/doc/LambdaJavadoc/index-files/index-20.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -U-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    U

    -
    -
    UnaryExpr - Class in mycompiler.mystatement
    -
     
    -
    UnaryExpr(int, int) - Constructor for class mycompiler.mystatement.UnaryExpr
    -
     
    -
    UnaryMinus - Class in mycompiler.mystatement
    -
     
    -
    UnaryMinus() - Constructor for class mycompiler.mystatement.UnaryMinus
    -
     
    -
    UnaryNot - Class in mycompiler.mystatement
    -
     
    -
    UnaryNot() - Constructor for class mycompiler.mystatement.UnaryNot
    -
     
    -
    UnaryPlus - Class in mycompiler.mystatement
    -
     
    -
    UnaryPlus() - Constructor for class mycompiler.mystatement.UnaryPlus
    -
     
    -
    Unify - Class in mycompiler.mytypereconstruction.unify
    -
    -
    Implementierung des Unifizierungsalgorithmus
    -
    -
    Unify() - Constructor for class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    unify(Type, Type, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
    -
    Unifiziert ein Pair mit den Elementen ty1 und ty2 -> (ty1 < ty2)
    -
    -
    unify(Menge<Pair>, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
    -
    Einstieg in die Unifizierung mit Wildcards
    -
    -
    unify_Mub(Type, Type, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    unifyOld(Menge<Pair>, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    unifyWC(Type, Type, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
    -
    Einstieg in die Unifizierung mit Wildcards
    -
    -
    unifyWC(Pair, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
    -
    Einstieg in die Unifizierung mit Wildcards
    -
    -
    unite(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    unite(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    unite(CSet<E>) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
    -
    F�gt ein CMengeSet an!
    -
    -
    UnknownTypesMappingExpect - Class in mycompiler.test.expectationTypes
    -
    -
    class is used to translate expected Typeplaceholder variable names to the ones used by the compiler allowing a comparison.
    -
    -
    UnknownTypesMappingExpect() - Constructor for class mycompiler.test.expectationTypes.UnknownTypesMappingExpect
    -
     
    -
    UNSIGNEDSHIFTRIGHT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    UNSIGNEDSHIFTRIGHTEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    updateHashSetKey(IHashSetKey) - Method in interface mycompiler.mytypereconstruction.set.IHashSetElement
    -
     
    -
    updateHashSetKey(IHashSetKey) - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
    -
     
    -
    updateHashSetKey(IHashSetKey) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    updateHashSetKey(IHashSetKey) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    updateHashSetKey(IHashSetKey) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    UsedId - Class in mycompiler.myclass
    -
     
    -
    UsedId(int) - Constructor for class mycompiler.myclass.UsedId
    -
     
    -
    UsedId(String, int) - Constructor for class mycompiler.myclass.UsedId
    -
     
    -
    usedid - Variable in class mycompiler.mystatement.Expr
    -
     
    -
    UserDef - Class in mycompiler.myclass
    -
     
    -
    UserDef() - Constructor for class mycompiler.myclass.UserDef
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-21.html b/doc/LambdaJavadoc/index-files/index-21.html deleted file mode 100755 index 108283b9..00000000 --- a/doc/LambdaJavadoc/index-files/index-21.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -V-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    V

    -
    -
    value() - Method in interface mycompiler.myparser.JavaParser.yyInput
    -
    -
    associated with current token.
    -
    -
    value() - Method in class mycompiler.myparser.Scanner
    -
     
    -
    valueOf(String) - Static method in enum mycompiler.mytype.Pair.PairOperator
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    values() - Static method in enum mycompiler.mytype.Pair.PairOperator
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    VarExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    VarExpect(String) - Constructor for class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    VarExpect(String, Type) - Constructor for class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    VarExpect(String, IUnknownTypeExpect) - Constructor for class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    varSubst(RefType, Hashtable<String, Type>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    MengePair2SubstHashtableMengePair(Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in interface mycompiler.test.expectationTypes.IExpectation
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    verifyTypeExpectationsCompletelyMet() - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    VOID - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Void - Class in mycompiler.mytype
    -
     
    -
    Void(int) - Constructor for class mycompiler.mytype.Void
    -
     
    -
    vParaOrg - Variable in class mycompiler.myclass.UsedId
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-22.html b/doc/LambdaJavadoc/index-files/index-22.html deleted file mode 100755 index 3e74bdcf..00000000 --- a/doc/LambdaJavadoc/index-files/index-22.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - -W-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    W

    -
    -
    wandleGeneric2RefType(Menge<Type>, Menge<Class>) - Static method in class mycompiler.MyCompiler
    -
    -
    Author: Thomas Ott
    - Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen - GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t.
    -
    -
    wandleRefTypeAttributes2GenericAttributes() - Method in class mycompiler.myclass.Class
    -
    -
    Alle Methoden der Klassen �berpr�fen, ob sie als - RefType deklarierte Attribute haben, die aber GenericTypeVars sind - und ggf. ersetzen - - Bsp.: - bei public E elementAt(i){...} wird E vorerst als RefType erkannt
    -
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>) - Method in class mycompiler.myclass.Method
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes() - Method in class mycompiler.myinterface.Interface
    -
    -
    Alle RefTypes, die hier im Interface definiert sind - bspw: E doSomething() - und eigentlich Generics sind werden zu generics gewandelt
    -
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Block
    -
    -
    In allen lokalen Variablendeklarationen die "falschen" RefTypes ersetzen
    -
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Null
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Return
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.This
    -
     
    -
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    WHILE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    WhileStmt - Class in mycompiler.mystatement
    -
     
    -
    WhileStmt(int, int) - Constructor for class mycompiler.mystatement.WhileStmt
    -
     
    -
    wide - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    WildcardType - Class in mycompiler.mytype
    -
    -
    Stellt eine Wildcard in Java dar.
    -
    -
    WildcardType(int) - Constructor for class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine Wildcard
    -
    -
    writeByte(FileOutputStream, byte) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    writeByteArray(FileOutputStream, byte[]) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    writeInt(FileOutputStream, int) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    writeShort(FileOutputStream, short) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-23.html b/doc/LambdaJavadoc/index-files/index-23.html deleted file mode 100755 index d045503a..00000000 --- a/doc/LambdaJavadoc/index-files/index-23.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - -X-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    X

    -
    -
    XOREQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-24.html b/doc/LambdaJavadoc/index-files/index-24.html deleted file mode 100755 index 07d5e2eb..00000000 --- a/doc/LambdaJavadoc/index-files/index-24.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Y-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    Y

    -
    -
    yyerror(String) - Method in class mycompiler.myparser.JavaParser
    -
    -
    simplified error message.
    -
    -
    yyerror(String, String[]) - Method in class mycompiler.myparser.JavaParser
    -
    -
    (syntax) error message.
    -
    -
    yyErrorCode - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    yylex() - Method in class mycompiler.myparser.JavaLexer
    -
     
    -
    yyparse(JavaParser.yyInput, Object) - Method in class mycompiler.myparser.JavaParser
    -
    -
    the generated parser, with debugging messages.
    -
    -
    yyparse(JavaParser.yyInput) - Method in class mycompiler.myparser.JavaParser
    -
    -
    the generated parser.
    -
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-3.html b/doc/LambdaJavadoc/index-files/index-3.html deleted file mode 100755 index 6cab296f..00000000 --- a/doc/LambdaJavadoc/index-files/index-3.html +++ /dev/null @@ -1,928 +0,0 @@ - - - - - -C-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    C

    -
    -
    calculate_access_flags() - Method in class mycompiler.mymodifier.Modifiers
    -
    -
    Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier - zurueck.
    -
    -
    call_sc_check(Menge<Class>, Hashtable, boolean, Hashtable) - Method in class mycompiler.myclass.Method
    -
     
    -
    caload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CASE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    CastExpr - Class in mycompiler.mystatement
    -
     
    -
    CastExpr(int, int) - Constructor for class mycompiler.mystatement.CastExpr
    -
     
    -
    castore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CATCH - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    CByteCodeTest - Class in mycompiler.mytest
    -
    -
    Testklasse zum Generieren des ByteCode.
    -
    -
    CByteCodeTest() - Constructor for class mycompiler.mytest.CByteCodeTest
    -
     
    -
    CHAR - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    CharacterType - Class in mycompiler.mytype
    -
     
    -
    CharacterType() - Constructor for class mycompiler.mytype.CharacterType
    -
     
    -
    CharInString() - Method in class mycompiler.myparser.Token
    -
     
    -
    CHARLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    CharLiteral - Class in mycompiler.mystatement
    -
     
    -
    CharLiteral() - Constructor for class mycompiler.mystatement.CharLiteral
    -
     
    -
    CharTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    CharTest(String) - Constructor for class mycompiler.test.primitiveTypes.CharTest
    -
     
    -
    CHashtableSet<E extends IHashSetElement> - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CHashtableSet() - Constructor for class mycompiler.mytypereconstruction.set.CHashtableSet
    -
    -
    Author: Jrg Buerle
    -
    -
    check_anz(Type, Menge, Menge<Class>) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    checkcast - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    checkResults(Menge<CTypeReconstructionResult>) - Method in interface mycompiler.test.notUsedAnymore.IResultValidator
    -
     
    -
    CHelper - Class in mycompiler.mytypereconstruction
    -
     
    -
    CHelper() - Constructor for class mycompiler.mytypereconstruction.CHelper
    -
     
    -
    CInferenceTest - Class in mycompiler.mytest
    -
    -
    Testklasse fr die Typinferenz
    -
    -
    CInferenceTest() - Constructor for class mycompiler.mytest.CInferenceTest
    -
     
    -
    CInstVarKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    CInstVarKey(String, String) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey
    -
     
    -
    CInstVarTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
    -
     
    -
    CInstVarTypeAssumption(String, String, Type, int, int, Menge<Integer>) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
    -
     
    -
    CIntersectionType - Class in mycompiler.mytypereconstruction
    -
    -
    Ein CIntersectionType gruppiert alle Typmglichkeiten einer - bestimmten Methode, die ber den CMethodKey eindeutig definiert - ist.
    -
    -
    CIntersectionType(String, String, int, int) - Constructor for class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    CIntersectionType(CMethodTypeAssumption) - Constructor for class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    Class - Class in mycompiler.myclass
    -
     
    -
    Class(String) - Constructor for class mycompiler.myclass.Class
    -
     
    -
    Class(String, Modifiers) - Constructor for class mycompiler.myclass.Class
    -
     
    -
    Class(String, Modifiers, ClassBody, Menge<Type>, Menge<UsedId>, UsedId, Menge<UsedId>, Menge<Type>) - Constructor for class mycompiler.myclass.Class
    -
    -
    Konstruktor, der die Angabe aller Parameter ermoeglicht.
    -
    -
    CLASS - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    ClassAndParameter - Class in mycompiler.myparser
    -
    -
    Hilfskonstrukt, um die Grammatik fuer einen Klassenheader - ueberschaubar zu halten.
    -
    -
    ClassAndParameter(String) - Constructor for class mycompiler.myparser.ClassAndParameter
    -
     
    -
    ClassAndParameter(String, ParaList) - Constructor for class mycompiler.myparser.ClassAndParameter
    -
     
    -
    ClassBody - Class in mycompiler.myclass
    -
     
    -
    ClassBody() - Constructor for class mycompiler.myclass.ClassBody
    -
     
    -
    ClassExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    ClassExpect(String) - Constructor for class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    ClassFile - Class in mycompiler.mybytecode
    -
    -
    Darstellung einer Klassendatei aus Sicht fuer die JVM.
    -
    -
    ClassFile() - Constructor for class mycompiler.mybytecode.ClassFile
    -
    -
    Default Konstruktor
    -
    -
    ClassFile(Interface, SourceFile) - Constructor for class mycompiler.mybytecode.ClassFile
    -
    -
    Konstruktor, um Klasseninfos direkt aus dem Interface zu laden
    -
    -
    ClassHelper - Class in mycompiler.myclass
    -
     
    -
    ClassHelper() - Constructor for class mycompiler.myclass.ClassHelper
    -
     
    -
    CLocalVarKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    CLocalVarKey(String, String, int, String, String) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    CLocalVarKey(String, String, int, int, String, String) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    CLocalVarTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
    -
     
    -
    CLocalVarTypeAssumption(String, String, int, int, String, String, Type, int, int, Menge<Integer>) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    clone() - Method in class mycompiler.mytype.BaseType
    -
     
    -
    clone() - Method in class mycompiler.mytype.BooleanType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    clone() - Method in class mycompiler.mytype.CharacterType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.DoubleType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytype.FloatType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytype.GenericTypeVar
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.IntegerType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.LongType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Erzeugt einen Klon des Paares.
    -
    -
    clone() - Method in class mycompiler.mytype.RefType
    -
     
    -
    clone() - Method in class mycompiler.mytype.ReturnType
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytype.Type
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die - Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen - muss.
    -
    -
    clone() - Method in class mycompiler.mytype.Void
    -
    -

    Author: J�rg B�uerle
    -
    -
    clone() - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt einen Klon der Wildcard zur�ck.
    -
    -
    clone() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.CTriple
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    clone() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    clone() - Method in class typinferenz.FunN
    -
    -
    Ein �berschreiben der clone-Methode ist notwendig, da sonst beim Unify-Algorithmus die Clone-Methode der Superklasse "RefType" ausgef�hrt wird.
    -
    -
    clone() - Method in class typinferenz.TypeAssumptions
    -
     
    -
    cloneAndApplyUnify(CSubstitutionSet) - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an.
    -
    -
    CMethodKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    CMethodKey(String, String, int) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    CMethodKey(String, String, int, int) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    CMethodParaKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    CMethodParaKey(String, String, int, String) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    CMethodParaKey(String, String, int, int, String) - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    CMethodTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
    -
     
    -
    CMethodTypeAssumption(Type, String, Type, int, int, int, Menge<Integer>, Menge<GenericTypeVar>) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    CMultiplyTuple - Class in mycompiler.mytypereconstruction
    -
    -
    Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply.
    -
    -
    CMultiplyTuple() - Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    CMultiplyTuple(CSubstitutionSet, Menge<Type>, CTypeAssumptionSet) - Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple
    -
     
    -
    CMultiplyTupleSet - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CMultiplyTupleSet() - Constructor for class mycompiler.mytypereconstruction.set.CMultiplyTupleSet
    -
     
    -
    CodeAttribute - Class in mycompiler.mybytecode
    -
     
    -
    CodeAttribute(String, short) - Constructor for class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    codegen(SourceFile) - Method in class mycompiler.AClassOrInterface
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.Attribute
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    codegen() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Class_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Float_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Integer_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_String_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CONSTANT_Utf8_info
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.CPInfo
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.ExceptionTable
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.Key
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    codegen(ClassFile, FileOutputStream) - Method in class mycompiler.mybytecode.SignatureInfo
    -
     
    -
    codegen(SourceFile) - Method in class mycompiler.myclass.Class
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.Constant
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.Constructor
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    codegen(ClassFile, CodeAttribute) - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myclass.Method
    -
     
    -
    codegen(ClassFile, CodeAttribute) - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    codegen(SourceFile) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    codegen(ClassFile, Menge) - Method in class mycompiler.myinterface.InterfaceBody
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.AddOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.DivideOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.EqualOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.GreaterEquOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.GreaterOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LessEquOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LessOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.LogOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.MinusOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.ModuloOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.NotEqualOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.Operator
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.PlusOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - Method in class mycompiler.myoperator.TimesOp
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Assign
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Binary
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Block
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Null
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Return
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.Statement
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.This
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.UnaryExpr
    -
     
    -
    codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.mystatement.UnaryMinus
    -
     
    -
    codegen(ClassFile, CodeAttribute, boolean) - Method in class mycompiler.mystatement.UnaryNot
    -
     
    -
    codegen(ClassFile, CodeAttribute, Menge) - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    codegen() - Method in class mycompiler.SourceFile
    -
    -
    Startet die Bytecodegenerierung fuer alle in der Datei - enthaltenen Klassen und Interfaces.
    -
    -
    codegen_InstVarDecl(ClassFile, Type, Menge) - Method in class mycompiler.myclass.DeclId
    -
    -
    Generieren einer Instanzvariable im Bytecode.
    -
    -
    codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Menge) - Method in class mycompiler.myclass.DeclId
    -
     
    -
    codeGeneration() - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
    -
    -
    codeGeneration() - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
    -
    -
    CompilerTestCase - Class in mycompiler.mytest
    -
    -
    Testet den Compiler mit dem angegebenen JAV-File.
    -
    -
    CompilerTestCase(String, String) - Constructor for class mycompiler.mytest.CompilerTestCase
    -
     
    -
    CompilerTestCase(String) - Constructor for class mycompiler.mytest.CompilerTestCase
    -
     
    -
    complete_parahashtable(Menge<Class>, UsedId, Hashtable, boolean) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    complete_paralist(boolean) - Method in class mycompiler.myclass.Class
    -
     
    -
    configureLog4j() - Method in class mycompiler.test.Log4jWrapper
    -
     
    -
    Constant - Class in mycompiler.myclass
    -
    -
    Enthaelt die Eigenschaften einer Konstante (Name, Typ, Modifier, Wert)
    -
    -
    Constant(String, Modifiers) - Constructor for class mycompiler.myclass.Constant
    -
     
    -
    CONSTANT_Class - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Class_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Class_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Class_info
    -
     
    -
    CONSTANT_Double - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Double_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Double_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    CONSTANT_Fieldref - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Fieldref_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Fieldref_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    CONSTANT_Float - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Float_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Float_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Float_info
    -
     
    -
    CONSTANT_Integer - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Integer_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Integer_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Integer_info
    -
     
    -
    CONSTANT_InterfaceMethodref - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_InterfaceMethodref_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_InterfaceMethodref_info() - Constructor for class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    CONSTANT_Long - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Long_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Long_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    CONSTANT_Methodref - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Methodref_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Methodref_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    CONSTANT_NameAndType - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_NameAndType_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_NameAndType_info() - Constructor for class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    CONSTANT_String - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_String_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_String_info() - Constructor for class mycompiler.mybytecode.CONSTANT_String_info
    -
     
    -
    CONSTANT_Utf8 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    CONSTANT_Utf8_info - Class in mycompiler.mybytecode
    -
     
    -
    CONSTANT_Utf8_info() - Constructor for class mycompiler.mybytecode.CONSTANT_Utf8_info
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.Literal
    -
    -
    Erzeugt die benoetigten Konstanteneintraege, die den Wert - des Literals darstellen.
    -
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    ConstantCodegen(ClassFile) - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    ConstantValueAttribute - Class in mycompiler.unused
    -
     
    -
    ConstantValueAttribute() - Constructor for class mycompiler.unused.ConstantValueAttribute
    -
     
    -
    Constraint - Class in typinferenz
    -
     
    -
    Constraint(Type, Type) - Constructor for class typinferenz.Constraint
    -
    -
    Erstellt ein neues Oder Constraint und f�gt bereits ein Constraint hinzu.
    -
    -
    Constraint() - Constructor for class typinferenz.Constraint
    -
     
    -
    ConstraintsSet - Class in typinferenz
    -
     
    -
    ConstraintsSet() - Constructor for class typinferenz.ConstraintsSet
    -
     
    -
    Constructor - Class in mycompiler.myclass
    -
     
    -
    Constructor() - Constructor for class mycompiler.myclass.Constructor
    -
     
    -
    ConstructorTest - Class in mycompiler.test.lambda
    -
     
    -
    ConstructorTest() - Constructor for class mycompiler.test.lambda.ConstructorTest
    -
     
    -
    contains(E) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    contains(E) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    contains(E) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    contains(Type) - Method in class typinferenz.ResultSet
    -
    -
    Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ.
    -
    -
    containsListener(ITypeReplacementListener) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    containsListener(ITypeReplacementListener) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    CONTINUE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    copyPair() - Method in class mycompiler.mytype.Pair
    -
     
    -
    copyType(Type) - Static method in class mycompiler.mytype.Pair
    -
     
    -
    copyMengePair(Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    copyMengeMengePair(Menge<Menge<Pair>>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    CParaTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
    -
     
    -
    CParaTypeAssumption(String, String, int, int, String, Type, int, int, Menge<Integer>) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    CPInfo - Class in mycompiler.mybytecode
    -
     
    -
    CPInfo() - Constructor for class mycompiler.mybytecode.CPInfo
    -
     
    -
    createCParaTypeAssumption(String, Type) - Static method in class typinferenz.TypeAssumptions
    -
    -
    Erstellt eine CParaTypeAssumption.
    -
    -
    createFieldVarAssumption(String, String, Type) - Static method in class typinferenz.TypeAssumptions
    -
     
    -
    createFromQualifiedName(String, int) - Static method in class mycompiler.myclass.UsedId
    -
     
    -
    createGenericTypeVars(CTypeReconstructionResult) - Method in class mycompiler.myclass.Class
    -
    -
    Errechnet die Generischen Parameter der Klasse f�r diese Klasse.
    -
    -
    createMethodAssumption(Type, String, Type, Menge<CParaTypeAssumption>) - Static method in class typinferenz.TypeAssumptions
    -
     
    -
    createNotImplementedException() - Static method in exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    createTypeAssumptions(Class) - Method in class mycompiler.myclass.Constant
    -
     
    -
    createTypeAssumptions(Class) - Method in class mycompiler.myclass.FieldDecl
    -
    -
    Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
    -
    -
    createTypeAssumptions(Class) - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    createTypeAssumptions(Class) - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    createTypeAssumptions(Class) - Method in class mycompiler.myclass.Method
    -
     
    -
    CReconstructionTuple - Class in mycompiler.mytypereconstruction
    -
    -
    Container-Klasse f�r Ergebniswerte des Algorithmus TRStart.
    -
    -
    CReconstructionTuple() - Constructor for class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    CReconstructionTuple(CSubstitutionSet, CTypeAssumptionSet) - Constructor for class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    CReconstructionTupleSet - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CReconstructionTupleSet() - Constructor for class mycompiler.mytypereconstruction.set.CReconstructionTupleSet
    -
     
    -
    CRefTypeSet - Class in mycompiler.mytype
    -
     
    -
    CRefTypeSet() - Constructor for class mycompiler.mytype.CRefTypeSet
    -
     
    -
    CReplaceTypeEvent - Class in mycompiler.mytypereconstruction.replacementlistener
    -
     
    -
    CReplaceTypeEvent(Type, Type) - Constructor for class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent
    -
     
    -
    CSet<E> - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CSet() - Constructor for class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    CSimpleTest - Class in mycompiler.mytest
    -
    -
    Testklasse f�r die Compiler-API
    -
    -
    CSimpleTest() - Constructor for class mycompiler.mytest.CSimpleTest
    -
     
    -
    CSubstitution - Class in mycompiler.mytypereconstruction
    -
    -
    Implementierung einer Typsubstitution.
    -
    -
    CSubstitution() - Constructor for class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    CSubstitution(TypePlaceholder, Type) - Constructor for class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    CSubstitution(Pair) - Constructor for class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    CSubstitutionGenVar - Class in mycompiler.mytypereconstruction
    -
    -
    Implementierung einer Typsubstitution der GenVar.
    -
    -
    CSubstitutionGenVar() - Constructor for class mycompiler.mytypereconstruction.CSubstitutionGenVar
    -
     
    -
    CSubstitutionGenVar(GenericTypeVar, Type) - Constructor for class mycompiler.mytypereconstruction.CSubstitutionGenVar
    -
     
    -
    CSubstitutionSet - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CSubstitutionSet() - Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    CSubstitutionSet(Menge<Pair>) - Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    CSupportData - Class in mycompiler.mytypereconstruction
    -
    -
    Container-Klasse fr bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus bentigt und deshalb - rekursiv weiter gereicht werden.
    -
    -
    CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String, Menge<GenericTypeVar>) - Constructor for class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String, Menge<GenericTypeVar>, String, int, int, Menge<Integer>, int) - Constructor for class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    CTriple - Class in mycompiler.mytypereconstruction
    -
    -
    Container-Klasse f�r Ergebniswerte der Algorithmen TRStmt und TRExp.
    -
    -
    CTriple() - Constructor for class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    CTriple(CSubstitutionSet, Type, CTypeAssumptionSet) - Constructor for class mycompiler.mytypereconstruction.CTriple
    -
     
    -
    CTripleSet - Class in mycompiler.mytypereconstruction.set
    -
    -
    Enth�lt Objekte vom Typ CTriple - (Ist im Grunde ein CMengeSet) - Es enth�lt alle Typannahmen in Form von CTriple s
    -
    -
    CTripleSet() - Constructor for class mycompiler.mytypereconstruction.set.CTripleSet
    -
     
    -
    CTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
    -
    -
    Diese Klasse repr�sentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
    -
    -
    CTypeAssumption(String, String, Type, int, int, Menge<Integer>) - Constructor for class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    CTypeAssumptionKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
    -
    -
    Diese Klasse modelliert einen eindeutigen Schlssel fr eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
    -
    -
    CTypeAssumptionKey() - Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
    -
     
    -
    CTypeAssumptionSet - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CTypeAssumptionSet() - Constructor for class mycompiler.mytypereconstruction.set.CTypeAssumptionSet
    -
     
    -
    CTypeAssumptionWrapper - Class in mycompiler.test.notUsedAnymore
    -
     
    -
    CTypeAssumptionWrapper(CTypeAssumption) - Constructor for class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    CTypeReconstructionException - Exception in mycompiler.myexception
    -
     
    -
    CTypeReconstructionException(String, IItemWithOffset) - Constructor for exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    CTypeReconstructionException(String, Menge<CTypeReconstructionException>, IItemWithOffset) - Constructor for exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    CTypeReconstructionResult - Class in mycompiler.mytypereconstruction
    -
    -
    Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche - Typkombination aller Klassen und deren Methoden sowie lokalen Variablen.
    -
    -
    CTypeReconstructionResult(Class) - Constructor for class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    CMengeSet<E> - Class in mycompiler.mytypereconstruction.set
    -
     
    -
    CMengeSet() - Constructor for class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    CWildcardTest - Class in mycompiler.mytest
    -
    -
    Testklasse fr die Wildcard Algorithmus uns Parser
    -
    -
    CWildcardTest() - Constructor for class mycompiler.mytest.CWildcardTest
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-4.html b/doc/LambdaJavadoc/index-files/index-4.html deleted file mode 100755 index 37b4319a..00000000 --- a/doc/LambdaJavadoc/index-files/index-4.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - -D-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    D

    -
    -
    d2f - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    d2i - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    d2l - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dadd - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    daload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dcmpg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dcmpl - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dconst_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dconst_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ddiv - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    decBlockDepth() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    DeclId - Class in mycompiler.myclass
    -
     
    -
    DeclId() - Constructor for class mycompiler.myclass.DeclId
    -
     
    -
    DeclId(String) - Constructor for class mycompiler.myclass.DeclId
    -
     
    -
    DECREMENT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    deepCopy() - Method in class mycompiler.mytype.CRefTypeSet
    -
     
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CMultiplyTupleSet
    -
     
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CReconstructionTupleSet
    -
    -

    Author: J�rg B�uerle
    -
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CTripleSet
    -
    -
    Diese Funktion kopiert nicht nur das MengeSet, sondern auch alle enthaltenen CTriple-Sets.
    -
    -
    deepCopy() - Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet
    -
     
    -
    DEFAULT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    deleteRegistry() - Static method in class mycompiler.mytype.TypePlaceholder
    -
    -
    L�scht die komplette Registry von TypePlaceholders.
    -
    -
    DIVIDEEQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    DivideOp - Class in mycompiler.myoperator
    -
     
    -
    DivideOp(int, int) - Constructor for class mycompiler.myoperator.DivideOp
    -
     
    -
    dload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dload_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dload_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dload_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dload_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dmul - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dneg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    DO - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    does_Class_extend() - Method in class mycompiler.myclass.Class
    -
     
    -
    DOUBLELITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    DoubleLiteral - Class in mycompiler.mystatement
    -
     
    -
    DoubleLiteral() - Constructor for class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    DoubleTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    DoubleTest(String) - Constructor for class mycompiler.test.primitiveTypes.DoubleTest
    -
     
    -
    DoubleType - Class in mycompiler.mytype
    -
     
    -
    DoubleType() - Constructor for class mycompiler.mytype.DoubleType
    -
     
    -
    drem - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dreturn - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dstore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dstore_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dstore_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dstore_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dstore_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dsub - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup2_x1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup2_x2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup_x1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    dup_x2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-5.html b/doc/LambdaJavadoc/index-files/index-5.html deleted file mode 100755 index 3772de41..00000000 --- a/doc/LambdaJavadoc/index-files/index-5.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - -E-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    E

    -
    -
    ELSE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    else_block - Variable in class mycompiler.mystatement.IfStmt
    -
     
    -
    EmptyStmt - Class in mycompiler.mystatement
    -
     
    -
    EmptyStmt() - Constructor for class mycompiler.mystatement.EmptyStmt
    -
     
    -
    ensureAbstract() - Method in class mycompiler.mymodifier.Modifiers
    -
    -
    Stellt sicher, dass ABSTRACT in der Modifierliste - vorkommt.
    -
    -
    ensurePublic() - Method in class mycompiler.mymodifier.Modifiers
    -
     
    -
    EOF - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    EQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    EqualOp - Class in mycompiler.myoperator
    -
     
    -
    EqualOp(int, int) - Constructor for class mycompiler.myoperator.EqualOp
    -
     
    -
    equals(Object) - Method in class mycompiler.mybytecode.Key
    -
     
    -
    equals(Object) - Method in class mycompiler.mytype.BaseType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.BooleanType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.CharacterType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.DoubleType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Vergleicht mit einem anderen Objekt.
    -
    -
    equals(Object) - Method in class mycompiler.mytype.FloatType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Pr�ft, ob zwei Objekte gleich sind.
    -
    -
    equals(Object) - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Pr�ft, ob zwei Objekte gleich sind.
    -
    -
    equals(Object) - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Pr�ft, ob zwei Objekte gleich sind.
    -
    -
    equals(Object) - Method in class mycompiler.mytype.GenericTypeVar
    -
    -

    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.IntegerType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.LongType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.Pair
    -
    -

    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.RefType
    -
    -
    Author: Jrg Buerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.ReturnType
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Vergleicht mit einem anderen Objekt.
    -
    -
    equals(Object) - Method in class mycompiler.mytype.Type
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.Void
    -
    -
    Author: J�rg B�uerle
    -
    -
    equals(Object) - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Vergleicht mit einem anderen Objekt.
    -
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.CTriple
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    equals(Object) - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
    -
    -
    Author: Jrg Buerle
    -
    -
    equals(Object) - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
    -

    Author: Jrg Buerle
    -
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    equalsAssumption(CTypeAssumption) - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    Equiv2Equal(RefType, Hashtable<String, Type>) - Method in class mycompiler.mytype.RefType
    -
     
    -
    ExceptionList - Class in mycompiler.myclass
    -
     
    -
    ExceptionList() - Constructor for class mycompiler.myclass.ExceptionList
    -
     
    -
    ExceptionTable - Class in mycompiler.mybytecode
    -
     
    -
    ExceptionTable() - Constructor for class mycompiler.mybytecode.ExceptionTable
    -
     
    -
    execute() - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Sucht die eindeutige Instanz der Typeplaceholders in der Registry der - Typeplaceholders des Syntaxbaumes und f�hrt die Typsubstitution im - Syntaxbaum durch.
    -
    -
    execute() - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
    -
    F�hrt jede einzelne CSubstitution aus.
    -
    -
    executeTest() - Method in class mycompiler.test.lambda.BasicAssumptionsTest
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.ConstructorTest
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.GenericVarTest
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.OverloadingTest
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.ParseMultipleFilesTest
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestAssign
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestFunN
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestIfStmt
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestLambda
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestMethodCall
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestThis
    -
     
    -
    executeTest() - Method in class mycompiler.test.lambda.TestWhile
    -
     
    -
    Expectation - Class in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    Expectation(ClassExpect) - Constructor for class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    expr - Variable in class mycompiler.mystatement.ArgumentList
    -
     
    -
    expr - Variable in class mycompiler.mystatement.CastExpr
    -
     
    -
    Expr - Class in mycompiler.mystatement
    -
     
    -
    Expr(int, int) - Constructor for class mycompiler.mystatement.Expr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.IfStmt
    -
     
    -
    expr - Variable in class mycompiler.mystatement.InstanceOf
    -
     
    -
    expr - Variable in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.NewArray
    -
     
    -
    expr - Variable in class mycompiler.mystatement.NotExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.PositivExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    expr - Variable in class mycompiler.mystatement.WhileStmt
    -
     
    -
    expr1 - Variable in class mycompiler.mystatement.Assign
    -
     
    -
    expr1 - Variable in class mycompiler.mystatement.Binary
    -
     
    -
    expr2 - Variable in class mycompiler.mystatement.Assign
    -
     
    -
    expr2 - Variable in class mycompiler.mystatement.Binary
    -
     
    -
    ExprStmt - Class in mycompiler.mystatement
    -
     
    -
    ExprStmt(int, int) - Constructor for class mycompiler.mystatement.ExprStmt
    -
     
    -
    EXTENDS - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    ExtendsWildcardType - Class in mycompiler.mytype
    -
    -
    Stellt eine Wildcard mit oberer Grenze dar.
    -
    -
    ExtendsWildcardType(int, Type) - Constructor for class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine ExtendsWildcard
    -
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-6.html b/doc/LambdaJavadoc/index-files/index-6.html deleted file mode 100755 index c9104c63..00000000 --- a/doc/LambdaJavadoc/index-files/index-6.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -F-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    F

    -
    -
    f2d - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    f2i - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    f2l - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fadd - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    faload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    FC_TTO - Class in mycompiler.mytypereconstruction.unify
    -
    -
    Hilfsklasse f�r den Unifizierungsalgorithmus
    -
    -
    FC_TTO(Menge<Pair>, Menge, Menge<Class>) - Constructor for class mycompiler.mytypereconstruction.unify.FC_TTO
    -
     
    -
    fcmpg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fcmpl - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fconst_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fconst_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fconst_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fdiv - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fehlerausgabe() - Method in exception mycompiler.myexception.SCClassException
    -
     
    -
    fehlerausgabe() - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    fehlerausgabe() - Method in exception mycompiler.myexception.SCException
    -
     
    -
    FieldDecl - Class in mycompiler.myclass
    -
     
    -
    FieldDecl() - Constructor for class mycompiler.myclass.FieldDecl
    -
     
    -
    FieldInfo - Class in mycompiler.mybytecode
    -
     
    -
    FieldInfo() - Constructor for class mycompiler.mybytecode.FieldInfo
    -
     
    -
    FieldInitialization - Class in mycompiler.myclass
    -
     
    -
    FieldInitialization() - Constructor for class mycompiler.myclass.FieldInitialization
    -
     
    -
    Final - Class in mycompiler.mymodifier
    -
    -
    Stellt den Modifier Final dar.
    -
    -
    Final() - Constructor for class mycompiler.mymodifier.Final
    -
     
    -
    FINAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    FINALLY - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    findGenericType(Type, Menge<Type>, Menge<GenericTypeVar>) - Static method in class mycompiler.myclass.ClassHelper
    -
    -
    HOTI - Diese Methode sucht in der Klassendefinition nach einen GTV, die - so hei�t wie die im RefType definierte Variable.
    -
    -
    fireReplaceTypeEvent(CReplaceTypeEvent) - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    fireReplaceTypeEvent(CReplaceTypeEvent) - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    fload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fload_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fload_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fload_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fload_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    FLOATLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    FloatLiteral - Class in mycompiler.mystatement
    -
     
    -
    FloatLiteral() - Constructor for class mycompiler.mystatement.FloatLiteral
    -
     
    -
    FloatTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    FloatTest(String) - Constructor for class mycompiler.test.primitiveTypes.FloatTest
    -
     
    -
    FloatType - Class in mycompiler.mytype
    -
     
    -
    FloatType() - Constructor for class mycompiler.mytype.FloatType
    -
     
    -
    fmul - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fneg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    FOR - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    FormalParameter - Class in mycompiler.myclass
    -
     
    -
    FormalParameter() - Constructor for class mycompiler.myclass.FormalParameter
    -
     
    -
    formalparameter - Variable in class mycompiler.myclass.ParameterList
    -
     
    -
    ForStmt - Class in mycompiler.mystatement
    -
     
    -
    ForStmt(int, int) - Constructor for class mycompiler.mystatement.ForStmt
    -
     
    -
    frem - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fresh() - Static method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Erzeugt eine neue TypePlaceholder mit einem eindeutigen Namen.
    -
    -
    fresh(ITypeReplacementListener) - Static method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    FreshExtendsWildcardType - Class in mycompiler.mytype
    -
     
    -
    FreshExtendsWildcardType(Type, int) - Constructor for class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine FreshExtendsWildcard
    -
    -
    FreshSuperWildcardType - Class in mycompiler.mytype
    -
     
    -
    FreshSuperWildcardType(Type, int) - Constructor for class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine FreshSuperWildcard
    -
    -
    FreshTypeVariable - Class in typinferenz
    -
     
    -
    FreshTypeVariable(int) - Constructor for class typinferenz.FreshTypeVariable
    -
     
    -
    FreshTypeVariable(String) - Constructor for class typinferenz.FreshTypeVariable
    -
    -
    Aufruf f�r Debug-Zwecke.
    -
    -
    FreshTypeVariable() - Constructor for class typinferenz.FreshTypeVariable
    -
     
    -
    FreshWildcardType - Class in mycompiler.mytype
    -
     
    -
    FreshWildcardType(int) - Constructor for class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Standard Konstruktor f�r eine FreshWildcard
    -
    -
    freturn - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fstore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fstore_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fstore_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fstore_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fstore_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    fsub - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    FunN - Class in typinferenz
    -
     
    -
    FunN(Type, Menge<Type>) - Constructor for class typinferenz.FunN
    -
     
    -
    FunN(int) - Constructor for class typinferenz.FunN
    -
    -
    Erstellt eine FunN: - FunN - R und T1 - TparameterCount werden mit TypePlaceholdern besetzt.
    -
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-7.html b/doc/LambdaJavadoc/index-files/index-7.html deleted file mode 100755 index 685fee62..00000000 --- a/doc/LambdaJavadoc/index-files/index-7.html +++ /dev/null @@ -1,1346 +0,0 @@ - - - - - -G-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    G

    -
    -
    generateConsstraints() - Method in class typinferenz.Overloading
    -
    -
    Vereinfachte Version von Overloading...
    -
    -
    GenericTypeVar - Class in mycompiler.mytype
    -
     
    -
    GenericTypeVar(Pair) - Constructor for class mycompiler.mytype.GenericTypeVar
    -
     
    -
    GenericTypeVar(String, int) - Constructor for class mycompiler.mytype.GenericTypeVar
    -
     
    -
    GenericTypeVar(Type) - Constructor for class mycompiler.mytype.GenericTypeVar
    -
     
    -
    GenericTypeVar2TypePlaceholder() - Method in class mycompiler.mytype.RefType
    -
     
    -
    GenericTypeVarExpect - Class in mycompiler.test.expectationTypes
    -
    -
    15-05-08
    -
    -
    GenericTypeVarExpect(String) - Constructor for class mycompiler.test.expectationTypes.GenericTypeVarExpect
    -
     
    -
    GenericVarTest - Class in mycompiler.test.lambda
    -
     
    -
    GenericVarTest() - Constructor for class mycompiler.test.lambda.GenericVarTest
    -
     
    -
    get_a() - Method in class mycompiler.mybytecode.Key
    -
     
    -
    get_access_flags() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_access_flags() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_access_flags() - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    get_access_flags() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    get_attribute_name_index() - Method in class mycompiler.mybytecode.Attribute
    -
     
    -
    get_attributes() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_attributes() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_attributes() - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    get_attributes_length() - Method in class mycompiler.mybytecode.Attribute
    -
     
    -
    get_attributes_length() - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    get_attributes_length() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_attributes_length() - Method in class mycompiler.mybytecode.SignatureInfo
    -
     
    -
    get_attributes_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_Block() - Method in class mycompiler.myclass.Method
    -
     
    -
    get_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Float_info
    -
     
    -
    get_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Integer_info
    -
     
    -
    get_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Utf8_info
    -
     
    -
    get_class_block() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_class_block() - Method in class mycompiler.myclass.Class
    -
     
    -
    get_class_index() - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    get_class_index() - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    get_class_index() - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    get_Class_Name() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_ClassBody() - Method in class mycompiler.myclass.Class
    -
     
    -
    get_classname() - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    get_code_length() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_code_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_codegen_ArgumentList(Menge) - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    get_codegen_Array_Type() - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    get_codegen_Param_Type(Menge) - Method in class mycompiler.myclass.Constructor
    -
     
    -
    get_codegen_Param_Type(Menge) - Method in class mycompiler.myclass.Method
    -
     
    -
    get_codegen_ParameterList(Menge) - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    get_codegen_Type(String, Menge) - Static method in class mycompiler.mybytecode.JVMCode
    -
    -
    Liefert zu dem angegebenen Typ die entsprechende Repraesentation - im Bytecode zurueck.
    -
    -
    get_codegen_Type(Menge) - Method in class mycompiler.mytype.GenericTypeVar
    -
    -
    hoti 4.5.06 - Generische Typen werden im Bytecode - aus Abwaertskompatiblitaet wie Object dargestellt
    -
    -
    get_codegen_Type(Menge) - Method in class mycompiler.mytype.Type
    -
    -
    Liefert die Typrepraesentation fuer die - Bytecodegenerierung zurueck.
    -
    -
    get_codegen_UsedId() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_codegen_UsedId() - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    get_Command(Menge<Byte>) - Static method in class mycompiler.mybytecode.JVMCode
    -
    -
    Gibt die Liste der Bytecode-Commands auf dem Bildschirm aus (Logger Bytecode).
    -
    -
    get_constant_pool() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_constant_pool_element(byte, String) - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_constructor_founded() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_descriptor_index() - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    get_descriptor_index() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_descriptor_index() - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    get_Double() - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    get_exception_table_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_ExceptionList() - Method in class mycompiler.myclass.Method
    -
     
    -
    get_exlist() - Method in exception mycompiler.myexception.SCClassBodyException
    -
     
    -
    get_exlist() - Method in exception mycompiler.myexception.SCMethodException
    -
     
    -
    get_exlist() - Method in exception mycompiler.myexception.SCStatementException
    -
     
    -
    get_Expr() - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    get_Expr() - Method in class mycompiler.mystatement.Receiver
    -
     
    -
    get_Expr1() - Method in class mycompiler.mystatement.Binary
    -
     
    -
    get_Expr2() - Method in class mycompiler.mystatement.Binary
    -
     
    -
    get_ExtendsBound() - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die Grenze der Wildcard zur�ck
    -
    -
    get_ExtendsType() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen in der Wildcard zur�ck.
    -
    -
    get_FieldDeclMenge() - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    get_fields() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_firstElement() - Method in class mycompiler.mystatement.ArgumentList
    -
     
    -
    get_firstElement() - Method in class mycompiler.mytype.ParaList
    -
     
    -
    get_Float() - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    get_function() - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    get_hash() - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    get_high_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    get_high_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    get_indexOf_Var(String) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_info() - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    get_info_Menge() - Method in class mycompiler.mybytecode.AttributeInfo
    -
     
    -
    get_Int() - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    get_key_Menge() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_local_Menge() - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_Long() - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    get_low_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Double_info
    -
     
    -
    get_low_bytes() - Method in class mycompiler.mybytecode.CONSTANT_Long_info
    -
     
    -
    get_Method_Name() - Method in class mycompiler.myclass.Method
    -
     
    -
    get_methods() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_Modifiers() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    get_Name() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_Name() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    get_Name() - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    get_Name() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    get_Name() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.Assign
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.Binary
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.BoolLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.CastExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.CharLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.DoubleLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.Expr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.FloatLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.InstanceOf
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.InstVar
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.IntLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.LongLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.NegativeExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.NewArray
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.NotExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.Null
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.PositivExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.PostDecExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.PostIncExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.PreDecExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.PreIncExpr
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.StringLiteral
    -
     
    -
    get_Name() - Method in class mycompiler.mystatement.This
    -
     
    -
    get_Name() - Method in class mycompiler.mytype.RefType
    -
     
    -
    get_Name() - Method in class mycompiler.mytype.Type
    -
     
    -
    get_Name() - Method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    get_Name_1Element() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_name_and_type_index() - Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info
    -
     
    -
    get_name_and_type_index() - Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    -
     
    -
    get_name_and_type_index() - Method in class mycompiler.mybytecode.CONSTANT_Methodref_info
    -
     
    -
    get_name_index() - Method in class mycompiler.mybytecode.CONSTANT_Class_info
    -
     
    -
    get_name_index() - Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info
    -
     
    -
    get_name_index() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_name_index() - Method in class mycompiler.mybytecode.MethodInfo
    -
     
    -
    get_Name_Menge() - Method in class mycompiler.mystatement.Expr
    -
     
    -
    get_nType(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    get_Operator() - Method in class mycompiler.mystatement.Binary
    -
     
    -
    get_ParaHash() - Method in class mycompiler.myclass.Class
    -
     
    -
    get_ParaList() - Method in class mycompiler.myclass.Class
    -
     
    -
    get_ParaList() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_ParaList() - Method in class mycompiler.mytype.ParaList
    -
     
    -
    get_ParaList() - Method in class mycompiler.mytype.RefType
    -
     
    -
    get_Paratyp() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    get_RealParaList() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_Receiver() - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    get_statement() - Method in class mycompiler.myexception.SCExcept
    -
     
    -
    get_Statement() - Method in class mycompiler.mystatement.Block
    -
     
    -
    get_String() - Method in class mycompiler.myparser.Token
    -
     
    -
    get_string_index() - Method in class mycompiler.mybytecode.CONSTANT_String_info
    -
     
    -
    get_super_class() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_SuperBound() - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die Grenze der Wildcard zur�ck
    -
    -
    get_Superclass_Name() - Method in class mycompiler.myclass.Class
    -
     
    -
    get_SuperType() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen in der Wildcard zur�ck.
    -
    -
    get_tag() - Method in class mycompiler.mybytecode.CPInfo
    -
     
    -
    get_tag() - Method in class mycompiler.mybytecode.Key
    -
     
    -
    get_this_class() - Method in class mycompiler.mybytecode.ClassFile
    -
     
    -
    get_Type() - Method in class mycompiler.mybytecode.FieldInfo
    -
     
    -
    get_Type() - Method in class mycompiler.mystatement.Receiver
    -
     
    -
    get_Type() - Method in class mycompiler.mystatement.Return
    -
     
    -
    get_Type_Paralist() - Method in class mycompiler.myclass.Method
    -
     
    -
    get_Type_Menge() - Method in class mycompiler.mystatement.Expr
    -
     
    -
    get_Typen() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_TypeOf_Var(String) - Method in class mycompiler.mybytecode.CodeAttribute
    -
     
    -
    get_UpperBounds() - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Menge der oberen Grenzen zur�ck
    -
    -
    get_UsedId() - Method in class mycompiler.mystatement.Expr
    -
     
    -
    get_UsedId() - Method in class mycompiler.mytype.Type
    -
     
    -
    get_vParaOrg() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    get_Wert() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    get_WildcardType() - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende ExtendsWildcardType Klasse zur�ck.
    -
    -
    get_WildcardType() - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende SuperWildcardType Klasse zur�ck.
    -
    -
    get_WildcardType() - Method in class mycompiler.mytype.FreshWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende WildcardType Klasse zur�ck.
    -
    -
    getA() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getAccessFlags() - Method in class mycompiler.AClassOrInterface
    -
    -
    Liefert die AccessFlags fuer den Bytecode zurueck.
    -
    -
    getAPI() - Static method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
    -
    -
    getArgumentList() - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    getArgumentList() - Method in class mycompiler.mystatement.NewClass
    -
     
    -
    getArgumentList() - Method in class mycompiler.mystatement.This
    -
     
    -
    getAssumedType() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getAssumedType() - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    getAssumptionSet() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getAssumptionSet() - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getAssumptionsFor(String) - Method in class typinferenz.TypeAssumptions
    -
    -
    Jede erstellte Assumption wird von der TypeAssumptions-Klasse gespeichert.
    -
    -
    getAssumSet() - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Abstract
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Final
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.InterfaceModifier
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Modifier
    -
    -
    Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
    -
    -
    getBitmask() - Method in class mycompiler.mymodifier.Private
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Protected
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Public
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Static
    -
     
    -
    getBitmask() - Method in class mycompiler.mymodifier.Super
    -
     
    -
    getBlock() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getBlockId(int) - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getBlockId() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    getBlockID() - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    getBlockIdList() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getBounds() - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    getCardinality() - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    getCardinality() - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    getCardinality() - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    getClasses() - Method in class mycompiler.mytypereconstruction.unify.FC_TTO
    -
     
    -
    getClasses() - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    getClassIterator() - Method in class mycompiler.SourceFile
    -
     
    -
    getClassName() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getClassName() - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    getClassNameList() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getClassType() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -
    Liefert den angenommenen Typ f�r die Klasse, welche diese Methode enth�lt.
    -
    -
    getConstantValueID() - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Gibt den NameIndex auf die UTF-8 Konstante "ConstantValue" zurueck, - der fuer die Definition von Konstanten benoetigt wird.
    -
    -
    getConstantVektor() - Method in class mycompiler.myinterface.InterfaceBody
    -
     
    -
    getConstraintPairs() - Method in class typinferenz.Constraint
    -
     
    -
    getConstraints() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getConstraints() - Method in class typinferenz.ConstraintsSet
    -
    -
    Liefert alle Constraintsvariationen, allerdings in Form von Pair's.
    -
    -
    getContainedBlocks() - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    getContainedType() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Das gleiche wie get_ExtendsType().
    -
    -
    getContainedType() - Method in interface mycompiler.mytype.ITypeContainer
    -
    -
    Author: Arne L�dtke
    - Das gleiche wie get_ExtendsType().
    -
    -
    getContainedType() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Das gleiche wie get_SuperType().
    -
    -
    getContainedTypes() - Method in class mycompiler.myclass.Class
    -
     
    -
    getContainedTypes() - Method in class mycompiler.myinterface.Interface
    -
     
    -
    getCurrentBlockDepth() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentBlockId() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentClass() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentClassPara() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentClassType() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentMethod() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentMethodOverloadedID() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getCurrentMethodParaCount() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getDeclIdMenge() - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    getDeclidMenge() - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    getDeclType() - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    getElement(IHashSetKey) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    getElements(IHashSetKey) - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
    -
    Liefert alle Elemente in der HashTable, die zu der Methoden-Signatur-Klass - geh�ren d.h.
    -
    -
    getExceptions() - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    getExpectedType() - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    getExpectedTypeCopy() - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    getExpectedUnknownType() - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    getFC() - Method in class mycompiler.mytypereconstruction.unify.FC_TTO
    -
     
    -
    getfield - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    getFieldAndLocalVarAssumptions() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getFieldInitializations() - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    getFiniteClosure() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    getFirstMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    getFirstMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    getFirstMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    getFirstMethodKey() - Method in interface mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey
    -
    -
    Liefert immer den Key der 1.
    -
    -
    GetFreshWildcardType() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende FreshWildcardType Klasse zur�ck.
    -
    -
    GetFreshWildcardType() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende FreshWildcardType Klasse zur�ck.
    -
    -
    GetFreshWildcardType() - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt die passende FreshWildcardType Klasse zur�ck.
    -
    -
    getFullyQualifiedNameFromClassname(String, ImportDeclarations) - Static method in class mycompiler.MyCompiler
    -
     
    -
    getGenericMethodParameters() - Method in class mycompiler.myclass.Method
    -
     
    -
    getGenericMethodParameters() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    getGenerics(String) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getGenerics() - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    getGenerics() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getGenericsTable() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getHashSetKey() - Method in interface mycompiler.mytypereconstruction.set.IHashSetElement
    -
     
    -
    getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getHashSetKey() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getHashtable() - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    getHighestProblemSources() - Method in exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    getIdentifier() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getIdentifier() - Method in class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    -
     
    -
    getImports() - Method in class mycompiler.SourceFile
    -
     
    -
    getInstance(String) - Static method in class mycompiler.mytype.TypePlaceholder
    -
    -
    Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
    -
    -
    getInstance() - Static method in class mycompiler.test.Log4jWrapper
    -
     
    -
    getInstVarAssumptions() - Method in class typinferenz.TypeAssumptions
    -
    -
    Ermittelt alle Assumptions zu Instanzvariablen, welche sich in der Klasse "this" befinden, also der Klasse f�r welche dieses AssumptionSet g�ltig ist.
    -
    -
    getInterfaceBody() - Method in class mycompiler.myinterface.Interface
    -
     
    -
    getInterfaceIterator() - Method in class mycompiler.SourceFile
    -
     
    -
    getInterferedClass() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
    -
    Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
    -
    -
    getIntersectionTypeKey() - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    getIterator() - Method in class mycompiler.mytypereconstruction.set.CHashtableSet
    -
     
    -
    getIterator() - Method in class mycompiler.mytypereconstruction.set.CSet
    -
     
    -
    getIterator() - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    getKeyString() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
    -
    -
    Author: Jrg Buerle
    -
    -
    getLexem() - Method in class mycompiler.myparser.Token
    -
     
    -
    getLineNumber() - Method in class mycompiler.myclass.Constant
    -
     
    -
    getLineNumber() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    getLineNumber() - Method in class mycompiler.myclass.FormalParameter
    -
    -

    Author: J�rg B�uerle
    -
    -
    getLineNumber() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    getLineNumber() - Method in class mycompiler.myclass.Method
    -
     
    -
    getLineNumber() - Method in class mycompiler.myparser.Token
    -
     
    -
    getLineNumber() - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    getLineNumber() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getLineNumbers() - Method in class mycompiler.mytype.TypePlaceholder
    -
     
    -
    getLocalVar() - Method in class mycompiler.test.expectationTypes.BlockExpect
    -
     
    -
    getMappedType(String) - Method in class mycompiler.test.expectationTypes.UnknownTypesMappingExpect
    -
    -
    returns mapped Type name as of expectation or null if not yet mapped
    -
    -
    getMappings() - Method in class mycompiler.test.expectationTypes.Expectation
    -
     
    -
    getMatchType() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMatchType() - Method in class mycompiler.mytype.FreshExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMatchType() - Method in class mycompiler.mytype.FreshSuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMatchType() - Method in interface mycompiler.mytype.IMatchable
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMatchType() - Method in class mycompiler.mytype.RefType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMatchType() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
    -
    -
    getMembers() - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    getMessage() - Method in exception mycompiler.myexception.CTypeReconstructionException
    -
     
    -
    getMethodAssumptions(String, String) - Method in class typinferenz.TypeAssumptions
    -
    -
    Sucht nach MethodAssumptions einer bestimmten Klasse mit einem bestimmten Namen.
    -
    -
    getMethodAssumptions(String, int) - Method in class typinferenz.TypeAssumptions
    -
    -
    Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
    -
    -
    getMethodFittingMethodCallAndClassname(String) - Method in class mycompiler.mystatement.MethodCall
    -
    -
    hoti 4.5.06 - Diese Methode l�dt die Methodeninfos einer Methode aus der Hashtable - methodsfittingmethodcall in ein Method-Objekt - anhand der angegeben klasse
    -
    -
    getMethodIntersectionTypes() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getMethodIntersectionTypes(CMethodKey) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getMethodName() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    getMethodName() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    getMethodOverloadedID() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    getMethodParaCount() - Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
    -
     
    -
    getMethodParaCount() - Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
    -
     
    -
    getMethods() - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    getMethodTypeAssumptions() - Method in class mycompiler.mytypereconstruction.CIntersectionType
    -
     
    -
    getMethodVektor() - Method in class mycompiler.myinterface.InterfaceBody
    -
     
    -
    getModifiers() - Method in class mycompiler.AClassOrInterface
    -
     
    -
    getModifiers() - Method in class mycompiler.myclass.Constant
    -
     
    -
    getModifiers() - Method in class mycompiler.mymodifier.Modifiers
    -
     
    -
    getMub() - Method in class mycompiler.mytypereconstruction.unify.MUB
    -
     
    -
    getName() - Method in class mycompiler.AClassOrInterface
    -
     
    -
    getName() - Method in class mycompiler.myclass.Constant
    -
     
    -
    getName() - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    getName() - Method in class mycompiler.myparser.ClassAndParameter
    -
     
    -
    getName() - Method in class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    getName() - Method in class mycompiler.mystatement.MethodCall
    -
     
    -
    getName() - Method in class mycompiler.mytype.RefType
    -
     
    -
    getName() - Method in class mycompiler.mytype.Type
    -
     
    -
    getName() - Method in class mycompiler.test.expectationTypes.ClassExpect
    -
     
    -
    getName() - Method in class mycompiler.test.expectationTypes.GenericTypeVarExpect
    -
     
    -
    getName() - Method in interface mycompiler.test.expectationTypes.IUnknownTypeExpect
    -
     
    -
    getName() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getName() - Method in class mycompiler.test.expectationTypes.TypePlaceholderExpect
    -
     
    -
    getName() - Method in class mycompiler.test.expectationTypes.VarExpect
    -
     
    -
    getNewType() - Method in class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent
    -
     
    -
    getNextMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    getNextMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    getNextMethodKey() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    getNextMethodKey() - Method in interface mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey
    -
    -
    Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1.
    -
    -
    getOffset() - Method in interface mycompiler.IItemWithOffset
    -
     
    -
    getOffset() - Method in class mycompiler.myclass.Constant
    -
     
    -
    getOffset() - Method in class mycompiler.myclass.DeclId
    -
     
    -
    getOffset() - Method in class mycompiler.myclass.FormalParameter
    -
    -

    Author: Thomas Hornberger 09.04.2006
    -
    -
    getOffset() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    getOffset() - Method in class mycompiler.myclass.Method
    -
     
    -
    getOffset() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getOffset() - Method in class mycompiler.myoperator.Operator
    -
     
    -
    getOffset() - Method in class mycompiler.myparser.Token
    -
     
    -
    getOffset() - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -

    Author: Thomas Hornberger
    -
    -
    getOffset() - Method in class mycompiler.mystatement.Statement
    -
     
    -
    getOffset() - Method in class mycompiler.mytype.Type
    -
     
    -
    getOffset() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getOffsetMenge() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    getOldType() - Method in class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent
    -
     
    -
    GetOperator() - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - Gibt den Operator zur�ck.
    -
    -
    getOutputDir() - Method in class mycompiler.MyCompiler
    -
     
    -
    getOutputDir() - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: Juergen Schmiing
    - Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
    -
    -
    getOverloadedID() - Method in class mycompiler.myclass.Method
    -
     
    -
    getOverloadedMethodID() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    getOverloadedMethodID() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    getOverloadedMethodID() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    getOverloadedMethodID() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    getOverloadedMethodID() - Method in interface mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey
    -
    -
    Liefert die �berladen-ID der Methode
    -
    -
    getOverloadID() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getPackageName() - Method in class mycompiler.AClassOrInterface
    -
     
    -
    getPackageName() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getPackageName() - Method in class mycompiler.SourceFile
    -
    -
    Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars - dieser Klasse gespeichert werden.
    -
    -
    getPair() - Method in class typinferenz.SingleConstraint
    -
     
    -
    getParaAssumption(int) - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
     
    -
    getParaAssumptions() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getParaCount() - Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
    -
    -
    Author: Jrg Buerle
    -
    -
    getParaCount() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getParaList() - Method in class mycompiler.myinterface.Interface
    -
     
    -
    getParalist() - Method in class mycompiler.myparser.ClassAndParameter
    -
     
    -
    getParalist() - Method in class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    getParalist() - Method in class mycompiler.mytype.ParaList
    -
     
    -
    getParameter() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getParameterAt(int) - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    getParameterCount() - Method in class mycompiler.myclass.Method
    -
    -
    Author: Jrg Buerle
    -
    -
    getParameterCount() - Method in class mycompiler.myclass.ParameterList
    -
    -
    Author: J�rg B�uerle
    -
    -
    getParameterList() - Method in class mycompiler.myclass.Method
    -
     
    -
    getParaN(int) - Method in class mycompiler.mytype.RefType
    -
     
    -
    getParaMenge() - Method in class mycompiler.myparser.ClassAndParameter
    -
     
    -
    getParaMenge() - Method in class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    getPrimitiveFlag() - Method in class mycompiler.mystatement.Literal
    -
     
    -
    getPrimitiveFlag() - Method in class mycompiler.mytype.RefType
    -
     
    -
    getPublicFieldAssumptions() - Method in class mycompiler.myclass.Class
    -
    -
    Ermittelt die Sichtbaren Felder und Methoden der Klasse.
    -
    -
    getQualifiedName() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getReplacementListeners() - Method in class mycompiler.mytype.TypePlaceholder
    -
    -

    Author: J�rg B�uerle
    -
    -
    getReplacementListeners() - Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider
    -
     
    -
    getResultSet() - Method in class typinferenz.ResultSet
    -
     
    -
    getResultType() - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getResultTypeIterator() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
     
    -
    getResultTypes() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getReturnType() - Method in class mycompiler.myclass.Method
    -
    -
    Liefert den Return Type der Methode.
    -
    -
    getReturntypes() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getReturntypesCopy() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getSignatureDefinition() - Method in class mycompiler.mytype.BoundedGenericTypeVar
    -
     
    -
    getSignatureID() - Method in class mycompiler.mybytecode.ClassFile
    -
    -
    Gibt den NameIndex auf die UTF-8 Konstante "Signature" zurueck, - der fuer die Definition von Konstanten benoetigt wird.
    -
    -
    getSignatureType(Menge) - Method in class mycompiler.mytype.GenericTypeVar
    -
     
    -
    getSignatureType(Menge) - Method in class mycompiler.mytype.RefType
    -
     
    -
    getSignatureType(Menge) - Method in class mycompiler.mytype.Type
    -
    -
    Liefert den Typ fuer das Signature-Attribut zurueck.
    -
    -
    getSignatureUsedId() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getSimpleName() - Method in class mycompiler.myclass.Class
    -
    -
    HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    -
    -
    getSimpleName() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getSimpleName() - Method in class mycompiler.mytype.RefType
    -
    -
    HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    -
    -
    getSimpleName() - Method in class mycompiler.mytype.Type
    -
    -
    HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    -
    -
    getstatic - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    getSubSet() - Method in class mycompiler.mytypereconstruction.CReconstructionTuple
    -
     
    -
    getSubstitutions() - Method in class mycompiler.mytypereconstruction.CMultiplyTuple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getSubstitutions() - Method in class mycompiler.mytypereconstruction.CTriple
    -
    -
    Author: J�rg B�uerle
    -
    -
    getSubstitutions() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getSuperInterfaces() - Method in class mycompiler.AClassOrInterface
    -
     
    -
    getSuperWildcardTypes() - Method in class mycompiler.mytype.RefType
    -
    -
    Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
    -
    -
    getSuperWildcardTypes() - Method in class mycompiler.mytype.Type
    -
    -
    Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
    -
    -
    getSyntaxTree() - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Liefert den geparsten Syntaxbaume zur�ck.
    -
    -
    getSyntaxTree() - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Liefert den geparsten Syntaxbaum zur�ck.
    -
    -
    getTA1Copy() - Method in class mycompiler.mytype.Pair
    -
     
    -
    getTA2Copy() - Method in class mycompiler.mytype.Pair
    -
     
    -
    getThisValue() - Method in class typinferenz.TypeAssumptions
    -
     
    -
    getTTO() - Method in class mycompiler.mytypereconstruction.unify.FC_TTO
    -
     
    -
    getType() - Method in class mycompiler.myclass.Class
    -
    -
    Erstellt einen RefType, welcher auf diese Klasse verweist
    -
    -
    getType() - Method in class mycompiler.myclass.Constant
    -
    -
    Gibt den Typ der Konstantendefinition zurueck.
    -
    -
    getType() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    getType() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    getType() - Method in class mycompiler.mystatement.ExprStmt
    -
     
    -
    getType() - Method in class mycompiler.mystatement.NewArray
    -
    -
    Author: J�rg B�uerle
    -
    -
    getType() - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Author: J�rg B�uerle
    -
    -
    getTypeEqualTo(Type) - Method in class typinferenz.ResultSet
    -
    -
    L�st den �bergebenen Typ auf.
    -
    -
    getTypeInformation(Menge<Method>, Menge<Expr>) - Method in class mycompiler.myclass.Class
    -
     
    -
    getTypeInformation() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    getTypeInformation() - Method in class mycompiler.myclass.Method
    -
     
    -
    getTypeInformation() - Method in class mycompiler.myclass.ParameterList
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.Assign
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.Block
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.LambdaExpression
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.LocalOrFieldVar
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.Return
    -
     
    -
    getTypeInformation() - Method in class mycompiler.mystatement.Statement
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.myclass.FormalParameter
    -
    -

    Author: J�rg B�uerle
    -
    -
    getTypeLineNumber() - Method in class mycompiler.myclass.InstVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    getTypeLineNumber() - Method in class mycompiler.myclass.Method
    -
    -

    Author: Jrg Buerle
    -
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.Block
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.EmptyStmt
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.ExprStmt
    -
    -

    Author: J�rg B�uerle
    -
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.ForStmt
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.LocalVarDecl
    -
    -

    Author: J�rg B�uerle
    -
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.Return
    -
     
    -
    getTypeLineNumber() - Method in class mycompiler.mystatement.WhileStmt
    -
     
    -
    getTypeLineNumber() - Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener
    -
    -
    Gibt die Zeilennummer zur�ck, in der eine TypePlaceholder - angelegt worden ist.
    -
    -
    getTypeLineNumber() - Method in class typinferenz.FunN
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.Constant
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.FieldDecl
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    getTypeName() - Method in class mycompiler.myclass.Method
    -
     
    -
    getTypeName() - Method in class mycompiler.mystatement.ExprStmt
    -
     
    -
    getTypeName() - Method in class mycompiler.mytype.RefType
    -
     
    -
    getTypeOfPlaceholder(TypePlaceholder) - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
    -
    Ermittelt den in diesem ResultSet f�r den TypePlaceholder tph zugewiesenen Wert.
    -
    -
    getTypeVar() - Method in class mycompiler.mytypereconstruction.CSubstitution
    -
    -
    Author: J�rg B�uerle
    -
    -
    getTypeVar() - Method in class mycompiler.mytypereconstruction.CSubstitutionGenVar
    -
    -
    Author: J�rg B�uerle
    -
    -
    getTypeVariable() - Method in class mycompiler.myclass.FormalParameter
    -
     
    -
    getTypeVariable() - Method in class mycompiler.mystatement.Statement
    -
     
    -
    getTypeVariable() - Method in interface typinferenz.Typable
    -
     
    -
    getUnifiedConstraints() - Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult
    -
     
    -
    getUnifier() - Method in class mycompiler.mytypereconstruction.unify.MUB
    -
     
    -
    getUnknownReturnType() - Method in class mycompiler.test.expectationTypes.MethodExpect
    -
     
    -
    getUnknownTypeNameMapping() - Method in class mycompiler.test.expectationTypes.UnknownTypesMappingExpect
    -
     
    -
    getUsedIdsToCheck() - Method in class mycompiler.myclass.Class
    -
     
    -
    getValue() - Method in class mycompiler.myclass.Constant
    -
    -
    Gibt den Wert der Konstantendefinition zurueck.
    -
    -
    getVariableLength() - Method in interface mycompiler.IItemWithOffset
    -
     
    -
    getVariableLength() - Method in class mycompiler.myclass.InstVarDecl
    -
     
    -
    getVariableLength() - Method in class mycompiler.myclass.Method
    -
     
    -
    getVariableLength() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    getVariableLength() - Method in class mycompiler.myoperator.Operator
    -
     
    -
    getVariableLength() - Method in class mycompiler.mystatement.Statement
    -
     
    -
    getVariableLength() - Method in class mycompiler.mytype.Type
    -
     
    -
    getVarType(String) - Method in class typinferenz.TypeAssumptions
    -
    -
    Durchsucht die Assumptions des aktuellen G�ltigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag f�r den �bergebenen Variablennamen.
    -
    -
    getMenge() - Method in class mycompiler.myparser.InterfaceList
    -
     
    -
    getMenge() - Method in class mycompiler.mytypereconstruction.set.CMengeSet
    -
     
    -
    getWert() - Method in class mycompiler.myclass.FieldInitialization
    -
     
    -
    GetWildcardType() - Method in class mycompiler.mytype.ExtendsWildcardType
    -
    -
    Author: Arne L�dtke
    - Das gleiche wie get_ExtendsType().
    -
    -
    GetWildcardType() - Method in class mycompiler.mytype.SuperWildcardType
    -
    -
    Author: Arne L�dtke
    - Das gleiche wie get_SuperType().
    -
    -
    GetWildcardType() - Method in class mycompiler.mytype.WildcardType
    -
    -
    Author: Arne L�dtke
    - Die Allgemeine Wildcard enth�lt keinen Typen.
    -
    -
    goto_ - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    goto_w - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    GREATEREQUAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    GreaterEquOp - Class in mycompiler.myoperator
    -
     
    -
    GreaterEquOp(int, int) - Constructor for class mycompiler.myoperator.GreaterEquOp
    -
     
    -
    GreaterOp - Class in mycompiler.myoperator
    -
     
    -
    GreaterOp(int, int) - Constructor for class mycompiler.myoperator.GreaterOp
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-8.html b/doc/LambdaJavadoc/index-files/index-8.html deleted file mode 100755 index dca810ce..00000000 --- a/doc/LambdaJavadoc/index-files/index-8.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - -H-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    H

    -
    -
    hamaAload0 - Variable in class mycompiler.mybytecode.ClassFile
    -
     
    -
    hamaDebug - Variable in class mycompiler.mystatement.IfStmt
    -
     
    -
    hashCode() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
    -
    -
    Author: Jrg Buerle
    -
    -
    hasSolvedForm(Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    hasWildCard() - Method in class mycompiler.myclass.UsedId
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index-files/index-9.html b/doc/LambdaJavadoc/index-files/index-9.html deleted file mode 100755 index c76b23f8..00000000 --- a/doc/LambdaJavadoc/index-files/index-9.html +++ /dev/null @@ -1,513 +0,0 @@ - - - - - -I-Index - - - - - - - -
    - - - - - -
    - - -
    A B C D E F G H I J K L M N O P R S T U V W X Y  - - -

    I

    -
    -
    i2b - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    i2c - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    i2d - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    i2f - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    i2l - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    i2s - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iadd - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iaload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iand - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iastore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_4 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_5 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iconst_m1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IDENTIFIER - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    idiv - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IExpectation - Interface in mycompiler.test.expectationTypes
    -
    -
    15-04-08
    -
    -
    IF - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    if_acmpeq - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_acmpne - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.EqualOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.GreaterEquOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.GreaterOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.LessEquOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.LessOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Menge) - Method in class mycompiler.myoperator.LogOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.NotEqualOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, String, boolean) - Method in class mycompiler.myoperator.RelOp
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, boolean, Menge) - Method in class mycompiler.mystatement.IfStmt
    -
     
    -
    if_codegen(ClassFile, CodeAttribute, boolean) - Method in class mycompiler.mystatement.UnaryNot
    -
     
    -
    if_icmpeq - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_icmpge - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_icmpgt - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_icmple - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_icmplt - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_icmpne - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_ncmpeq(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    if_ncmpne(String) - Static method in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifeq - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifge - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifgt - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifle - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iflt - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifne - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifnonnull - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ifnull - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IfStmt - Class in mycompiler.mystatement
    -
     
    -
    IfStmt(int, int) - Constructor for class mycompiler.mystatement.IfStmt
    -
     
    -
    IHashSetElement - Interface in mycompiler.mytypereconstruction.set
    -
     
    -
    IHashSetKey - Interface in mycompiler.mytypereconstruction.set
    -
     
    -
    iinc - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IItemWithOffset - Interface in mycompiler
    -
     
    -
    iload - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iload_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iload_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iload_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iload_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IMatchable - Interface in mycompiler.mytype
    -
    -
    Dieses Interface wird von allen Klassen implementiert, die weitere Klassen - enthalten, die im match des Unify beachtet werden m�ssen.
    -
    -
    IMethodBoundKey - Interface in mycompiler.mytypereconstruction.typeassumptionkey
    -
     
    -
    impdep1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    impdep2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IMPLEMENTS - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    IMPORT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    Import - Class in mycompiler.unused
    -
     
    -
    Import() - Constructor for class mycompiler.unused.Import
    -
     
    -
    ImportDeclarations - Class in mycompiler.myclass
    -
    -
    HOTI 4.5.06 - Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) - Der Parser kann keine Generischen Typen darstellen, damit trotzdem - an amap Stellen die Typsicherheit gew�hrleistet ist, hier eine Kapselung...
    -
    -
    ImportDeclarations() - Constructor for class mycompiler.myclass.ImportDeclarations
    -
     
    -
    imul - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    incBlockDepth() - Method in class mycompiler.mytypereconstruction.CSupportData
    -
     
    -
    includesModifier(Modifier) - Method in class mycompiler.mymodifier.Modifiers
    -
    -
    Gibt zurueck, ob der angegebene Modifier enthalten ist.
    -
    -
    INCREMENT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    ineg - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    init() - Method in class mycompiler.MyCompiler
    -
    -
    Author: J�rg B�uerle
    - Initialisiert den Compiler
    -
    -
    init() - Method in interface mycompiler.MyCompilerAPI
    -
    -
    Author: J�rg B�uerle
    - Initialisiert den Compiler
    -
    -
    init_parahashtable(Menge, boolean) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    INSTANCEOF - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    InstanceOf - Class in mycompiler.mystatement
    -
     
    -
    InstanceOf(int, int) - Constructor for class mycompiler.mystatement.InstanceOf
    -
     
    -
    instanceof_ - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    instanceSmaller(Pair, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    instanzeEquals(Object) - Method in class mycompiler.mytype.Pair
    -
    -
    Author: Arne L�dtke
    - �berpr�ft ob die Paare die gleichen Instanzen sind.
    -
    -
    InstVar - Class in mycompiler.mystatement
    -
     
    -
    InstVar(Expr, String, int) - Constructor for class mycompiler.mystatement.InstVar
    -
     
    -
    InstVar(String, String, int) - Constructor for class mycompiler.mystatement.InstVar
    -
     
    -
    InstVar(UsedId, int, int) - Constructor for class mycompiler.mystatement.InstVar
    -
    -
    macht aus einem UsedId mit einem Menge von Strings eine InstVar -
    Author: Martin Pl�micke PL 05-08-17
    -
    -
    InstVarDecl - Class in mycompiler.myclass
    -
     
    -
    InstVarDecl() - Constructor for class mycompiler.myclass.InstVarDecl
    -
     
    -
    INT - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    IntegerTest - Class in mycompiler.test.primitiveTypes
    -
    -
    02-04-08
    -
    -
    IntegerTest(String) - Constructor for class mycompiler.test.primitiveTypes.IntegerTest
    -
     
    -
    IntegerType - Class in mycompiler.mytype
    -
     
    -
    IntegerType() - Constructor for class mycompiler.mytype.IntegerType
    -
     
    -
    Interface - Class in mycompiler.myinterface
    -
    -
    Die Klasse stellt die Definition eines Interfaces dar.
    -
    -
    Interface() - Constructor for class mycompiler.myinterface.Interface
    -
     
    -
    Interface(String) - Constructor for class mycompiler.myinterface.Interface
    -
     
    -
    Interface(String, Modifiers) - Constructor for class mycompiler.myinterface.Interface
    -
     
    -
    INTERFACE - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    InterfaceAndParameter - Class in mycompiler.myparser
    -
    -
    Hilfskonstrukt, um die Grammatik fuer einen Interfaceheader - ueberschaubar zu halten.
    -
    -
    InterfaceAndParameter(String) - Constructor for class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    InterfaceAndParameter(String, ParaList) - Constructor for class mycompiler.myparser.InterfaceAndParameter
    -
     
    -
    InterfaceBody - Class in mycompiler.myinterface
    -
    -
    Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- - und Mehtodendefinitionen.
    -
    -
    InterfaceBody() - Constructor for class mycompiler.myinterface.InterfaceBody
    -
     
    -
    InterfaceList - Class in mycompiler.myparser
    -
    -
    Hilfskonstrukt fuer die Grammatik, um ungepruefte - Typcasts fuer Mengeen zu umgehen.
    -
    -
    InterfaceList() - Constructor for class mycompiler.myparser.InterfaceList
    -
     
    -
    InterfaceModifier - Class in mycompiler.mymodifier
    -
     
    -
    InterfaceModifier() - Constructor for class mycompiler.mymodifier.InterfaceModifier
    -
     
    -
    InterfaceVektor - Variable in class mycompiler.SourceFile
    -
     
    -
    INTLITERAL - Static variable in class mycompiler.myparser.JavaParser
    -
     
    -
    IntLiteral - Class in mycompiler.mystatement
    -
     
    -
    IntLiteral() - Constructor for class mycompiler.mystatement.IntLiteral
    -
     
    -
    invokeinterface - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    invokespecial - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    invokestatic - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    invokevirtual - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ior - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    irem - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    IReplaceTypeEventProvider - Interface in mycompiler.mytypereconstruction.replacementlistener
    -
    -
    Interface f�r ein Objekt, das ReplaceTypeEvents zur Verf�gung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
    -
    -
    IResultValidator - Interface in mycompiler.test.notUsedAnymore
    -
     
    -
    ireturn - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    is_declared(Type, Menge<Class>) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    is_declared(Type, Menge<Class>) - Method in class mycompiler.mystatement.LocalVarDecl
    -
     
    -
    is_Equiv(RefType, Hashtable<String, Type>) - Method in class mycompiler.mytype.RefType
    -
     
    -
    is_member(String) - Method in class mycompiler.myclass.Class
    -
     
    -
    isAbstract() - Method in class mycompiler.myclass.Method
    -
    -
    Gibt zurueck, ob ByteCode innerhabl der Methode - generiert wird.
    -
    -
    isAGenericType(RefType) - Method in class mycompiler.myinterface.Interface
    -
     
    -
    IsArray() - Method in class mycompiler.mytype.BaseType
    -
    -
    Author: Daniel Feinler
    - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    -
    -
    IsArray() - Method in class mycompiler.mytype.RefType
    -
    -
    Author: Daniel Feinler
    - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    -
    -
    isEqual() - Method in class mycompiler.mytype.Pair
    -
     
    -
    isFirstLocalVarDecl - Static variable in class mycompiler.myclass.Class
    -
     
    -
    ishl - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ishr - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    isInFC(RefType, RefType, Menge<Pair>) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    isInFCrechtsUnify(RefType, RefType, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    isInMenge(Menge<Pair>) - Method in class mycompiler.mytype.Pair
    -
     
    -
    isOverloadedIDSet() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
    -
     
    -
    isOverloadedIDSet() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
    -
     
    -
    isOverloadedIDSet() - Method in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
    -
     
    -
    isOverloadedIDSet() - Method in interface mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey
    -
    -
    Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
    -
    -
    isPlaceholderVariable() - Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
    -
     
    -
    isRealSubClass(String, String, FC_TTO) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    isRXSimilarRY(RefType, RefType, boolean) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    istore - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    istore_0 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    istore_1 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    istore_2 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    istore_3 - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    istParameterOK(Menge, Menge<Class>) - Method in class mycompiler.myclass.ClassBody
    -
     
    -
    isTV(int) - Method in class mycompiler.mytype.RefType
    -
     
    -
    isTVinRefType(TypePlaceholder, RefType) - Static method in class mycompiler.mytypereconstruction.unify.Unify
    -
     
    -
    isub - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    iterator() - Method in class mycompiler.mytype.CRefTypeSet
    -
     
    -
    iterator() - Method in class mycompiler.mytypereconstruction.set.CMultiplyTupleSet
    -
     
    -
    iterator() - Method in class mycompiler.mytypereconstruction.set.CReconstructionTupleSet
    -
     
    -
    iterator() - Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet
    -
     
    -
    iterator() - Method in class mycompiler.mytypereconstruction.set.CTripleSet
    -
     
    -
    iterator() - Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet
    -
     
    -
    iterator() - Method in class typinferenz.ConstraintsSet
    -
     
    -
    iterator() - Method in class typinferenz.ResultSet
    -
     
    -
    iterator() - Method in class typinferenz.TypeAssumptions
    -
     
    -
    ITypeContainer - Interface in mycompiler.mytype
    -
    -
    Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten.
    -
    -
    ITypeReplacementListener - Interface in mycompiler.mytypereconstruction.replacementlistener
    -
    -
    Interface f�r einen TypeReplacementListener, der es erm�glicht, - einen Typ gegen einen anderen auszutauschen.
    -
    -
    IUnknownTypeExpect - Interface in mycompiler.test.expectationTypes
    -
    -
    15-05-08
    -
    -
    iushr - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    ixor - Static variable in class mycompiler.mybytecode.JVMCode
    -
     
    -
    -A B C D E F G H I J K L M N O P R S T U V W X Y 
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/index.html b/doc/LambdaJavadoc/index.html deleted file mode 100755 index 54a4857e..00000000 --- a/doc/LambdaJavadoc/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - -Generated Documentation (Untitled) - - - - - - - - - -<noscript> -<div>JavaScript is disabled on your browser.</div> -</noscript> -<h2>Frame Alert</h2> -<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> - - - diff --git a/doc/LambdaJavadoc/myJvmDisassembler/package-frame.html b/doc/LambdaJavadoc/myJvmDisassembler/package-frame.html deleted file mode 100755 index e400c4eb..00000000 --- a/doc/LambdaJavadoc/myJvmDisassembler/package-frame.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -myJvmDisassembler - - - - -

    myJvmDisassembler

    - - diff --git a/doc/LambdaJavadoc/myJvmDisassembler/package-summary.html b/doc/LambdaJavadoc/myJvmDisassembler/package-summary.html deleted file mode 100755 index 2ede3b03..00000000 --- a/doc/LambdaJavadoc/myJvmDisassembler/package-summary.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - -myJvmDisassembler - - - - - - - -
    - - - - - -
    - - -
    -

    Package myJvmDisassembler

    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/myJvmDisassembler/package-tree.html b/doc/LambdaJavadoc/myJvmDisassembler/package-tree.html deleted file mode 100755 index a6c802d5..00000000 --- a/doc/LambdaJavadoc/myJvmDisassembler/package-tree.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - -myJvmDisassembler Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package myJvmDisassembler

    -Package Hierarchies: - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/myJvmDisassembler/package-use.html b/doc/LambdaJavadoc/myJvmDisassembler/package-use.html deleted file mode 100755 index 9ad39d26..00000000 --- a/doc/LambdaJavadoc/myJvmDisassembler/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package myJvmDisassembler - - - - - - - - - - -
    -

    Uses of Package
    myJvmDisassembler

    -
    -
    No usage of myJvmDisassembler
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/AClassOrInterface.html b/doc/LambdaJavadoc/mycompiler/AClassOrInterface.html deleted file mode 100755 index 54ef7baf..00000000 --- a/doc/LambdaJavadoc/mycompiler/AClassOrInterface.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - -AClassOrInterface - - - - - - - - - - - -
    -
    mycompiler
    -

    Class AClassOrInterface

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.AClassOrInterface
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      Class, Interface
      -
      -
      -
      -
      public abstract class AClassOrInterface
      -extends java.lang.Object
      -
      Superklasse von Class und Interface. Beinhaltet gemeinsame Attribute - der beiden Objekte.
      -
      Author:
      -
      Juergen Schmiing
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AClassOrInterface

          -
          public AClassOrInterface()
          -
        • -
        - - - -
          -
        • -

          AClassOrInterface

          -
          public AClassOrInterface(java.lang.String strName)
          -
        • -
        - - - -
          -
        • -

          AClassOrInterface

          -
          public AClassOrInterface(java.lang.String strName,
          -                 Modifiers mod)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getPackageName

          -
          public UsedId getPackageName()
          -
        • -
        - - - -
          -
        • -

          setPackageName

          -
          public void setPackageName(UsedId pkgName)
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String strName)
          -
        • -
        - - - -
          -
        • -

          setModifiers

          -
          public void setModifiers(Modifiers mod)
          -
        • -
        - - - -
          -
        • -

          getModifiers

          -
          public Modifiers getModifiers()
          -
        • -
        - - - -
          -
        • -

          getAccessFlags

          -
          public short getAccessFlags()
          -
          Liefert die AccessFlags fuer den Bytecode zurueck.
          -
        • -
        - - - -
          -
        • -

          getSuperInterfaces

          -
          public de.dhbwstuttgart.typeinference.Menge<UsedId> getSuperInterfaces()
          -
        • -
        - - - -
          -
        • -

          setSuperInterfaces

          -
          public void setSuperInterfaces(de.dhbwstuttgart.typeinference.Menge<UsedId> superif)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/IItemWithOffset.html b/doc/LambdaJavadoc/mycompiler/IItemWithOffset.html deleted file mode 100755 index 3dd93df2..00000000 --- a/doc/LambdaJavadoc/mycompiler/IItemWithOffset.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - -IItemWithOffset - - - - - - - - - - - -
    -
    mycompiler
    -

    Interface IItemWithOffset

    -
    - - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/MyCompiler.html b/doc/LambdaJavadoc/mycompiler/MyCompiler.html deleted file mode 100755 index 058122dc..00000000 --- a/doc/LambdaJavadoc/mycompiler/MyCompiler.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - -MyCompiler - - - - - - - - - - - -
    -
    mycompiler
    -

    Class MyCompiler

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.MyCompiler
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      MyCompilerAPI
      -
      -
      -
      -
      public class MyCompiler
      -extends java.lang.Object
      -implements MyCompilerAPI
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static intNO_LINENUMBER 
        de.dhbwstuttgart.typeinference.Menge<Pair>testPair 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodeGeneration() -
        Author: J�rg B�uerle
        - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
        -
        static MyCompilerAPIgetAPI() -
        Author: J�rg B�uerle
        - Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
        -
        static java.lang.StringgetFullyQualifiedNameFromClassname(java.lang.String typ, - ImportDeclarations declarations) 
        java.lang.StringgetOutputDir() -
        Author: Juergen Schmiing
        - Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
        -
        SourceFilegetSyntaxTree() -
        Author: J�rg B�uerle
        - Liefert den geparsten Syntaxbaume zur�ck.
        -
        voidinit() -
        Author: J�rg B�uerle
        - Initialisiert den Compiler
        -
        static voidmain(java.lang.String[] args) -
        Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet - werden kann.
        -
        static TypemakeGenericTypeVars2TypePlaceHolders(Type T) 
        static voidmakeRefTypesFullyQualified(de.dhbwstuttgart.typeinference.Menge<Type> containedTypes, - ImportDeclarations declarations) 
        voidparse(java.io.File file) -
        Author: J�rg B�uerle
        - Ruft die Parse-Methode.
        -
        voidparse(java.lang.String srcCode) -
        Author: J�rg B�uerle
        - Ruft die Parse-Methode.
        -
        voidparse(de.dhbwstuttgart.typeinference.Menge<java.lang.String> filenames) -
        Alle �bergebenen Dateien werden zu einem String zusammengef�gt und gemeinsam in einer SourceFile geparst.
        -
        voidsetOutputDir(java.lang.String dir) -
        Author: Juergen Schmiing
        - Legt das Ausgabeverzeichnis fuer die class-Files fest.
        -
        de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>typeReconstruction() -
        Author: J�rg B�uerle
        - Ruft den Typrekonstruktionsalgorithmus auf.
        -
        static voidwandleGeneric2RefType(de.dhbwstuttgart.typeinference.Menge<Type> Parameter, - de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor) -
        Author: Thomas Ott
        - Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen - GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t.
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - - - - - -
          -
        • -

          testPair

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> testPair
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getAPI

          -
          public static MyCompilerAPI getAPI()
          -
          Author: J�rg B�uerle
          - Stellt eine neue Instanz der CompilerAPI zur Verf�gung. - Diese Methode sollte von der IDE aus aufgerufen werden, - um eine Quellcode-Datei zu kompilieren.
          -
          Returns:
          Die Compiler-API
          -
        • -
        - - - - - - - -
          -
        • -

          init

          -
          public void init()
          -
          Author: J�rg B�uerle
          - Initialisiert den Compiler
          -
          -
          Specified by:
          -
          init in interface MyCompilerAPI
          -
          -
        • -
        - - - -
          -
        • -

          parse

          -
          public void parse(java.io.File file)
          -           throws java.io.FileNotFoundException,
          -                  java.io.IOException,
          -                  JavaParser.yyException
          -
          Author: J�rg B�uerle
          - Ruft die Parse-Methode.
          -
          -
          Specified by:
          -
          parse in interface MyCompilerAPI
          -
          Parameters:
          file - Die Quellcode-Datei
          -
          Throws:
          -
          java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert.
          -
          java.io.IOException - Wenn was schief l�uft.
          -
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          -
        • -
        - - - -
          -
        • -

          parse

          -
          public void parse(java.lang.String srcCode)
          -           throws java.io.IOException,
          -                  JavaParser.yyException
          -
          Author: J�rg B�uerle
          - Ruft die Parse-Methode.
          -
          -
          Specified by:
          -
          parse in interface MyCompilerAPI
          -
          Parameters:
          srcCode - Der zu parsende Quellcode
          -
          Throws:
          -
          java.io.IOException - Wenn was schief l�uft.
          -
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          -
        • -
        - - - -
          -
        • -

          typeReconstruction

          -
          public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
          -                                                               throws java.lang.NullPointerException,
          -                                                                      CTypeReconstructionException
          -
          Author: J�rg B�uerle
          - Ruft den Typrekonstruktionsalgorithmus auf.
          -
          -
          Specified by:
          -
          typeReconstruction in interface MyCompilerAPI
          -
          Returns:
          Die Menge aller m�glichen Typkombinationen
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden - ist. @throws CTypeReconstructionException Wenn ein Fehler bei der - Typrekonstruktion auftritt.
          -
          CTypeReconstructionException
          -
        • -
        - - - -
          -
        • -

          getSyntaxTree

          -
          public SourceFile getSyntaxTree()
          -                         throws java.lang.NullPointerException
          -
          Author: J�rg B�uerle
          - Liefert den geparsten Syntaxbaume zur�ck.
          -
          -
          Specified by:
          -
          getSyntaxTree in interface MyCompilerAPI
          -
          Returns:
          Die Syntaxb�ume
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch keine Syntaxb�ume berechnet worden sind.
          -
        • -
        - - - -
          -
        • -

          codeGeneration

          -
          public void codeGeneration()
          -                    throws java.lang.NullPointerException,
          -                           JVMCodeException
          -
          Author: J�rg B�uerle
          - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
          -
          -
          Specified by:
          -
          codeGeneration in interface MyCompilerAPI
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden - ist.
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
          Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet - werden kann.
          -
          Parameters:
          args - Klassendatei
          -
        • -
        - - - -
          -
        • -

          setOutputDir

          -
          public void setOutputDir(java.lang.String dir)
          -
          Description copied from interface: MyCompilerAPI
          -
          Author: Juergen Schmiing
          - Legt das Ausgabeverzeichnis fuer die class-Files fest.
          -
          -
          Specified by:
          -
          setOutputDir in interface MyCompilerAPI
          -
          -
        • -
        - - - -
          -
        • -

          getOutputDir

          -
          public java.lang.String getOutputDir()
          -
          Description copied from interface: MyCompilerAPI
          -
          Author: Juergen Schmiing
          - Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
          -
          -
          Specified by:
          -
          getOutputDir in interface MyCompilerAPI
          -
          -
        • -
        - - - -
          -
        • -

          getFullyQualifiedNameFromClassname

          -
          public static java.lang.String getFullyQualifiedNameFromClassname(java.lang.String typ,
          -                                                  ImportDeclarations declarations)
          -
        • -
        - - - -
          -
        • -

          makeRefTypesFullyQualified

          -
          public static void makeRefTypesFullyQualified(de.dhbwstuttgart.typeinference.Menge<Type> containedTypes,
          -                              ImportDeclarations declarations)
          -
          Parameters:
          containedTypes - Alle Typen, die die Klasse beinhaltet
          name - Alle Klassen, die es in den BasicAssumptions und im - AbstractSyntaxTree gibt @param declarations Alle Import-Declarations
          -
        • -
        - - - -
          -
        • -

          makeGenericTypeVars2TypePlaceHolders

          -
          public static Type makeGenericTypeVars2TypePlaceHolders(Type T)
          -
          Parameters:
          T - - Typ, bei welchem die GTVs ersetzt werden sollen.
          -
        • -
        - - - -
          -
        • -

          parse

          -
          public void parse(de.dhbwstuttgart.typeinference.Menge<java.lang.String> filenames)
          -
          Alle �bergebenen Dateien werden zu einem String zusammengef�gt und gemeinsam in einer SourceFile geparst.
          -
          -
          Specified by:
          -
          parse in interface MyCompilerAPI
          -
          Parameters:
          filenames - - Eine Liste von Quellcodedateien, welche gseparst werden sollen
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/MyCompilerAPI.html b/doc/LambdaJavadoc/mycompiler/MyCompilerAPI.html deleted file mode 100755 index 1f36d55e..00000000 --- a/doc/LambdaJavadoc/mycompiler/MyCompilerAPI.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - -MyCompilerAPI - - - - - - - - - - - -
    -
    mycompiler
    -

    Interface MyCompilerAPI

    -
    -
    -
    -
      -
    • -
      -
      All Known Implementing Classes:
      -
      MyCompiler
      -
      -
      -
      -
      public interface MyCompilerAPI
      -
      Schnittstellen-Klasse zum Compiler. Diese Klasse soll der - IDE als Compiler-API zum Kompilieren einer Quellcode-Datei - dienen und stellt somit die Schnittstelle zur Studienarbeit - von Markus Melzer (Eclipse-Plugin) dar.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:45 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodeGeneration() -
        Author: J�rg B�uerle
        - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
        -
        java.lang.StringgetOutputDir() -
        Author: Juergen Schmiing
        - Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
        -
        SourceFilegetSyntaxTree() -
        Author: J�rg B�uerle
        - Liefert den geparsten Syntaxbaum zur�ck.
        -
        voidinit() -
        Author: J�rg B�uerle
        - Initialisiert den Compiler
        -
        voidparse(java.io.File file) -
        Author: J�rg B�uerle
        - Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
        -
        voidparse(java.lang.String srcCode) -
        Author: J�rg B�uerle
        - Parst einen String und baut den abstrakten Syntaxbaum auf.
        -
        voidparse(de.dhbwstuttgart.typeinference.Menge<java.lang.String> filenames) -
        Parst zusammenh�ngende JavaKlassen in verschiedenen Dateien.
        -
        voidsetOutputDir(java.lang.String dir) -
        Author: Juergen Schmiing
        - Legt das Ausgabeverzeichnis fuer die class-Files fest.
        -
        de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>typeReconstruction() -
        Author: J�rg B�uerle
        - Ruft den Typrekonstruktionsalgorithmus auf.
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          init

          -
          void init()
          -
          Author: J�rg B�uerle
          - Initialisiert den Compiler
          -
        • -
        - - - -
          -
        • -

          parse

          -
          void parse(java.io.File file)
          -           throws java.io.FileNotFoundException,
          -                  java.io.IOException,
          -                  JavaParser.yyException
          -
          Author: J�rg B�uerle
          - Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
          -
          Parameters:
          file - Die Quellcode-Datei
          -
          Throws:
          -
          java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert.
          -
          java.io.IOException - Wenn was schief l�uft.
          -
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          -
        • -
        - - - -
          -
        • -

          parse

          -
          void parse(java.lang.String srcCode)
          -           throws java.io.IOException,
          -                  JavaParser.yyException
          -
          Author: J�rg B�uerle
          - Parst einen String und baut den abstrakten Syntaxbaum auf.
          -
          Parameters:
          srcCode - Der zu parsende Quellcode
          -
          Throws:
          -
          java.io.IOException - Wenn was schief l�uft.
          -
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          -
        • -
        - - - -
          -
        • -

          typeReconstruction

          -
          de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
          -                                                               throws java.lang.NullPointerException,
          -                                                                      CTypeReconstructionException
          -
          Author: J�rg B�uerle
          - Ruft den Typrekonstruktionsalgorithmus auf.
          -
          Returns:
          Die Menge aller m�glichen Typkombinationen
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden - ist. @throws CTypeReconstructionException Wenn ein Fehler bei der - Typrekonstruktion auftritt.
          -
          CTypeReconstructionException
          -
        • -
        - - - -
          -
        • -

          getSyntaxTree

          -
          SourceFile getSyntaxTree()
          -                         throws java.lang.NullPointerException
          -
          Author: J�rg B�uerle
          - Liefert den geparsten Syntaxbaum zur�ck.
          -
          Returns:
          Die Syntaxb�ume
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch kein Syntaxbaum berechnet worden ist.
          -
        • -
        - - - -
          -
        • -

          codeGeneration

          -
          void codeGeneration()
          -                    throws java.lang.NullPointerException,
          -                           JVMCodeException
          -
          Author: J�rg B�uerle
          - Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
          -
          Parameters:
          syntaxTree - Der Syntaxbaum
          -
          Throws:
          -
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden - ist. @throws JVMCodeException
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          setOutputDir

          -
          void setOutputDir(java.lang.String dir)
          -
          Author: Juergen Schmiing
          - Legt das Ausgabeverzeichnis fuer die class-Files fest.
          -
        • -
        - - - -
          -
        • -

          getOutputDir

          -
          java.lang.String getOutputDir()
          -
          Author: Juergen Schmiing
          - Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
          -
        • -
        - - - -
          -
        • -

          parse

          -
          void parse(de.dhbwstuttgart.typeinference.Menge<java.lang.String> filenames)
          -
          Parst zusammenh�ngende JavaKlassen in verschiedenen Dateien.
          -
          Parameters:
          filenames - - Eine Liste von Quellcodedateien, welche gseparst werden sollen
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/SourceFile.html b/doc/LambdaJavadoc/mycompiler/SourceFile.html deleted file mode 100755 index 81a6fee7..00000000 --- a/doc/LambdaJavadoc/mycompiler/SourceFile.html +++ /dev/null @@ -1,508 +0,0 @@ - - - - - -SourceFile - - - - - - - - - - - -
    -
    mycompiler
    -

    Class SourceFile

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.SourceFile
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class SourceFile
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          READ_OBJECT_SUPERCLASSES_FROM_JRE

          -
          public static final boolean READ_OBJECT_SUPERCLASSES_FROM_JRE
          -
          See Also:
          Constant Field Values
          -
        • -
        - - - -
          -
        • -

          KlassenVektor

          -
          public de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor
          -
        • -
        - - - -
          -
        • -

          InterfaceVektor

          -
          public de.dhbwstuttgart.typeinference.Menge<Interface> InterfaceVektor
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SourceFile

          -
          public SourceFile()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(boolean ext)
          -              throws SCException
          -
          DEPRECATED. Wird nicht mehr benutzt, TypeReconstruction uebernimmt - diese Aufgabe.
          -
          Throws:
          -
          SCException
          -
        • -
        - - - -
          -
        • -

          addElement

          -
          public void addElement(AClassOrInterface e)
          -
          Fuegt ein neues Element (Interface oder Klasse) hinzu.
          -
          Parameters:
          c -
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen()
          -             throws JVMCodeException
          -
          Startet die Bytecodegenerierung fuer alle in der Datei - enthaltenen Klassen und Interfaces.
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          makeFC

          -
          public FC_TTO makeFC()
          -
          Erstellt die Finite Closure
          -
          Returns:
          FC_TTO-Object, welches die Finite Closure repr�sentiert
          -
        • -
        - - - -
          -
        • -

          typeReconstruction

          -
          public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
          -                                                               throws CTypeReconstructionException
          -
          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als - Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen - Typkombinationen f�r alle Klassen zusammen. -
          Author: J�rg B�uerle
          -
          Returns:
          Liste aller m�glichen Typkombinationen
          -
          Throws:
          -
          CTypeReconstructionException - Wenn was schief l�uft
          -
        • -
        - - - -
          -
        • -

          getPackageName

          -
          public UsedId getPackageName()
          -
          Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars - dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen - in der - Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. -
          Author: J�rg B�uerle
          -
          Parameters:
          res - / - /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){ - Iterator it = this.getClassIterator(); - while(it.hasNext()){ - Class cl = it.next(); - res.addClassName(cl.get_classname()); - Menge genericsList = new Menge(); - - for(int i =0; i
          -
        • -
        - - - -
          -
        • -

          setPackageName

          -
          public void setPackageName(UsedId pkgName)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          getClassIterator

          -
          public java.util.Iterator<Class> getClassIterator()
          -
        • -
        - - - -
          -
        • -

          getInterfaceIterator

          -
          public java.util.Iterator<Interface> getInterfaceIterator()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/class-use/AClassOrInterface.html b/doc/LambdaJavadoc/mycompiler/class-use/AClassOrInterface.html deleted file mode 100755 index d3350a09..00000000 --- a/doc/LambdaJavadoc/mycompiler/class-use/AClassOrInterface.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - -Uses of Class mycompiler.AClassOrInterface - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.AClassOrInterface

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/class-use/IItemWithOffset.html b/doc/LambdaJavadoc/mycompiler/class-use/IItemWithOffset.html deleted file mode 100755 index 8cf88bc2..00000000 --- a/doc/LambdaJavadoc/mycompiler/class-use/IItemWithOffset.html +++ /dev/null @@ -1,605 +0,0 @@ - - - - - -Uses of Interface mycompiler.IItemWithOffset - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.IItemWithOffset

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/class-use/MyCompiler.html b/doc/LambdaJavadoc/mycompiler/class-use/MyCompiler.html deleted file mode 100755 index 2d13f726..00000000 --- a/doc/LambdaJavadoc/mycompiler/class-use/MyCompiler.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.MyCompiler - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.MyCompiler

    -
    -
    No usage of mycompiler.MyCompiler
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/class-use/MyCompilerAPI.html b/doc/LambdaJavadoc/mycompiler/class-use/MyCompilerAPI.html deleted file mode 100755 index 61135e2c..00000000 --- a/doc/LambdaJavadoc/mycompiler/class-use/MyCompilerAPI.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - -Uses of Interface mycompiler.MyCompilerAPI - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.MyCompilerAPI

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/class-use/SourceFile.html b/doc/LambdaJavadoc/mycompiler/class-use/SourceFile.html deleted file mode 100755 index 02fa77e5..00000000 --- a/doc/LambdaJavadoc/mycompiler/class-use/SourceFile.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - -Uses of Class mycompiler.SourceFile - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.SourceFile

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/Attribute.html b/doc/LambdaJavadoc/mycompiler/mybytecode/Attribute.html deleted file mode 100755 index 436a6567..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/Attribute.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - -Attribute - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class Attribute

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.Attribute
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Attribute() 
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Attribute

          -
          public Attribute()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_attribute_name_index

          -
          public short get_attribute_name_index()
          -
        • -
        - - - -
          -
        • -

          set_attribute_name_index

          -
          public void set_attribute_name_index(short t)
          -
        • -
        - - - - - - - -
          -
        • -

          get_attributes_length

          -
          public abstract int get_attributes_length()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/AttributeInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/AttributeInfo.html deleted file mode 100755 index 7236c14e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/AttributeInfo.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - -AttributeInfo - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class AttributeInfo

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class AttributeInfo
      -extends Attribute
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AttributeInfo

          -
          public AttributeInfo()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_info

          -
          public byte[] get_info()
          -
        • -
        - - - -
          -
        • -

          get_info_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Byte> get_info_Menge()
          -
        • -
        - - - - - - - -
          -
        • -

          set_info

          -
          public void set_info(byte[] t)
          -
        • -
        - - - -
          -
        • -

          set_info

          -
          public void set_info(de.dhbwstuttgart.typeinference.Menge t)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Class_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Class_info.html deleted file mode 100755 index 0de0931b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Class_info.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -CONSTANT_Class_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Class_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Class_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        shortget_name_index() 
        voidset_name_index(short i) 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Class_info

          -
          public CONSTANT_Class_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_name_index

          -
          public short get_name_index()
          -
        • -
        - - - -
          -
        • -

          set_name_index

          -
          public void set_name_index(short i)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Double_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Double_info.html deleted file mode 100755 index 85fe6856..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Double_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_Double_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Double_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Double_info
      -extends CPInfo
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Double_info

          -
          public CONSTANT_Double_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_high_bytes

          -
          public int get_high_bytes()
          -
        • -
        - - - -
          -
        • -

          get_low_bytes

          -
          public int get_low_bytes()
          -
        • -
        - - - -
          -
        • -

          set_high_bytes

          -
          public void set_high_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          set_low_bytes

          -
          public void set_low_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html deleted file mode 100755 index 0185f54b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_Fieldref_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Fieldref_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Fieldref_info
      -extends CPInfo
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Fieldref_info

          -
          public CONSTANT_Fieldref_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_class_index

          -
          public short get_class_index()
          -
        • -
        - - - -
          -
        • -

          get_name_and_type_index

          -
          public short get_name_and_type_index()
          -
        • -
        - - - -
          -
        • -

          set_class_index

          -
          public void set_class_index(short i)
          -
        • -
        - - - -
          -
        • -

          set_name_and_type_index

          -
          public void set_name_and_type_index(short i)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Float_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Float_info.html deleted file mode 100755 index 5f46db26..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Float_info.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -CONSTANT_Float_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Float_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Float_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        intget_bytes() 
        voidset_bytes(int t) 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Float_info

          -
          public CONSTANT_Float_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_bytes

          -
          public int get_bytes()
          -
        • -
        - - - -
          -
        • -

          set_bytes

          -
          public void set_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html deleted file mode 100755 index c8610ed2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -CONSTANT_Integer_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Integer_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Integer_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        intget_bytes() 
        voidset_bytes(int t) 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Integer_info

          -
          public CONSTANT_Integer_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_bytes

          -
          public int get_bytes()
          -
        • -
        - - - -
          -
        • -

          set_bytes

          -
          public void set_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html deleted file mode 100755 index ebba3ddb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_InterfaceMethodref_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_InterfaceMethodref_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_InterfaceMethodref_info
      -extends CPInfo
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_InterfaceMethodref_info

          -
          public CONSTANT_InterfaceMethodref_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_class_index

          -
          public short get_class_index()
          -
        • -
        - - - -
          -
        • -

          get_name_and_type_index

          -
          public short get_name_and_type_index()
          -
        • -
        - - - -
          -
        • -

          set_class_index

          -
          public void set_class_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_name_and_type_index

          -
          public void set_name_and_type_index(short t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Long_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Long_info.html deleted file mode 100755 index 64feaf16..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Long_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_Long_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Long_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Long_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CONSTANT_Long_info() 
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Long_info

          -
          public CONSTANT_Long_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_high_bytes

          -
          public int get_high_bytes()
          -
        • -
        - - - -
          -
        • -

          get_low_bytes

          -
          public int get_low_bytes()
          -
        • -
        - - - -
          -
        • -

          set_high_bytes

          -
          public void set_high_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          set_low_bytes

          -
          public void set_low_bytes(int t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html deleted file mode 100755 index f3e4fa88..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_Methodref_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Methodref_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Methodref_info
      -extends CPInfo
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Methodref_info

          -
          public CONSTANT_Methodref_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_class_index

          -
          public short get_class_index()
          -
        • -
        - - - -
          -
        • -

          get_name_and_type_index

          -
          public short get_name_and_type_index()
          -
        • -
        - - - -
          -
        • -

          set_class_index

          -
          public void set_class_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_name_and_type_index

          -
          public void set_name_and_type_index(short t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html deleted file mode 100755 index 99a3cdb1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -CONSTANT_NameAndType_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_NameAndType_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_NameAndType_info
      -extends CPInfo
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_NameAndType_info

          -
          public CONSTANT_NameAndType_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_name_index

          -
          public short get_name_index()
          -
        • -
        - - - -
          -
        • -

          get_descriptor_index

          -
          public short get_descriptor_index()
          -
        • -
        - - - -
          -
        • -

          set_name_index

          -
          public void set_name_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_descriptor_index

          -
          public void set_descriptor_index(short t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_String_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_String_info.html deleted file mode 100755 index 70d4831b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_String_info.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -CONSTANT_String_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_String_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_String_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        shortget_string_index() 
        voidset_string_index(short t) 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_String_info

          -
          public CONSTANT_String_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_string_index

          -
          public short get_string_index()
          -
        • -
        - - - -
          -
        • -

          set_string_index

          -
          public void set_string_index(short t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html deleted file mode 100755 index 40b483ad..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -CONSTANT_Utf8_info - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CONSTANT_Utf8_info

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CONSTANT_Utf8_info
      -extends CPInfo
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CONSTANT_Utf8_info() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        byte[]get_bytes() 
        voidset_bytes(byte[] t) 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CONSTANT_Utf8_info

          -
          public CONSTANT_Utf8_info()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_bytes

          -
          public byte[] get_bytes()
          -
        • -
        - - - -
          -
        • -

          set_bytes

          -
          public void set_bytes(byte[] t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          -
          Specified by:
          -
          codegen in class CPInfo
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Specified by:
          -
          toString in class CPInfo
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CPInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CPInfo.html deleted file mode 100755 index 38f596f6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CPInfo.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - -CPInfo - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CPInfo

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.CPInfo
      • -
      -
    • -
    - -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CPInfo() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        abstract voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        byteget_tag() 
        voidset_tag(byte t) 
        abstract java.lang.StringtoString() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CPInfo

          -
          public CPInfo()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_tag

          -
          public byte get_tag()
          -
        • -
        - - - -
          -
        • -

          set_tag

          -
          public void set_tag(byte t)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public abstract void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -                      throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public abstract java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/ClassFile.html b/doc/LambdaJavadoc/mycompiler/mybytecode/ClassFile.html deleted file mode 100755 index 8df9f608..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/ClassFile.html +++ /dev/null @@ -1,926 +0,0 @@ - - - - - -ClassFile - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class ClassFile

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.ClassFile
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ClassFile
      -extends java.lang.Object
      -
      Darstellung einer Klassendatei aus Sicht fuer die JVM. - Generiert bei der Bytegenerierung Header, Constantenpool, usw.
      -
      Author:
      -
      hama, scju
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          hamaAload0

          -
          public boolean hamaAload0
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ClassFile

          -
          public ClassFile()
          -
          Default Konstruktor
          -
        • -
        - - - -
          -
        • -

          ClassFile

          -
          public ClassFile(Interface ic,
          -         SourceFile sf)
          -
          Konstruktor, um Klasseninfos direkt aus dem Interface zu laden
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          add_CONSTANT_Utf8_info

          -
          public int add_CONSTANT_Utf8_info(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          add_CONSTANT_Class_info

          -
          public int add_CONSTANT_Class_info(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          add_CONSTANT_NameAndType_info

          -
          public int add_CONSTANT_NameAndType_info(java.lang.String name,
          -                                java.lang.String param_type)
          -
        • -
        - - - -
          -
        • -

          add_CONSTANT_Integer_info

          -
          public int add_CONSTANT_Integer_info(int i)
          -
        • -
        - - - -
          -
        • -

          add_CONSTANT_String_info

          -
          public int add_CONSTANT_String_info(java.lang.String s)
          -
        • -
        - - - -
          -
        • -

          add_class

          -
          public void add_class(java.lang.String name,
          -             java.lang.String pkgName,
          -             java.lang.String super_name,
          -             short acc_flag)
          -
          Fuegt Informationen ueber eine neue Klasse ein. Gleichzeitig - wird ein Default-Konstruktor angelegt.
          -
        • -
        - - - -
          -
        • -

          add_interface

          -
          public void add_interface(java.lang.String name,
          -                 java.lang.String pkgName,
          -                 java.lang.String super_name,
          -                 short acc_flag)
          -
          Fuegt Informationen ueber ein neues Interface ein.
          -
        • -
        - - - -
          -
        • -

          addSuperInterfaces

          -
          public void addSuperInterfaces(de.dhbwstuttgart.typeinference.Menge<UsedId> superif)
          -
          Fuegt die erweiterten (bei Interfaces) implementierten (bei Klassen) - Interfaces ein.
          -
        • -
        - - - -
          -
        • -

          addGenerics

          -
          public void addGenerics(de.dhbwstuttgart.typeinference.Menge<Type> para,
          -               UsedId superClass,
          -               de.dhbwstuttgart.typeinference.Menge<UsedId> superIf)
          -
          Fuegt ggf. Generics in den Klassendefintion selbst - hinzu.
          -
        • -
        - - - -
          -
        • -

          add_method

          -
          public void add_method(java.lang.String name,
          -              java.lang.String param_type,
          -              ParameterList param,
          -              Type type,
          -              Block block,
          -              short acc_flag,
          -              de.dhbwstuttgart.typeinference.Menge paralist,
          -              boolean isAbstract)
          -                throws JVMCodeException
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          add_method_ref

          -
          public int add_method_ref(java.lang.String cl_name,
          -                 java.lang.String name,
          -                 java.lang.String param_type)
          -
        • -
        - - - -
          -
        • -

          getConstantValueID

          -
          public short getConstantValueID()
          -
          Gibt den NameIndex auf die UTF-8 Konstante "ConstantValue" zurueck, - der fuer die Definition von Konstanten benoetigt wird.
          -
        • -
        - - - -
          -
        • -

          getSignatureID

          -
          public short getSignatureID()
          -
          Gibt den NameIndex auf die UTF-8 Konstante "Signature" zurueck, - der fuer die Definition von Konstanten benoetigt wird.
          -
        • -
        - - - -
          -
        • -

          add_field

          -
          public void add_field(java.lang.String name,
          -             java.lang.String type,
          -             short acc_flag,
          -             Attribute attr)
          -
        • -
        - - - -
          -
        • -

          add_field_ref

          -
          public int add_field_ref(java.lang.String name,
          -                java.lang.String cl_name,
          -                java.lang.String type)
          -                  throws JVMCodeException
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          set_constant_pool

          -
          public void set_constant_pool(de.dhbwstuttgart.typeinference.Menge<CPInfo> t)
          -
        • -
        - - - -
          -
        • -

          set_access_flags

          -
          public void set_access_flags(short t)
          -
        • -
        - - - -
          -
        • -

          set_this_class

          -
          public void set_this_class(short t)
          -
        • -
        - - - -
          -
        • -

          set_super_class

          -
          public void set_super_class(short t)
          -
        • -
        - - - -
          -
        • -

          set_fields

          -
          public void set_fields(de.dhbwstuttgart.typeinference.Menge<FieldInfo> t)
          -
        • -
        - - - -
          -
        • -

          set_methods

          -
          public void set_methods(de.dhbwstuttgart.typeinference.Menge<MethodInfo> t)
          -
        • -
        - - - -
          -
        • -

          set_attributes

          -
          public void set_attributes(de.dhbwstuttgart.typeinference.Menge<Attribute> t)
          -
        • -
        - - - -
          -
        • -

          set_constructor_founded

          -
          public void set_constructor_founded(boolean t)
          -
        • -
        - - - -
          -
        • -

          add_classblock_Element

          -
          public void add_classblock_Element(Assign a)
          -
        • -
        - - - -
          -
        • -

          get_constant_pool

          -
          public de.dhbwstuttgart.typeinference.Menge<CPInfo> get_constant_pool()
          -
        • -
        - - - -
          -
        • -

          get_access_flags

          -
          public short get_access_flags()
          -
        • -
        - - - -
          -
        • -

          get_this_class

          -
          public short get_this_class()
          -
        • -
        - - - -
          -
        • -

          get_super_class

          -
          public short get_super_class()
          -
        • -
        - - - -
          -
        • -

          get_fields

          -
          public de.dhbwstuttgart.typeinference.Menge<FieldInfo> get_fields()
          -
        • -
        - - - -
          -
        • -

          get_methods

          -
          public de.dhbwstuttgart.typeinference.Menge<MethodInfo> get_methods()
          -
        • -
        - - - -
          -
        • -

          get_attributes

          -
          public de.dhbwstuttgart.typeinference.Menge<Attribute> get_attributes()
          -
        • -
        - - - -
          -
        • -

          get_key_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<Key> get_key_Menge()
          -
        • -
        - - - -
          -
        • -

          get_constructor_founded

          -
          public boolean get_constructor_founded()
          -
        • -
        - - - -
          -
        • -

          get_constant_pool_element

          -
          public short get_constant_pool_element(byte b,
          -                              java.lang.String id)
          -
        • -
        - - - -
          -
        • -

          get_class_block

          -
          public de.dhbwstuttgart.typeinference.Menge<Assign> get_class_block()
          -
        • -
        - - - - - - - -
          -
        • -

          writeInt

          -
          public void writeInt(java.io.FileOutputStream f,
          -            int i)
          -              throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          writeShort

          -
          public void writeShort(java.io.FileOutputStream f,
          -              short i)
          -                throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          writeByte

          -
          public void writeByte(java.io.FileOutputStream f,
          -             byte i)
          -               throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        - - - -
          -
        • -

          writeByteArray

          -
          public void writeByteArray(java.io.FileOutputStream f,
          -                  byte[] b)
          -                    throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/CodeAttribute.html b/doc/LambdaJavadoc/mycompiler/mybytecode/CodeAttribute.html deleted file mode 100755 index 8d477a89..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/CodeAttribute.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - -CodeAttribute - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class CodeAttribute

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CodeAttribute
      -extends Attribute
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CodeAttribute

          -
          public CodeAttribute(java.lang.String class_name,
          -             short acc_flags)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_code_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Byte> get_code_Menge()
          -
        • -
        - - - -
          -
        • -

          get_exception_table_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<ExceptionTable> get_exception_table_Menge()
          -
        • -
        - - - -
          -
        • -

          get_attributes_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<Attribute> get_attributes_Menge()
          -
        • -
        - - - -
          -
        • -

          get_local_Menge

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.String> get_local_Menge()
          -
        • -
        - - - -
          -
        • -

          get_code_length

          -
          public int get_code_length()
          -
        • -
        - - - -
          -
        • -

          add_local

          -
          public void add_local(java.lang.String s,
          -             Type t)
          -
        • -
        - - - -
          -
        • -

          add_code

          -
          public void add_code(java.lang.Byte b)
          -
        • -
        - - - -
          -
        • -

          set_code

          -
          public void set_code(java.lang.Byte b,
          -            int i)
          -
        • -
        - - - -
          -
        • -

          add_code_int

          -
          public void add_code_int(int i)
          -
        • -
        - - - -
          -
        • -

          add_code_short

          -
          public void add_code_short(int s)
          -
        • -
        - - - -
          -
        • -

          set_code_short

          -
          public void set_code_short(int s,
          -                  int i)
          -
        • -
        - - - -
          -
        • -

          add_code_byte

          -
          public void add_code_byte(int b)
          -
        • -
        - - - -
          -
        • -

          add_code_byte_array

          -
          public void add_code_byte_array(byte[] b)
          -
        • -
        - - - -
          -
        • -

          get_indexOf_Var

          -
          public int get_indexOf_Var(java.lang.String name)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          set_exception_table_Menge

          -
          public void set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge<ExceptionTable> t)
          -
        • -
        - - - -
          -
        • -

          set_attributes_Menge

          -
          public void set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge<Attribute> t)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/ExceptionTable.html b/doc/LambdaJavadoc/mycompiler/mybytecode/ExceptionTable.html deleted file mode 100755 index 2ed4976d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/ExceptionTable.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - -ExceptionTable - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class ExceptionTable

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.ExceptionTable
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ExceptionTable
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ExceptionTable() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ExceptionTable

          -
          public ExceptionTable()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -             throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/FieldInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/FieldInfo.html deleted file mode 100755 index 7322b365..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/FieldInfo.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - -FieldInfo - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class FieldInfo

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.FieldInfo
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class FieldInfo
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FieldInfo

          -
          public FieldInfo()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
        • -
        - - - -
          -
        • -

          get_Type

          -
          public java.lang.String get_Type()
          -
        • -
        - - - -
          -
        • -

          get_Class_Name

          -
          public java.lang.String get_Class_Name()
          -
        • -
        - - - -
          -
        • -

          get_access_flags

          -
          public short get_access_flags()
          -
        • -
        - - - -
          -
        • -

          get_name_index

          -
          public short get_name_index()
          -
        • -
        - - - -
          -
        • -

          get_descriptor_index

          -
          public short get_descriptor_index()
          -
        • -
        - - - -
          -
        • -

          get_attributes

          -
          public de.dhbwstuttgart.typeinference.Menge<Attribute> get_attributes()
          -
        • -
        - - - -
          -
        • -

          set_Name

          -
          public void set_Name(java.lang.String t)
          -
        • -
        - - - -
          -
        • -

          set_Type

          -
          public void set_Type(java.lang.String t)
          -
        • -
        - - - -
          -
        • -

          set_Class_Name

          -
          public void set_Class_Name(java.lang.String t)
          -
        • -
        - - - -
          -
        • -

          set_access_flags

          -
          public void set_access_flags(short t)
          -
        • -
        - - - -
          -
        • -

          set_name_index

          -
          public void set_name_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_descriptor_index

          -
          public void set_descriptor_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_attributes

          -
          public void set_attributes(de.dhbwstuttgart.typeinference.Menge<Attribute> t)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/JVMCode.html b/doc/LambdaJavadoc/mycompiler/mybytecode/JVMCode.html deleted file mode 100755 index fb4a8f1d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/JVMCode.html +++ /dev/null @@ -1,3576 +0,0 @@ - - - - - -JVMCode - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class JVMCode

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.JVMCode
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class JVMCode
      -extends java.lang.Object
      -
      Enthaelt die Befehle fuer die Umsetzung in JVM-Code und - Konstantendefinitionen.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static java.lang.Byteaaload 
        static java.lang.Byteaastore 
        static java.lang.Byteaconst_null 
        static java.lang.Byteaload 
        static java.lang.Byteaload_0 
        static java.lang.Byteaload_1 
        static java.lang.Byteaload_2 
        static java.lang.Byteaload_3 
        static java.lang.Byteanewarray 
        static java.lang.Byteareturn 
        static java.lang.Bytearraylength 
        static java.lang.Byteastore 
        static java.lang.Byteastore_0 
        static java.lang.Byteastore_1 
        static java.lang.Byteastore_2 
        static java.lang.Byteastore_3 
        static java.lang.Byteathrow 
        static java.lang.Bytebaload 
        static java.lang.Bytebastore 
        static java.lang.Bytebipush 
        static java.lang.Bytebreakpoint 
        static java.lang.Bytecaload 
        static java.lang.Bytecastore 
        static java.lang.Bytecheckcast 
        static byteCONSTANT_Class 
        static byteCONSTANT_Double 
        static byteCONSTANT_Fieldref 
        static byteCONSTANT_Float 
        static byteCONSTANT_Integer 
        static byteCONSTANT_InterfaceMethodref 
        static byteCONSTANT_Long 
        static byteCONSTANT_Methodref 
        static byteCONSTANT_NameAndType 
        static byteCONSTANT_String 
        static byteCONSTANT_Utf8 
        static java.lang.Byted2f 
        static java.lang.Byted2i 
        static java.lang.Byted2l 
        static java.lang.Bytedadd 
        static java.lang.Bytedaload 
        static java.lang.Bytedastore 
        static java.lang.Bytedcmpg 
        static java.lang.Bytedcmpl 
        static java.lang.Bytedconst_0 
        static java.lang.Bytedconst_1 
        static java.lang.Byteddiv 
        static java.lang.Bytedload 
        static java.lang.Bytedload_0 
        static java.lang.Bytedload_1 
        static java.lang.Bytedload_2 
        static java.lang.Bytedload_3 
        static java.lang.Bytedmul 
        static java.lang.Bytedneg 
        static java.lang.Bytedrem 
        static java.lang.Bytedreturn 
        static java.lang.Bytedstore 
        static java.lang.Bytedstore_0 
        static java.lang.Bytedstore_1 
        static java.lang.Bytedstore_2 
        static java.lang.Bytedstore_3 
        static java.lang.Bytedsub 
        static java.lang.Bytedup 
        static java.lang.Bytedup_x1 
        static java.lang.Bytedup_x2 
        static java.lang.Bytedup2 
        static java.lang.Bytedup2_x1 
        static java.lang.Bytedup2_x2 
        static java.lang.Bytef2d 
        static java.lang.Bytef2i 
        static java.lang.Bytef2l 
        static java.lang.Bytefadd 
        static java.lang.Bytefaload 
        static java.lang.Bytefastore 
        static java.lang.Bytefcmpg 
        static java.lang.Bytefcmpl 
        static java.lang.Bytefconst_0 
        static java.lang.Bytefconst_1 
        static java.lang.Bytefconst_2 
        static java.lang.Bytefdiv 
        static java.lang.Bytefload 
        static java.lang.Bytefload_0 
        static java.lang.Bytefload_1 
        static java.lang.Bytefload_2 
        static java.lang.Bytefload_3 
        static java.lang.Bytefmul 
        static java.lang.Bytefneg 
        static java.lang.Bytefrem 
        static java.lang.Bytefreturn 
        static java.lang.Bytefstore 
        static java.lang.Bytefstore_0 
        static java.lang.Bytefstore_1 
        static java.lang.Bytefstore_2 
        static java.lang.Bytefstore_3 
        static java.lang.Bytefsub 
        static java.lang.Bytegetfield 
        static java.lang.Bytegetstatic 
        static java.lang.Bytegoto_ 
        static java.lang.Bytegoto_w 
        static java.lang.Bytei2b 
        static java.lang.Bytei2c 
        static java.lang.Bytei2d 
        static java.lang.Bytei2f 
        static java.lang.Bytei2l 
        static java.lang.Bytei2s 
        static java.lang.Byteiadd 
        static java.lang.Byteiaload 
        static java.lang.Byteiand 
        static java.lang.Byteiastore 
        static java.lang.Byteiconst_0 
        static java.lang.Byteiconst_1 
        static java.lang.Byteiconst_2 
        static java.lang.Byteiconst_3 
        static java.lang.Byteiconst_4 
        static java.lang.Byteiconst_5 
        static java.lang.Byteiconst_m1 
        static java.lang.Byteidiv 
        static java.lang.Byteif_acmpeq 
        static java.lang.Byteif_acmpne 
        static java.lang.Byteif_icmpeq 
        static java.lang.Byteif_icmpge 
        static java.lang.Byteif_icmpgt 
        static java.lang.Byteif_icmple 
        static java.lang.Byteif_icmplt 
        static java.lang.Byteif_icmpne 
        static java.lang.Byteifeq 
        static java.lang.Byteifge 
        static java.lang.Byteifgt 
        static java.lang.Byteifle 
        static java.lang.Byteiflt 
        static java.lang.Byteifne 
        static java.lang.Byteifnonnull 
        static java.lang.Byteifnull 
        static java.lang.Byteiinc 
        static java.lang.Byteiload 
        static java.lang.Byteiload_0 
        static java.lang.Byteiload_1 
        static java.lang.Byteiload_2 
        static java.lang.Byteiload_3 
        static java.lang.Byteimpdep1 
        static java.lang.Byteimpdep2 
        static java.lang.Byteimul 
        static java.lang.Byteineg 
        static java.lang.Byteinstanceof_ 
        static java.lang.Byteinvokeinterface 
        static java.lang.Byteinvokespecial 
        static java.lang.Byteinvokestatic 
        static java.lang.Byteinvokevirtual 
        static java.lang.Byteior 
        static java.lang.Byteirem 
        static java.lang.Byteireturn 
        static java.lang.Byteishl 
        static java.lang.Byteishr 
        static java.lang.Byteistore 
        static java.lang.Byteistore_0 
        static java.lang.Byteistore_1 
        static java.lang.Byteistore_2 
        static java.lang.Byteistore_3 
        static java.lang.Byteisub 
        static java.lang.Byteiushr 
        static java.lang.Byteixor 
        static java.lang.Bytejsr 
        static java.lang.Bytejsr_w 
        static java.lang.Bytel2d 
        static java.lang.Bytel2f 
        static java.lang.Bytel2i 
        static java.lang.Byteladd 
        static java.lang.Bytelaload 
        static java.lang.Byteland 
        static java.lang.Bytelastore 
        static java.lang.Bytelcmp 
        static java.lang.Bytelconst_0 
        static java.lang.Bytelconst_1 
        static java.lang.Byteldc 
        static java.lang.Byteldc_w 
        static java.lang.Byteldc2_w 
        static java.lang.Byteldiv 
        static java.lang.Bytelload 
        static java.lang.Bytelload_0 
        static java.lang.Bytelload_1 
        static java.lang.Bytelload_2 
        static java.lang.Bytelload_3 
        static java.lang.Bytelmul 
        static java.lang.Bytelneg 
        static java.lang.Bytelookupswitch 
        static java.lang.Bytelor 
        static java.lang.Bytelrem 
        static java.lang.Bytelreturn 
        static java.lang.Bytelshl 
        static java.lang.Bytelshr 
        static java.lang.Bytelstore 
        static java.lang.Bytelstore_0 
        static java.lang.Bytelstore_1 
        static java.lang.Bytelstore_2 
        static java.lang.Bytelstore_3 
        static java.lang.Bytelsub 
        static java.lang.Bytelushr 
        static java.lang.Bytelxor 
        static java.lang.Bytemonitorenter 
        static java.lang.Bytemonitorexit 
        static java.lang.Bytemultianewarray 
        static java.lang.Bytenew_ 
        static java.lang.Bytenewarray 
        static java.lang.Bytenop 
        static java.lang.Bytepop 
        static java.lang.Bytepop2 
        static java.lang.Byteputfield 
        static java.lang.Byteputstatic 
        static java.lang.Byteret 
        static java.lang.Bytereturn_ 
        static java.lang.Bytesaload 
        static java.lang.Bytesastore 
        static java.lang.Bytesipush 
        static java.lang.Byteswap 
        static java.lang.Bytetableswitch 
        static java.lang.Bytewide 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        JVMCode() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static intbytes_to_int(java.lang.Byte b) 
        static intbytes_to_int(java.lang.Byte b1, - java.lang.Byte b0) 
        static intbytes_to_int(java.lang.Byte b3, - java.lang.Byte b2, - java.lang.Byte b1, - java.lang.Byte b0) 
        static java.lang.Stringget_codegen_Type(java.lang.String type, - de.dhbwstuttgart.typeinference.Menge paralist) -
        Liefert zu dem angegebenen Typ die entsprechende Repraesentation - im Bytecode zurueck.
        -
        static voidget_Command(de.dhbwstuttgart.typeinference.Menge<java.lang.Byte> b) -
        Gibt die Liste der Bytecode-Commands auf dem Bildschirm aus (Logger Bytecode).
        -
        static intget_nType(java.lang.String type) 
        static java.lang.Byteif_ncmpeq(java.lang.String s) 
        static java.lang.Byteif_ncmpne(java.lang.String s) 
        static java.lang.Byten2n(java.lang.String s1, - java.lang.String s2) 
        static java.lang.Bytenadd(java.lang.String s) 
        static java.lang.Bytenaload(java.lang.String s) 
        static java.lang.Bytenand(java.lang.String s) 
        static java.lang.Bytenastore(java.lang.String s) 
        static java.lang.Bytencmpg(java.lang.String s) 
        static java.lang.Bytencmpl(java.lang.String s) 
        static java.lang.Bytenconst_n(java.lang.String s1, - int n2) 
        static java.lang.Bytendiv(java.lang.String s) 
        static java.lang.Bytenload_n(java.lang.String s1, - int n2) 
        static java.lang.Bytenload(java.lang.String s) 
        static java.lang.Bytenmul(java.lang.String s) 
        static java.lang.Bytenneg(java.lang.String s) 
        static java.lang.Bytenor(java.lang.String s) 
        static java.lang.Bytenrem(java.lang.String s) 
        static java.lang.Bytenreturn(java.lang.String s) 
        static java.lang.Bytenshl(java.lang.String s) 
        static java.lang.Bytenshr(java.lang.String s) 
        static java.lang.Bytenstore_n(java.lang.String s1, - int n2) 
        static java.lang.Bytenstore(java.lang.String s) 
        static java.lang.Bytensub(java.lang.String s) 
        static java.lang.Bytenushr(java.lang.String s) 
        static java.lang.Bytenxor(java.lang.String s) 
        static byte[]shortToBytes(short i) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          CONSTANT_Utf8

          -
          public static byte CONSTANT_Utf8
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Integer

          -
          public static byte CONSTANT_Integer
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Float

          -
          public static byte CONSTANT_Float
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Long

          -
          public static byte CONSTANT_Long
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Double

          -
          public static byte CONSTANT_Double
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Class

          -
          public static byte CONSTANT_Class
          -
        • -
        - - - -
          -
        • -

          CONSTANT_String

          -
          public static byte CONSTANT_String
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Fieldref

          -
          public static byte CONSTANT_Fieldref
          -
        • -
        - - - -
          -
        • -

          CONSTANT_Methodref

          -
          public static byte CONSTANT_Methodref
          -
        • -
        - - - -
          -
        • -

          CONSTANT_InterfaceMethodref

          -
          public static byte CONSTANT_InterfaceMethodref
          -
        • -
        - - - -
          -
        • -

          CONSTANT_NameAndType

          -
          public static byte CONSTANT_NameAndType
          -
        • -
        - - - -
          -
        • -

          nop

          -
          public static java.lang.Byte nop
          -
        • -
        - - - -
          -
        • -

          aconst_null

          -
          public static java.lang.Byte aconst_null
          -
        • -
        - - - -
          -
        • -

          iconst_m1

          -
          public static java.lang.Byte iconst_m1
          -
        • -
        - - - -
          -
        • -

          iconst_0

          -
          public static java.lang.Byte iconst_0
          -
        • -
        - - - -
          -
        • -

          iconst_1

          -
          public static java.lang.Byte iconst_1
          -
        • -
        - - - -
          -
        • -

          iconst_2

          -
          public static java.lang.Byte iconst_2
          -
        • -
        - - - -
          -
        • -

          iconst_3

          -
          public static java.lang.Byte iconst_3
          -
        • -
        - - - -
          -
        • -

          iconst_4

          -
          public static java.lang.Byte iconst_4
          -
        • -
        - - - -
          -
        • -

          iconst_5

          -
          public static java.lang.Byte iconst_5
          -
        • -
        - - - -
          -
        • -

          lconst_0

          -
          public static java.lang.Byte lconst_0
          -
        • -
        - - - -
          -
        • -

          lconst_1

          -
          public static java.lang.Byte lconst_1
          -
        • -
        - - - -
          -
        • -

          fconst_0

          -
          public static java.lang.Byte fconst_0
          -
        • -
        - - - -
          -
        • -

          fconst_1

          -
          public static java.lang.Byte fconst_1
          -
        • -
        - - - -
          -
        • -

          fconst_2

          -
          public static java.lang.Byte fconst_2
          -
        • -
        - - - -
          -
        • -

          dconst_0

          -
          public static java.lang.Byte dconst_0
          -
        • -
        - - - -
          -
        • -

          dconst_1

          -
          public static java.lang.Byte dconst_1
          -
        • -
        - - - -
          -
        • -

          bipush

          -
          public static java.lang.Byte bipush
          -
        • -
        - - - -
          -
        • -

          sipush

          -
          public static java.lang.Byte sipush
          -
        • -
        - - - -
          -
        • -

          ldc

          -
          public static java.lang.Byte ldc
          -
        • -
        - - - -
          -
        • -

          ldc_w

          -
          public static java.lang.Byte ldc_w
          -
        • -
        - - - -
          -
        • -

          ldc2_w

          -
          public static java.lang.Byte ldc2_w
          -
        • -
        - - - -
          -
        • -

          iload

          -
          public static java.lang.Byte iload
          -
        • -
        - - - -
          -
        • -

          lload

          -
          public static java.lang.Byte lload
          -
        • -
        - - - -
          -
        • -

          fload

          -
          public static java.lang.Byte fload
          -
        • -
        - - - -
          -
        • -

          dload

          -
          public static java.lang.Byte dload
          -
        • -
        - - - -
          -
        • -

          aload

          -
          public static java.lang.Byte aload
          -
        • -
        - - - -
          -
        • -

          iload_0

          -
          public static java.lang.Byte iload_0
          -
        • -
        - - - -
          -
        • -

          iload_1

          -
          public static java.lang.Byte iload_1
          -
        • -
        - - - -
          -
        • -

          iload_2

          -
          public static java.lang.Byte iload_2
          -
        • -
        - - - -
          -
        • -

          iload_3

          -
          public static java.lang.Byte iload_3
          -
        • -
        - - - -
          -
        • -

          lload_0

          -
          public static java.lang.Byte lload_0
          -
        • -
        - - - -
          -
        • -

          lload_1

          -
          public static java.lang.Byte lload_1
          -
        • -
        - - - -
          -
        • -

          lload_2

          -
          public static java.lang.Byte lload_2
          -
        • -
        - - - -
          -
        • -

          lload_3

          -
          public static java.lang.Byte lload_3
          -
        • -
        - - - -
          -
        • -

          fload_0

          -
          public static java.lang.Byte fload_0
          -
        • -
        - - - -
          -
        • -

          fload_1

          -
          public static java.lang.Byte fload_1
          -
        • -
        - - - -
          -
        • -

          fload_2

          -
          public static java.lang.Byte fload_2
          -
        • -
        - - - -
          -
        • -

          fload_3

          -
          public static java.lang.Byte fload_3
          -
        • -
        - - - -
          -
        • -

          dload_0

          -
          public static java.lang.Byte dload_0
          -
        • -
        - - - -
          -
        • -

          dload_1

          -
          public static java.lang.Byte dload_1
          -
        • -
        - - - -
          -
        • -

          dload_2

          -
          public static java.lang.Byte dload_2
          -
        • -
        - - - -
          -
        • -

          dload_3

          -
          public static java.lang.Byte dload_3
          -
        • -
        - - - -
          -
        • -

          aload_0

          -
          public static java.lang.Byte aload_0
          -
        • -
        - - - -
          -
        • -

          aload_1

          -
          public static java.lang.Byte aload_1
          -
        • -
        - - - -
          -
        • -

          aload_2

          -
          public static java.lang.Byte aload_2
          -
        • -
        - - - -
          -
        • -

          aload_3

          -
          public static java.lang.Byte aload_3
          -
        • -
        - - - -
          -
        • -

          iaload

          -
          public static java.lang.Byte iaload
          -
        • -
        - - - -
          -
        • -

          laload

          -
          public static java.lang.Byte laload
          -
        • -
        - - - -
          -
        • -

          faload

          -
          public static java.lang.Byte faload
          -
        • -
        - - - -
          -
        • -

          daload

          -
          public static java.lang.Byte daload
          -
        • -
        - - - -
          -
        • -

          aaload

          -
          public static java.lang.Byte aaload
          -
        • -
        - - - -
          -
        • -

          baload

          -
          public static java.lang.Byte baload
          -
        • -
        - - - -
          -
        • -

          caload

          -
          public static java.lang.Byte caload
          -
        • -
        - - - -
          -
        • -

          saload

          -
          public static java.lang.Byte saload
          -
        • -
        - - - -
          -
        • -

          istore

          -
          public static java.lang.Byte istore
          -
        • -
        - - - -
          -
        • -

          lstore

          -
          public static java.lang.Byte lstore
          -
        • -
        - - - -
          -
        • -

          fstore

          -
          public static java.lang.Byte fstore
          -
        • -
        - - - -
          -
        • -

          dstore

          -
          public static java.lang.Byte dstore
          -
        • -
        - - - -
          -
        • -

          astore

          -
          public static java.lang.Byte astore
          -
        • -
        - - - -
          -
        • -

          istore_0

          -
          public static java.lang.Byte istore_0
          -
        • -
        - - - -
          -
        • -

          istore_1

          -
          public static java.lang.Byte istore_1
          -
        • -
        - - - -
          -
        • -

          istore_2

          -
          public static java.lang.Byte istore_2
          -
        • -
        - - - -
          -
        • -

          istore_3

          -
          public static java.lang.Byte istore_3
          -
        • -
        - - - -
          -
        • -

          lstore_0

          -
          public static java.lang.Byte lstore_0
          -
        • -
        - - - -
          -
        • -

          lstore_1

          -
          public static java.lang.Byte lstore_1
          -
        • -
        - - - -
          -
        • -

          lstore_2

          -
          public static java.lang.Byte lstore_2
          -
        • -
        - - - -
          -
        • -

          lstore_3

          -
          public static java.lang.Byte lstore_3
          -
        • -
        - - - -
          -
        • -

          fstore_0

          -
          public static java.lang.Byte fstore_0
          -
        • -
        - - - -
          -
        • -

          fstore_1

          -
          public static java.lang.Byte fstore_1
          -
        • -
        - - - -
          -
        • -

          fstore_2

          -
          public static java.lang.Byte fstore_2
          -
        • -
        - - - -
          -
        • -

          fstore_3

          -
          public static java.lang.Byte fstore_3
          -
        • -
        - - - -
          -
        • -

          dstore_0

          -
          public static java.lang.Byte dstore_0
          -
        • -
        - - - -
          -
        • -

          dstore_1

          -
          public static java.lang.Byte dstore_1
          -
        • -
        - - - -
          -
        • -

          dstore_2

          -
          public static java.lang.Byte dstore_2
          -
        • -
        - - - -
          -
        • -

          dstore_3

          -
          public static java.lang.Byte dstore_3
          -
        • -
        - - - -
          -
        • -

          astore_0

          -
          public static java.lang.Byte astore_0
          -
        • -
        - - - -
          -
        • -

          astore_1

          -
          public static java.lang.Byte astore_1
          -
        • -
        - - - -
          -
        • -

          astore_2

          -
          public static java.lang.Byte astore_2
          -
        • -
        - - - -
          -
        • -

          astore_3

          -
          public static java.lang.Byte astore_3
          -
        • -
        - - - -
          -
        • -

          iastore

          -
          public static java.lang.Byte iastore
          -
        • -
        - - - -
          -
        • -

          lastore

          -
          public static java.lang.Byte lastore
          -
        • -
        - - - -
          -
        • -

          fastore

          -
          public static java.lang.Byte fastore
          -
        • -
        - - - -
          -
        • -

          dastore

          -
          public static java.lang.Byte dastore
          -
        • -
        - - - -
          -
        • -

          aastore

          -
          public static java.lang.Byte aastore
          -
        • -
        - - - -
          -
        • -

          bastore

          -
          public static java.lang.Byte bastore
          -
        • -
        - - - -
          -
        • -

          castore

          -
          public static java.lang.Byte castore
          -
        • -
        - - - -
          -
        • -

          sastore

          -
          public static java.lang.Byte sastore
          -
        • -
        - - - -
          -
        • -

          pop

          -
          public static java.lang.Byte pop
          -
        • -
        - - - -
          -
        • -

          pop2

          -
          public static java.lang.Byte pop2
          -
        • -
        - - - -
          -
        • -

          dup

          -
          public static java.lang.Byte dup
          -
        • -
        - - - -
          -
        • -

          dup_x1

          -
          public static java.lang.Byte dup_x1
          -
        • -
        - - - -
          -
        • -

          dup_x2

          -
          public static java.lang.Byte dup_x2
          -
        • -
        - - - -
          -
        • -

          dup2

          -
          public static java.lang.Byte dup2
          -
        • -
        - - - -
          -
        • -

          dup2_x1

          -
          public static java.lang.Byte dup2_x1
          -
        • -
        - - - -
          -
        • -

          dup2_x2

          -
          public static java.lang.Byte dup2_x2
          -
        • -
        - - - -
          -
        • -

          swap

          -
          public static java.lang.Byte swap
          -
        • -
        - - - -
          -
        • -

          iadd

          -
          public static java.lang.Byte iadd
          -
        • -
        - - - -
          -
        • -

          ladd

          -
          public static java.lang.Byte ladd
          -
        • -
        - - - -
          -
        • -

          fadd

          -
          public static java.lang.Byte fadd
          -
        • -
        - - - -
          -
        • -

          dadd

          -
          public static java.lang.Byte dadd
          -
        • -
        - - - -
          -
        • -

          isub

          -
          public static java.lang.Byte isub
          -
        • -
        - - - -
          -
        • -

          lsub

          -
          public static java.lang.Byte lsub
          -
        • -
        - - - -
          -
        • -

          fsub

          -
          public static java.lang.Byte fsub
          -
        • -
        - - - -
          -
        • -

          dsub

          -
          public static java.lang.Byte dsub
          -
        • -
        - - - -
          -
        • -

          imul

          -
          public static java.lang.Byte imul
          -
        • -
        - - - -
          -
        • -

          lmul

          -
          public static java.lang.Byte lmul
          -
        • -
        - - - -
          -
        • -

          fmul

          -
          public static java.lang.Byte fmul
          -
        • -
        - - - -
          -
        • -

          dmul

          -
          public static java.lang.Byte dmul
          -
        • -
        - - - -
          -
        • -

          idiv

          -
          public static java.lang.Byte idiv
          -
        • -
        - - - -
          -
        • -

          ldiv

          -
          public static java.lang.Byte ldiv
          -
        • -
        - - - -
          -
        • -

          fdiv

          -
          public static java.lang.Byte fdiv
          -
        • -
        - - - -
          -
        • -

          ddiv

          -
          public static java.lang.Byte ddiv
          -
        • -
        - - - -
          -
        • -

          irem

          -
          public static java.lang.Byte irem
          -
        • -
        - - - -
          -
        • -

          lrem

          -
          public static java.lang.Byte lrem
          -
        • -
        - - - -
          -
        • -

          frem

          -
          public static java.lang.Byte frem
          -
        • -
        - - - -
          -
        • -

          drem

          -
          public static java.lang.Byte drem
          -
        • -
        - - - -
          -
        • -

          ineg

          -
          public static java.lang.Byte ineg
          -
        • -
        - - - -
          -
        • -

          lneg

          -
          public static java.lang.Byte lneg
          -
        • -
        - - - -
          -
        • -

          fneg

          -
          public static java.lang.Byte fneg
          -
        • -
        - - - -
          -
        • -

          dneg

          -
          public static java.lang.Byte dneg
          -
        • -
        - - - -
          -
        • -

          ishl

          -
          public static java.lang.Byte ishl
          -
        • -
        - - - -
          -
        • -

          lshl

          -
          public static java.lang.Byte lshl
          -
        • -
        - - - -
          -
        • -

          ishr

          -
          public static java.lang.Byte ishr
          -
        • -
        - - - -
          -
        • -

          lshr

          -
          public static java.lang.Byte lshr
          -
        • -
        - - - -
          -
        • -

          iushr

          -
          public static java.lang.Byte iushr
          -
        • -
        - - - -
          -
        • -

          lushr

          -
          public static java.lang.Byte lushr
          -
        • -
        - - - -
          -
        • -

          iand

          -
          public static java.lang.Byte iand
          -
        • -
        - - - -
          -
        • -

          land

          -
          public static java.lang.Byte land
          -
        • -
        - - - -
          -
        • -

          ior

          -
          public static java.lang.Byte ior
          -
        • -
        - - - -
          -
        • -

          lor

          -
          public static java.lang.Byte lor
          -
        • -
        - - - -
          -
        • -

          ixor

          -
          public static java.lang.Byte ixor
          -
        • -
        - - - -
          -
        • -

          lxor

          -
          public static java.lang.Byte lxor
          -
        • -
        - - - -
          -
        • -

          iinc

          -
          public static java.lang.Byte iinc
          -
        • -
        - - - -
          -
        • -

          i2l

          -
          public static java.lang.Byte i2l
          -
        • -
        - - - -
          -
        • -

          i2f

          -
          public static java.lang.Byte i2f
          -
        • -
        - - - -
          -
        • -

          i2d

          -
          public static java.lang.Byte i2d
          -
        • -
        - - - -
          -
        • -

          l2i

          -
          public static java.lang.Byte l2i
          -
        • -
        - - - -
          -
        • -

          l2f

          -
          public static java.lang.Byte l2f
          -
        • -
        - - - -
          -
        • -

          l2d

          -
          public static java.lang.Byte l2d
          -
        • -
        - - - -
          -
        • -

          f2i

          -
          public static java.lang.Byte f2i
          -
        • -
        - - - -
          -
        • -

          f2l

          -
          public static java.lang.Byte f2l
          -
        • -
        - - - -
          -
        • -

          f2d

          -
          public static java.lang.Byte f2d
          -
        • -
        - - - -
          -
        • -

          d2i

          -
          public static java.lang.Byte d2i
          -
        • -
        - - - -
          -
        • -

          d2l

          -
          public static java.lang.Byte d2l
          -
        • -
        - - - -
          -
        • -

          d2f

          -
          public static java.lang.Byte d2f
          -
        • -
        - - - -
          -
        • -

          i2b

          -
          public static java.lang.Byte i2b
          -
        • -
        - - - -
          -
        • -

          i2c

          -
          public static java.lang.Byte i2c
          -
        • -
        - - - -
          -
        • -

          i2s

          -
          public static java.lang.Byte i2s
          -
        • -
        - - - -
          -
        • -

          lcmp

          -
          public static java.lang.Byte lcmp
          -
        • -
        - - - -
          -
        • -

          fcmpl

          -
          public static java.lang.Byte fcmpl
          -
        • -
        - - - -
          -
        • -

          fcmpg

          -
          public static java.lang.Byte fcmpg
          -
        • -
        - - - -
          -
        • -

          dcmpl

          -
          public static java.lang.Byte dcmpl
          -
        • -
        - - - -
          -
        • -

          dcmpg

          -
          public static java.lang.Byte dcmpg
          -
        • -
        - - - -
          -
        • -

          ifeq

          -
          public static java.lang.Byte ifeq
          -
        • -
        - - - -
          -
        • -

          ifne

          -
          public static java.lang.Byte ifne
          -
        • -
        - - - -
          -
        • -

          iflt

          -
          public static java.lang.Byte iflt
          -
        • -
        - - - -
          -
        • -

          ifge

          -
          public static java.lang.Byte ifge
          -
        • -
        - - - -
          -
        • -

          ifgt

          -
          public static java.lang.Byte ifgt
          -
        • -
        - - - -
          -
        • -

          ifle

          -
          public static java.lang.Byte ifle
          -
        • -
        - - - -
          -
        • -

          if_icmpeq

          -
          public static java.lang.Byte if_icmpeq
          -
        • -
        - - - -
          -
        • -

          if_icmpne

          -
          public static java.lang.Byte if_icmpne
          -
        • -
        - - - -
          -
        • -

          if_icmplt

          -
          public static java.lang.Byte if_icmplt
          -
        • -
        - - - -
          -
        • -

          if_icmpge

          -
          public static java.lang.Byte if_icmpge
          -
        • -
        - - - -
          -
        • -

          if_icmpgt

          -
          public static java.lang.Byte if_icmpgt
          -
        • -
        - - - -
          -
        • -

          if_icmple

          -
          public static java.lang.Byte if_icmple
          -
        • -
        - - - -
          -
        • -

          if_acmpeq

          -
          public static java.lang.Byte if_acmpeq
          -
        • -
        - - - -
          -
        • -

          if_acmpne

          -
          public static java.lang.Byte if_acmpne
          -
        • -
        - - - -
          -
        • -

          goto_

          -
          public static java.lang.Byte goto_
          -
        • -
        - - - -
          -
        • -

          jsr

          -
          public static java.lang.Byte jsr
          -
        • -
        - - - -
          -
        • -

          ret

          -
          public static java.lang.Byte ret
          -
        • -
        - - - -
          -
        • -

          tableswitch

          -
          public static java.lang.Byte tableswitch
          -
        • -
        - - - -
          -
        • -

          lookupswitch

          -
          public static java.lang.Byte lookupswitch
          -
        • -
        - - - -
          -
        • -

          ireturn

          -
          public static java.lang.Byte ireturn
          -
        • -
        - - - -
          -
        • -

          lreturn

          -
          public static java.lang.Byte lreturn
          -
        • -
        - - - -
          -
        • -

          freturn

          -
          public static java.lang.Byte freturn
          -
        • -
        - - - -
          -
        • -

          dreturn

          -
          public static java.lang.Byte dreturn
          -
        • -
        - - - -
          -
        • -

          areturn

          -
          public static java.lang.Byte areturn
          -
        • -
        - - - -
          -
        • -

          return_

          -
          public static java.lang.Byte return_
          -
        • -
        - - - -
          -
        • -

          getstatic

          -
          public static java.lang.Byte getstatic
          -
        • -
        - - - -
          -
        • -

          putstatic

          -
          public static java.lang.Byte putstatic
          -
        • -
        - - - -
          -
        • -

          getfield

          -
          public static java.lang.Byte getfield
          -
        • -
        - - - -
          -
        • -

          putfield

          -
          public static java.lang.Byte putfield
          -
        • -
        - - - -
          -
        • -

          invokevirtual

          -
          public static java.lang.Byte invokevirtual
          -
        • -
        - - - -
          -
        • -

          invokespecial

          -
          public static java.lang.Byte invokespecial
          -
        • -
        - - - -
          -
        • -

          invokestatic

          -
          public static java.lang.Byte invokestatic
          -
        • -
        - - - -
          -
        • -

          invokeinterface

          -
          public static java.lang.Byte invokeinterface
          -
        • -
        - - - -
          -
        • -

          new_

          -
          public static java.lang.Byte new_
          -
        • -
        - - - -
          -
        • -

          newarray

          -
          public static java.lang.Byte newarray
          -
        • -
        - - - -
          -
        • -

          anewarray

          -
          public static java.lang.Byte anewarray
          -
        • -
        - - - -
          -
        • -

          arraylength

          -
          public static java.lang.Byte arraylength
          -
        • -
        - - - -
          -
        • -

          athrow

          -
          public static java.lang.Byte athrow
          -
        • -
        - - - -
          -
        • -

          checkcast

          -
          public static java.lang.Byte checkcast
          -
        • -
        - - - -
          -
        • -

          instanceof_

          -
          public static java.lang.Byte instanceof_
          -
        • -
        - - - -
          -
        • -

          monitorenter

          -
          public static java.lang.Byte monitorenter
          -
        • -
        - - - -
          -
        • -

          monitorexit

          -
          public static java.lang.Byte monitorexit
          -
        • -
        - - - -
          -
        • -

          wide

          -
          public static java.lang.Byte wide
          -
        • -
        - - - -
          -
        • -

          multianewarray

          -
          public static java.lang.Byte multianewarray
          -
        • -
        - - - -
          -
        • -

          ifnull

          -
          public static java.lang.Byte ifnull
          -
        • -
        - - - -
          -
        • -

          ifnonnull

          -
          public static java.lang.Byte ifnonnull
          -
        • -
        - - - -
          -
        • -

          goto_w

          -
          public static java.lang.Byte goto_w
          -
        • -
        - - - -
          -
        • -

          jsr_w

          -
          public static java.lang.Byte jsr_w
          -
        • -
        - - - -
          -
        • -

          breakpoint

          -
          public static java.lang.Byte breakpoint
          -
        • -
        - - - -
          -
        • -

          impdep1

          -
          public static java.lang.Byte impdep1
          -
        • -
        - - - -
          -
        • -

          impdep2

          -
          public static java.lang.Byte impdep2
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JVMCode

          -
          public JVMCode()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          nload

          -
          public static java.lang.Byte nload(java.lang.String s)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          nstore

          -
          public static java.lang.Byte nstore(java.lang.String s)
          -
        • -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          -
        • -

          nreturn

          -
          public static java.lang.Byte nreturn(java.lang.String s)
          -
        • -
        - - - -
          -
        • -

          get_nType

          -
          public static int get_nType(java.lang.String type)
          -
        • -
        - - - -
          -
        • -

          get_codegen_Type

          -
          public static java.lang.String get_codegen_Type(java.lang.String type,
          -                                de.dhbwstuttgart.typeinference.Menge paralist)
          -
          Liefert zu dem angegebenen Typ die entsprechende Repraesentation - im Bytecode zurueck. Fuer integer bspw. I, fuer String Ljava/lang/String;. - Wird im Menge paralist ein Objekt mit gleichen Namen gefunden, - wird der Typ in Objekt geaendert (Typisierbare Klassen, hama).
          -
        • -
        - - - -
          -
        • -

          get_Command

          -
          public static void get_Command(de.dhbwstuttgart.typeinference.Menge<java.lang.Byte> b)
          -                        throws JVMCodeException
          -
          Gibt die Liste der Bytecode-Commands auf dem Bildschirm aus (Logger Bytecode).
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          bytes_to_int

          -
          public static int bytes_to_int(java.lang.Byte b3,
          -               java.lang.Byte b2,
          -               java.lang.Byte b1,
          -               java.lang.Byte b0)
          -
        • -
        - - - -
          -
        • -

          bytes_to_int

          -
          public static int bytes_to_int(java.lang.Byte b1,
          -               java.lang.Byte b0)
          -
        • -
        - - - -
          -
        • -

          bytes_to_int

          -
          public static int bytes_to_int(java.lang.Byte b)
          -
        • -
        - - - -
          -
        • -

          shortToBytes

          -
          public static byte[] shortToBytes(short i)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/Key.html b/doc/LambdaJavadoc/mycompiler/mybytecode/Key.html deleted file mode 100755 index 516bd752..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/Key.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -Key - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class Key

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.Key
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Key
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Key(byte t, - java.lang.String a) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) 
        booleanequals(java.lang.Object obj) 
        java.lang.Stringget_a() 
        byteget_tag() 
        voidset_a(java.lang.String s) 
        voidset_tag(byte t) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Key

          -
          public Key(byte t,
          -   java.lang.String a)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          get_tag

          -
          public byte get_tag()
          -
        • -
        - - - -
          -
        • -

          get_a

          -
          public java.lang.String get_a()
          -
        • -
        - - - -
          -
        • -

          set_tag

          -
          public void set_tag(byte t)
          -
        • -
        - - - -
          -
        • -

          set_a

          -
          public void set_a(java.lang.String s)
          -
        • -
        - - - -
          -
        • -

          codegen

          -
          public void codegen(ClassFile classfile,
          -           java.io.FileOutputStream f)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/MethodInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/MethodInfo.html deleted file mode 100755 index fdb0d51c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/MethodInfo.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - -MethodInfo - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class MethodInfo

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mybytecode.MethodInfo
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class MethodInfo
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          MethodInfo

          -
          public MethodInfo()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_access_flags

          -
          public short get_access_flags()
          -
        • -
        - - - -
          -
        • -

          get_name_index

          -
          public short get_name_index()
          -
        • -
        - - - -
          -
        • -

          get_descriptor_index

          -
          public short get_descriptor_index()
          -
        • -
        - - - -
          -
        • -

          get_attributes

          -
          public de.dhbwstuttgart.typeinference.Menge<Attribute> get_attributes()
          -
        • -
        - - - -
          -
        • -

          set_access_flags

          -
          public void set_access_flags(short t)
          -
        • -
        - - - -
          -
        • -

          set_name_index

          -
          public void set_name_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_descriptor_index

          -
          public void set_descriptor_index(short t)
          -
        • -
        - - - -
          -
        • -

          set_attributes

          -
          public void set_attributes(de.dhbwstuttgart.typeinference.Menge<Attribute> t)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/SignatureInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/SignatureInfo.html deleted file mode 100755 index d7469c9d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/SignatureInfo.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - -SignatureInfo - - - - - - - - - - - -
    -
    mycompiler.mybytecode
    -

    Class SignatureInfo

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class SignatureInfo
      -extends Attribute
      -
      Generiert die Attribute eines Fields, einer Methode oder einer Klasse/Interface - zur Integration der Signatur (Generics).
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          needsSignature

          -
          public static boolean needsSignature(Type typ)
          -
          Gibt zurueck, ob eine Signaturdefinition fuer den Typ erforderlich ist.
          -
        • -
        - - - -
          -
        • -

          needsSignature

          -
          public static boolean needsSignature(ParameterList param,
          -                     Type type)
          -
          Gibt zurueck, ob eine Signaturdefinition fuer die Methode erforderlich ist.
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Attribute.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Attribute.html deleted file mode 100755 index 4e924d29..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Attribute.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.Attribute - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.Attribute

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/AttributeInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/AttributeInfo.html deleted file mode 100755 index 20472acc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/AttributeInfo.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.AttributeInfo - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.AttributeInfo

    -
    -
    No usage of mycompiler.mybytecode.AttributeInfo
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html deleted file mode 100755 index 804e4dc9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Class_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Class_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Class_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html deleted file mode 100755 index 25bea0eb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Double_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Double_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Double_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html deleted file mode 100755 index 7ffca9d2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Fieldref_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Fieldref_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Fieldref_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html deleted file mode 100755 index 8245f411..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Float_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Float_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Float_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html deleted file mode 100755 index d90921dc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Integer_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Integer_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Integer_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html deleted file mode 100755 index 3a364fc6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html deleted file mode 100755 index ec862732..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Long_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Long_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Long_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html deleted file mode 100755 index ef804e77..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Methodref_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Methodref_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Methodref_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html deleted file mode 100755 index 3b0c78a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_NameAndType_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_NameAndType_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_NameAndType_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html deleted file mode 100755 index 827c459e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_String_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_String_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_String_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html deleted file mode 100755 index 1e251848..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Utf8_info - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CONSTANT_Utf8_info

    -
    -
    No usage of mycompiler.mybytecode.CONSTANT_Utf8_info
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CPInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CPInfo.html deleted file mode 100755 index 28a8f1c3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CPInfo.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CPInfo - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CPInfo

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ClassFile.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ClassFile.html deleted file mode 100755 index a8413abe..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ClassFile.html +++ /dev/null @@ -1,927 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.ClassFile - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.ClassFile

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CodeAttribute.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CodeAttribute.html deleted file mode 100755 index 81ee869c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/CodeAttribute.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.CodeAttribute - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.CodeAttribute

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ExceptionTable.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ExceptionTable.html deleted file mode 100755 index 8c525a31..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/ExceptionTable.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.ExceptionTable - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.ExceptionTable

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/FieldInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/FieldInfo.html deleted file mode 100755 index 0e38a1bf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/FieldInfo.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.FieldInfo - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.FieldInfo

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/JVMCode.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/JVMCode.html deleted file mode 100755 index 6b748abf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/JVMCode.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.JVMCode - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.JVMCode

    -
    -
    No usage of mycompiler.mybytecode.JVMCode
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Key.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Key.html deleted file mode 100755 index f544e850..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/Key.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.Key - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.Key

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/MethodInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/MethodInfo.html deleted file mode 100755 index b21376dd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/MethodInfo.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.MethodInfo - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.MethodInfo

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/SignatureInfo.html b/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/SignatureInfo.html deleted file mode 100755 index c4f69f5f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/class-use/SignatureInfo.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mybytecode.SignatureInfo - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mybytecode.SignatureInfo

    -
    -
    No usage of mycompiler.mybytecode.SignatureInfo
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/package-frame.html b/doc/LambdaJavadoc/mycompiler/mybytecode/package-frame.html deleted file mode 100755 index a4c9f35d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/package-frame.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - -mycompiler.mybytecode - - - - -

    mycompiler.mybytecode

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/package-summary.html b/doc/LambdaJavadoc/mycompiler/mybytecode/package-summary.html deleted file mode 100755 index 6ab97002..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/package-summary.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - -mycompiler.mybytecode - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mybytecode

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/package-tree.html b/doc/LambdaJavadoc/mycompiler/mybytecode/package-tree.html deleted file mode 100755 index 563d7eaf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/package-tree.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -mycompiler.mybytecode Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mybytecode

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mybytecode/package-use.html b/doc/LambdaJavadoc/mycompiler/mybytecode/package-use.html deleted file mode 100755 index a53d5099..00000000 --- a/doc/LambdaJavadoc/mycompiler/mybytecode/package-use.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - -Uses of Package mycompiler.mybytecode - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mybytecode

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/BasicAssumptionClass.html b/doc/LambdaJavadoc/mycompiler/myclass/BasicAssumptionClass.html deleted file mode 100755 index ce8ef80f..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/BasicAssumptionClass.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - -BasicAssumptionClass - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class BasicAssumptionClass

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class BasicAssumptionClass
      -extends Class
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BasicAssumptionClass

          -
          public BasicAssumptionClass(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          BasicAssumptionClass

          -
          public BasicAssumptionClass(java.lang.String name,
          -                    Modifiers mod)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/Class.html b/doc/LambdaJavadoc/mycompiler/myclass/Class.html deleted file mode 100755 index db780c6c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/Class.html +++ /dev/null @@ -1,915 +0,0 @@ - - - - - -Class - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class Class

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          superclassid

          -
          public UsedId superclassid
          -
        • -
        - - - -
          -
        • -

          isFirstLocalVarDecl

          -
          public static boolean isFirstLocalVarDecl
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Class

          -
          public Class(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          Class

          -
          public Class(java.lang.String name,
          -     Modifiers mod)
          -
        • -
        - - - -
          -
        • -

          Class

          -
          public Class(java.lang.String name,
          -     Modifiers mod,
          -     ClassBody cb,
          -     de.dhbwstuttgart.typeinference.Menge<Type> ct,
          -     de.dhbwstuttgart.typeinference.Menge<UsedId> usedIdsToCheck,
          -     UsedId superclass,
          -     de.dhbwstuttgart.typeinference.Menge<UsedId> superif,
          -     de.dhbwstuttgart.typeinference.Menge<Type> paralist)
          -
          Konstruktor, der die Angabe aller Parameter ermoeglicht. - Zur Uebersichtlichkeit in der Grammatik.
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getUsedIdsToCheck

          -
          public de.dhbwstuttgart.typeinference.Menge<UsedId> getUsedIdsToCheck()
          -
        • -
        - - - -
          -
        • -

          setContainedTypes

          -
          public void setContainedTypes(de.dhbwstuttgart.typeinference.Menge<Type> containedTypes)
          -
        • -
        - - - -
          -
        • -

          getContainedTypes

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getContainedTypes()
          -
        • -
        - - - - - - - -
          -
        • -

          complete_paralist

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> complete_paralist(boolean ext)
          -
        • -
        - - - - - - - -
          -
        • -

          sc_check_for_extended_classes

          -
          public void sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                                 java.util.Hashtable<java.lang.String,java.lang.String> childhash,
          -                                 boolean ext)
          -
        • -
        - - - - - - - -
          -
        • -

          set_UsedId

          -
          public void set_UsedId(UsedId uid)
          -
        • -
        - - - -
          -
        • -

          set_ClassBody

          -
          public void set_ClassBody(ClassBody body)
          -
        • -
        - - - -
          -
        • -

          set_class_block

          -
          public void set_class_block(Block block)
          -
        • -
        - - - -
          -
        • -

          is_member

          -
          public java.lang.String is_member(java.lang.String var)
          -
        • -
        - - - -
          -
        • -

          get_Superclass_Name

          -
          public java.lang.String get_Superclass_Name()
          -
        • -
        - - - -
          -
        • -

          get_ClassBody

          -
          public ClassBody get_ClassBody()
          -
        • -
        - - - -
          -
        • -

          get_class_block

          -
          public Block get_class_block()
          -
        • -
        - - - -
          -
        • -

          does_Class_extend

          -
          public boolean does_Class_extend()
          -
        • -
        - - - -
          -
        • -

          set_ParaList

          -
          public void set_ParaList(de.dhbwstuttgart.typeinference.Menge<Type> para)
          -
        • -
        - - - -
          -
        • -

          get_ParaList

          -
          public de.dhbwstuttgart.typeinference.Menge get_ParaList()
          -
        • -
        - - - -
          -
        • -

          set_ParaHash

          -
          public void set_ParaHash(java.util.Hashtable<java.lang.String,java.lang.String> hash)
          -
        • -
        - - - -
          -
        • -

          get_ParaHash

          -
          public java.util.Hashtable<java.lang.String,java.lang.String> get_ParaHash()
          -
        • -
        - - - -
          -
        • -

          TRProg

          -
          public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> TRProg(CSupportData supportData,
          -                                                 TypeAssumptions globalAssumptions)
          -                                                   throws CTypeReconstructionException
          -
          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst - die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe - f�r den Algorithmus dienen.
          - (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) -
          Author: J�rg B�uerle
          -
          Parameters:
          supportData -
          globalAssumptions -
          -
          Returns:
          Liste aller bisher berechneten, m�glichen Typkombinationen
          -
          Throws:
          -
          CTypeReconstructionException
          -
        • -
        - - - -
          -
        • -

          TYPE

          -
          public ConstraintsSet TYPE(de.dhbwstuttgart.typeinference.Menge<Method> methodList,
          -                  de.dhbwstuttgart.typeinference.Menge<Expr> fielddeclarationList,
          -                  TypeAssumptions assumptions)
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          wandleRefTypeAttributes2GenericAttributes

          -
          public void wandleRefTypeAttributes2GenericAttributes()
          -
          Alle Methoden der Klassen �berpr�fen, ob sie als - RefType deklarierte Attribute haben, die aber GenericTypeVars sind - und ggf. ersetzen - - Bsp.: - bei public E elementAt(i){...} wird E vorerst als RefType erkannt
          -
        • -
        - - - -
          -
        • -

          addOffsetsToAssumption

          -
          public static void addOffsetsToAssumption(CTypeAssumption localAssumption,
          -                          Block localBlock,
          -                          java.lang.String NameVariable,
          -                          boolean isMemberVariable)
          -
          Methode f�gt zu einer CTypeAssumption alle - Offsets hinzu, wo die Variable benutzt wird. -
          Author: Thomas Hornberger 07.04.2006 -
          Author: Arne L�dtke 20.01.2007, Auf Polymorphie erweitert. - Wird nicht mehr verwendet. In Block ausgelagert.
          -
        • -
        - - - -
          -
        • -

          addOffsetsToStatement

          -
          public static boolean addOffsetsToStatement(CTypeAssumption localAssumption,
          -                            Statement statement,
          -                            java.lang.String NameVariable,
          -                            boolean isMemberVariable)
          -
          Hilfs-Methode f�r die Offset-Zuweisung - durchsucht ein Statement rekursiv -
          Author: Thomas Hornberger 08.04.2006 -
          Author: Arne L�dtke 20.10.2007, Auf Polymorphie umgebaut.
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          addOffsetsToExpression

          -
          public static void addOffsetsToExpression(CTypeAssumption localAssumption,
          -                          Expr expression,
          -                          java.lang.String NameVariable,
          -                          boolean isMemberVariable)
          -
          Hilfs-Methode f�r die Offset-Zuweisung - durchsucht eine Expression rekursiv -
          Author: Thomas Hornberger 07.04.2006 -
          Authos: Arne L�dtke 20.01.2007, Auf Polymorphie umgebaut.
          -
        • -
        - - - -
          -
        • -

          getSimpleName

          -
          public java.lang.String getSimpleName()
          -
          HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getTypeInformation

          -
          public java.lang.String getTypeInformation(de.dhbwstuttgart.typeinference.Menge<Method> methodList,
          -                                  de.dhbwstuttgart.typeinference.Menge<Expr> fieldList)
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(CTypeReconstructionResult reconstructionResult)
          -
          Generiert den JavaCode dieser Klasse im Falle f�r das �bergebene resultSet. - Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt.
          -
          Returns:
          Java-Sourcefile
          -
        • -
        - - - -
          -
        • -

          createGenericTypeVars

          -
          public void createGenericTypeVars(CTypeReconstructionResult reconstructionResult)
          -
          Errechnet die Generischen Parameter der Klasse f�r diese Klasse. - Die berechneten Variablen werden anschlie�end in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars �berschrieben.
          -
          Parameters:
          reconstructionResult -
          -
        • -
        - - - -
          -
        • -

          getType

          -
          public RefType getType()
          -
          Erstellt einen RefType, welcher auf diese Klasse verweist
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getPublicFieldAssumptions

          -
          public TypeAssumptions getPublicFieldAssumptions()
          -
          Ermittelt die Sichtbaren Felder und Methoden der Klasse. - (Momentan sind im Projekt alle Felder und Methoden "package private", da der Parser keine Access-Modifier einlesen kann.
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/ClassBody.html b/doc/LambdaJavadoc/mycompiler/myclass/ClassBody.html deleted file mode 100755 index 7ed0d967..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/ClassBody.html +++ /dev/null @@ -1,531 +0,0 @@ - - - - - -ClassBody - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class ClassBody

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.ClassBody
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ClassBody
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        java.util.Hashtable<Type,Type>kill 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ClassBody() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddFieldInitialization(FieldInitialization feld) 
        voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) 
        java.util.Hashtable<java.lang.String,java.lang.String>complete_parahashtable(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - UsedId superclassid, - java.util.Hashtable childhash, - boolean ext) 
        de.dhbwstuttgart.typeinference.Menge<FieldDecl>get_FieldDeclMenge() 
        java.util.Hashtableget_hash() 
        de.dhbwstuttgart.typeinference.Menge<FieldInitialization>getFieldInitializations() 
        java.util.Hashtable<java.lang.String,java.lang.String>init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist, - boolean ext) 
        booleanis_declared(Type t, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidistParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, - de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor) 
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        voidsc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - boolean ext) 
        voidsc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String strSuperKlassenName, - java.util.Hashtable<java.lang.String,java.lang.String> childhash, - de.dhbwstuttgart.typeinference.Menge paralist, - java.util.Hashtable parahash, - java.util.Hashtable kill, - boolean ext) 
        voidsc_init_hashtable(de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor, - java.lang.String strSuperKlassenName, - java.lang.String classname, - boolean ext) 
        voidset_FieldDecl(FieldDecl i) 
        java.lang.StringtoString() -

        Author: Martin Pl�micke
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          kill

          -
          public java.util.Hashtable<Type,Type> kill
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ClassBody

          -
          public ClassBody()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_init_hashtable

          -
          public void sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor,
          -                     java.lang.String strSuperKlassenName,
          -                     java.lang.String classname,
          -                     boolean ext)
          -                       throws SCClassBodyException
          -
          Throws:
          -
          SCClassBodyException
          -
        • -
        - - - -
          -
        • -

          sc_init_hashtable_for_extended_classes

          -
          public void sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                                          java.lang.String strSuperKlassenName,
          -                                          java.util.Hashtable<java.lang.String,java.lang.String> childhash,
          -                                          de.dhbwstuttgart.typeinference.Menge paralist,
          -                                          java.util.Hashtable parahash,
          -                                          java.util.Hashtable kill,
          -                                          boolean ext)
          -
        • -
        - - - - - - - -
          -
        • -

          init_parahashtable

          -
          public java.util.Hashtable<java.lang.String,java.lang.String> init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist,
          -                                                                        boolean ext)
          -
        • -
        - - - -
          -
        • -

          complete_parahashtable

          -
          public java.util.Hashtable<java.lang.String,java.lang.String> complete_parahashtable(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                                                                            UsedId superclassid,
          -                                                                            java.util.Hashtable childhash,
          -                                                                            boolean ext)
          -                                                                              throws SCClassBodyException
          -
          Throws:
          -
          SCClassBodyException
          -
        • -
        - - - - - - - -
          -
        • -

          get_hash

          -
          public java.util.Hashtable get_hash()
          -
        • -
        - - - -
          -
        • -

          get_FieldDeclMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<FieldDecl> get_FieldDeclMenge()
          -
        • -
        - - - -
          -
        • -

          set_FieldDecl

          -
          public void set_FieldDecl(FieldDecl i)
          -
        • -
        - - - - - - - -
          -
        • -

          istParameterOK

          -
          public void istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter,
          -                  de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor)
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          addFieldInitialization

          -
          public void addFieldInitialization(FieldInitialization feld)
          -
          Parameters:
          feld -
          -
        • -
        - - - -
          -
        • -

          getFieldInitializations

          -
          public de.dhbwstuttgart.typeinference.Menge<FieldInitialization> getFieldInitializations()
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/ClassHelper.html b/doc/LambdaJavadoc/mycompiler/myclass/ClassHelper.html deleted file mode 100755 index c2ec5450..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/ClassHelper.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - -ClassHelper - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class ClassHelper

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.ClassHelper
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ClassHelper
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ClassHelper() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static GenericTypeVarfindGenericType(Type type, - de.dhbwstuttgart.typeinference.Menge<Type> paralist, - de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> methodParaList) -
        HOTI - Diese Methode sucht in der Klassendefinition nach einen GTV, die - so hei�t wie die im RefType definierte Variable.
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ClassHelper

          -
          public ClassHelper()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          findGenericType

          -
          public static GenericTypeVar findGenericType(Type type,
          -                             de.dhbwstuttgart.typeinference.Menge<Type> paralist,
          -                             de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> methodParaList)
          -
          HOTI - Diese Methode sucht in der Klassendefinition nach einen GTV, die - so hei�t wie die im RefType definierte Variable. Wenn sie diese gefunden - hat, wird sie zur�ckgeben. Wenn dies nicht der Fall war, schaut sie, falls - angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert - die Methode null.
          -
          Parameters:
          type -
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/Constant.html b/doc/LambdaJavadoc/mycompiler/myclass/Constant.html deleted file mode 100755 index d81198f7..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/Constant.html +++ /dev/null @@ -1,478 +0,0 @@ - - - - - -Constant - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class Constant

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Constant
      -extends FieldDecl
      -
      Enthaelt die Eigenschaften einer Konstante (Name, Typ, Modifier, Wert)
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Constant

          -
          public Constant(java.lang.String name,
          -        Modifiers mod)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getValue

          -
          public Expr getValue()
          -
          Gibt den Wert der Konstantendefinition zurueck.
          -
        • -
        - - - -
          -
        • -

          setValue

          -
          public void setValue(Expr exp)
          -
          Legt den Wert der Konstantendefinition fest.
          -
        • -
        - - - -
          -
        • -

          getType

          -
          public Type getType()
          -
          Gibt den Typ der Konstantendefinition zurueck.
          -
        • -
        - - - -
          -
        • -

          setType

          -
          public void setType(Type typ)
          -
          Legt den Typ der Konstantendefinition fest
          -
        • -
        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
          -
          Specified by:
          -
          getTypeName in class FieldDecl
          -
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getModifiers

          -
          public Modifiers getModifiers()
          -
        • -
        - - - -
          -
        • -

          setModifiers

          -
          public void setModifiers(Modifiers modifiers)
          -
        • -
        - - - - - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -
        • -
        - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - - - - - -
          -
        • -

          createTypeAssumptions

          -
          public TypeAssumptions createTypeAssumptions(Class classmember)
          -
          Description copied from class: FieldDecl
          -
          Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
          -
          -
          Specified by:
          -
          createTypeAssumptions in class FieldDecl
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/Constructor.html b/doc/LambdaJavadoc/mycompiler/myclass/Constructor.html deleted file mode 100755 index f8614dd3..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/Constructor.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - -Constructor - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class Constructor

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Constructor

          -
          public Constructor()
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/DeclId.html b/doc/LambdaJavadoc/mycompiler/myclass/DeclId.html deleted file mode 100755 index e3b5746c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/DeclId.html +++ /dev/null @@ -1,565 +0,0 @@ - - - - - -DeclId - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class DeclId

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.DeclId
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class DeclId
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          modifiers

          -
          public Modifiers modifiers
          -
        • -
        - - - -
          -
        • -

          name

          -
          public java.lang.String name
          -
        • -
        - - - -
          -
        • -

          paratyp

          -
          public de.dhbwstuttgart.typeinference.Menge paratyp
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          DeclId

          -
          public DeclId()
          -
        • -
        - - - -
          -
        • -

          DeclId

          -
          public DeclId(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_Paratyp

          -
          public void set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
          -
        • -
        - - - -
          -
        • -

          get_Paratyp

          -
          public de.dhbwstuttgart.typeinference.Menge get_Paratyp()
          -
        • -
        - - - -
          -
        • -

          set_Name

          -
          public void set_Name(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          set_Wert

          -
          public void set_Wert(ExprStmt w)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
        • -
        - - - -
          -
        • -

          get_Wert

          -
          public ExprStmt get_Wert()
          -
        • -
        - - - -
          -
        • -

          set_Modifiers

          -
          public void set_Modifiers(Modifiers mod)
          -
        • -
        - - - -
          -
        • -

          get_Modifiers

          -
          public Modifiers get_Modifiers()
          -
        • -
        - - - -
          -
        • -

          get_access_flags

          -
          public short get_access_flags()
          -
        • -
        - - - -
          -
        • -

          set_ListType

          -
          public void set_ListType(Type t)
          -
        • -
        - - - -
          -
        • -

          codegen_InstVarDecl

          -
          public void codegen_InstVarDecl(ClassFile classfile,
          -                       Type type,
          -                       de.dhbwstuttgart.typeinference.Menge paralist)
          -                         throws JVMCodeException
          -
          Generieren einer Instanzvariable im Bytecode. - Fuegt ggf. eine Signatur hinzu (Generics).
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - - - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - -
          -
        • -

          setLineNumber

          -
          public void setLineNumber(int lineNumber)
          -
        • -
        - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -
        • -
        - - - -
          -
        • -

          setOffset

          -
          public void setOffset(int Offset)
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/ExceptionList.html b/doc/LambdaJavadoc/mycompiler/myclass/ExceptionList.html deleted file mode 100755 index 685469a8..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/ExceptionList.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -ExceptionList - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class ExceptionList

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.ExceptionList
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ExceptionList
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ExceptionList() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidset_addElem(RefType rety) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ExceptionList

          -
          public ExceptionList()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_addElem

          -
          public void set_addElem(RefType rety)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/FieldDecl.html b/doc/LambdaJavadoc/mycompiler/myclass/FieldDecl.html deleted file mode 100755 index e28a2593..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/FieldDecl.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - -FieldDecl - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class FieldDecl

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.FieldDecl
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      Constant, InstVarDecl, Method
      -
      -
      -
      -
      public abstract class FieldDecl
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        FieldDecl() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        abstract voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) 
        abstract TypeAssumptionscreateTypeAssumptions(Class classmember) -
        Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
        -
        de.dhbwstuttgart.typeinference.Menge<DeclId>get_Name() 
        de.dhbwstuttgart.typeinference.Menge<DeclId>getDeclIdMenge() 
        abstract java.lang.StringgetTypeName() 
        abstract java.lang.StringprintJavaCode(ResultSet resultSet) 
        voidset_DeclId(DeclId did) 
        voidsetDeclIdMenge(de.dhbwstuttgart.typeinference.Menge<DeclId> vDeclId) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FieldDecl

          -
          public FieldDecl()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getTypeName

          -
          public abstract java.lang.String getTypeName()
          -
        • -
        - - - - - - - -
          -
        • -

          set_DeclId

          -
          public void set_DeclId(DeclId did)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public de.dhbwstuttgart.typeinference.Menge<DeclId> get_Name()
          -
        • -
        - - - -
          -
        • -

          getDeclIdMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<DeclId> getDeclIdMenge()
          -
        • -
        - - - -
          -
        • -

          setDeclIdMenge

          -
          public void setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge<DeclId> vDeclId)
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public abstract java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        - - - -
          -
        • -

          createTypeAssumptions

          -
          public abstract TypeAssumptions createTypeAssumptions(Class classmember)
          -
          Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
          -
          Parameters:
          classmember -
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/FieldInitialization.html b/doc/LambdaJavadoc/mycompiler/myclass/FieldInitialization.html deleted file mode 100755 index cd3e8340..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/FieldInitialization.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - -FieldInitialization - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class FieldInitialization

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/FormalParameter.html b/doc/LambdaJavadoc/mycompiler/myclass/FormalParameter.html deleted file mode 100755 index 547e1ba7..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/FormalParameter.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - - -FormalParameter - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class FormalParameter

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.FormalParameter
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FormalParameter

          -
          public FormalParameter()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setType

          -
          public void setType(Type t)
          -

          Author: J�rg B�uerle
          -
          Parameters:
          t -
          -
        • -
        - - - -
          -
        • -

          set_DeclId

          -
          public void set_DeclId(DeclId did)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
        • -
        - - - -
          -
        • -

          getType

          -
          public Type getType()
          -
        • -
        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
        • -
        - - - - - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -

          Author: Thomas Hornberger 09.04.2006
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -

          Author: J�rg B�uerle
          -
          Returns:
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          setTypeVariable

          -
          public void setTypeVariable(Type typ)
          -
          -
          Specified by:
          -
          setTypeVariable in interface Typable
          -
          Parameters:
          typ - Der Typ der Typable-Expression/Statement
          -
        • -
        - - - - - - - -
          -
        • -

          getTypeInformation

          -
          public java.lang.String getTypeInformation()
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/ImportDeclarations.html b/doc/LambdaJavadoc/mycompiler/myclass/ImportDeclarations.html deleted file mode 100755 index 7b473584..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/ImportDeclarations.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - -ImportDeclarations - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class ImportDeclarations

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.util.AbstractCollection<E>
      • -
      • -
          -
        • java.util.AbstractList<E>
        • -
        • -
            -
          • de.dhbwstuttgart.typeinference.Menge<UsedId>
          • -
          • -
              -
            • mycompiler.myclass.ImportDeclarations
            • -
            -
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<UsedId>, java.util.Collection<UsedId>, java.util.List<UsedId>, java.util.RandomAccess
      -
      -
      -
      -
      public class ImportDeclarations
      -extends de.dhbwstuttgart.typeinference.Menge<UsedId>
      -
      HOTI 4.5.06 - Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) - Der Parser kann keine Generischen Typen darstellen, damit trotzdem - an amap Stellen die Typsicherheit gew�hrleistet ist, hier eine Kapselung...
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ImportDeclarations() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class de.dhbwstuttgart.typeinference.Menge

          -add, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, retainAll, set, setElementAt, setSize, size, subList, toArray, toArray, toString, trimToSize
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ImportDeclarations

          -
          public ImportDeclarations()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/InstVarDecl.html b/doc/LambdaJavadoc/mycompiler/myclass/InstVarDecl.html deleted file mode 100755 index 829724d4..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/InstVarDecl.html +++ /dev/null @@ -1,466 +0,0 @@ - - - - - -InstVarDecl - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class InstVarDecl

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InstVarDecl

          -
          public InstVarDecl()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setType

          -
          public void setType(Type t)
          -

          Author: J�rg B�uerle
          -
          Parameters:
          t -
          -
        • -
        - - - -
          -
        • -

          getType

          -
          public Type getType()
          -
        • -
        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
          -
          Specified by:
          -
          getTypeName in class FieldDecl
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -
        • -
        - - - -
          -
        • -

          getVariableLength

          -
          public int getVariableLength()
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - - - - - -
          -
        • -

          createTypeAssumptions

          -
          public TypeAssumptions createTypeAssumptions(Class classmember)
          -
          Description copied from class: FieldDecl
          -
          Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
          -
          -
          Specified by:
          -
          createTypeAssumptions in class FieldDecl
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/Method.html b/doc/LambdaJavadoc/mycompiler/myclass/Method.html deleted file mode 100755 index 27818dbc..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/Method.html +++ /dev/null @@ -1,866 +0,0 @@ - - - - - -Method - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class Method

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Method

          -
          public Method()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setGenericMethodParameters

          -
          public void setGenericMethodParameters(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> genericMethodParameters)
          -
        • -
        - - - -
          -
        • -

          getGenericMethodParameters

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenericMethodParameters()
          -
        • -
        - - - -
          -
        • -

          call_sc_check

          -
          public void call_sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                 java.util.Hashtable classhash,
          -                 boolean ext,
          -                 java.util.Hashtable parach)
          -                   throws SCMethodException
          -
          Throws:
          -
          SCMethodException
          -
        • -
        - - - -
          -
        • -

          sc_init_parameterlist

          -
          public void sc_init_parameterlist(boolean ext)
          -
        • -
        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
          -
          Specified by:
          -
          getTypeName in class FieldDecl
          -
          -
        • -
        - - - -
          -
        • -

          get_Block

          -
          public Block get_Block()
          -
        • -
        - - - -
          -
        • -

          setReturnType

          -
          public void setReturnType(Type type)
          -

          Author: Jrg Buerle
          -
          Parameters:
          type -
          -
        • -
        - - - -
          -
        • -

          set_Block

          -
          public void set_Block(Block blo)
          -
        • -
        - - - -
          -
        • -

          set_Modifiers

          -
          public void set_Modifiers(Modifiers modif)
          -
        • -
        - - - -
          -
        • -

          set_ExceptionList

          -
          public void set_ExceptionList(ExceptionList exlist)
          -
        • -
        - - - -
          -
        • -

          setParameterList

          -
          public void setParameterList(ParameterList paralist)
          -
        • -
        - - - -
          -
        • -

          getParameterList

          -
          public ParameterList getParameterList()
          -
        • -
        - - - -
          -
        • -

          getParameterCount

          -
          public int getParameterCount()
          -
          Author: Jrg Buerle
          -
          Returns:
          Die Anzahl der Methoden-Paramater
          -
        • -
        - - - -
          -
        • -

          get_ExceptionList

          -
          public ExceptionList get_ExceptionList()
          -
        • -
        - - - -
          -
        • -

          getOverloadedID

          -
          public int getOverloadedID()
          -
        • -
        - - - -
          -
        • -

          setOverloadedID

          -
          public void setOverloadedID(int overloadedID)
          -
        • -
        - - - -
          -
        • -

          getReturnType

          -
          public Type getReturnType()
          -
          Liefert den Return Type der Methode. - Dieser entspricht dem Returntype des Methoden-Block's
          -
        • -
        - - - -
          -
        • -

          get_codegen_Param_Type

          -
          public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
          -
        • -
        - - - -
          -
        • -

          get_Method_Name

          -
          public java.lang.String get_Method_Name()
          -
        • -
        - - - -
          -
        • -

          get_Type_Paralist

          -
          public de.dhbwstuttgart.typeinference.Menge get_Type_Paralist()
          -
        • -
        - - - - - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - -
          -
        • -

          setLineNumber

          -
          public void setLineNumber(int lineNumber)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          setOffset

          -
          public void setOffset(int Offset)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          setAbstract

          -
          public void setAbstract(boolean b)
          -
          Legt fuer die ByteCodeGen fest, ob Bytecode - innerhalb der Methode generiert wird.
          -
        • -
        - - - -
          -
        • -

          isAbstract

          -
          public boolean isAbstract()
          -
          Gibt zurueck, ob ByteCode innerhabl der Methode - generiert wird.
          -
        • -
        - - - -
          -
        • -

          wandleRefTypeAttributes2GenericAttributes

          -
          public void wandleRefTypeAttributes2GenericAttributes(de.dhbwstuttgart.typeinference.Menge<Type> paralist)
          -
        • -
        - - - -
          -
        • -

          set_Method_Name

          -
          public void set_Method_Name(java.lang.String string)
          -
        • -
        - - - - - - - -
          -
        • -

          getTypeInformation

          -
          public java.lang.String getTypeInformation()
          -
          Returns:
          die TypInformationen der Statements dieser Methode.
          -
        • -
        - - - - - - - -
          -
        • -

          createTypeAssumptions

          -
          public TypeAssumptions createTypeAssumptions(Class classmember)
          -
          Description copied from class: FieldDecl
          -
          Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
          -
          -
          Specified by:
          -
          createTypeAssumptions in class FieldDecl
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/ParameterList.html b/doc/LambdaJavadoc/mycompiler/myclass/ParameterList.html deleted file mode 100755 index c7588874..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/ParameterList.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - -ParameterList - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class ParameterList

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.ParameterList
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ParameterList
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          formalparameter

          -
          public de.dhbwstuttgart.typeinference.Menge<FormalParameter> formalparameter
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ParameterList

          -
          public ParameterList()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_AddParameter

          -
          public void set_AddParameter(FormalParameter fp)
          -
        • -
        - - - -
          -
        • -

          get_codegen_ParameterList

          -
          public java.lang.String get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
          -
        • -
        - - - - - - - -
          -
        • -

          sc_get_Formalparalist

          -
          public de.dhbwstuttgart.typeinference.Menge<FormalParameter> sc_get_Formalparalist()
          -
        • -
        - - - - - - - -
          -
        • -

          getParameterCount

          -
          public int getParameterCount()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Die Anzahl der Parameter
          -
        • -
        - - - -
          -
        • -

          getTypeInformation

          -
          public java.lang.String getTypeInformation()
          -
          Returns:
          Die Typinformationen der Parameter in der Parameterliste
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/Status.html b/doc/LambdaJavadoc/mycompiler/myclass/Status.html deleted file mode 100755 index d700c5bb..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/Status.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -Status - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class Status

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.Status
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      Import, UserDef
      -
      -
      -
      -
      public abstract class Status
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Status() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidset_Import(Import imp) 
        voidset_UserDef(UserDef userdef) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Status

          -
          public Status()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_UserDef

          -
          public void set_UserDef(UserDef userdef)
          -
        • -
        - - - -
          -
        • -

          set_Import

          -
          public void set_Import(Import imp)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/UsedId.html b/doc/LambdaJavadoc/mycompiler/myclass/UsedId.html deleted file mode 100755 index 1586cd16..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/UsedId.html +++ /dev/null @@ -1,614 +0,0 @@ - - - - - -UsedId - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class UsedId

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myclass.UsedId
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          name

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.String> name
          -
        • -
        - - - -
          -
        • -

          vParaOrg

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> vParaOrg
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          UsedId

          -
          public UsedId(int offset)
          -
        • -
        - - - -
          -
        • -

          UsedId

          -
          public UsedId(java.lang.String name,
          -      int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - - - - - -
          -
        • -

          setOffset

          -
          public void setOffset(int Offset)
          -
        • -
        - - - -
          -
        • -

          set_Name

          -
          public void set_Name(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public de.dhbwstuttgart.typeinference.Menge get_Name()
          -
        • -
        - - - -
          -
        • -

          get_Name_1Element

          -
          public java.lang.String get_Name_1Element()
          -
        • -
        - - - -
          -
        • -

          set_Typen

          -
          public void set_Typen(de.dhbwstuttgart.typeinference.Menge t)
          -
        • -
        - - - -
          -
        • -

          set_ParaList

          -
          public void set_ParaList(de.dhbwstuttgart.typeinference.Menge<Type> pl)
          -
        • -
        - - - -
          -
        • -

          get_RealParaList

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_RealParaList()
          -
        • -
        - - - -
          -
        • -

          get_ParaList

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_ParaList()
          -
        • -
        - - - -
          -
        • -

          get_vParaOrg

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_vParaOrg()
          -
        • -
        - - - -
          -
        • -

          get_Typen

          -
          public de.dhbwstuttgart.typeinference.Menge get_Typen()
          -
        • -
        - - - -
          -
        • -

          get_codegen_UsedId

          -
          public java.lang.String get_codegen_UsedId()
          -
        • -
        - - - -
          -
        • -

          getSignatureUsedId

          -
          public java.lang.String getSignatureUsedId()
          -
        • -
        - - - -
          -
        • -

          removeLast

          -
          public void removeLast()
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getQualifiedName

          -
          public java.lang.String getQualifiedName()
          -
        • -
        - - - -
          -
        • -

          createFromQualifiedName

          -
          public static UsedId createFromQualifiedName(java.lang.String qualifiedName,
          -                             int offset)
          -
        • -
        - - - -
          -
        • -

          hasWildCard

          -
          public boolean hasWildCard()
          -
        • -
        - - - -
          -
        • -

          getPackageName

          -
          public UsedId getPackageName()
          -
        • -
        - - - -
          -
        • -

          getSimpleName

          -
          public java.lang.String getSimpleName()
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/UserDef.html b/doc/LambdaJavadoc/mycompiler/myclass/UserDef.html deleted file mode 100755 index 4322480f..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/UserDef.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - -UserDef - - - - - - - - - - - -
    -
    mycompiler.myclass
    -

    Class UserDef

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class UserDef
      -extends Status
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        UserDef() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          UserDef

          -
          public UserDef()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/BasicAssumptionClass.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/BasicAssumptionClass.html deleted file mode 100755 index 9369844e..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/BasicAssumptionClass.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.BasicAssumptionClass - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.BasicAssumptionClass

    -
    -
    No usage of mycompiler.myclass.BasicAssumptionClass
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Class.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/Class.html deleted file mode 100755 index 4b9aca91..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Class.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.Class - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.Class

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Packages that use Class 
      PackageDescription
      mycompiler 
      mycompiler.myclass 
      mycompiler.mystatement 
      mycompiler.mytypereconstruction 
      mycompiler.mytypereconstruction.unify 
      -
    • -
    • -
        -
      • - - -

        Uses of Class in mycompiler

        - - - - - - - - - - - - -
        Fields in mycompiler with type parameters of type Class 
        Modifier and TypeField and Description
        de.dhbwstuttgart.typeinference.Menge<Class>SourceFile.KlassenVektor 
        - - - - - - - - - - - - -
        Methods in mycompiler that return types with arguments of type Class 
        Modifier and TypeMethod and Description
        java.util.Iterator<Class>SourceFile.getClassIterator() 
        - - - - - - - - - - - - -
        Method parameters in mycompiler with type arguments of type Class 
        Modifier and TypeMethod and Description
        static voidMyCompiler.wandleGeneric2RefType(de.dhbwstuttgart.typeinference.Menge<Type> Parameter, - de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor) -
        Author: Thomas Ott
        - Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen - GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t.
        -
        -
      • -
      • - - -

        Uses of Class in mycompiler.myclass

        - - - - - - - - - - - - -
        Subclasses of Class in mycompiler.myclass 
        Modifier and TypeClass and Description
        class BasicAssumptionClass 
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods in mycompiler.myclass with parameters of type Class 
        Modifier and TypeMethod and Description
        TypeAssumptionsInstVarDecl.createTypeAssumptions(Class classmember) 
        TypeAssumptionsFieldInitialization.createTypeAssumptions(Class classmember) 
        TypeAssumptionsConstant.createTypeAssumptions(Class classmember) 
        TypeAssumptionsMethod.createTypeAssumptions(Class classmember) 
        abstract TypeAssumptionsFieldDecl.createTypeAssumptions(Class classmember) -
        Diese Methode generiert die Assumptions f�r dieses Feld der Klasse classmember
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method parameters in mycompiler.myclass with type arguments of type Class 
        Modifier and TypeMethod and Description
        voidMethod.call_sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.util.Hashtable classhash, - boolean ext, - java.util.Hashtable parach) 
        java.util.Hashtable<java.lang.String,java.lang.String>ClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - UsedId superclassid, - java.util.Hashtable childhash, - boolean ext) 
        booleanClassBody.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidClassBody.istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, - de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor) 
        voidClass.para_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - boolean ext) 
        voidClass.sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.util.Hashtable<java.lang.String,java.lang.String> childhash, - boolean ext) 
        voidClassBody.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - boolean ext) 
        voidClass.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - boolean ext) 
        voidClassBody.sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String strSuperKlassenName, - java.util.Hashtable<java.lang.String,java.lang.String> childhash, - de.dhbwstuttgart.typeinference.Menge paralist, - java.util.Hashtable parahash, - java.util.Hashtable kill, - boolean ext) 
        voidClassBody.sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge<Class> KlassenVektor, - java.lang.String strSuperKlassenName, - java.lang.String classname, - boolean ext) 
        -
      • -
      • - - -

        Uses of Class in mycompiler.mystatement

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method parameters in mycompiler.mystatement with type arguments of type Class 
        Modifier and TypeMethod and Description
        voidLocalVarDecl.check_anz(Type type, - de.dhbwstuttgart.typeinference.Menge paralist, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidLocalVarDecl.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidMethodCall.sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String methodname, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        booleanMethodCall.sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String ist, - java.lang.String soll, - boolean ext) 
        voidMethodCall.sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - de.dhbwstuttgart.typeinference.Menge<Method> method, - boolean ext, - int paranum, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        voidPositivExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPreDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLambdaExpression.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        abstract voidExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidBinary.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPostDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidEmptyStmt.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNewArray.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable bh, - java.util.Hashtable<java.lang.String,java.lang.String> ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidThis.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPreIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidBlock.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPostIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLocalVarDecl.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLongLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNotExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLocalOrFieldVar.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidAssign.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidCastExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidCharLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidInstVar.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidDoubleLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNull.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNegativeExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidInstanceOf.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidStringLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidFloatLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidMethodCall.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNewClass.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable bh, - java.util.Hashtable<java.lang.String,java.lang.String> ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidBoolLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidIntLiteral.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidReceiver.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        voidMethodCall.sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge<Method> method, - de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String methodname, - java.lang.String classname, - boolean ext) 
        -
      • -
      • - - -

        Uses of Class in mycompiler.mytypereconstruction

        - - - - - - - - - - - - -
        Methods in mycompiler.mytypereconstruction that return Class 
        Modifier and TypeMethod and Description
        ClassCTypeReconstructionResult.getInterferedClass() -
        Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
        -
        - - - - - - - - - - -
        Constructors in mycompiler.mytypereconstruction with parameters of type Class 
        Constructor and Description
        CTypeReconstructionResult(Class inferedClass) 
        -
      • -
      • - - -

        Uses of Class in mycompiler.mytypereconstruction.unify

        - - - - - - - - - - - - -
        Methods in mycompiler.mytypereconstruction.unify that return types with arguments of type Class 
        Modifier and TypeMethod and Description
        de.dhbwstuttgart.typeinference.Menge<Class>FC_TTO.getClasses() 
        - - - - - - - - - - -
        Constructor parameters in mycompiler.mytypereconstruction.unify with type arguments of type Class 
        Constructor and Description
        FC_TTO(de.dhbwstuttgart.typeinference.Menge<Pair> fc, - de.dhbwstuttgart.typeinference.Menge tto, - de.dhbwstuttgart.typeinference.Menge<Class> classv) 
        -
      • -
      -
    • -
    -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassBody.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassBody.html deleted file mode 100755 index 4c051aae..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassBody.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.ClassBody - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.ClassBody

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassHelper.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassHelper.html deleted file mode 100755 index ba9e3a89..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ClassHelper.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.ClassHelper - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.ClassHelper

    -
    -
    No usage of mycompiler.myclass.ClassHelper
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constant.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constant.html deleted file mode 100755 index 008c992d..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constant.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.Constant - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.Constant

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constructor.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constructor.html deleted file mode 100755 index 501a0cb9..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Constructor.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.Constructor - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.Constructor

    -
    -
    No usage of mycompiler.myclass.Constructor
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/DeclId.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/DeclId.html deleted file mode 100755 index 97f8cd9f..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/DeclId.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.DeclId - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.DeclId

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ExceptionList.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/ExceptionList.html deleted file mode 100755 index ee447114..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ExceptionList.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.ExceptionList - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.ExceptionList

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldDecl.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldDecl.html deleted file mode 100755 index 5e23fac2..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldDecl.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.FieldDecl - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.FieldDecl

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldInitialization.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldInitialization.html deleted file mode 100755 index 6c7807c7..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FieldInitialization.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.FieldInitialization - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.FieldInitialization

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FormalParameter.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/FormalParameter.html deleted file mode 100755 index 72302cb1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/FormalParameter.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.FormalParameter - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.FormalParameter

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ImportDeclarations.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/ImportDeclarations.html deleted file mode 100755 index d8fe2bca..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ImportDeclarations.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.ImportDeclarations - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.ImportDeclarations

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/InstVarDecl.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/InstVarDecl.html deleted file mode 100755 index fee3fd9b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/InstVarDecl.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.InstVarDecl - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.InstVarDecl

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Method.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/Method.html deleted file mode 100755 index 38f940df..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Method.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.Method - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.Method

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ParameterList.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/ParameterList.html deleted file mode 100755 index e5141ee0..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/ParameterList.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.ParameterList - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.ParameterList

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Status.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/Status.html deleted file mode 100755 index 2aed462a..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/Status.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.Status - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.Status

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/UsedId.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/UsedId.html deleted file mode 100755 index a3c14f37..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/UsedId.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.UsedId - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.UsedId

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/class-use/UserDef.html b/doc/LambdaJavadoc/mycompiler/myclass/class-use/UserDef.html deleted file mode 100755 index 5dfa982c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/class-use/UserDef.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.myclass.UserDef - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myclass.UserDef

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/package-frame.html b/doc/LambdaJavadoc/mycompiler/myclass/package-frame.html deleted file mode 100755 index b2016f51..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -mycompiler.myclass - - - - -

    mycompiler.myclass

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/package-summary.html b/doc/LambdaJavadoc/mycompiler/myclass/package-summary.html deleted file mode 100755 index 4feb8b54..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/package-summary.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - -mycompiler.myclass - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.myclass

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/package-tree.html b/doc/LambdaJavadoc/mycompiler/myclass/package-tree.html deleted file mode 100755 index bdc45bc1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/package-tree.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - -mycompiler.myclass Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.myclass

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myclass/package-use.html b/doc/LambdaJavadoc/mycompiler/myclass/package-use.html deleted file mode 100755 index 1b297754..00000000 --- a/doc/LambdaJavadoc/mycompiler/myclass/package-use.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - -Uses of Package mycompiler.myclass - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.myclass

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/CTypeReconstructionException.html b/doc/LambdaJavadoc/mycompiler/myexception/CTypeReconstructionException.html deleted file mode 100755 index dddafb74..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/CTypeReconstructionException.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - -CTypeReconstructionException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class CTypeReconstructionException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • java.lang.RuntimeException
          • -
          • -
              -
            • mycompiler.myexception.CTypeReconstructionException
            • -
            -
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class CTypeReconstructionException
      -extends java.lang.RuntimeException
      -
      Version:
      -
      $Date: 2013/09/22 20:12:54 $
      -
      Author:
      -
      J�rg B�uerle
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTypeReconstructionException

          -
          public CTypeReconstructionException(java.lang.String message,
          -                            IItemWithOffset problemSource)
          -
        • -
        - - - -
          -
        • -

          CTypeReconstructionException

          -
          public CTypeReconstructionException(java.lang.String message,
          -                            de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionException> parentExceptions,
          -                            IItemWithOffset problemSource)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getHighestProblemSources

          -
          public de.dhbwstuttgart.typeinference.Menge<IItemWithOffset> getHighestProblemSources()
          -
        • -
        - - - -
          -
        • -

          getMessage

          -
          public java.lang.String getMessage()
          -
          -
          Overrides:
          -
          getMessage in class java.lang.Throwable
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Throwable
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/JVMCodeException.html b/doc/LambdaJavadoc/mycompiler/myexception/JVMCodeException.html deleted file mode 100755 index 7fd5eed4..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/JVMCodeException.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - -JVMCodeException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class JVMCodeException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.JVMCodeException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class JVMCodeException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        JVMCodeException(java.lang.String s) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JVMCodeException

          -
          public JVMCodeException(java.lang.String s)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/MatchException.html b/doc/LambdaJavadoc/mycompiler/myexception/MatchException.html deleted file mode 100755 index ee32d25c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/MatchException.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - -MatchException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class MatchException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.MatchException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class MatchException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        MatchException(java.lang.String m) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          MatchException

          -
          public MatchException(java.lang.String m)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCClassBodyException.html b/doc/LambdaJavadoc/mycompiler/myexception/SCClassBodyException.html deleted file mode 100755 index fe1622c1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCClassBodyException.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - -SCClassBodyException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCClassBodyException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.SCClassBodyException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class SCClassBodyException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddException(SCExcept ex) 
        de.dhbwstuttgart.typeinference.Menge<SCExcept>get_exlist() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCClassBodyException

          -
          public SCClassBodyException()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addException

          -
          public void addException(SCExcept ex)
          -
        • -
        - - - -
          -
        • -

          get_exlist

          -
          public de.dhbwstuttgart.typeinference.Menge<SCExcept> get_exlist()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCClassException.html b/doc/LambdaJavadoc/mycompiler/myexception/SCClassException.html deleted file mode 100755 index 3275dac2..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCClassException.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - -SCClassException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCClassException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.SCClassException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class SCClassException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        SCClassException() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddClassname(java.lang.String cn) 
        voidaddException(de.dhbwstuttgart.typeinference.Menge<SCExcept> v) 
        voidfehlerausgabe() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCClassException

          -
          public SCClassException()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addException

          -
          public void addException(de.dhbwstuttgart.typeinference.Menge<SCExcept> v)
          -
        • -
        - - - -
          -
        • -

          addClassname

          -
          public void addClassname(java.lang.String cn)
          -
        • -
        - - - -
          -
        • -

          fehlerausgabe

          -
          public void fehlerausgabe()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCExcept.html b/doc/LambdaJavadoc/mycompiler/myexception/SCExcept.html deleted file mode 100755 index 7f940bcb..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCExcept.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - -SCExcept - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCExcept

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myexception.SCExcept
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class SCExcept
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        SCExcept() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidfehlerausgabe() 
        java.lang.Stringget_classname() 
        java.lang.Stringget_function() 
        java.lang.Stringget_statement() 
        voidset_classname(java.lang.String cn) 
        voidset_error(java.lang.String e) 
        voidset_function(java.lang.String fct) 
        voidset_statement(java.lang.String s) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCExcept

          -
          public SCExcept()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_classname

          -
          public void set_classname(java.lang.String cn)
          -
        • -
        - - - -
          -
        • -

          set_error

          -
          public void set_error(java.lang.String e)
          -
        • -
        - - - -
          -
        • -

          set_function

          -
          public void set_function(java.lang.String fct)
          -
        • -
        - - - -
          -
        • -

          set_statement

          -
          public void set_statement(java.lang.String s)
          -
        • -
        - - - -
          -
        • -

          fehlerausgabe

          -
          public void fehlerausgabe()
          -
        • -
        - - - -
          -
        • -

          get_classname

          -
          public java.lang.String get_classname()
          -
        • -
        - - - -
          -
        • -

          get_statement

          -
          public java.lang.String get_statement()
          -
        • -
        - - - -
          -
        • -

          get_function

          -
          public java.lang.String get_function()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCException.html b/doc/LambdaJavadoc/mycompiler/myexception/SCException.html deleted file mode 100755 index 3d9fe385..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCException.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - -SCException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.SCException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class SCException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        SCException() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidadd_classexceptions(SCClassException ex) 
        voidfehlerausgabe() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCException

          -
          public SCException()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          add_classexceptions

          -
          public void add_classexceptions(SCClassException ex)
          -
        • -
        - - - -
          -
        • -

          fehlerausgabe

          -
          public void fehlerausgabe()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCMethodException.html b/doc/LambdaJavadoc/mycompiler/myexception/SCMethodException.html deleted file mode 100755 index b96ead04..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCMethodException.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - -SCMethodException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCMethodException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.SCMethodException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class SCMethodException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        SCMethodException() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        de.dhbwstuttgart.typeinference.Menge<SCExcept>get_exlist() 
        voidset_exlist(de.dhbwstuttgart.typeinference.Menge<SCExcept> list) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCMethodException

          -
          public SCMethodException()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_exlist

          -
          public de.dhbwstuttgart.typeinference.Menge<SCExcept> get_exlist()
          -
        • -
        - - - -
          -
        • -

          set_exlist

          -
          public void set_exlist(de.dhbwstuttgart.typeinference.Menge<SCExcept> list)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/SCStatementException.html b/doc/LambdaJavadoc/mycompiler/myexception/SCStatementException.html deleted file mode 100755 index a6a30960..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/SCStatementException.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - -SCStatementException - - - - - - - - - - - -
    -
    mycompiler.myexception
    -

    Class SCStatementException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myexception.SCStatementException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class SCStatementException
      -extends java.lang.Exception
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddException(SCExcept ex) 
        de.dhbwstuttgart.typeinference.Menge<SCExcept>get_exlist() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SCStatementException

          -
          public SCStatementException()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_exlist

          -
          public de.dhbwstuttgart.typeinference.Menge<SCExcept> get_exlist()
          -
        • -
        - - - -
          -
        • -

          addException

          -
          public void addException(SCExcept ex)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html deleted file mode 100755 index 95446f13..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.CTypeReconstructionException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.CTypeReconstructionException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/JVMCodeException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/JVMCodeException.html deleted file mode 100755 index 2b83e0a3..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/JVMCodeException.html +++ /dev/null @@ -1,1027 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.JVMCodeException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.JVMCodeException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/MatchException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/MatchException.html deleted file mode 100755 index 651146a1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/MatchException.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.MatchException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.MatchException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassBodyException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassBodyException.html deleted file mode 100755 index 6b444a9b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassBodyException.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCClassBodyException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCClassBodyException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassException.html deleted file mode 100755 index 0ffbf555..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCClassException.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCClassException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCClassException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCExcept.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCExcept.html deleted file mode 100755 index bd171bb8..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCExcept.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCExcept - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCExcept

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCException.html deleted file mode 100755 index 88fd6ee8..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCException.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCMethodException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCMethodException.html deleted file mode 100755 index d57a8a33..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCMethodException.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCMethodException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCMethodException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCStatementException.html b/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCStatementException.html deleted file mode 100755 index b9532081..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/class-use/SCStatementException.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - -Uses of Class mycompiler.myexception.SCStatementException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myexception.SCStatementException

    -
    -
    -
      -
    • - - - - - - - - - - - - -
      Packages that use SCStatementException 
      PackageDescription
      mycompiler.mystatement 
      -
    • -
    • -
        -
      • - - -

        Uses of SCStatementException in mycompiler.mystatement

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods in mycompiler.mystatement that throw SCStatementException 
        Modifier and TypeMethod and Description
        voidLocalVarDecl.check_anz(Type type, - de.dhbwstuttgart.typeinference.Menge paralist, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidLocalVarDecl.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge<Class> classlist) 
        voidMethodCall.sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.lang.String methodname, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        voidMethodCall.sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - de.dhbwstuttgart.typeinference.Menge<Method> method, - boolean ext, - int paranum, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        voidPreDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLambdaExpression.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classlist, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        abstract voidExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidBinary.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPostDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidThis.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPreIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidBlock.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidPostIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLocalVarDecl.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNotExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidLocalOrFieldVar.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidAssign.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidCastExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNegativeExpr.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidInstanceOf.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidMethodCall.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable<java.lang.String,java.lang.String> bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidNewClass.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable bh, - java.util.Hashtable<java.lang.String,java.lang.String> ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh) 
        voidReceiver.sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        -
      • -
      -
    • -
    -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/package-frame.html b/doc/LambdaJavadoc/mycompiler/myexception/package-frame.html deleted file mode 100755 index 07e40a09..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/package-frame.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -mycompiler.myexception - - - - -

    mycompiler.myexception

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/package-summary.html b/doc/LambdaJavadoc/mycompiler/myexception/package-summary.html deleted file mode 100755 index 2cea0149..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/package-summary.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - -mycompiler.myexception - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.myexception

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/package-tree.html b/doc/LambdaJavadoc/mycompiler/myexception/package-tree.html deleted file mode 100755 index 03d4450d..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/package-tree.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -mycompiler.myexception Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.myexception

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myexception/package-use.html b/doc/LambdaJavadoc/mycompiler/myexception/package-use.html deleted file mode 100755 index 615c067c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myexception/package-use.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - -Uses of Package mycompiler.myexception - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.myexception

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/Interface.html b/doc/LambdaJavadoc/mycompiler/myinterface/Interface.html deleted file mode 100755 index 51e0d932..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/Interface.html +++ /dev/null @@ -1,427 +0,0 @@ - - - - - -Interface - - - - - - - - - - - -
    -
    mycompiler.myinterface
    -

    Class Interface

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Interface
      -extends AClassOrInterface
      -
      Die Klasse stellt die Definition eines Interfaces dar.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Interface

          -
          public Interface()
          -
        • -
        - - - -
          -
        • -

          Interface

          -
          public Interface(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          Interface

          -
          public Interface(java.lang.String name,
          -         Modifiers mod)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getParaList

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getParaList()
          -
        • -
        - - - -
          -
        • -

          setParaList

          -
          public void setParaList(de.dhbwstuttgart.typeinference.Menge<Type> paralist)
          -
        • -
        - - - -
          -
        • -

          setContainedTypes

          -
          public void setContainedTypes(de.dhbwstuttgart.typeinference.Menge<Type> containedTypes)
          -
        • -
        - - - -
          -
        • -

          getContainedTypes

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getContainedTypes()
          -
        • -
        - - - - - - - -
          -
        • -

          getInterfaceBody

          -
          public InterfaceBody getInterfaceBody()
          -
        • -
        - - - -
          -
        • -

          setInterfaceBody

          -
          public void setInterfaceBody(InterfaceBody ib)
          -
        • -
        - - - - - - - -
          -
        • -

          isAGenericType

          -
          public boolean isAGenericType(RefType type)
          -
        • -
        - - - -
          -
        • -

          wandleRefTypeAttributes2GenericAttributes

          -
          public void wandleRefTypeAttributes2GenericAttributes()
          -
          Alle RefTypes, die hier im Interface definiert sind - bspw: E doSomething() - und eigentlich Generics sind werden zu generics gewandelt
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/InterfaceBody.html b/doc/LambdaJavadoc/mycompiler/myinterface/InterfaceBody.html deleted file mode 100755 index b08f5813..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/InterfaceBody.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - -InterfaceBody - - - - - - - - - - - -
    -
    mycompiler.myinterface
    -

    Class InterfaceBody

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myinterface.InterfaceBody
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class InterfaceBody
      -extends java.lang.Object
      -
      Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- - und Mehtodendefinitionen.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        InterfaceBody() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddElement(FieldDecl fd) -
        Fuegt ein neues Element (Konstantendefinition oder abstrakte - Methode) ein.
        -
        voidcodegen(ClassFile cf, - de.dhbwstuttgart.typeinference.Menge paralist) 
        de.dhbwstuttgart.typeinference.Menge<Constant>getConstantVektor() 
        de.dhbwstuttgart.typeinference.Menge<Method>getMethodVektor() 
        voidsetConstantVektor(de.dhbwstuttgart.typeinference.Menge<Constant> constantVektor) 
        voidsetMethodVektor(de.dhbwstuttgart.typeinference.Menge<Method> methodVektor) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InterfaceBody

          -
          public InterfaceBody()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addElement

          -
          public void addElement(FieldDecl fd)
          -
          Fuegt ein neues Element (Konstantendefinition oder abstrakte - Methode) ein.
          -
        • -
        - - - -
          -
        • -

          getConstantVektor

          -
          public de.dhbwstuttgart.typeinference.Menge<Constant> getConstantVektor()
          -
        • -
        - - - -
          -
        • -

          setConstantVektor

          -
          public void setConstantVektor(de.dhbwstuttgart.typeinference.Menge<Constant> constantVektor)
          -
        • -
        - - - -
          -
        • -

          getMethodVektor

          -
          public de.dhbwstuttgart.typeinference.Menge<Method> getMethodVektor()
          -
        • -
        - - - -
          -
        • -

          setMethodVektor

          -
          public void setMethodVektor(de.dhbwstuttgart.typeinference.Menge<Method> methodVektor)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/class-use/Interface.html b/doc/LambdaJavadoc/mycompiler/myinterface/class-use/Interface.html deleted file mode 100755 index 27b37575..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/class-use/Interface.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - -Uses of Class mycompiler.myinterface.Interface - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myinterface.Interface

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/class-use/InterfaceBody.html b/doc/LambdaJavadoc/mycompiler/myinterface/class-use/InterfaceBody.html deleted file mode 100755 index 511feba6..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/class-use/InterfaceBody.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.myinterface.InterfaceBody - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myinterface.InterfaceBody

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/package-frame.html b/doc/LambdaJavadoc/mycompiler/myinterface/package-frame.html deleted file mode 100755 index af61267e..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/package-frame.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -mycompiler.myinterface - - - - -

    mycompiler.myinterface

    -
    -

    Classes

    - -
    - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/package-summary.html b/doc/LambdaJavadoc/mycompiler/myinterface/package-summary.html deleted file mode 100755 index e4c6e005..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/package-summary.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -mycompiler.myinterface - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.myinterface

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      Interface -
      Die Klasse stellt die Definition eines Interfaces dar.
      -
      InterfaceBody -
      Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- - und Mehtodendefinitionen.
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/package-tree.html b/doc/LambdaJavadoc/mycompiler/myinterface/package-tree.html deleted file mode 100755 index 73f0b290..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/package-tree.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -mycompiler.myinterface Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.myinterface

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myinterface/package-use.html b/doc/LambdaJavadoc/mycompiler/myinterface/package-use.html deleted file mode 100755 index 390f2d18..00000000 --- a/doc/LambdaJavadoc/mycompiler/myinterface/package-use.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - -Uses of Package mycompiler.myinterface - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.myinterface

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Abstract.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Abstract.html deleted file mode 100755 index 085a5690..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Abstract.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - -Abstract - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Abstract

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Abstract
      -extends Modifier
      -
      Stellt den Modifier Abstract dar.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Abstract() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Abstract

          -
          public Abstract()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Final.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Final.html deleted file mode 100755 index f55f18f0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Final.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - -Final - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Final

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Final
      -extends Modifier
      -
      Stellt den Modifier Final dar.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Final() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Final

          -
          public Final()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/InterfaceModifier.html b/doc/LambdaJavadoc/mycompiler/mymodifier/InterfaceModifier.html deleted file mode 100755 index 414642c9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/InterfaceModifier.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - -InterfaceModifier - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class InterfaceModifier

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class InterfaceModifier
      -extends Modifier
      -
      Author:
      -
      Daniel
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        InterfaceModifier() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InterfaceModifier

          -
          public InterfaceModifier()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Modifier.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Modifier.html deleted file mode 100755 index f640643f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Modifier.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - -Modifier - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Modifier

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mymodifier.Modifier
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Modifier() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        abstract shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        abstract java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Modifier

          -
          public Modifier()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public abstract short getBitmask()
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public abstract java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Modifiers.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Modifiers.html deleted file mode 100755 index a30edb5c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Modifiers.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - -Modifiers - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Modifiers

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mymodifier.Modifiers
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Modifiers
      -extends java.lang.Object
      -
      Die Klasse beinhaltet die Liste der Access-Modifier fuer eine Klasse, - Methode usw.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Modifiers() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddModifier(Modifier mod) -
        Fuegt den angegebenen Modifier zur Auflistung hinzu.
        -
        shortcalculate_access_flags() -
        Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier - zurueck.
        -
        voidensureAbstract() -
        Stellt sicher, dass ABSTRACT in der Modifierliste - vorkommt.
        -
        voidensurePublic() 
        de.dhbwstuttgart.typeinference.Menge<Modifier>getModifiers() 
        booleanincludesModifier(Modifier mod) -
        Gibt zurueck, ob der angegebene Modifier enthalten ist.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        voidsetModifier(de.dhbwstuttgart.typeinference.Menge<Modifier> modifier) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Modifiers

          -
          public Modifiers()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getModifiers

          -
          public de.dhbwstuttgart.typeinference.Menge<Modifier> getModifiers()
          -
        • -
        - - - -
          -
        • -

          setModifier

          -
          public void setModifier(de.dhbwstuttgart.typeinference.Menge<Modifier> modifier)
          -
        • -
        - - - -
          -
        • -

          addModifier

          -
          public void addModifier(Modifier mod)
          -
          Fuegt den angegebenen Modifier zur Auflistung hinzu.
          -
        • -
        - - - -
          -
        • -

          includesModifier

          -
          public boolean includesModifier(Modifier mod)
          -
          Gibt zurueck, ob der angegebene Modifier enthalten ist.
          -
        • -
        - - - -
          -
        • -

          ensureAbstract

          -
          public void ensureAbstract()
          -
          Stellt sicher, dass ABSTRACT in der Modifierliste - vorkommt. Wird u.a. bei Interfaces benoetigt.
          -
        • -
        - - - -
          -
        • -

          ensurePublic

          -
          public void ensurePublic()
          -
        • -
        - - - -
          -
        • -

          calculate_access_flags

          -
          public short calculate_access_flags()
          -
          Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier - zurueck.
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Private.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Private.html deleted file mode 100755 index 2929bf75..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Private.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -Private - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Private

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Private
      -extends Modifier
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Private() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Private

          -
          public Private()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Protected.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Protected.html deleted file mode 100755 index 3d6f5c6b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Protected.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -Protected - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Protected

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Protected
      -extends Modifier
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Protected() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Protected

          -
          public Protected()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Public.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Public.html deleted file mode 100755 index 70ffaee6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Public.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -Public - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Public

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Public
      -extends Modifier
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Public() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Public

          -
          public Public()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Static.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Static.html deleted file mode 100755 index eb79dfc8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Static.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -Static - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Static

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Static
      -extends Modifier
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Static() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Static

          -
          public Static()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/Super.html b/doc/LambdaJavadoc/mycompiler/mymodifier/Super.html deleted file mode 100755 index efa9957e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/Super.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - -Super - - - - - - - - - - - -
    -
    mycompiler.mymodifier
    -

    Class Super

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Super
      -extends Modifier
      -
      Author:
      -
      Daniel
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Super() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() -
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
        -
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Super

          -
          public Super()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBitmask

          -
          public short getBitmask()
          -
          Description copied from class: Modifier
          -
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung - zurueck.
          -
          -
          Specified by:
          -
          getBitmask in class Modifier
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Abstract.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Abstract.html deleted file mode 100755 index 5204776b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Abstract.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Abstract - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Abstract

    -
    -
    No usage of mycompiler.mymodifier.Abstract
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Final.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Final.html deleted file mode 100755 index 3ff57030..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Final.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Final - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Final

    -
    -
    No usage of mycompiler.mymodifier.Final
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/InterfaceModifier.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/InterfaceModifier.html deleted file mode 100755 index 95db8e7d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/InterfaceModifier.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.InterfaceModifier - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.InterfaceModifier

    -
    -
    No usage of mycompiler.mymodifier.InterfaceModifier
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifier.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifier.html deleted file mode 100755 index 0b495dba..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifier.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Modifier - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Modifier

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifiers.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifiers.html deleted file mode 100755 index 51eddcd5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Modifiers.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Modifiers - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Modifiers

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Private.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Private.html deleted file mode 100755 index 87dfc53c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Private.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Private - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Private

    -
    -
    No usage of mycompiler.mymodifier.Private
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Protected.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Protected.html deleted file mode 100755 index d303d51f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Protected.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Protected - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Protected

    -
    -
    No usage of mycompiler.mymodifier.Protected
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Public.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Public.html deleted file mode 100755 index 0443c0cf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Public.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Public - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Public

    -
    -
    No usage of mycompiler.mymodifier.Public
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Static.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Static.html deleted file mode 100755 index 490f6199..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Static.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Static - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Static

    -
    -
    No usage of mycompiler.mymodifier.Static
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Super.html b/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Super.html deleted file mode 100755 index 95a75e99..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/class-use/Super.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mymodifier.Super - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mymodifier.Super

    -
    -
    No usage of mycompiler.mymodifier.Super
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/package-frame.html b/doc/LambdaJavadoc/mycompiler/mymodifier/package-frame.html deleted file mode 100755 index 35687a58..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/package-frame.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -mycompiler.mymodifier - - - - -

    mycompiler.mymodifier

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/package-summary.html b/doc/LambdaJavadoc/mycompiler/mymodifier/package-summary.html deleted file mode 100755 index f7e545f3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/package-summary.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - -mycompiler.mymodifier - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mymodifier

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/package-tree.html b/doc/LambdaJavadoc/mycompiler/mymodifier/package-tree.html deleted file mode 100755 index 14082942..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/package-tree.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - -mycompiler.mymodifier Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mymodifier

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mymodifier/package-use.html b/doc/LambdaJavadoc/mycompiler/mymodifier/package-use.html deleted file mode 100755 index d5671592..00000000 --- a/doc/LambdaJavadoc/mycompiler/mymodifier/package-use.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - -Uses of Package mycompiler.mymodifier - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mymodifier

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/AddOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/AddOp.html deleted file mode 100755 index 38f516c6..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/AddOp.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - -AddOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class AddOp

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AddOp(int offset, - int variableLength) 
        -
      • -
      - - -
    • -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/AndOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/AndOp.html deleted file mode 100755 index 3cc8c2a2..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/AndOp.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - -AndOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class AndOp

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AndOp

          -
          public AndOp(int offset,
          -     int variableLength)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/DivideOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/DivideOp.html deleted file mode 100755 index 27234d03..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/DivideOp.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -DivideOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class DivideOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/EqualOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/EqualOp.html deleted file mode 100755 index 8c8b0967..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/EqualOp.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - -EqualOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class EqualOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/GreaterEquOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/GreaterEquOp.html deleted file mode 100755 index b6867f2d..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/GreaterEquOp.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -GreaterEquOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class GreaterEquOp

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      -
      public class GreaterEquOp
      -extends RelOp
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/GreaterOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/GreaterOp.html deleted file mode 100755 index e1c93e2c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/GreaterOp.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -GreaterOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class GreaterOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/LessEquOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/LessEquOp.html deleted file mode 100755 index 65bfebe1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/LessEquOp.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -LessEquOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class LessEquOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/LessOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/LessOp.html deleted file mode 100755 index 5fd48f97..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/LessOp.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -LessOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class LessOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/LogOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/LogOp.html deleted file mode 100755 index b4639ac8..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/LogOp.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - -LogOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class LogOp

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        LogOp(int offset, - int variableLength) 
        -
      • -
      - - -
    • -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/MinusOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/MinusOp.html deleted file mode 100755 index aec8265f..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/MinusOp.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -MinusOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class MinusOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/ModuloOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/ModuloOp.html deleted file mode 100755 index a123f07a..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/ModuloOp.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -ModuloOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class ModuloOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/MulOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/MulOp.html deleted file mode 100755 index a35eb01b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/MulOp.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - -MulOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class MulOp

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          MulOp

          -
          public MulOp(int offset,
          -     int variableLength)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/NotEqualOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/NotEqualOp.html deleted file mode 100755 index 04c6c608..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/NotEqualOp.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - -NotEqualOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class NotEqualOp

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      -
      public class NotEqualOp
      -extends RelOp
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/Operator.html b/doc/LambdaJavadoc/mycompiler/myoperator/Operator.html deleted file mode 100755 index d543d5d3..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/Operator.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - -Operator - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class Operator

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myoperator.Operator
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/OrOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/OrOp.html deleted file mode 100755 index f2c908ea..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/OrOp.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - -OrOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class OrOp

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OrOp

          -
          public OrOp(int offset,
          -    int variableLength)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/PlusOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/PlusOp.html deleted file mode 100755 index 22db9817..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/PlusOp.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -PlusOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class PlusOp

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        PlusOp(int offset, - int variableLength) 
        -
      • -
      - - -
    • -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/RelOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/RelOp.html deleted file mode 100755 index 8eaf1e65..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/RelOp.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - -RelOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class RelOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/TimesOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/TimesOp.html deleted file mode 100755 index 8642489c..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/TimesOp.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -TimesOp - - - - - - - - - - - -
    -
    mycompiler.myoperator
    -

    Class TimesOp

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AddOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AddOp.html deleted file mode 100755 index 1299dc06..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AddOp.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.AddOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.AddOp

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AndOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AndOp.html deleted file mode 100755 index 857ce77e..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/AndOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.AndOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.AndOp

    -
    -
    No usage of mycompiler.myoperator.AndOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/DivideOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/DivideOp.html deleted file mode 100755 index 4563377e..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/DivideOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.DivideOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.DivideOp

    -
    -
    No usage of mycompiler.myoperator.DivideOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/EqualOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/EqualOp.html deleted file mode 100755 index 1ca664cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/EqualOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.EqualOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.EqualOp

    -
    -
    No usage of mycompiler.myoperator.EqualOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterEquOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterEquOp.html deleted file mode 100755 index ba11e9d8..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterEquOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.GreaterEquOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.GreaterEquOp

    -
    -
    No usage of mycompiler.myoperator.GreaterEquOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterOp.html deleted file mode 100755 index c1978453..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/GreaterOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.GreaterOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.GreaterOp

    -
    -
    No usage of mycompiler.myoperator.GreaterOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessEquOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessEquOp.html deleted file mode 100755 index efae370b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessEquOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.LessEquOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.LessEquOp

    -
    -
    No usage of mycompiler.myoperator.LessEquOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessOp.html deleted file mode 100755 index b38a8785..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LessOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.LessOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.LessOp

    -
    -
    No usage of mycompiler.myoperator.LessOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LogOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LogOp.html deleted file mode 100755 index 681c7581..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/LogOp.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.LogOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.LogOp

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MinusOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MinusOp.html deleted file mode 100755 index 568efaa2..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MinusOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.MinusOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.MinusOp

    -
    -
    No usage of mycompiler.myoperator.MinusOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/ModuloOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/ModuloOp.html deleted file mode 100755 index c1e37b04..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/ModuloOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.ModuloOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.ModuloOp

    -
    -
    No usage of mycompiler.myoperator.ModuloOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MulOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MulOp.html deleted file mode 100755 index bbb64aa6..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/MulOp.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.MulOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.MulOp

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/NotEqualOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/NotEqualOp.html deleted file mode 100755 index deae8a51..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/NotEqualOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.NotEqualOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.NotEqualOp

    -
    -
    No usage of mycompiler.myoperator.NotEqualOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/Operator.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/Operator.html deleted file mode 100755 index 847aedc1..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/Operator.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.Operator - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.Operator

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/OrOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/OrOp.html deleted file mode 100755 index 61ad0c90..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/OrOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.OrOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.OrOp

    -
    -
    No usage of mycompiler.myoperator.OrOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/PlusOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/PlusOp.html deleted file mode 100755 index c7acfe46..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/PlusOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.PlusOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.PlusOp

    -
    -
    No usage of mycompiler.myoperator.PlusOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/RelOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/RelOp.html deleted file mode 100755 index f110f4ef..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/RelOp.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.RelOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.RelOp

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/TimesOp.html b/doc/LambdaJavadoc/mycompiler/myoperator/class-use/TimesOp.html deleted file mode 100755 index ccf102b3..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/class-use/TimesOp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myoperator.TimesOp - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myoperator.TimesOp

    -
    -
    No usage of mycompiler.myoperator.TimesOp
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/package-frame.html b/doc/LambdaJavadoc/mycompiler/myoperator/package-frame.html deleted file mode 100755 index 6f6e20d4..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -mycompiler.myoperator - - - - -

    mycompiler.myoperator

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/package-summary.html b/doc/LambdaJavadoc/mycompiler/myoperator/package-summary.html deleted file mode 100755 index 65ddb652..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/package-summary.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - -mycompiler.myoperator - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.myoperator

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/package-tree.html b/doc/LambdaJavadoc/mycompiler/myoperator/package-tree.html deleted file mode 100755 index 6c11f4fa..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/package-tree.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - -mycompiler.myoperator Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.myoperator

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myoperator/package-use.html b/doc/LambdaJavadoc/mycompiler/myoperator/package-use.html deleted file mode 100755 index 90636c6d..00000000 --- a/doc/LambdaJavadoc/mycompiler/myoperator/package-use.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - -Uses of Package mycompiler.myoperator - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.myoperator

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/ClassAndParameter.html b/doc/LambdaJavadoc/mycompiler/myparser/ClassAndParameter.html deleted file mode 100755 index fa318aae..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/ClassAndParameter.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - -ClassAndParameter - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class ClassAndParameter

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.ClassAndParameter
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ClassAndParameter
      -extends java.lang.Object
      -
      Hilfskonstrukt, um die Grammatik fuer einen Klassenheader - ueberschaubar zu halten. Klassenname und optionale Generics - werden hiermit kombiniert und sofort nach dem Parsen in der - Klasse Class zueruck aufgeloest.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetName() 
        ParaListgetParalist() 
        de.dhbwstuttgart.typeinference.Menge<Type>getParaMenge() 
        voidsetName(java.lang.String name) 
        voidsetParalist(ParaList plist) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ClassAndParameter

          -
          public ClassAndParameter(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          ClassAndParameter

          -
          public ClassAndParameter(java.lang.String name,
          -                 ParaList plist)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getParaMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getParaMenge()
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getParalist

          -
          public ParaList getParalist()
          -
        • -
        - - - -
          -
        • -

          setParalist

          -
          public void setParalist(ParaList plist)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/InterfaceAndParameter.html b/doc/LambdaJavadoc/mycompiler/myparser/InterfaceAndParameter.html deleted file mode 100755 index a2f7b277..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/InterfaceAndParameter.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - -InterfaceAndParameter - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class InterfaceAndParameter

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.InterfaceAndParameter
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class InterfaceAndParameter
      -extends java.lang.Object
      -
      Hilfskonstrukt, um die Grammatik fuer einen Interfaceheader - ueberschaubar zu halten. Interface und optionale Generics - werden hiermit kombiniert und sofort nach dem Parsen in der - Klasse Interface zueruck aufgeloest.
      -
      Author:
      -
      HOTI
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetName() 
        ParaListgetParalist() 
        de.dhbwstuttgart.typeinference.Menge<Type>getParaMenge() 
        voidsetName(java.lang.String name) 
        voidsetParalist(ParaList plist) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InterfaceAndParameter

          -
          public InterfaceAndParameter(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          InterfaceAndParameter

          -
          public InterfaceAndParameter(java.lang.String name,
          -                     ParaList plist)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getParaMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getParaMenge()
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getParalist

          -
          public ParaList getParalist()
          -
        • -
        - - - -
          -
        • -

          setParalist

          -
          public void setParalist(ParaList plist)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/InterfaceList.html b/doc/LambdaJavadoc/mycompiler/myparser/InterfaceList.html deleted file mode 100755 index c9436e03..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/InterfaceList.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - -InterfaceList - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class InterfaceList

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.InterfaceList
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class InterfaceList
      -extends java.lang.Object
      -
      Hilfskonstrukt fuer die Grammatik, um ungepruefte - Typcasts fuer Mengeen zu umgehen. Wird nuer fuer den - Parser benoetigt.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        InterfaceList() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddInterface(UsedId uid) 
        de.dhbwstuttgart.typeinference.Menge<UsedId>getMenge() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InterfaceList

          -
          public InterfaceList()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addInterface

          -
          public void addInterface(UsedId uid)
          -
        • -
        - - - -
          -
        • -

          getMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<UsedId> getMenge()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/JavaLexer.html b/doc/LambdaJavadoc/mycompiler/myparser/JavaLexer.html deleted file mode 100755 index e912b4be..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/JavaLexer.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - -JavaLexer - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class JavaLexer

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.JavaLexer
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      Scanner
      -
      -
      -
      -
      public class JavaLexer
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        JavaLexer(java.io.InputStream instream) 
        JavaLexer(java.io.Reader reader) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        booleanyylex() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JavaLexer

          -
          public JavaLexer(java.io.Reader reader)
          -
        • -
        - - - -
          -
        • -

          JavaLexer

          -
          public JavaLexer(java.io.InputStream instream)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          yylex

          -
          public boolean yylex()
          -              throws java.io.IOException
          -
          Throws:
          -
          java.io.IOException
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.html b/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.html deleted file mode 100755 index 8a64d3dd..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.html +++ /dev/null @@ -1,1446 +0,0 @@ - - - - - -JavaParser - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class JavaParser

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.JavaParser
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      JavaCompiler
      -
      -
      -
      -
      public class JavaParser
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyException.html b/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyException.html deleted file mode 100755 index e438677b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyException.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - -JavaParser.yyException - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class JavaParser.yyException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • mycompiler.myparser.JavaParser.yyException
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      Enclosing class:
      -
      JavaParser
      -
      -
      -
      -
      public static class JavaParser.yyException
      -extends java.lang.Exception
      -
      thrown for irrecoverable syntax errors and stack overflow.
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        Tokentoken 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        JavaParser.yyException(java.lang.String message, - Token token) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          token

          -
          public Token token
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JavaParser.yyException

          -
          public JavaParser.yyException(java.lang.String message,
          -                      Token token)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyInput.html b/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyInput.html deleted file mode 100755 index ae990280..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/JavaParser.yyInput.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - -JavaParser.yyInput - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Interface JavaParser.yyInput

    -
    -
    -
    -
      -
    • -
      -
      All Known Implementing Classes:
      -
      Scanner
      -
      -
      -
      Enclosing class:
      -
      JavaParser
      -
      -
      -
      -
      public static interface JavaParser.yyInput
      -
      must be implemented by a scanner object to supply input to the parser.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        booleanadvance() -
        move on to next token.
        -
        inttoken() -
        classifies current token.
        -
        java.lang.Objectvalue() -
        associated with current token.
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          advance

          -
          boolean advance()
          -                throws java.io.IOException
          -
          move on to next token.
          -
          Returns:
          false if positioned beyond tokens.
          -
          Throws:
          -
          IOException - on input error.
          -
        • -
        - - - -
          -
        • -

          token

          -
          int token()
          -
          classifies current token. - Should not be called if advance() returned false.
          -
          Returns:
          current %token or single character.
          -
        • -
        - - - -
          -
        • -

          value

          -
          java.lang.Object value()
          -
          associated with current token. - Should not be called if advance() returned false.
          -
          Returns:
          value for token().
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/Scanner.html b/doc/LambdaJavadoc/mycompiler/myparser/Scanner.html deleted file mode 100755 index 2162ca4e..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/Scanner.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - -Scanner - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class Scanner

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Scanner(java.io.Reader reader) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        booleanadvance() -
        move on to next token.
        -
        inttoken() -
        classifies current token.
        -
        java.lang.Objectvalue() -
        associated with current token.
        -
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Scanner

          -
          public Scanner(java.io.Reader reader)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          token

          -
          public int token()
          -
          Description copied from interface: JavaParser.yyInput
          -
          classifies current token. - Should not be called if advance() returned false.
          -
          -
          Specified by:
          -
          token in interface JavaParser.yyInput
          -
          Returns:
          current %token or single character.
          -
        • -
        - - - -
          -
        • -

          advance

          -
          public boolean advance()
          -                throws java.io.IOException
          -
          Description copied from interface: JavaParser.yyInput
          -
          move on to next token.
          -
          -
          Specified by:
          -
          advance in interface JavaParser.yyInput
          -
          Returns:
          false if positioned beyond tokens.
          -
          Throws:
          -
          IOException - on input error.
          -
        • -
        - - - -
          -
        • -

          value

          -
          public java.lang.Object value()
          -
          Description copied from interface: JavaParser.yyInput
          -
          associated with current token. - Should not be called if advance() returned false.
          -
          -
          Specified by:
          -
          value in interface JavaParser.yyInput
          -
          Returns:
          value for token().
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/Token.html b/doc/LambdaJavadoc/mycompiler/myparser/Token.html deleted file mode 100755 index ea8ed348..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/Token.html +++ /dev/null @@ -1,375 +0,0 @@ - - - - - -Token - - - - - - - - - - - -
    -
    mycompiler.myparser
    -

    Class Token

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.myparser.Token
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Token
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        java.lang.Objecttoken 
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          token

          -
          public java.lang.Object token
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -
        • -
        - - - -
          -
        • -

          getLexem

          -
          public java.lang.String getLexem()
          -
        • -
        - - - -
          -
        • -

          String2Int

          -
          public int String2Int()
          -
        • -
        - - - -
          -
        • -

          String2Long

          -
          public long String2Long()
          -
        • -
        - - - -
          -
        • -

          String2Float

          -
          public float String2Float()
          -
        • -
        - - - -
          -
        • -

          String2Double

          -
          public double String2Double()
          -
        • -
        - - - -
          -
        • -

          CharInString

          -
          public char CharInString()
          -
        • -
        - - - -
          -
        • -

          String2Bool

          -
          public boolean String2Bool()
          -
        • -
        - - - -
          -
        • -

          get_String

          -
          public java.lang.String get_String()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/ClassAndParameter.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/ClassAndParameter.html deleted file mode 100755 index 9332b4a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/ClassAndParameter.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.ClassAndParameter - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.ClassAndParameter

    -
    -
    No usage of mycompiler.myparser.ClassAndParameter
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceAndParameter.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceAndParameter.html deleted file mode 100755 index c36316c5..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceAndParameter.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.InterfaceAndParameter - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.InterfaceAndParameter

    -
    -
    No usage of mycompiler.myparser.InterfaceAndParameter
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceList.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceList.html deleted file mode 100755 index 610dc3be..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/InterfaceList.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.InterfaceList - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.InterfaceList

    -
    -
    No usage of mycompiler.myparser.InterfaceList
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaLexer.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaLexer.html deleted file mode 100755 index 40f10b7b..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaLexer.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.JavaLexer - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.JavaLexer

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.html deleted file mode 100755 index 74d33594..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.JavaParser - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.JavaParser

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyException.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyException.html deleted file mode 100755 index ab9530e5..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyException.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.JavaParser.yyException - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.JavaParser.yyException

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html deleted file mode 100755 index 09f65fb2..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - -Uses of Interface mycompiler.myparser.JavaParser.yyInput - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.myparser.JavaParser.yyInput

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/Scanner.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/Scanner.html deleted file mode 100755 index f9b4afb3..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/Scanner.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.Scanner - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.Scanner

    -
    -
    No usage of mycompiler.myparser.Scanner
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/class-use/Token.html b/doc/LambdaJavadoc/mycompiler/myparser/class-use/Token.html deleted file mode 100755 index 824eb7d0..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/class-use/Token.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -Uses of Class mycompiler.myparser.Token - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.myparser.Token

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/package-frame.html b/doc/LambdaJavadoc/mycompiler/myparser/package-frame.html deleted file mode 100755 index dccd5d39..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/package-frame.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -mycompiler.myparser - - - - -

    mycompiler.myparser

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/package-summary.html b/doc/LambdaJavadoc/mycompiler/myparser/package-summary.html deleted file mode 100755 index 1c39e23a..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/package-summary.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -mycompiler.myparser - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.myparser

    -
    -
    -
      -
    • - - - - - - - - - - - - -
      Interface Summary 
      InterfaceDescription
      JavaParser.yyInput -
      must be implemented by a scanner object to supply input to the parser.
      -
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      ClassAndParameter -
      Hilfskonstrukt, um die Grammatik fuer einen Klassenheader - ueberschaubar zu halten.
      -
      InterfaceAndParameter -
      Hilfskonstrukt, um die Grammatik fuer einen Interfaceheader - ueberschaubar zu halten.
      -
      InterfaceList -
      Hilfskonstrukt fuer die Grammatik, um ungepruefte - Typcasts fuer Mengeen zu umgehen.
      -
      JavaLexer 
      JavaParser 
      Scanner 
      Token 
      -
    • -
    • - - - - - - - - - - - - -
      Exception Summary 
      ExceptionDescription
      JavaParser.yyException -
      thrown for irrecoverable syntax errors and stack overflow.
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/package-tree.html b/doc/LambdaJavadoc/mycompiler/myparser/package-tree.html deleted file mode 100755 index f3d99f84..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/package-tree.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -mycompiler.myparser Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.myparser

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/myparser/package-use.html b/doc/LambdaJavadoc/mycompiler/myparser/package-use.html deleted file mode 100755 index d438760a..00000000 --- a/doc/LambdaJavadoc/mycompiler/myparser/package-use.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - -Uses of Package mycompiler.myparser - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.myparser

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/ArgumentList.html b/doc/LambdaJavadoc/mycompiler/mystatement/ArgumentList.html deleted file mode 100755 index 76a9f50c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/ArgumentList.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - -ArgumentList - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class ArgumentList

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.ArgumentList
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ArgumentList
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        de.dhbwstuttgart.typeinference.Menge<Expr>expr 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ArgumentList() 
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          expr

          -
          public de.dhbwstuttgart.typeinference.Menge<Expr> expr
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ArgumentList

          -
          public ArgumentList()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          get_codegen_ArgumentList

          -
          public java.lang.String get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
          -
        • -
        - - - -
          -
        • -

          get_firstElement

          -
          public java.lang.Object get_firstElement()
          -
        • -
        - - - -
          -
        • -

          size

          -
          public int size()
          -
          Returns:
          Anzahl der Argumente in der ArgumentList
          -
        • -
        - - - -
          -
        • -

          argumentAt

          -
          public Expr argumentAt(int n)
          -
          Parameters:
          n -
          -
          Returns:
          Das Element (Expr) in der Argumentliste an der Stelle n
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Assign.html b/doc/LambdaJavadoc/mycompiler/mystatement/Assign.html deleted file mode 100755 index 807cb579..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Assign.html +++ /dev/null @@ -1,623 +0,0 @@ - - - - - -Assign - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Assign

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          expr1

          -
          public Expr expr1
          -
        • -
        - - - -
          -
        • -

          expr2

          -
          public Expr expr2
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Assign

          -
          public Assign(int offset,
          -      int variableLength)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Binary.html b/doc/LambdaJavadoc/mycompiler/mystatement/Binary.html deleted file mode 100755 index a68af07b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Binary.html +++ /dev/null @@ -1,687 +0,0 @@ - - - - - -Binary - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Binary

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/BinaryExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/BinaryExpr.html deleted file mode 100755 index 339119a9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/BinaryExpr.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - -BinaryExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class BinaryExpr

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BinaryExpr

          -
          public BinaryExpr(int offset,
          -          int variableLength)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Block.html b/doc/LambdaJavadoc/mycompiler/mystatement/Block.html deleted file mode 100755 index 407a41b3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Block.html +++ /dev/null @@ -1,622 +0,0 @@ - - - - - -Block - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Block

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/BoolLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/BoolLiteral.html deleted file mode 100755 index 6b4a094a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/BoolLiteral.html +++ /dev/null @@ -1,530 +0,0 @@ - - - - - -BoolLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class BoolLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BoolLiteral

          -
          public BoolLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          set_Bool

          -
          public void set_Bool(boolean b)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype BooleanType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/CastExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/CastExpr.html deleted file mode 100755 index 19c960d2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/CastExpr.html +++ /dev/null @@ -1,561 +0,0 @@ - - - - - -CastExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class CastExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/CharLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/CharLiteral.html deleted file mode 100755 index 9f2fcaad..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/CharLiteral.html +++ /dev/null @@ -1,530 +0,0 @@ - - - - - -CharLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class CharLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CharLiteral

          -
          public CharLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          set_Char

          -
          public void set_Char(char c)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype CharacterType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/DoubleLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/DoubleLiteral.html deleted file mode 100755 index bfa0047c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/DoubleLiteral.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - -DoubleLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class DoubleLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          DoubleLiteral

          -
          public DoubleLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_Double

          -
          public void set_Double(double i)
          -
        • -
        - - - -
          -
        • -

          get_Double

          -
          public double get_Double()
          -
        • -
        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype IntegerType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/EmptyStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/EmptyStmt.html deleted file mode 100755 index c3ade534..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/EmptyStmt.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - -EmptyStmt - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class EmptyStmt

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Expr.html b/doc/LambdaJavadoc/mycompiler/mystatement/Expr.html deleted file mode 100755 index 3d06151c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Expr.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - -Expr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Expr

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Expr

          -
          public Expr(int offset,
          -    int variableLength)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/ExprStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/ExprStmt.html deleted file mode 100755 index cc6d56d3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/ExprStmt.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - -ExprStmt - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class ExprStmt

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ExprStmt

          -
          public ExprStmt(int offset,
          -        int variableLength)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
        • -
        - - - -
          -
        • -

          getType

          -
          public Type getType()
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/FloatLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/FloatLiteral.html deleted file mode 100755 index e59cbba5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/FloatLiteral.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - -FloatLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class FloatLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FloatLiteral

          -
          public FloatLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_Float

          -
          public void set_Float(float i)
          -
        • -
        - - - -
          -
        • -

          get_Float

          -
          public float get_Float()
          -
        • -
        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype IntegerType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/ForStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/ForStmt.html deleted file mode 100755 index f74f8862..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/ForStmt.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - -ForStmt - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class ForStmt

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ForStmt

          -
          public ForStmt(int offset,
          -       int variableLength)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/IfStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/IfStmt.html deleted file mode 100755 index 727b9244..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/IfStmt.html +++ /dev/null @@ -1,571 +0,0 @@ - - - - - -IfStmt - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class IfStmt

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/InstVar.html b/doc/LambdaJavadoc/mycompiler/mystatement/InstVar.html deleted file mode 100755 index 26d9b54d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/InstVar.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - -InstVar - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class InstVar

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InstVar

          -
          public InstVar(Expr e,
          -       java.lang.String n,
          -       int offset)
          -
        • -
        - - - -
          -
        • -

          InstVar

          -
          public InstVar(java.lang.String n,
          -       java.lang.String t,
          -       int offset)
          -
        • -
        - - - -
          -
        • -

          InstVar

          -
          public InstVar(UsedId ui,
          -       int offset,
          -       int variableLength)
          -
          macht aus einem UsedId mit einem Menge von Strings eine InstVar -
          Author: Martin Pl�micke PL 05-08-17
          -
          Parameters:
          ui -
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_codegen_UsedId

          -
          public java.lang.String get_codegen_UsedId()
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRInstVar

          -
          public CTripleSet TRInstVar(CTriple triple,
          -                   CSupportData supportData)
          -
          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
          Author: J�rg B�uerle
          -
          Parameters:
          triple -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - -
          -
        • -

          addOffsetsToExpression

          -
          public void addOffsetsToExpression(CTypeAssumption localAssumption,
          -                          java.lang.String NameVariable,
          -                          boolean isMemberVariable)
          -
          -
          Specified by:
          -
          addOffsetsToExpression in class Expr
          -
          -
        • -
        - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/InstanceOf.html b/doc/LambdaJavadoc/mycompiler/mystatement/InstanceOf.html deleted file mode 100755 index c4d3f98c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/InstanceOf.html +++ /dev/null @@ -1,551 +0,0 @@ - - - - - -InstanceOf - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class InstanceOf

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/IntLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/IntLiteral.html deleted file mode 100755 index cbc680c1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/IntLiteral.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - -IntLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class IntLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          IntLiteral

          -
          public IntLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_Int

          -
          public void set_Int(int i)
          -
        • -
        - - - -
          -
        • -

          get_Int

          -
          public int get_Int()
          -
        • -
        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype IntegerType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/LambdaExpression.html b/doc/LambdaJavadoc/mycompiler/mystatement/LambdaExpression.html deleted file mode 100755 index 3a670a18..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/LambdaExpression.html +++ /dev/null @@ -1,636 +0,0 @@ - - - - - -LambdaExpression - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class LambdaExpression

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset, ITypeReplacementListener, Typable
      -
      -
      -
      -
      public class LambdaExpression
      -extends Expr
      -
      Author:
      -
      A10023 - Andreas Stadelmeier - Momentan erweitert LambdaExpression noch Expr und erbt dadurch auch von ExprStatement ist also auch ein Statement - - LambdaExpression Aufbau: - ( ParameterList ) -> { method_body };
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Literal.html b/doc/LambdaJavadoc/mycompiler/mystatement/Literal.html deleted file mode 100755 index a3ecc429..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Literal.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - -Literal - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Literal

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Literal

          -
          public Literal(int offset,
          -       int variableLength)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setPrimitiveFlag

          -
          public void setPrimitiveFlag(boolean b)
          -
        • -
        - - - -
          -
        • -

          getPrimitiveFlag

          -
          public boolean getPrimitiveFlag()
          -
        • -
        - - - - - - - -
          -
        • -

          ConstantCodegen

          -
          public short ConstantCodegen(ClassFile cf)
          -                      throws JVMCodeException
          -
          Erzeugt die benoetigten Konstanteneintraege, die den Wert - des Literals darstellen.
          -
          Throws:
          -
          JVMCodeException
          -
        • -
        - - - -
          -
        • -

          addOffsetsToExpression

          -
          public void addOffsetsToExpression(CTypeAssumption localAssumption,
          -                          java.lang.String NameVariable,
          -                          boolean isMemberVariable)
          -
          -
          Specified by:
          -
          addOffsetsToExpression in class Expr
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/LocalOrFieldVar.html b/doc/LambdaJavadoc/mycompiler/mystatement/LocalOrFieldVar.html deleted file mode 100755 index b46099c2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/LocalOrFieldVar.html +++ /dev/null @@ -1,566 +0,0 @@ - - - - - -LocalOrFieldVar - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class LocalOrFieldVar

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/LocalVarDecl.html b/doc/LambdaJavadoc/mycompiler/mystatement/LocalVarDecl.html deleted file mode 100755 index b5ecdfba..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/LocalVarDecl.html +++ /dev/null @@ -1,695 +0,0 @@ - - - - - -LocalVarDecl - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class LocalVarDecl

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          block

          -
          public Block block
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LocalVarDecl

          -
          public LocalVarDecl(int offset,
          -            int variableLength)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/LongLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/LongLiteral.html deleted file mode 100755 index d4707c22..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/LongLiteral.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - -LongLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class LongLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LongLiteral

          -
          public LongLiteral()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_Long

          -
          public void set_Long(long i)
          -
        • -
        - - - -
          -
        • -

          get_Long

          -
          public long get_Long()
          -
        • -
        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRExp

          -
          public CTripleSet TRExp(CSubstitutionSet sigma,
          -               CTypeAssumptionSet V,
          -               CSupportData supportData)
          -
          Workaround: �berschreibt Methode TRExp aus der Super-Klasse - Literal, weil die Implementierung von Unify (noch) nicht mit - Basetypes umgehen kann.
          - Anstatt den Basetype IntegerType zur�ckzugeben, wird ein - RefType zur�ckgegeben.
          - Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der - Super-Klasse verwendet wird. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          TRExp in class Literal
          -
          Parameters:
          sigma -
          V -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/MethodCall.html b/doc/LambdaJavadoc/mycompiler/mystatement/MethodCall.html deleted file mode 100755 index b3b5823d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/MethodCall.html +++ /dev/null @@ -1,817 +0,0 @@ - - - - - -MethodCall - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class MethodCall

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          MethodCall

          -
          public MethodCall(int offset,
          -          int variableLength)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          set_ArgumentList

          -
          public void set_ArgumentList(ArgumentList al)
          -
        • -
        - - - -
          -
        • -

          getArgumentList

          -
          public ArgumentList getArgumentList()
          -
        • -
        - - - -
          -
        • -

          get_Receiver

          -
          public Receiver get_Receiver()
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Specified by:
          -
          get_Name in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          set_Name

          -
          public void set_Name(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable<java.lang.String,java.lang.String> bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable<java.lang.String,java.util.Hashtable> parabh)
          -              throws SCStatementException
          -
          -
          Specified by:
          -
          sc_check in class Expr
          -
          Throws:
          -
          SCStatementException
          -
        • -
        - - - -
          -
        • -

          sc_check_get_Method

          -
          public void sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                       java.lang.String methodname,
          -                       boolean ext,
          -                       java.util.Hashtable parach,
          -                       java.util.Hashtable parabh)
          -                         throws SCStatementException
          -
          Throws:
          -
          SCStatementException
          -
        • -
        - - - -
          -
        • -

          sc_check_uebergabe

          -
          public void sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                      de.dhbwstuttgart.typeinference.Menge<Method> method,
          -                      boolean ext,
          -                      int paranum,
          -                      java.util.Hashtable parach,
          -                      java.util.Hashtable parabh)
          -                        throws SCStatementException
          -
          Throws:
          -
          SCStatementException
          -
        • -
        - - - -
          -
        • -

          sc_check_method_kleiner

          -
          public boolean sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                              java.lang.String ist,
          -                              java.lang.String soll,
          -                              boolean ext)
          -
        • -
        - - - -
          -
        • -

          sc_init_extended_fcts

          -
          public void sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge<Method> method,
          -                         de.dhbwstuttgart.typeinference.Menge<Class> classlist,
          -                         java.lang.String methodname,
          -                         java.lang.String classname,
          -                         boolean ext)
          -
        • -
        - - - -
          -
        • -

          set_Receiver

          -
          public void set_Receiver(Receiver rec)
          -
        • -
        - - - - - - - -
          -
        • -

          set_Expr_Menge

          -
          public void set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge<Expr> v)
          -
        • -
        - - - -
          -
        • -

          add_Expr

          -
          public void add_Expr(Expr e)
          -
        • -
        - - - -
          -
        • -

          getMethodFittingMethodCallAndClassname

          -
          public Method getMethodFittingMethodCallAndClassname(java.lang.String className)
          -                                              throws JVMCodeException
          -
          hoti 4.5.06 - Diese Methode l�dt die Methodeninfos einer Methode aus der Hashtable - methodsfittingmethodcall in ein Method-Objekt - anhand der angegeben klasse
          -
          Parameters:
          className -
          -
          Returns:
          -
          Throws:
          -
          JVMCodeException
          See Also:
          methodsFittingMethodCall
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          TRMCallApp

          -
          public CTripleSet TRMCallApp(CMultiplyTuple multiTuple,
          -                    java.lang.String classOrIdentifierName,
          -                    java.lang.String methodName,
          -                    int paraCount,
          -                    boolean isConstructorCall,
          -                    CSupportData supportData)
          -
          Implementierung des Algorithmus 5.34 von Martin Pl�micke
          -
          Parameters:
          multiTuple -
          classOrIdentifierName -
          methodName -
          paraCount -
          isConstructorCall -
          supportData -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - - - - - -
          -
        • -

          addOffsetsToExpression

          -
          public void addOffsetsToExpression(CTypeAssumption localAssumption,
          -                          java.lang.String NameVariable,
          -                          boolean isMemberVariable)
          -
          -
          Specified by:
          -
          addOffsetsToExpression in class Expr
          -
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
          Returns:
          der Name der Methode, welcher dieser MethodCall aufruft.
          -
        • -
        - - - - - - - -
          -
        • -

          TYPEStmt

          -
          public ConstraintsSet TYPEStmt(TypeAssumptions assumptions)
          -
          Spezifikation: - TYPEStmt( Ass, stmt ) = - let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) - in (stmt : Void, ConS)
          -
          -
          Overrides:
          -
          TYPEStmt in class Expr
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/NegativeExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/NegativeExpr.html deleted file mode 100755 index 7477ff59..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/NegativeExpr.html +++ /dev/null @@ -1,581 +0,0 @@ - - - - - -NegativeExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class NegativeExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/NewArray.html b/doc/LambdaJavadoc/mycompiler/mystatement/NewArray.html deleted file mode 100755 index e6f13613..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/NewArray.html +++ /dev/null @@ -1,580 +0,0 @@ - - - - - -NewArray - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class NewArray

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/NewClass.html b/doc/LambdaJavadoc/mycompiler/mystatement/NewClass.html deleted file mode 100755 index b7eb2b6a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/NewClass.html +++ /dev/null @@ -1,593 +0,0 @@ - - - - - -NewClass - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class NewClass

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/NotExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/NotExpr.html deleted file mode 100755 index 1b4fc87f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/NotExpr.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - -NotExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class NotExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Null.html b/doc/LambdaJavadoc/mycompiler/mystatement/Null.html deleted file mode 100755 index 3a4776bb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Null.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - -Null - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Null

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/PositivExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/PositivExpr.html deleted file mode 100755 index 13720101..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/PositivExpr.html +++ /dev/null @@ -1,549 +0,0 @@ - - - - - -PositivExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class PositivExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/PostDecExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/PostDecExpr.html deleted file mode 100755 index a857cb82..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/PostDecExpr.html +++ /dev/null @@ -1,545 +0,0 @@ - - - - - -PostDecExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class PostDecExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/PostIncExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/PostIncExpr.html deleted file mode 100755 index 7851fbea..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/PostIncExpr.html +++ /dev/null @@ -1,545 +0,0 @@ - - - - - -PostIncExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class PostIncExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/PreDecExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/PreDecExpr.html deleted file mode 100755 index e9845f50..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/PreDecExpr.html +++ /dev/null @@ -1,545 +0,0 @@ - - - - - -PreDecExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class PreDecExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/PreIncExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/PreIncExpr.html deleted file mode 100755 index 76b2efc0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/PreIncExpr.html +++ /dev/null @@ -1,545 +0,0 @@ - - - - - -PreIncExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class PreIncExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Receiver.html b/doc/LambdaJavadoc/mycompiler/mystatement/Receiver.html deleted file mode 100755 index efad42c2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Receiver.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -Receiver - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Receiver

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.Receiver
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Receiver
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Receiver(Expr expr) -
        Autor: J�rg B�uerle
        -
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        Exprget_Expr() 
        java.lang.Stringget_Type() 
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        voidsc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) 
        voidset_Expr(Expr express) 
        java.lang.StringtoString() -

        Author: Martin Pl�micke
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Receiver

          -
          public Receiver(Expr expr)
          -
          Autor: J�rg B�uerle
          -
          Parameters:
          expr -
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          sc_check

          -
          public void sc_check(de.dhbwstuttgart.typeinference.Menge<Class> classname,
          -            java.util.Hashtable ch,
          -            java.util.Hashtable bh,
          -            boolean ext,
          -            java.util.Hashtable parach,
          -            java.util.Hashtable parabh)
          -              throws SCStatementException
          -
          Throws:
          -
          SCStatementException
          -
        • -
        - - - -
          -
        • -

          get_Type

          -
          public java.lang.String get_Type()
          -
        • -
        - - - -
          -
        • -

          set_Expr

          -
          public void set_Expr(Expr express)
          -
        • -
        - - - -
          -
        • -

          get_Expr

          -
          public Expr get_Expr()
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Martin Pl�micke
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Return.html b/doc/LambdaJavadoc/mycompiler/mystatement/Return.html deleted file mode 100755 index cefb41e5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Return.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - -Return - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Return

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/Statement.html b/doc/LambdaJavadoc/mycompiler/mystatement/Statement.html deleted file mode 100755 index 73f01589..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/Statement.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - -Statement - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class Statement

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.Statement
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/StringLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/StringLiteral.html deleted file mode 100755 index 80d92e33..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/StringLiteral.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - -StringLiteral - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class StringLiteral

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/This.html b/doc/LambdaJavadoc/mycompiler/mystatement/This.html deleted file mode 100755 index 6b5a6d82..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/This.html +++ /dev/null @@ -1,586 +0,0 @@ - - - - - -This - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class This

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/UnaryExpr.html deleted file mode 100755 index 6a106198..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryExpr.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - -UnaryExpr - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class UnaryExpr

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryMinus.html b/doc/LambdaJavadoc/mycompiler/mystatement/UnaryMinus.html deleted file mode 100755 index fe371e15..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryMinus.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - -UnaryMinus - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class UnaryMinus

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.UnaryMinus
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class UnaryMinus
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        UnaryMinus() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean neg) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryNot.html b/doc/LambdaJavadoc/mycompiler/mystatement/UnaryNot.html deleted file mode 100755 index 49a7defd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryNot.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - -UnaryNot - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class UnaryNot

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.UnaryNot
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class UnaryNot
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        UnaryNot() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidcodegen(ClassFile classfile, - CodeAttribute code, - boolean sw) 
        voidif_codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryPlus.html b/doc/LambdaJavadoc/mycompiler/mystatement/UnaryPlus.html deleted file mode 100755 index 732a09f9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/UnaryPlus.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - -UnaryPlus - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class UnaryPlus

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mystatement.UnaryPlus
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class UnaryPlus
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        UnaryPlus() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          UnaryPlus

          -
          public UnaryPlus()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/WhileStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/WhileStmt.html deleted file mode 100755 index 416c5cac..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/WhileStmt.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - -WhileStmt - - - - - - - - - - - -
    -
    mycompiler.mystatement
    -

    Class WhileStmt

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ArgumentList.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ArgumentList.html deleted file mode 100755 index 46cc9407..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ArgumentList.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.ArgumentList - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.ArgumentList

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Assign.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Assign.html deleted file mode 100755 index d1767477..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Assign.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Assign - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Assign

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Binary.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Binary.html deleted file mode 100755 index 8bc9b629..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Binary.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Binary - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Binary

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BinaryExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BinaryExpr.html deleted file mode 100755 index 6b697fdc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BinaryExpr.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.BinaryExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.BinaryExpr

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Block.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Block.html deleted file mode 100755 index b0dd94ed..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Block.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Block - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Block

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BoolLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BoolLiteral.html deleted file mode 100755 index ca51d462..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/BoolLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.BoolLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.BoolLiteral

    -
    -
    No usage of mycompiler.mystatement.BoolLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CastExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CastExpr.html deleted file mode 100755 index 286858a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CastExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.CastExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.CastExpr

    -
    -
    No usage of mycompiler.mystatement.CastExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CharLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CharLiteral.html deleted file mode 100755 index a0e51524..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/CharLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.CharLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.CharLiteral

    -
    -
    No usage of mycompiler.mystatement.CharLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/DoubleLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/DoubleLiteral.html deleted file mode 100755 index 1a1702aa..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/DoubleLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.DoubleLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.DoubleLiteral

    -
    -
    No usage of mycompiler.mystatement.DoubleLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/EmptyStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/EmptyStmt.html deleted file mode 100755 index 13ec540e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/EmptyStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.EmptyStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.EmptyStmt

    -
    -
    No usage of mycompiler.mystatement.EmptyStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Expr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Expr.html deleted file mode 100755 index 655ef581..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Expr.html +++ /dev/null @@ -1,768 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Expr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Expr

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ExprStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ExprStmt.html deleted file mode 100755 index b99392cf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ExprStmt.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.ExprStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.ExprStmt

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/FloatLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/FloatLiteral.html deleted file mode 100755 index 3edcdb56..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/FloatLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.FloatLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.FloatLiteral

    -
    -
    No usage of mycompiler.mystatement.FloatLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ForStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ForStmt.html deleted file mode 100755 index dadb3b74..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/ForStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.ForStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.ForStmt

    -
    -
    No usage of mycompiler.mystatement.ForStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IfStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IfStmt.html deleted file mode 100755 index 25634dcd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IfStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.IfStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.IfStmt

    -
    -
    No usage of mycompiler.mystatement.IfStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstVar.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstVar.html deleted file mode 100755 index e03bdf5e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstVar.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.InstVar - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.InstVar

    -
    -
    No usage of mycompiler.mystatement.InstVar
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstanceOf.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstanceOf.html deleted file mode 100755 index 1bb836d9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/InstanceOf.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.InstanceOf - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.InstanceOf

    -
    -
    No usage of mycompiler.mystatement.InstanceOf
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IntLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IntLiteral.html deleted file mode 100755 index 6686cfcd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/IntLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.IntLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.IntLiteral

    -
    -
    No usage of mycompiler.mystatement.IntLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LambdaExpression.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LambdaExpression.html deleted file mode 100755 index 41612288..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LambdaExpression.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.LambdaExpression - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.LambdaExpression

    -
    -
    No usage of mycompiler.mystatement.LambdaExpression
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Literal.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Literal.html deleted file mode 100755 index 8e01e98d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Literal.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Literal - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Literal

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html deleted file mode 100755 index 00fe8b99..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.LocalOrFieldVar - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.LocalOrFieldVar

    -
    -
    No usage of mycompiler.mystatement.LocalOrFieldVar
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalVarDecl.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalVarDecl.html deleted file mode 100755 index 2eb54b88..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LocalVarDecl.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.LocalVarDecl - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.LocalVarDecl

    -
    -
    No usage of mycompiler.mystatement.LocalVarDecl
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LongLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LongLiteral.html deleted file mode 100755 index 0f6a994c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/LongLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.LongLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.LongLiteral

    -
    -
    No usage of mycompiler.mystatement.LongLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/MethodCall.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/MethodCall.html deleted file mode 100755 index ec1fd244..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/MethodCall.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.MethodCall - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.MethodCall

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NegativeExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NegativeExpr.html deleted file mode 100755 index 79d290f4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NegativeExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.NegativeExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.NegativeExpr

    -
    -
    No usage of mycompiler.mystatement.NegativeExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewArray.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewArray.html deleted file mode 100755 index b4d2016c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewArray.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.NewArray - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.NewArray

    -
    -
    No usage of mycompiler.mystatement.NewArray
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewClass.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewClass.html deleted file mode 100755 index 0efa04d4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NewClass.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.NewClass - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.NewClass

    -
    -
    No usage of mycompiler.mystatement.NewClass
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NotExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NotExpr.html deleted file mode 100755 index 9ec09497..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/NotExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.NotExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.NotExpr

    -
    -
    No usage of mycompiler.mystatement.NotExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Null.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Null.html deleted file mode 100755 index df6963f5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Null.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Null - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Null

    -
    -
    No usage of mycompiler.mystatement.Null
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PositivExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PositivExpr.html deleted file mode 100755 index 972da9ea..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PositivExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.PositivExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.PositivExpr

    -
    -
    No usage of mycompiler.mystatement.PositivExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostDecExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostDecExpr.html deleted file mode 100755 index 1ed02c12..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostDecExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.PostDecExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.PostDecExpr

    -
    -
    No usage of mycompiler.mystatement.PostDecExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostIncExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostIncExpr.html deleted file mode 100755 index 8cf6b1cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PostIncExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.PostIncExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.PostIncExpr

    -
    -
    No usage of mycompiler.mystatement.PostIncExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreDecExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreDecExpr.html deleted file mode 100755 index ce3d4b0b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreDecExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.PreDecExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.PreDecExpr

    -
    -
    No usage of mycompiler.mystatement.PreDecExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreIncExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreIncExpr.html deleted file mode 100755 index 41515423..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/PreIncExpr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.PreIncExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.PreIncExpr

    -
    -
    No usage of mycompiler.mystatement.PreIncExpr
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Receiver.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Receiver.html deleted file mode 100755 index 981fb00b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Receiver.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Receiver - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Receiver

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Return.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Return.html deleted file mode 100755 index e6d9a07c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Return.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Return - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Return

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Statement.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Statement.html deleted file mode 100755 index 7b070344..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/Statement.html +++ /dev/null @@ -1,462 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.Statement - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.Statement

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/StringLiteral.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/StringLiteral.html deleted file mode 100755 index b03bfd2f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/StringLiteral.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.StringLiteral - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.StringLiteral

    -
    -
    No usage of mycompiler.mystatement.StringLiteral
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/This.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/This.html deleted file mode 100755 index 668b210e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/This.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.This - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.This

    -
    -
    No usage of mycompiler.mystatement.This
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryExpr.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryExpr.html deleted file mode 100755 index 1d632f4d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryExpr.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.UnaryExpr - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.UnaryExpr

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryMinus.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryMinus.html deleted file mode 100755 index f0ead35f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryMinus.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.UnaryMinus - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.UnaryMinus

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryNot.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryNot.html deleted file mode 100755 index f6cf6314..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryNot.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.UnaryNot - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.UnaryNot

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryPlus.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryPlus.html deleted file mode 100755 index 0ddc43fd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/UnaryPlus.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.UnaryPlus - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.UnaryPlus

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/WhileStmt.html b/doc/LambdaJavadoc/mycompiler/mystatement/class-use/WhileStmt.html deleted file mode 100755 index 71b3df46..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/class-use/WhileStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mystatement.WhileStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mystatement.WhileStmt

    -
    -
    No usage of mycompiler.mystatement.WhileStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/package-frame.html b/doc/LambdaJavadoc/mycompiler/mystatement/package-frame.html deleted file mode 100755 index b268b870..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/package-frame.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -mycompiler.mystatement - - - - -

    mycompiler.mystatement

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/package-summary.html b/doc/LambdaJavadoc/mycompiler/mystatement/package-summary.html deleted file mode 100755 index 21fc79af..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/package-summary.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - -mycompiler.mystatement - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mystatement

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/package-tree.html b/doc/LambdaJavadoc/mycompiler/mystatement/package-tree.html deleted file mode 100755 index 2fd8e362..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/package-tree.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - -mycompiler.mystatement Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mystatement

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mystatement/package-use.html b/doc/LambdaJavadoc/mycompiler/mystatement/package-use.html deleted file mode 100755 index 05d3ed7c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mystatement/package-use.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - -Uses of Package mycompiler.mystatement - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mystatement

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/APITest.html b/doc/LambdaJavadoc/mycompiler/mytest/APITest.html deleted file mode 100755 index 3177f507..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/APITest.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - -APITest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class APITest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.APITest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class APITest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        APITest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          APITest

          -
          public APITest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
          Parameters:
          args -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/CByteCodeTest.html b/doc/LambdaJavadoc/mycompiler/mytest/CByteCodeTest.html deleted file mode 100755 index d1c86d61..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/CByteCodeTest.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - -CByteCodeTest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class CByteCodeTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.CByteCodeTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CByteCodeTest
      -extends java.lang.Object
      -
      Testklasse zum Generieren des ByteCode.
      -
      Author:
      -
      scju
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CByteCodeTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CByteCodeTest

          -
          public CByteCodeTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -                 throws java.lang.Exception
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/CInferenceTest.html b/doc/LambdaJavadoc/mycompiler/mytest/CInferenceTest.html deleted file mode 100755 index fe892637..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/CInferenceTest.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - -CInferenceTest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class CInferenceTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.CInferenceTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CInferenceTest
      -extends java.lang.Object
      -
      Testklasse fr die Typinferenz
      -
      Author:
      -
      Timo Holzherr
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CInferenceTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CInferenceTest

          -
          public CInferenceTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -                 throws java.lang.Exception
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/CSimpleTest.html b/doc/LambdaJavadoc/mycompiler/mytest/CSimpleTest.html deleted file mode 100755 index 8e903c46..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/CSimpleTest.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - -CSimpleTest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class CSimpleTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.CSimpleTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CSimpleTest
      -extends java.lang.Object
      -
      Testklasse f�r die Compiler-API
      -
      Version:
      -
      $Date: 2013/09/22 20:12:52 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CSimpleTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CSimpleTest

          -
          public CSimpleTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -                 throws java.lang.Exception
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/CWildcardTest.html b/doc/LambdaJavadoc/mycompiler/mytest/CWildcardTest.html deleted file mode 100755 index 34c6bdf3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/CWildcardTest.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - -CWildcardTest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class CWildcardTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.CWildcardTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CWildcardTest
      -extends java.lang.Object
      -
      Testklasse fr die Wildcard Algorithmus uns Parser
      -
      Author:
      -
      Arne L�dtke
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CWildcardTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CWildcardTest

          -
          public CWildcardTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -                 throws java.lang.Exception
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/CompilerTestCase.html b/doc/LambdaJavadoc/mycompiler/mytest/CompilerTestCase.html deleted file mode 100755 index 2bee797d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/CompilerTestCase.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -CompilerTestCase - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class CompilerTestCase

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.mytest.CompilerTestCase
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class CompilerTestCase
      -extends junit.framework.TestCase
      -
      Testet den Compiler mit dem angegebenen JAV-File.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        CompilerTestCase(java.lang.String javFile) 
        CompilerTestCase(java.lang.String javFile, - java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CompilerTestCase

          -
          public CompilerTestCase(java.lang.String javFile,
          -                java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          CompilerTestCase

          -
          public CompilerTestCase(java.lang.String javFile)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/JUnitTests.html b/doc/LambdaJavadoc/mycompiler/mytest/JUnitTests.html deleted file mode 100755 index ccc225f6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/JUnitTests.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -JUnitTests - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class JUnitTests

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.JUnitTests
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class JUnitTests
      -extends java.lang.Object
      -
      Erstellt eine JUnit-Testsuite, die saemtliche Testcases enthaelt und - ausfuehrt.
      -
      Author:
      -
      SCJU
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        JUnitTests() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JUnitTests

          -
          public JUnitTests()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
        • -
        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/LambdaTest.html b/doc/LambdaJavadoc/mycompiler/mytest/LambdaTest.html deleted file mode 100755 index 5fdd4795..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/LambdaTest.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - -LambdaTest - - - - - - - - - - - -
    -
    mycompiler.mytest
    -

    Class LambdaTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytest.LambdaTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class LambdaTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        LambdaTest(java.lang.String testfile) 
        LambdaTest(de.dhbwstuttgart.typeinference.Menge<java.lang.String> testfiles) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>runTest() 
        voidrunTestAndCheckResultSet(java.lang.String classname, - java.util.HashMap<java.lang.String,java.lang.String> variableTypeAssumptions) -
        F�hrt einen Test aus, bei dem beliebig viele ResultSets entstehen d�rfen.
        -
        CTypeReconstructionResultrunTestAndGetSingularResultSet() -
        F�hrt den Test aus und geht davon aus, dass es bei der Testdatei nur eine richtige Aufl�sung f�r die Typvariablen gibt.
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LambdaTest

          -
          public LambdaTest(java.lang.String testfile)
          -
        • -
        - - - -
          -
        • -

          LambdaTest

          -
          public LambdaTest(de.dhbwstuttgart.typeinference.Menge<java.lang.String> testfiles)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
        • -
        - - - -
          -
        • -

          runTestAndCheckResultSet

          -
          public void runTestAndCheckResultSet(java.lang.String classname,
          -                            java.util.HashMap<java.lang.String,java.lang.String> variableTypeAssumptions)
          -
          F�hrt einen Test aus, bei dem beliebig viele ResultSets entstehen d�rfen. - Anschlie�end werden die Typen in der Klasse classname nach den in der HashMap variableTypeAssumptions angegebenen Annahmen gepr�ft. - Diesen Test muss jedes der ermittelten ResultSets bestehen.
          -
          Parameters:
          classname -
          variableTypeAssumptions -
          -
        • -
        - - - -
          -
        • -

          runTestAndGetSingularResultSet

          -
          public CTypeReconstructionResult runTestAndGetSingularResultSet()
          -
          F�hrt den Test aus und geht davon aus, dass es bei der Testdatei nur eine richtige Aufl�sung f�r die Typvariablen gibt. - Diese eine L�sung wird zur�ckgegeben.
          -
          Returns:
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/APITest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/APITest.html deleted file mode 100755 index b63062d8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/APITest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.APITest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.APITest

    -
    -
    No usage of mycompiler.mytest.APITest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CByteCodeTest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/CByteCodeTest.html deleted file mode 100755 index c759c133..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CByteCodeTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.CByteCodeTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.CByteCodeTest

    -
    -
    No usage of mycompiler.mytest.CByteCodeTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CInferenceTest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/CInferenceTest.html deleted file mode 100755 index aeeb3ca7..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CInferenceTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.CInferenceTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.CInferenceTest

    -
    -
    No usage of mycompiler.mytest.CInferenceTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CSimpleTest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/CSimpleTest.html deleted file mode 100755 index 0f631ae6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CSimpleTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.CSimpleTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.CSimpleTest

    -
    -
    No usage of mycompiler.mytest.CSimpleTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CWildcardTest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/CWildcardTest.html deleted file mode 100755 index fd246fe5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CWildcardTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.CWildcardTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.CWildcardTest

    -
    -
    No usage of mycompiler.mytest.CWildcardTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CompilerTestCase.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/CompilerTestCase.html deleted file mode 100755 index 3c7a8adb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/CompilerTestCase.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.CompilerTestCase - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.CompilerTestCase

    -
    -
    No usage of mycompiler.mytest.CompilerTestCase
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/JUnitTests.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/JUnitTests.html deleted file mode 100755 index 1412b3e7..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/JUnitTests.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.JUnitTests - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.JUnitTests

    -
    -
    No usage of mycompiler.mytest.JUnitTests
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/class-use/LambdaTest.html b/doc/LambdaJavadoc/mycompiler/mytest/class-use/LambdaTest.html deleted file mode 100755 index b843eee5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/class-use/LambdaTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytest.LambdaTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytest.LambdaTest

    -
    -
    No usage of mycompiler.mytest.LambdaTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytest/package-frame.html deleted file mode 100755 index 393e8747..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/package-frame.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -mycompiler.mytest - - - - -

    mycompiler.mytest

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytest/package-summary.html deleted file mode 100755 index ae7828af..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/package-summary.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - -mycompiler.mytest - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytest

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      APITest 
      CByteCodeTest -
      Testklasse zum Generieren des ByteCode.
      -
      CInferenceTest -
      Testklasse fr die Typinferenz
      -
      CompilerTestCase -
      Testet den Compiler mit dem angegebenen JAV-File.
      -
      CSimpleTest -
      Testklasse f�r die Compiler-API
      -
      CWildcardTest -
      Testklasse fr die Wildcard Algorithmus uns Parser
      -
      JUnitTests -
      Erstellt eine JUnit-Testsuite, die saemtliche Testcases enthaelt und - ausfuehrt.
      -
      LambdaTest 
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytest/package-tree.html deleted file mode 100755 index 9dcecc10..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/package-tree.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -mycompiler.mytest Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytest

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytest/package-use.html b/doc/LambdaJavadoc/mycompiler/mytest/package-use.html deleted file mode 100755 index cddb1e49..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytest/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.mytest - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytest

    -
    -
    No usage of mycompiler.mytest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/BaseType.html b/doc/LambdaJavadoc/mycompiler/mytype/BaseType.html deleted file mode 100755 index cfd8ca18..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/BaseType.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - -BaseType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class BaseType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BaseType

          -
          public BaseType(int offset)
          -
        • -
        - - - -
          -
        • -

          BaseType

          -
          public BaseType(java.lang.String name,
          -        int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public abstract BaseType clone()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class Type
          -
          -
        • -
        - - - -
          -
        • -

          IsArray

          -
          public boolean IsArray()
          -
          Author: Daniel Feinler
          - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          -
          Returns:
          the IsArray
          -
        • -
        - - - -
          -
        • -

          setArray

          -
          public void setArray(boolean IsArray)
          -
          Author: Daniel Feinler
          - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          -
          Parameters:
          IsArray - the IsArray to set
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/BooleanType.html b/doc/LambdaJavadoc/mycompiler/mytype/BooleanType.html deleted file mode 100755 index 95cdad73..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/BooleanType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -BooleanType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class BooleanType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BooleanType

          -
          public BooleanType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public BooleanType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/BoundedGenericTypeVar.html b/doc/LambdaJavadoc/mycompiler/mytype/BoundedGenericTypeVar.html deleted file mode 100755 index ac7681bf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/BoundedGenericTypeVar.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - -BoundedGenericTypeVar - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class BoundedGenericTypeVar

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      -
      public class BoundedGenericTypeVar
      -extends GenericTypeVar
      -
      Entspricht einem GenericTypeVar, jedoch mit Bounds - (d.h. vorgaben, von welchem Typ die Typevar sein darf - => extends Class x - => implements Interface y - ...
      -
      Author:
      -
      hoti 4.5.06
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BoundedGenericTypeVar

          -
          public BoundedGenericTypeVar(java.lang.String s,
          -                     int offset)
          -
        • -
        - - - -
          -
        • -

          BoundedGenericTypeVar

          -
          public BoundedGenericTypeVar(java.lang.String s,
          -                     de.dhbwstuttgart.typeinference.Menge<Type> bounds,
          -                     int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getBounds

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getBounds()
          -
        • -
        - - - -
          -
        • -

          setBounds

          -
          public void setBounds(de.dhbwstuttgart.typeinference.Menge<Type> types)
          -
        • -
        - - - -
          -
        • -

          addBound

          -
          public void addBound(Type bound)
          -
        • -
        - - - - - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class GenericTypeVar
          -
          -
        • -
        - - - -
          -
        • -

          getSignatureDefinition

          -
          public java.lang.String getSignatureDefinition()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/CRefTypeSet.html b/doc/LambdaJavadoc/mycompiler/mytype/CRefTypeSet.html deleted file mode 100755 index 2aafe6a8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/CRefTypeSet.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -CRefTypeSet - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class CRefTypeSet

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<RefType>
      -
      -
      -
      -
      public class CRefTypeSet
      -extends CMengeSet<RefType>
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/CharacterType.html b/doc/LambdaJavadoc/mycompiler/mytype/CharacterType.html deleted file mode 100755 index 1e458fba..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/CharacterType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -CharacterType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class CharacterType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CharacterType

          -
          public CharacterType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CharacterType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/DoubleType.html b/doc/LambdaJavadoc/mycompiler/mytype/DoubleType.html deleted file mode 100755 index 49bff219..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/DoubleType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -DoubleType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class DoubleType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          DoubleType

          -
          public DoubleType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public DoubleType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/ExtendsWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/ExtendsWildcardType.html deleted file mode 100755 index 2f9bcc94..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/ExtendsWildcardType.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - -ExtendsWildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class ExtendsWildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ExtendsWildcardType

          -
          public ExtendsWildcardType(int offset,
          -                   Type extendsType)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine ExtendsWildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_ExtendsType

          -
          public Type get_ExtendsType()
          -
          Author: Arne L�dtke
          - Gibt den Typen in der Wildcard zur�ck. - Beispiel: ? extends Integer. - Integer wird zur�ckgegeben.
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public ExtendsWildcardType clone()
          -
          Author: Arne L�dtke
          - Gibt einen Klon der Wildcard zur�ck. - Der Innere Typ wird auch geklont
          -
          -
          Overrides:
          -
          clone in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Vergleicht mit einem anderen Objekt.
          -
          -
          Overrides:
          -
          equals in class WildcardType
          -
          Parameters:
          obj - - Object to compare.
          -
        • -
        - - - - - - - -
          -
        • -

          GetWildcardType

          -
          public Type GetWildcardType()
          -
          Author: Arne L�dtke
          - Das gleiche wie get_ExtendsType(). - �berschreibt die Methode der Superklasse.
          -
          -
          Overrides:
          -
          GetWildcardType in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          SetWildcardType

          -
          public void SetWildcardType(Type T)
          -
          Author: Arne L�dtke
          - Setzt den Typ in der Wildcard
          -
          -
          Overrides:
          -
          SetWildcardType in class WildcardType
          -
          Parameters:
          T - - Type to be set
          -
        • -
        - - - -
          -
        • -

          getContainedType

          -
          public Type getContainedType()
          -
          Author: Arne L�dtke
          - Das gleiche wie get_ExtendsType(). - Implementiert ITypeContainer
          -
          -
          Specified by:
          -
          getContainedType in interface ITypeContainer
          -
          -
        • -
        - - - -
          -
        • -

          getMatchType

          -
          public Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
          -
          Specified by:
          -
          getMatchType in interface IMatchable
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/FloatType.html b/doc/LambdaJavadoc/mycompiler/mytype/FloatType.html deleted file mode 100755 index 19d46c64..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/FloatType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -FloatType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class FloatType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FloatType

          -
          public FloatType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public FloatType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/FreshExtendsWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/FreshExtendsWildcardType.html deleted file mode 100755 index 386f0a5c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/FreshExtendsWildcardType.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - -FreshExtendsWildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class FreshExtendsWildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FreshExtendsWildcardType

          -
          public FreshExtendsWildcardType(Type extendsBound,
          -                        int offset)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine FreshExtendsWildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class FreshWildcardType
          -
          -
        • -
        - - - - - - - -
          -
        • -

          get_ExtendsBound

          -
          public Type get_ExtendsBound()
          -
          Author: Arne L�dtke
          - Gibt die Grenze der Wildcard zur�ck
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Pr�ft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          -
          -
          Overrides:
          -
          equals in class FreshWildcardType
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getMatchType

          -
          public Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
          -
          Specified by:
          -
          getMatchType in interface IMatchable
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/FreshSuperWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/FreshSuperWildcardType.html deleted file mode 100755 index 06bc7f25..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/FreshSuperWildcardType.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - -FreshSuperWildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class FreshSuperWildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FreshSuperWildcardType

          -
          public FreshSuperWildcardType(Type superBound,
          -                      int offset)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine FreshSuperWildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class FreshWildcardType
          -
          -
        • -
        - - - - - - - -
          -
        • -

          get_SuperBound

          -
          public Type get_SuperBound()
          -
          Author: Arne L�dtke
          - Gibt die Grenze der Wildcard zur�ck
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Pr�ft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          -
          -
          Overrides:
          -
          equals in class FreshWildcardType
          -
          -
        • -
        - - - -
          -
        • -

          get_WildcardType

          -
          public SuperWildcardType get_WildcardType()
          -
          Author: Arne L�dtke
          - Gibt die passende SuperWildcardType Klasse zur�ck. - Wird f�r smaller4 verwendet
          -
          -
          Overrides:
          -
          get_WildcardType in class FreshWildcardType
          -
          -
        • -
        - - - -
          -
        • -

          getMatchType

          -
          public Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
          -
          Specified by:
          -
          getMatchType in interface IMatchable
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/FreshWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/FreshWildcardType.html deleted file mode 100755 index 26b43490..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/FreshWildcardType.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - -FreshWildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class FreshWildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FreshWildcardType

          -
          public FreshWildcardType(int offset)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine FreshWildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public FreshWildcardType clone()
          -
          Author: Arne L�dtke
          - Gibt einen Klon der Wildcard zur�ck. - Der Innere Typ wird auch geklont
          -
          -
          Overrides:
          -
          clone in class Type
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Pr�ft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          -
          -
          Overrides:
          -
          equals in class Type
          -
          -
        • -
        - - - -
          -
        • -

          get_WildcardType

          -
          public WildcardType get_WildcardType()
          -
          Author: Arne L�dtke
          - Gibt die passende WildcardType Klasse zur�ck. - Wird f�r smaller4 verwendet
          -
        • -
        - - - -
          -
        • -

          get_UpperBounds

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_UpperBounds()
          -
          Author: Arne L�dtke
          - Gibt den Menge der oberen Grenzen zur�ck
          -
        • -
        - - - -
          -
        • -

          set_UpperBounds

          -
          public void set_UpperBounds(de.dhbwstuttgart.typeinference.Menge<Type> bounds)
          -
          Author: Arne L�dtke
          - Setzt den Menge der oberen Grenzen
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/GenericTypeVar.html b/doc/LambdaJavadoc/mycompiler/mytype/GenericTypeVar.html deleted file mode 100755 index ce06a11e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/GenericTypeVar.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - -GenericTypeVar - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class GenericTypeVar

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      Direct Known Subclasses:
      -
      BoundedGenericTypeVar
      -
      -
      -
      -
      public class GenericTypeVar
      -extends Type
      -
      Version:
      -
      $Date: 2013/09/22 20:12:47 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GenericTypeVar

          -
          public GenericTypeVar(Pair genericTypeVarExtendsVar)
          -
          Parameters:
          genericTypeVarExtendsVar -
          -
        • -
        - - - -
          -
        • -

          GenericTypeVar

          -
          public GenericTypeVar(java.lang.String s,
          -              int offset)
          -
        • -
        - - - -
          -
        • -

          GenericTypeVar

          -
          public GenericTypeVar(Type tA1)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          clone

          -
          public GenericTypeVar clone()
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class Type
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          obj -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          get_codegen_Type

          -
          public java.lang.String get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
          -
          hoti 4.5.06 - Generische Typen werden im Bytecode - aus Abwaertskompatiblitaet wie Object dargestellt
          -
          -
          Overrides:
          -
          get_codegen_Type in class Type
          -
          -
        • -
        - - - -
          -
        • -

          getSignatureType

          -
          public java.lang.String getSignatureType(de.dhbwstuttgart.typeinference.Menge paralist)
          -
          Description copied from class: Type
          -
          Liefert den Typ fuer das Signature-Attribut zurueck.
          -
          -
          Overrides:
          -
          getSignatureType in class Type
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/IMatchable.html b/doc/LambdaJavadoc/mycompiler/mytype/IMatchable.html deleted file mode 100755 index f44e74d2..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/IMatchable.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -IMatchable - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Interface IMatchable

    -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        TypegetMatchType() -
        Author: Arne L�dtke
        - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll.
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getMatchType

          -
          Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/ITypeContainer.html b/doc/LambdaJavadoc/mycompiler/mytype/ITypeContainer.html deleted file mode 100755 index 9f7f750d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/ITypeContainer.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -ITypeContainer - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Interface ITypeContainer

    -
    -
    -
    -
      -
    • -
      -
      All Known Implementing Classes:
      -
      ExtendsWildcardType, SuperWildcardType
      -
      -
      -
      -
      public interface ITypeContainer
      -
      Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten. - Wird f�r diverse Hilfsmethoden verwendet.
      -
      Author:
      -
      Arne L�dtke
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        TypegetContainedType() -
        Author: Arne L�dtke
        - Das gleiche wie get_ExtendsType().
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getContainedType

          -
          Type getContainedType()
          -
          Author: Arne L�dtke
          - Das gleiche wie get_ExtendsType(). - Implementiert ITypeContainer
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/IntegerType.html b/doc/LambdaJavadoc/mycompiler/mytype/IntegerType.html deleted file mode 100755 index d08f514e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/IntegerType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -IntegerType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class IntegerType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          IntegerType

          -
          public IntegerType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public IntegerType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/LongType.html b/doc/LambdaJavadoc/mycompiler/mytype/LongType.html deleted file mode 100755 index 3312207a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/LongType.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -LongType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class LongType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LongType

          -
          public LongType()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class BaseType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public LongType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          clone in class BaseType
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/Pair.PairOperator.html b/doc/LambdaJavadoc/mycompiler/mytype/Pair.PairOperator.html deleted file mode 100755 index e8ebd617..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/Pair.PairOperator.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - -Pair.PairOperator - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Enum Pair.PairOperator

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable, java.lang.Comparable<Pair.PairOperator>
      -
      -
      -
      Enclosing class:
      -
      Pair
      -
      -
      -
      -
      public static enum Pair.PairOperator
      -extends java.lang.Enum<Pair.PairOperator>
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static Pair.PairOperatorvalueOf(java.lang.String name) -
        Returns the enum constant of this type with the specified name.
        -
        static Pair.PairOperator[]values() -
        Returns an array containing the constants of this enum type, in -the order they are declared.
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Enum

          -compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static Pair.PairOperator[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (Pair.PairOperator c : Pair.PairOperator.values())
          -    System.out.println(c);
          -
          -
          Returns:
          an array containing the constants of this enum type, in -the order they are declared
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static Pair.PairOperator valueOf(java.lang.String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          Parameters:
          name - the name of the enum constant to be returned.
          -
          Returns:
          the enum constant with the specified name
          -
          Throws:
          -
          java.lang.IllegalArgumentException - if this enum type has no constant -with the specified name
          -
          java.lang.NullPointerException - if the argument is null
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/Pair.html b/doc/LambdaJavadoc/mycompiler/mytype/Pair.html deleted file mode 100755 index 4e6f2acb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/Pair.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - -Pair - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class Pair

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytype.Pair
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Pair
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Nested Class Summary

        - - - - - - - - - - -
        Nested Classes 
        Modifier and TypeClass and Description
        static class Pair.PairOperator 
        -
      • -
      - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        booleanbSubst 
        TypeTA1 
        TypeTA2 
        -
      • -
      - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        Pairclone() -
        Author: Arne L�dtke
        - Erzeugt einen Klon des Paares.
        -
        PaircopyPair() 
        static TypecopyType(Type T) 
        booleanequals(java.lang.Object obj) -

        Author: J�rg B�uerle
        -
        Pair.PairOperatorGetOperator() -
        Author: Arne L�dtke
        - Gibt den Operator zur�ck.
        -
        TypegetTA1Copy() 
        TypegetTA2Copy() 
        booleaninstanzeEquals(java.lang.Object obj) -
        Author: Arne L�dtke
        - �berpr�ft ob die Paare die gleichen Instanzen sind.
        -
        booleanisEqual() 
        booleanisInMenge(de.dhbwstuttgart.typeinference.Menge<Pair> V) 
        booleanOperatorEqual() -
        Author: Arne L�dtke
        - Abfrage, ob Operator vom Typ Equal ist.
        -
        booleanOperatorSmaller() -
        Author: Arne L�dtke
        - Abfrage, ob Operator vom Typ Smaller ist.
        -
        booleanOperatorSmallerExtends() -
        Author: Arne L�dtke
        - Abfrage, ob Operator vom Typ SmallerExtends ist.
        -
        booleanPair_isEquiv(Pair p) 
        voidSetOperator(Pair.PairOperator operator) -
        Author: Arne L�dtke
        - Setzt den Operator
        -
        java.lang.StringtoString() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          TA1

          -
          public Type TA1
          -
        • -
        - - - -
          -
        • -

          TA2

          -
          public Type TA2
          -
        • -
        - - - -
          -
        • -

          bSubst

          -
          public boolean bSubst
          -
        • -
        -
      • -
      - - - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          isEqual

          -
          public boolean isEqual()
          -
        • -
        - - - -
          -
        • -

          copyType

          -
          public static Type copyType(Type T)
          -
        • -
        - - - -
          -
        • -

          getTA1Copy

          -
          public Type getTA1Copy()
          -
        • -
        - - - -
          -
        • -

          getTA2Copy

          -
          public Type getTA2Copy()
          -
        • -
        - - - -
          -
        • -

          copyPair

          -
          public Pair copyPair()
          -
        • -
        - - - -
          -
        • -

          Pair_isEquiv

          -
          public boolean Pair_isEquiv(Pair p)
          -
        • -
        - - - -
          -
        • -

          isInMenge

          -
          public boolean isInMenge(de.dhbwstuttgart.typeinference.Menge<Pair> V)
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          Parameters:
          obj -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          instanzeEquals

          -
          public boolean instanzeEquals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - �berpr�ft ob die Paare die gleichen Instanzen sind.
          -
        • -
        - - - -
          -
        • -

          OperatorEqual

          -
          public boolean OperatorEqual()
          -
          Author: Arne L�dtke
          - Abfrage, ob Operator vom Typ Equal ist.
          -
        • -
        - - - -
          -
        • -

          OperatorSmaller

          -
          public boolean OperatorSmaller()
          -
          Author: Arne L�dtke
          - Abfrage, ob Operator vom Typ Smaller ist.
          -
        • -
        - - - -
          -
        • -

          OperatorSmallerExtends

          -
          public boolean OperatorSmallerExtends()
          -
          Author: Arne L�dtke
          - Abfrage, ob Operator vom Typ SmallerExtends ist.
          -
        • -
        - - - -
          -
        • -

          GetOperator

          -
          public Pair.PairOperator GetOperator()
          -
          Author: Arne L�dtke
          - Gibt den Operator zur�ck.
          -
        • -
        - - - -
          -
        • -

          SetOperator

          -
          public void SetOperator(Pair.PairOperator operator)
          -
          Author: Arne L�dtke
          - Setzt den Operator
          -
          Parameters:
          operator - - Operator to set.
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public Pair clone()
          -
          Author: Arne L�dtke
          - Erzeugt einen Klon des Paares.
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/ParaList.html b/doc/LambdaJavadoc/mycompiler/mytype/ParaList.html deleted file mode 100755 index 187a29fd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/ParaList.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - -ParaList - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class ParaList

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytype.ParaList
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ParaList
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ParaList() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidadd_ParaList(Type obj) 
        java.lang.Objectget_firstElement() 
        de.dhbwstuttgart.typeinference.Menge<Type>get_ParaList() 
        de.dhbwstuttgart.typeinference.Menge<Type>getParalist() 
        voidsetParalist(de.dhbwstuttgart.typeinference.Menge<Type> paralist) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ParaList

          -
          public ParaList()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_ParaList

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_ParaList()
          -
        • -
        - - - -
          -
        • -

          add_ParaList

          -
          public void add_ParaList(Type obj)
          -
        • -
        - - - -
          -
        • -

          get_firstElement

          -
          public java.lang.Object get_firstElement()
          -
        • -
        - - - -
          -
        • -

          getParalist

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getParalist()
          -
        • -
        - - - -
          -
        • -

          setParalist

          -
          public void setParalist(de.dhbwstuttgart.typeinference.Menge<Type> paralist)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/RefType.html b/doc/LambdaJavadoc/mycompiler/mytype/RefType.html deleted file mode 100755 index 96ed1fbf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/RefType.html +++ /dev/null @@ -1,782 +0,0 @@ - - - - - -RefType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class RefType

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        RefType(int offset) 
        RefType(RefType R, - int offset) 
        RefType(java.lang.String fullyQualifiedName, - int offset) 
        RefType(java.lang.String fullyQualifiedName, - de.dhbwstuttgart.typeinference.Menge parameter, - int offset) 
        RefType(Type baseType) -
        Erstellt einen Referenztyp aus dem �bergebenen Type.
        -
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          RefType

          -
          public RefType(int offset)
          -
        • -
        - - - -
          -
        • -

          RefType

          -
          public RefType(java.lang.String fullyQualifiedName,
          -       int offset)
          -
        • -
        - - - -
          -
        • -

          RefType

          -
          public RefType(java.lang.String fullyQualifiedName,
          -       de.dhbwstuttgart.typeinference.Menge parameter,
          -       int offset)
          -
        • -
        - - - -
          -
        • -

          RefType

          -
          public RefType(RefType R,
          -       int offset)
          -
        • -
        - - - -
          -
        • -

          RefType

          -
          public RefType(Type baseType)
          -
          Erstellt einen Referenztyp aus dem �bergebenen Type. - Dabei wird der Name und der Offset des baseType's �bernommen.
          -
          Parameters:
          baseType -
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          Type2Key

          -
          public java.lang.String Type2Key()
          -
          -
          Overrides:
          -
          Type2Key in class Type
          -
          -
        • -
        - - - -
          -
        • -

          Type2String

          -
          public java.lang.String Type2String()
          -
          -
          Overrides:
          -
          Type2String in class Type
          -
          -
        • -
        - - - -
          -
        • -

          GenericTypeVar2TypePlaceholder

          -
          public CSubstitutionSet GenericTypeVar2TypePlaceholder()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Overrides:
          -
          get_Name in class Type
          -
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
          -
          Overrides:
          -
          getName in class Type
          -
          -
        • -
        - - - -
          -
        • -

          set_ParaList

          -
          public void set_ParaList(de.dhbwstuttgart.typeinference.Menge<Type> v)
          -
        • -
        - - - -
          -
        • -

          get_ParaList

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> get_ParaList()
          -
        • -
        - - - -
          -
        • -

          add_Parameter

          -
          public void add_Parameter(Type o)
          -
        • -
        - - - -
          -
        • -

          getTypeName

          -
          public java.lang.String getTypeName()
          -
        • -
        - - - - - - - -
          -
        • -

          isTV

          -
          public boolean isTV(int n)
          -
        • -
        - - - -
          -
        • -

          is_Equiv

          -
          public boolean is_Equiv(RefType ty2,
          -               java.util.Hashtable<java.lang.String,Type> ht)
          -
        • -
        - - - -
          -
        • -

          Equiv2Equal

          -
          public boolean Equiv2Equal(RefType ty2,
          -                  java.util.Hashtable<java.lang.String,Type> ht)
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Jrg Buerle
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public RefType clone()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class Type
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          modifyToGenericTypeVar

          -
          public GenericTypeVar modifyToGenericTypeVar()
          -
        • -
        - - - -
          -
        • -

          getSimpleName

          -
          public java.lang.String getSimpleName()
          -
          HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          -
          -
          Overrides:
          -
          getSimpleName in class Type
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getSignatureType

          -
          public java.lang.String getSignatureType(de.dhbwstuttgart.typeinference.Menge paralist)
          -
          Description copied from class: Type
          -
          Liefert den Typ fuer das Signature-Attribut zurueck.
          -
          -
          Overrides:
          -
          getSignatureType in class Type
          -
          -
        • -
        - - - -
          -
        • -

          setPrimitiveFlag

          -
          public void setPrimitiveFlag(boolean b)
          -
        • -
        - - - -
          -
        • -

          getPrimitiveFlag

          -
          public boolean getPrimitiveFlag()
          -
        • -
        - - - -
          -
        • -

          IsArray

          -
          public boolean IsArray()
          -
          Author: Daniel Feinler
          - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          -
          Returns:
          the IsArray
          -
        • -
        - - - -
          -
        • -

          setArray

          -
          public void setArray(boolean IsArray)
          -
          Author: Daniel Feinler
          - Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          -
          Parameters:
          IsArray - the IsArray to set
          -
        • -
        - - - -
          -
        • -

          getMatchType

          -
          public Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
          -
          Specified by:
          -
          getMatchType in interface IMatchable
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        - - - -
          -
        • -

          getSuperWildcardTypes

          -
          public java.util.ArrayList<SuperWildcardType> getSuperWildcardTypes()
          -
          Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind. - Dabei werden auch die parameter auf SuperWildcardTypes durchsucht.
          -
          -
          Overrides:
          -
          getSuperWildcardTypes in class Type
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/ReturnType.html b/doc/LambdaJavadoc/mycompiler/mytype/ReturnType.html deleted file mode 100755 index 7e7c538c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/ReturnType.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - -ReturnType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class ReturnType

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      -
      public class ReturnType
      -extends Type
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ReturnType

          -
          public ReturnType(int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public ReturnType clone()
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class Type
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/SuperWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/SuperWildcardType.html deleted file mode 100755 index 7d146005..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/SuperWildcardType.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - -SuperWildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class SuperWildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SuperWildcardType

          -
          public SuperWildcardType(int offset,
          -                 Type superType)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine SuperWildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          get_SuperType

          -
          public Type get_SuperType()
          -
          Author: Arne L�dtke
          - Gibt den Typen in der Wildcard zur�ck. - Beispiel: ? super Integer. - Integer wird zur�ckgegeben.
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public SuperWildcardType clone()
          -
          Author: Arne L�dtke
          - Gibt einen Klon der Wildcard zur�ck. - Der Innere Typ wird auch geklont
          -
          -
          Overrides:
          -
          clone in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Vergleicht mit einem anderen Objekt.
          -
          -
          Overrides:
          -
          equals in class WildcardType
          -
          Parameters:
          obj - - Object to compare.
          -
        • -
        - - - -
          -
        • -

          GetFreshWildcardType

          -
          public FreshSuperWildcardType GetFreshWildcardType()
          -
          Author: Arne L�dtke
          - Gibt die passende FreshWildcardType Klasse zur�ck. - Wird f�r CaptureConversion verwendet
          -
          -
          Overrides:
          -
          GetFreshWildcardType in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          GetWildcardType

          -
          public Type GetWildcardType()
          -
          Author: Arne L�dtke
          - Das gleiche wie get_SuperType(). - �berschreibt die Methode der Superklasse
          -
          -
          Overrides:
          -
          GetWildcardType in class WildcardType
          -
          -
        • -
        - - - -
          -
        • -

          SetWildcardType

          -
          public void SetWildcardType(Type T)
          -
          Author: Arne L�dtke
          - Setzt den Typ in der Wildcard
          -
          -
          Overrides:
          -
          SetWildcardType in class WildcardType
          -
          Parameters:
          T - - Type to be set
          -
        • -
        - - - -
          -
        • -

          getContainedType

          -
          public Type getContainedType()
          -
          Author: Arne L�dtke
          - Das gleiche wie get_SuperType(). - Implementiert ITypeContainer
          -
          -
          Specified by:
          -
          getContainedType in interface ITypeContainer
          -
          -
        • -
        - - - -
          -
        • -

          getMatchType

          -
          public Type getMatchType()
          -
          Author: Arne L�dtke
          - Gibt den Typen zur�ck, der bei einem match im Unify verwendet werden soll. - Wird �ber IMatchable implementiert.
          -
          -
          Specified by:
          -
          getMatchType in interface IMatchable
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/Type.html b/doc/LambdaJavadoc/mycompiler/mytype/Type.html deleted file mode 100755 index 0e50f9c4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/Type.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - -Type - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class Type

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytype.Type
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        Type(int offset) 
        Type(java.lang.String s, - int offset) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        Typeclone() -

        Author: J�rg B�uerle
        -
        booleanequals(java.lang.Object obj) -
        Author: J�rg B�uerle
        -
        java.lang.Stringget_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist) -
        Liefert die Typrepraesentation fuer die - Bytecodegenerierung zurueck.
        -
        java.lang.Stringget_Name() 
        UsedIdget_UsedId() 
        java.lang.StringgetName() 
        intgetOffset() 
        java.lang.StringgetSignatureType(de.dhbwstuttgart.typeinference.Menge paralist) -
        Liefert den Typ fuer das Signature-Attribut zurueck.
        -
        java.lang.StringgetSimpleName() -
        HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
        -
        java.util.ArrayList<SuperWildcardType>getSuperWildcardTypes() -
        Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
        -
        intgetVariableLength() 
        java.lang.StringprintJavaCode(ResultSet resultSet) 
        TyperemoveClassParameters() 
        voidset_UsedId(UsedId uid) 
        java.lang.StringtoString() -

        Author: J�rg B�uerle
        -
        java.lang.StringType2Key() 
        java.lang.StringType2String() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Type

          -
          public Type(java.lang.String s,
          -    int offset)
          -
        • -
        - - - -
          -
        • -

          Type

          -
          public Type(int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - - - - - -
          -
        • -

          set_UsedId

          -
          public void set_UsedId(UsedId uid)
          -
        • -
        - - - -
          -
        • -

          get_UsedId

          -
          public UsedId get_UsedId()
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
        • -
        - - - -
          -
        • -

          get_codegen_Type

          -
          public java.lang.String get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
          -
          Liefert die Typrepraesentation fuer die - Bytecodegenerierung zurueck.
          -
        • -
        - - - -
          -
        • -

          getSignatureType

          -
          public java.lang.String getSignatureType(de.dhbwstuttgart.typeinference.Menge paralist)
          -
          Liefert den Typ fuer das Signature-Attribut zurueck.
          -
        • -
        - - - -
          -
        • -

          Type2String

          -
          public java.lang.String Type2String()
          -
        • -
        - - - -
          -
        • -

          Type2Key

          -
          public java.lang.String Type2Key()
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public Type clone()
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          removeClassParameters

          -
          public Type removeClassParameters()
          -
        • -
        - - - -
          -
        • -

          getSimpleName

          -
          public java.lang.String getSimpleName()
          -
          HOTI - Liefert bei Klassen die fullyQualified angegeben wurden - nur den schlussendlichen Bezeichner - p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
        • -
        - - - -
          -
        • -

          getSuperWildcardTypes

          -
          public java.util.ArrayList<SuperWildcardType> getSuperWildcardTypes()
          -
          Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/TypePlaceholder.html b/doc/LambdaJavadoc/mycompiler/mytype/TypePlaceholder.html deleted file mode 100755 index 12d6041f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/TypePlaceholder.html +++ /dev/null @@ -1,646 +0,0 @@ - - - - - -TypePlaceholder - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class TypePlaceholder

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset, IReplaceTypeEventProvider
      -
      -
      -
      -
      public class TypePlaceholder
      -extends Type
      -implements IReplaceTypeEventProvider
      -
      Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben - Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool - und - ist in einer zentralen Registry, d.h. einer Hashtable abgelegt.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:47 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getInstance

          -
          public static TypePlaceholder getInstance(java.lang.String name)
          -
          Statische Methode, um einen TypePlaceholder aus der Registry zu holen. -
          Author: J�rg B�uerle
          -
          Parameters:
          name - Der Name des TypePlaceholders
          -
          Returns:
          Der TypePlaceholder oder null, falls er nicht in der - Registry existiert
          -
        • -
        - - - -
          -
        • -

          fresh

          -
          public static TypePlaceholder fresh()
          -
          Erzeugt eine neue TypePlaceholder mit einem eindeutigen Namen. Die - erzeugte Instanz ist die einzig im Syntaxbaum existierende Instanz dieser - Variablen.
          Author: J�rg B�uerle
          -
          Returns:
          Die TypePlaceholder
          -
        • -
        - - - - - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          -
        • -

          replaceWithType

          -
          public void replaceWithType(Type newType)
          -
          Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus. -
          Author: J�rg B�uerle
          -
          Parameters:
          newType -
          -
        • -
        - - - -
          -
        • -

          getLineNumbers

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getLineNumbers()
          -
        • -
        - - - -
          -
        • -

          deleteRegistry

          -
          public static void deleteRegistry()
          -
          L�scht die komplette Registry von TypePlaceholders. Sollte nur und - ausschlie�lich von MyCompiler.init() aufgerufen werden!!! -
          Author: J�rg B�uerle
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public TypePlaceholder clone()
          -
          Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die - Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen - muss.
          - Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich - �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen - benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert. -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class Type
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          get_Name

          -
          public java.lang.String get_Name()
          -
          -
          Overrides:
          -
          get_Name in class Type
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          backdoorFresh

          -
          public static TypePlaceholder backdoorFresh()
          -
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen - werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. -
          Author: J�rg B�uerle
          -
          Returns:
          Eine neue TypePlaceholder
          -
        • -
        - - - -
          -
        • -

          backdoorSetName

          -
          public void backdoorSetName(java.lang.String varName)
          -
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
          - ACHTUNG: Diese TypePlaceholder darf nicht Teil des abstrakten - Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende - TypePlaceholder nicht �ber die Methode fresh(), - sondern �ber backdoorCreate() oder backdoorClone() - erzeugt worden ist. -
          Author: J�rg B�uerle
          -
          Parameters:
          varName - Der Name des zu erzeugenden TypePlaceholders
          -
        • -
        - - - -
          -
        • -

          backdoorCreate

          -
          public static TypePlaceholder backdoorCreate(java.lang.String name)
          -
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in - der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig - losgel�st vom abstrakten Syntaxbaum.
          Author: J�rg B�uerle
          -
          Parameters:
          name -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode()
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/Void.html b/doc/LambdaJavadoc/mycompiler/mytype/Void.html deleted file mode 100755 index f5746ccd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/Void.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - -Void - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class Void

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Void

          -
          public Void(int offset)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          equals in class RefType
          -
          Parameters:
          Object -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public Void clone()
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          clone in class RefType
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/WildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/WildcardType.html deleted file mode 100755 index 098d6cb3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/WildcardType.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - -WildcardType - - - - - - - - - - - -
    -
    mycompiler.mytype
    -

    Class WildcardType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          WildcardType

          -
          public WildcardType(int offset)
          -
          Author: Arne L�dtke
          - Standard Konstruktor f�r eine Wildcard
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Author: Arne L�dtke
          - Gibt String Entsprechung zur�ck.
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public WildcardType clone()
          -
          Author: Arne L�dtke
          - Gibt einen Klon der Wildcard zur�ck.
          -
          -
          Overrides:
          -
          clone in class Type
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Arne L�dtke
          - Vergleicht mit einem anderen Objekt.
          -
          -
          Overrides:
          -
          equals in class Type
          -
          Parameters:
          obj - - Object to compare.
          -
        • -
        - - - -
          -
        • -

          GetFreshWildcardType

          -
          public FreshWildcardType GetFreshWildcardType()
          -
          Author: Arne L�dtke
          - Gibt die passende FreshWildcardType Klasse zur�ck. - Wird f�r CaptureConversion verwendet
          -
        • -
        - - - -
          -
        • -

          GetWildcardType

          -
          public Type GetWildcardType()
          -
          Author: Arne L�dtke
          - Die Allgemeine Wildcard enth�lt keinen Typen.
          -
        • -
        - - - -
          -
        • -

          SetWildcardType

          -
          public void SetWildcardType(Type T)
          -
          Author: Arne L�dtke
          - Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
          -
          Parameters:
          T - - Type to be set
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BaseType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/BaseType.html deleted file mode 100755 index f17a21b1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BaseType.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.BaseType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.BaseType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BooleanType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/BooleanType.html deleted file mode 100755 index 58d62958..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BooleanType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.BooleanType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.BooleanType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BoundedGenericTypeVar.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/BoundedGenericTypeVar.html deleted file mode 100755 index 1dd5a776..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/BoundedGenericTypeVar.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.BoundedGenericTypeVar - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.BoundedGenericTypeVar

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/CRefTypeSet.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/CRefTypeSet.html deleted file mode 100755 index fb804d27..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/CRefTypeSet.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.CRefTypeSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.CRefTypeSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/CharacterType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/CharacterType.html deleted file mode 100755 index 2cba6cc6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/CharacterType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.CharacterType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.CharacterType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/DoubleType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/DoubleType.html deleted file mode 100755 index b5e2c094..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/DoubleType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.DoubleType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.DoubleType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ExtendsWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/ExtendsWildcardType.html deleted file mode 100755 index aa90dfc8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ExtendsWildcardType.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.ExtendsWildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.ExtendsWildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FloatType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/FloatType.html deleted file mode 100755 index 547c9deb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FloatType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.FloatType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.FloatType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshExtendsWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshExtendsWildcardType.html deleted file mode 100755 index 63bc85ee..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshExtendsWildcardType.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.FreshExtendsWildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.FreshExtendsWildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshSuperWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshSuperWildcardType.html deleted file mode 100755 index f73c8023..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshSuperWildcardType.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.FreshSuperWildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.FreshSuperWildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshWildcardType.html deleted file mode 100755 index db6ba635..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/FreshWildcardType.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.FreshWildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.FreshWildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/GenericTypeVar.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/GenericTypeVar.html deleted file mode 100755 index ce4fda9d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/GenericTypeVar.html +++ /dev/null @@ -1,619 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.GenericTypeVar - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.GenericTypeVar

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/IMatchable.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/IMatchable.html deleted file mode 100755 index 6a25b228..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/IMatchable.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytype.IMatchable - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytype.IMatchable

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ITypeContainer.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/ITypeContainer.html deleted file mode 100755 index 8e5fc44e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ITypeContainer.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytype.ITypeContainer - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytype.ITypeContainer

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/IntegerType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/IntegerType.html deleted file mode 100755 index ba997a97..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/IntegerType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.IntegerType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.IntegerType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/LongType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/LongType.html deleted file mode 100755 index 6f724811..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/LongType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.LongType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.LongType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.PairOperator.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.PairOperator.html deleted file mode 100755 index 06d6de67..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.PairOperator.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.Pair.PairOperator - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.Pair.PairOperator

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.html deleted file mode 100755 index 67aaa790..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Pair.html +++ /dev/null @@ -1,625 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.Pair - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.Pair

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ParaList.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/ParaList.html deleted file mode 100755 index 0567d58a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ParaList.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.ParaList - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.ParaList

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/RefType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/RefType.html deleted file mode 100755 index 458a4701..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/RefType.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.RefType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.RefType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ReturnType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/ReturnType.html deleted file mode 100755 index 92d69e54..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/ReturnType.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.ReturnType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.ReturnType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/SuperWildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/SuperWildcardType.html deleted file mode 100755 index a8b83871..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/SuperWildcardType.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.SuperWildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.SuperWildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Type.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/Type.html deleted file mode 100755 index 679fe904..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Type.html +++ /dev/null @@ -1,2042 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.Type - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.Type

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/TypePlaceholder.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/TypePlaceholder.html deleted file mode 100755 index 1a76303f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/TypePlaceholder.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.TypePlaceholder - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.TypePlaceholder

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Void.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/Void.html deleted file mode 100755 index 9aea89b5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/Void.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.Void - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.Void

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/class-use/WildcardType.html b/doc/LambdaJavadoc/mycompiler/mytype/class-use/WildcardType.html deleted file mode 100755 index eb615bf5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/class-use/WildcardType.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -Uses of Class mycompiler.mytype.WildcardType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytype.WildcardType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytype/package-frame.html deleted file mode 100755 index 2463bf71..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/package-frame.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - -mycompiler.mytype - - - - -

    mycompiler.mytype

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytype/package-summary.html deleted file mode 100755 index 4a3e5de7..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/package-summary.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - -mycompiler.mytype - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytype

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytype/package-tree.html deleted file mode 100755 index 1e5dab74..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/package-tree.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - -mycompiler.mytype Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytype

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -

    Enum Hierarchy

    -
      -
    • java.lang.Object -
        -
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) - -
      • -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytype/package-use.html b/doc/LambdaJavadoc/mycompiler/mytype/package-use.html deleted file mode 100755 index f048fd5e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytype/package-use.html +++ /dev/null @@ -1,606 +0,0 @@ - - - - - -Uses of Package mycompiler.mytype - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytype

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CHelper.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CHelper.html deleted file mode 100755 index 435864ca..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CHelper.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - -CHelper - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CHelper

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CHelper
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CHelper
      -extends java.lang.Object
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CHelper() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidprint(java.lang.String s) -
        Author: J�rg B�uerle
        - Gibt einen String aus.
        -
        static java.lang.Stringtime() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CHelper

          -
          public CHelper()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          time

          -
          public static java.lang.String time()
          -
        • -
        - - - -
          -
        • -

          print

          -
          public static void print(java.lang.String s)
          -
          Author: J�rg B�uerle
          - Gibt einen String aus.
          -
          Parameters:
          s - Der auszugebende String
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CIntersectionType.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CIntersectionType.html deleted file mode 100755 index ad1991bc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CIntersectionType.html +++ /dev/null @@ -1,372 +0,0 @@ - - - - - -CIntersectionType - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CIntersectionType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CIntersectionType
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CIntersectionType
      -extends java.lang.Object
      -
      Ein CIntersectionType gruppiert alle Typmglichkeiten einer - bestimmten Methode, die ber den CMethodKey eindeutig definiert - ist.

      Bei der bisherigen Implementierung enthlt IntersectionType jedoch - nur eine - einzige Typmglichkeit, d.h. der Menge - m_MethodTypeAssumptions enthlt stets nur ein einziges Element.
      - Der Grund hierfr ist in der Kopplung der Typannahmen fr die einzelnen Methoden, - d.h. der Typkombinationen, begrndet. Diese Kopplung von Methoden wird bisher ber - die getrennten Mengen von CTypeReconstructionResults realisiert.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CIntersectionType

          -
          public CIntersectionType(java.lang.String className,
          -                 java.lang.String methodIdentifier,
          -                 int methodParaCount,
          -                 int methodOverloadedID)
          -
        • -
        - - - - -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getIntersectionTypeKey

          -
          public CMethodKey getIntersectionTypeKey()
          -
        • -
        - - - -
          -
        • -

          setIntersectionTypeKey

          -
          public void setIntersectionTypeKey(CMethodKey intersectionTypeKey)
          -
        • -
        - - - -
          -
        • -

          getMethodTypeAssumptions

          -
          public de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodTypeAssumptions()
          -
        • -
        - - - -
          -
        • -

          setMethodTypeAssumptions

          -
          public void setMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions)
          -
        • -
        - - - - - - - -
          -
        • -

          removeMethodTypeAssumption

          -
          public void removeMethodTypeAssumption(CMethodTypeAssumption assum)
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Jrg Buerle
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html deleted file mode 100755 index b7a8dcb9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - -CMultiplyTuple - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CMultiplyTuple

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CMultiplyTuple
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CMultiplyTuple
      -extends java.lang.Object
      -
      Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply. - (siehe Algorithmen 5.28 ff, Martin Pl�micke)
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CMultiplyTuple

          -
          public CMultiplyTuple()
          -
          Author: J�rg B�uerle
          -
        • -
        - - - - -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getAssumptionSet

          -
          public CTypeAssumptionSet getAssumptionSet()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the AssumptionSet.
          -
        • -
        - - - -
          -
        • -

          setAssumptionSet

          -
          public void setAssumptionSet(CTypeAssumptionSet assumptionSet)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          assumptionSet - The AssumptionSet to set.
          -
        • -
        - - - -
          -
        • -

          getResultTypes

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getResultTypes()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the ResultTypes.
          -
        • -
        - - - -
          -
        • -

          getResultTypeIterator

          -
          public java.util.Iterator<Type> getResultTypeIterator()
          -
        • -
        - - - -
          -
        • -

          setResultTypes

          -
          public void setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          resultType - The ResultType to set.
          -
        • -
        - - - -
          -
        • -

          getSubstitutions

          -
          public CSubstitutionSet getSubstitutions()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the Substitutions.
          -
        • -
        - - - -
          -
        • -

          setSubstitutions

          -
          public void setSubstitutions(CSubstitutionSet substitutions)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          substitution - The Substitutions to set.
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CMultiplyTuple clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html deleted file mode 100755 index 26aed6d5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - - -CReconstructionTuple - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CReconstructionTuple

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CReconstructionTuple
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CReconstructionTuple
      -extends java.lang.Object
      -
      Container-Klasse f�r Ergebniswerte des Algorithmus TRStart. - (siehe Algorithmus 5.18 TRStart, Martin Pl�micke)
      -
      Version:
      -
      $date
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Detail

        - - - - - - - - - - - - - - - - - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CReconstructionTuple clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitution.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitution.html deleted file mode 100755 index 6b93d857..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitution.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - -CSubstitution - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CSubstitution

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CSubstitution
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      CSubstitutionGenVar
      -
      -
      -
      -
      public class CSubstitution
      -extends java.lang.Object
      -
      Implementierung einer Typsubstitution. Bildet eine zu ersetzende - TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser - Klasse werden in der Regel aus - Pair-Objekten erzeugt.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getType

          -
          public Type getType()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the Type.
          -
        • -
        - - - -
          -
        • -

          setType

          -
          public void setType(Type type)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          type - The Type to set.
          -
        • -
        - - - -
          -
        • -

          getTypeVar

          -
          public Type getTypeVar()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the TypeVar.
          -
        • -
        - - - -
          -
        • -

          setTypeVar

          -
          public void setTypeVar(TypePlaceholder typeVar)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          typeVar - The TypeVar to set.
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CSubstitution clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          execute

          -
          public void execute()
          -             throws CTypeReconstructionException
          -
          Sucht die eindeutige Instanz der Typeplaceholders in der Registry der - Typeplaceholders des Syntaxbaumes und f�hrt die Typsubstitution im - Syntaxbaum durch. -
          Author: J�rg B�uerle - wenn die TypePlaceholder nicht in der Registry gefunden wurde.
          -
          Throws:
          -
          CTypeReconstructionException - Falls TypePlaceholder nicht in Registry - gefunden wird.
          -
        • -
        - - - -
          -
        • -

          applyUnifier

          -
          public void applyUnifier(CSubstitutionSet unifier)
          -
          Wendet den Unifier auf die rechte Seite dieser Substitution an. -
          Author: J�rg B�uerle
          -
          Parameters:
          unifier -
          -
        • -
        - - - -
          -
        • -

          applyThisSubstitution

          -
          public Type applyThisSubstitution(Type type)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitutionGenVar.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitutionGenVar.html deleted file mode 100755 index 7ef59e86..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSubstitutionGenVar.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - -CSubstitutionGenVar - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CSubstitutionGenVar

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class CSubstitutionGenVar
      -extends CSubstitution
      -
      Implementierung einer Typsubstitution der GenVar. Bildet eine zu ersetzende - TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser - Klasse werden in der Regel aus - Pair-Objekten erzeugt.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      Martin Pl�micke
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CSubstitutionGenVar

          -
          public CSubstitutionGenVar()
          -
        • -
        - - - -
          -
        • -

          CSubstitutionGenVar

          -
          public CSubstitutionGenVar(GenericTypeVar typeVar,
          -                   Type type)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getTypeVar

          -
          public Type getTypeVar()
          -
          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          getTypeVar in class CSubstitution
          -
          Returns:
          Returns the TypeVar.
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class CSubstitution
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSupportData.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSupportData.html deleted file mode 100755 index 79ca31a1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CSupportData.html +++ /dev/null @@ -1,655 +0,0 @@ - - - - - -CSupportData - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CSupportData

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CSupportData
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CSupportData
      -extends java.lang.Object
      -
      Container-Klasse fr bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus bentigt und deshalb - rekursiv weiter gereicht werden.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          NO_METHOD

          -
          public static final java.lang.String NO_METHOD
          -
          Gibt Namensstring fr den Classbody auerhalb einer Methode - fr m_CurrentMethod.
          -
          See Also:
          Constant Field Values
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CSupportData

          -
          public CSupportData(FC_TTO finiteClosure,
          -            de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
          -            java.lang.String currentClass,
          -            de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> currentClassPara)
          -
        • -
        - - - -
          -
        • -

          CSupportData

          -
          public CSupportData(FC_TTO finiteClosure,
          -            de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
          -            java.lang.String currentClass,
          -            de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> currentClassPara,
          -            java.lang.String currentMethod,
          -            int currentMethodParaCount,
          -            int currentMethodOverloadedID,
          -            de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList,
          -            int blockDepth)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getFiniteClosure

          -
          public FC_TTO getFiniteClosure()
          -
        • -
        - - - -
          -
        • -

          setFiniteClosure

          -
          public void setFiniteClosure(FC_TTO finiteClosure)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          getCurrentClassType

          -
          public RefType getCurrentClassType()
          -
        • -
        - - - -
          -
        • -

          getCurrentClass

          -
          public java.lang.String getCurrentClass()
          -
        • -
        - - - -
          -
        • -

          setCurrentClass

          -
          public void setCurrentClass(java.lang.String currentClass)
          -
        • -
        - - - -
          -
        • -

          getCurrentClassPara

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getCurrentClassPara()
          -
        • -
        - - - -
          -
        • -

          setCurrentClassPara

          -
          public void setCurrentClassPara(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> currentClassPara)
          -
        • -
        - - - -
          -
        • -

          getCurrentMethod

          -
          public java.lang.String getCurrentMethod()
          -
        • -
        - - - -
          -
        • -

          setCurrentMethod

          -
          public void setCurrentMethod(java.lang.String currentMethod)
          -
        • -
        - - - -
          -
        • -

          getCurrentMethodParaCount

          -
          public int getCurrentMethodParaCount()
          -
        • -
        - - - -
          -
        • -

          setCurrentMethodParaCount

          -
          public void setCurrentMethodParaCount(int currentMethodParaCount)
          -
        • -
        - - - -
          -
        • -

          setCurrentMethodOverloadedID

          -
          public void setCurrentMethodOverloadedID(int currentMethodOverloadedID)
          -
        • -
        - - - -
          -
        • -

          getBlockIdList

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getBlockIdList()
          -
        • -
        - - - -
          -
        • -

          setBlockIdList

          -
          public void setBlockIdList(de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockId)
          -
        • -
        - - - -
          -
        • -

          resetBlockId

          -
          public void resetBlockId()
          -
        • -
        - - - -
          -
        • -

          getCurrentBlockDepth

          -
          public int getCurrentBlockDepth()
          -
        • -
        - - - -
          -
        • -

          setCurrentBlockDepth

          -
          public void setCurrentBlockDepth(int currentBlockDepth)
          -
        • -
        - - - -
          -
        • -

          incBlockDepth

          -
          public int incBlockDepth()
          -
        • -
        - - - -
          -
        • -

          decBlockDepth

          -
          public int decBlockDepth()
          -
        • -
        - - - -
          -
        • -

          getCurrentBlockId

          -
          public java.lang.String getCurrentBlockId()
          -
        • -
        - - - -
          -
        • -

          getBlockId

          -
          public java.lang.String getBlockId(int blockDepth)
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CSupportData clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          getCurrentMethodOverloadedID

          -
          public int getCurrentMethodOverloadedID()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTriple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTriple.html deleted file mode 100755 index 0c77927d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTriple.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - - -CTriple - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CTriple

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CTriple
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CTriple
      -extends java.lang.Object
      -
      Container-Klasse f�r Ergebniswerte der Algorithmen TRStmt und TRExp. - (siehe Algorithmus 5.20 ff TRStmt und 5.30 ff TRExp, Martin Pl�micke) - CTriple steht genau wie CReconstructionTuple f�r eine m�gliche Typkombination mit - dem einzigen Unterschied, dass sie zus�tzlich noch den berechneten ReturnType des aktuell - betrachteten Blocks enth�lt. Bei diesem ReturnTyp kann es sich auch nur um eine Vermutung handeln. - Die Klasse taucht meistens als CTripleSet auf. Der Inferenzalgorithmus kann dann unter den verschiedenen vorgeschlagenen ReturnTypen ausw�hlen.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTriple

          -
          public CTriple()
          -
          Author: J�rg B�uerle
          -
        • -
        - - - - -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getAssumptionSet

          -
          public CTypeAssumptionSet getAssumptionSet()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the AssumptionSet.
          -
        • -
        - - - -
          -
        • -

          setAssumptionSet

          -
          public void setAssumptionSet(CTypeAssumptionSet assumptionSet)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          assumptionSet - The AssumptionSet to set.
          -
        • -
        - - - -
          -
        • -

          getResultType

          -
          public Type getResultType()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the ResultType.
          -
        • -
        - - - -
          -
        • -

          setResultType

          -
          public void setResultType(Type resultType)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          resultType - The ResultType to set.
          -
        • -
        - - - -
          -
        • -

          getSubstitutions

          -
          public CSubstitutionSet getSubstitutions()
          -
          Author: J�rg B�uerle
          -
          Returns:
          Returns the Substitutions.
          -
        • -
        - - - -
          -
        • -

          setSubstitutions

          -
          public void setSubstitutions(CSubstitutionSet substitutions)
          -
          Author: J�rg B�uerle
          -
          Parameters:
          substitution - The Substitutions to set.
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public CTriple clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          cloneAndApplyUnify

          -
          public CTriple cloneAndApplyUnify(CSubstitutionSet unifier)
          -
          Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an. -
          Author: J�rg B�uerle
          -
          Parameters:
          unifier -
          -
          Returns:
          Die Kopie nach Anwendung des Unifiers
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html deleted file mode 100755 index 8bc66142..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - -CTypeReconstructionResult - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction
    -

    Class CTypeReconstructionResult

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.CTypeReconstructionResult
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CTypeReconstructionResult
      -extends java.lang.Object
      -
      Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche - Typkombination aller Klassen und deren Methoden sowie lokalen Variablen. Eine - Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
      - Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die - Compiler-API zur�ckgegeben.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTypeReconstructionResult

          -
          public CTypeReconstructionResult(Class inferedClass)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          setFieldAndLocalVarAssumptions

          -
          public void setFieldAndLocalVarAssumptions(java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> fieldAndLocalVarAssumptions)
          -
        • -
        - - - -
          -
        • -

          addFieldOrLocalVarAssumption

          -
          public void addFieldOrLocalVarAssumption(CTypeAssumption assum)
          -
        • -
        - - - - - - - -
          -
        • -

          addMethodIntersectionType

          -
          public void addMethodIntersectionType(CIntersectionType intersect)
          -
        • -
        - - - -
          -
        • -

          getMethodIntersectionTypes

          -
          public de.dhbwstuttgart.typeinference.Menge<CIntersectionType> getMethodIntersectionTypes(CMethodKey key)
          -
        • -
        - - - - - - - -
          -
        • -

          setSubstitutions

          -
          public void setSubstitutions(CSubstitutionSet substitutions)
          -
        • -
        - - - - - - - -
          -
        • -

          addClassName

          -
          public void addClassName(java.lang.String className)
          -
        • -
        - - - -
          -
        • -

          getClassNameList

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.String> getClassNameList()
          -
        • -
        - - - -
          -
        • -

          addGenericTypeVars

          -
          public void addGenericTypeVars(java.lang.String className,
          -                      de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList)
          -
        • -
        - - - -
          -
        • -

          getGenericsTable

          -
          public java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>> getGenericsTable()
          -
        • -
        - - - -
          -
        • -

          getGenerics

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics(java.lang.String key)
          -
        • -
        - - - - - - - -
          -
        • -

          getConstraints

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> getConstraints()
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          setConstraints

          -
          public void setConstraints(de.dhbwstuttgart.typeinference.Menge<Pair> constraints)
          -
        • -
        - - - -
          -
        • -

          getUnifiedConstraints

          -
          public ResultSet getUnifiedConstraints()
          -
          Returns:
          Das fertige ConstraintsSet dieser CTypeRecunstructionResult
          -
        • -
        - - - -
          -
        • -

          setUnifiedConstraints

          -
          public void setUnifiedConstraints(de.dhbwstuttgart.typeinference.Menge<Pair> unifiedConstraints)
          -
        • -
        - - - -
          -
        • -

          getTypeOfPlaceholder

          -
          public Type getTypeOfPlaceholder(TypePlaceholder tph)
          -
          Ermittelt den in diesem ResultSet f�r den TypePlaceholder tph zugewiesenen Wert.
          -
        • -
        - - - -
          -
        • -

          getInterferedClass

          -
          public Class getInterferedClass()
          -
          Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
          -
          Returns:
          Gibt die Klasse zur�ck der dieses ResultSet zugeordnet ist.
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CHelper.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CHelper.html deleted file mode 100755 index 36ff0ec5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CHelper.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CHelper - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CHelper

    -
    -
    No usage of mycompiler.mytypereconstruction.CHelper
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html deleted file mode 100755 index 57b023d5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CIntersectionType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CIntersectionType

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html deleted file mode 100755 index 581804f1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CMultiplyTuple - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CMultiplyTuple

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html deleted file mode 100755 index d9bd7ef4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CReconstructionTuple - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CReconstructionTuple

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html deleted file mode 100755 index 7946ea1b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CSubstitution - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CSubstitution

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitutionGenVar.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitutionGenVar.html deleted file mode 100755 index cd0eea9b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSubstitutionGenVar.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CSubstitutionGenVar - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CSubstitutionGenVar

    -
    -
    No usage of mycompiler.mytypereconstruction.CSubstitutionGenVar
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html deleted file mode 100755 index 94ad9137..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CSupportData - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CSupportData

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTriple.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTriple.html deleted file mode 100755 index 6dacd6ac..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTriple.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CTriple - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CTriple

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html deleted file mode 100755 index a5931370..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html +++ /dev/null @@ -1,371 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.CTypeReconstructionResult - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.CTypeReconstructionResult

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-frame.html deleted file mode 100755 index ff78c1a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-frame.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -mycompiler.mytypereconstruction - - - - -

    mycompiler.mytypereconstruction

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-summary.html deleted file mode 100755 index f3592dc7..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-summary.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -mycompiler.mytypereconstruction - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      CHelper 
      CIntersectionType -
      Ein CIntersectionType gruppiert alle Typmglichkeiten einer - bestimmten Methode, die ber den CMethodKey eindeutig definiert - ist.
      -
      CMultiplyTuple -
      Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply.
      -
      CReconstructionTuple -
      Container-Klasse f�r Ergebniswerte des Algorithmus TRStart.
      -
      CSubstitution -
      Implementierung einer Typsubstitution.
      -
      CSubstitutionGenVar -
      Implementierung einer Typsubstitution der GenVar.
      -
      CSupportData -
      Container-Klasse fr bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus bentigt und deshalb - rekursiv weiter gereicht werden.
      -
      CTriple -
      Container-Klasse f�r Ergebniswerte der Algorithmen TRStmt und TRExp.
      -
      CTypeReconstructionResult -
      Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche - Typkombination aller Klassen und deren Methoden sowie lokalen Variablen.
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-tree.html deleted file mode 100755 index 729bc38f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -mycompiler.mytypereconstruction Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-use.html deleted file mode 100755 index 154aee38..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/package-use.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html deleted file mode 100755 index 1bb9b725..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - -CReplaceTypeEvent - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.replacementlistener
    -

    Class CReplaceTypeEvent

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CReplaceTypeEvent
      -extends java.lang.Object
      -
      Version:
      -
      $date
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        TypegetNewType() 
        TypegetOldType() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CReplaceTypeEvent

          -
          public CReplaceTypeEvent(Type oldType,
          -                 Type newType)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getNewType

          -
          public Type getNewType()
          -
        • -
        - - - -
          -
        • -

          getOldType

          -
          public Type getOldType()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html deleted file mode 100755 index 3006a200..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - -IReplaceTypeEventProvider - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.replacementlistener
    -

    Interface IReplaceTypeEventProvider

    -
    -
    -
    -
      -
    • -
      -
      All Known Implementing Classes:
      -
      TypePlaceholder
      -
      -
      -
      -
      public interface IReplaceTypeEventProvider
      -
      Interface f�r ein Objekt, das ReplaceTypeEvents zur Verf�gung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
      -
      Version:
      -
      $date
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html deleted file mode 100755 index c4e93fdf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - -ITypeReplacementListener - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.replacementlistener
    -

    Interface ITypeReplacementListener

    -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        intgetTypeLineNumber() -
        Gibt die Zeilennummer zur�ck, in der eine TypePlaceholder - angelegt worden ist.
        -
        voidreplaceType(CReplaceTypeEvent e) -
        Tauscht einen Typ gegen einen anderen aus.
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          replaceType

          -
          void replaceType(CReplaceTypeEvent e)
          -
          Tauscht einen Typ gegen einen anderen aus. -
          Author: J�rg B�uerle
          -
          Parameters:
          e - Das Event mit dem neuen Typ
          -
        • -
        - - - -
          -
        • -

          getTypeLineNumber

          -
          int getTypeLineNumber()
          -
          Gibt die Zeilennummer zur�ck, in der eine TypePlaceholder - angelegt worden ist. -
          Author: J�rg B�uerle
          -
          Returns:
          Die Zeilennummer
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html deleted file mode 100755 index b7680397..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html deleted file mode 100755 index 8e820dc4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html deleted file mode 100755 index d942484a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html deleted file mode 100755 index 3b1b410e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.replacementlistener - - - - -

    mycompiler.mytypereconstruction.replacementlistener

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html deleted file mode 100755 index 1e683950..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.replacementlistener - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction.replacementlistener

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - -
      Interface Summary 
      InterfaceDescription
      IReplaceTypeEventProvider -
      Interface f�r ein Objekt, das ReplaceTypeEvents zur Verf�gung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
      -
      ITypeReplacementListener -
      Interface f�r einen TypeReplacementListener, der es erm�glicht, - einen Typ gegen einen anderen auszutauschen.
      -
      -
    • -
    • - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      CReplaceTypeEvent 
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html deleted file mode 100755 index 11dcf45a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.replacementlistener Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction.replacementlistener

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    -
      -
    • java.lang.Object - -
    • -
    -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html deleted file mode 100755 index 832ae2e8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction.replacementlistener - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction.replacementlistener

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html deleted file mode 100755 index 478758a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - -CHashtableSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CHashtableSet<E extends IHashSetElement>

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<E>
      -
      -
      -
      Direct Known Subclasses:
      -
      CTypeAssumptionSet
      -
      -
      -
      -
      public abstract class CHashtableSet<E extends IHashSetElement>
      -extends CSet<E>
      -
      Version:
      -
      $Date: 2013/09/22 20:12:58 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CHashtableSet() -
        Author: Jrg Buerle
        -
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddElement(E element) -
        Diese Methode f�gt das Element element unter dem Key des Elements - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
        -
        voidaddElement(IHashSetKey elementKey, - E element) -
        Diese Methode f�gt das Element element unter dem Key elementKey - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
        -
        booleancontains(E element) 
        booleanequals(java.lang.Object obj) 
        intgetCardinality() 
        EgetElement(IHashSetKey key) 
        de.dhbwstuttgart.typeinference.Menge<E>getElements(IHashSetKey key) -
        Liefert alle Elemente in der HashTable, die zu der Methoden-Signatur-Klass - geh�ren d.h.
        -
        java.util.Hashtable<IHashSetKey,E>getHashtable() 
        java.util.Iterator<E>getIterator() 
        voidremoveElement(E element) 
        voidremoveElement(IHashSetKey key) 
        voidsetHashtable(java.util.Hashtable<IHashSetKey,E> hash) 
        voidsubtract(CSet<E> anotherSet) 
        voidunite(CSet<E> anotherSet) 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
          -
        • - - -

          Methods inherited from interface java.lang.Iterable

          -iterator
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CHashtableSet

          -
          public CHashtableSet()
          -
          Author: Jrg Buerle
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - -
          -
        • -

          addElement

          -
          public void addElement(E element)
          -
          Diese Methode f�gt das Element element unter dem Key des Elements - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
          -
          -
          Specified by:
          -
          addElement in class CSet<E extends IHashSetElement>
          -
          -
        • -
        - - - - - -
          -
        • -

          addElement

          -
          public void addElement(IHashSetKey elementKey,
          -              E element)
          -
          Diese Methode f�gt das Element element unter dem Key elementKey - in der HashMap ab, falls diese Position schon belegt ist (�berladene - Methode mit gleicher Parameteranzahl), wird ein neuer Key generiert - mit einer um 1 h�heren overloadedMethodID
          -
        • -
        - - - - - - - -
          -
        • -

          getElements

          -
          public de.dhbwstuttgart.typeinference.Menge<E> getElements(IHashSetKey key)
          -
          Liefert alle Elemente in der HashTable, die zu der Methoden-Signatur-Klass - geh�ren d.h. - liefert - overloaded(String a) - - overloaded(int a) - - ...
          -
        • -
        - - - - - - - - - -
          -
        • -

          removeElement

          -
          public void removeElement(IHashSetKey key)
          -
        • -
        - - - - - - - -
          -
        • -

          getHashtable

          -
          public java.util.Hashtable<IHashSetKey,E> getHashtable()
          -
        • -
        - - - -
          -
        • -

          setHashtable

          -
          public void setHashtable(java.util.Hashtable<IHashSetKey,E> hash)
          -
        • -
        - - - - - - - - - - - - - - - - - - - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Specified by:
          -
          equals in class CSet<E extends IHashSetElement>
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html deleted file mode 100755 index 8050013d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - -CMultiplyTupleSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CMultiplyTupleSet

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<CMultiplyTuple>
      -
      -
      -
      -
      public class CMultiplyTupleSet
      -extends CMengeSet<CMultiplyTuple>
      -
      Version:
      -
      $Date: 2013/09/22 20:12:59 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html deleted file mode 100755 index d36d88a8..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - -CReconstructionTupleSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CReconstructionTupleSet

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSet.html deleted file mode 100755 index 445849f6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSet.html +++ /dev/null @@ -1,420 +0,0 @@ - - - - - -CSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CSet<E>

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.set.CSet<E>
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<E>
      -
      -
      -
      Direct Known Subclasses:
      -
      CHashtableSet, CMengeSet
      -
      -
      -
      -
      public abstract class CSet<E>
      -extends java.lang.Object
      -implements java.lang.Iterable<E>
      -
      Version:
      -
      $date
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CSet() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        abstract voidaddElement(E element) 
        abstract booleancontains(E element) 
        abstract CSet<E>deepCopy() 
        abstract booleanequals(java.lang.Object obj) 
        abstract intgetCardinality() 
        abstract java.util.Iterator<E>getIterator() 
        abstract voidremoveElement(E element) 
        abstract CSet<E>shallowCopy() 
        abstract voidsubtract(CSet<E> anotherSet) 
        java.lang.StringtoString() 
        abstract voidunite(CSet<E> anotherSet) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
          -
        • - - -

          Methods inherited from interface java.lang.Iterable

          -iterator
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CSet

          -
          public CSet()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - -
          -
        • -

          addElement

          -
          public abstract void addElement(E element)
          -
        • -
        - - - - - -
          -
        • -

          removeElement

          -
          public abstract void removeElement(E element)
          -
        • -
        - - - -
          -
        • -

          unite

          -
          public abstract void unite(CSet<E> anotherSet)
          -
        • -
        - - - -
          -
        • -

          subtract

          -
          public abstract void subtract(CSet<E> anotherSet)
          -
        • -
        - - - -
          -
        • -

          shallowCopy

          -
          public abstract CSet<E> shallowCopy()
          -
        • -
        - - - -
          -
        • -

          deepCopy

          -
          public abstract CSet<E> deepCopy()
          -
        • -
        - - - - - -
          -
        • -

          contains

          -
          public abstract boolean contains(E element)
          -
        • -
        - - - -
          -
        • -

          getCardinality

          -
          public abstract int getCardinality()
          -
        • -
        - - - -
          -
        • -

          getIterator

          -
          public abstract java.util.Iterator<E> getIterator()
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public abstract boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html deleted file mode 100755 index daf97675..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - -CSubstitutionSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CSubstitutionSet

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<CSubstitution>
      -
      -
      -
      -
      public class CSubstitutionSet
      -extends CMengeSet<CSubstitution>
      -
      Version:
      -
      $Date: 2013/09/22 20:12:59 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTripleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTripleSet.html deleted file mode 100755 index 2437c9ef..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTripleSet.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - -CTripleSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CTripleSet

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<CTriple>
      -
      -
      -
      -
      public class CTripleSet
      -extends CMengeSet<CTriple>
      -
      Enth�lt Objekte vom Typ CTriple - (Ist im Grunde ein CMengeSet) - Es enth�lt alle Typannahmen in Form von CTriple s
      -
      Version:
      -
      $Date: 2013/09/22 20:12:58 $
      -
      Author:
      -
      J�rg B�uerle
      -
      See Also:
      CTriple
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTripleSet

          -
          public CTripleSet()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          deepCopy

          -
          public CTripleSet deepCopy()
          -
          Diese Funktion kopiert nicht nur das MengeSet, sondern auch alle enthaltenen CTriple-Sets. - Dadurch wirken sich Modifizierungen an den enthaltenen Elementen nicht auf die Kopie aus.
          -
          -
          Specified by:
          -
          deepCopy in class CSet<CTriple>
          -
          -
        • -
        - - - -
          -
        • -

          iterator

          -
          public java.util.Iterator<CTriple> iterator()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html deleted file mode 100755 index 8616d0cd..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - -CTypeAssumptionSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CTypeAssumptionSet

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<CTypeAssumption>
      -
      -
      -
      -
      public class CTypeAssumptionSet
      -extends CHashtableSet<CTypeAssumption>
      -
      Version:
      -
      $Date: 2013/09/22 20:12:59 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CVectorSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CVectorSet.html deleted file mode 100755 index 31c0458d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/CVectorSet.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - -CMengeSet - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Class CMengeSet<E>

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CMengeSet() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddAll(CMengeSet<E> set) 
        voidaddElement(E element) 
        booleancontains(E element) 
        booleanequals(java.lang.Object obj) 
        intgetCardinality() 
        java.util.Iterator<E>getIterator() 
        de.dhbwstuttgart.typeinference.Menge<E>getMenge() 
        voidremoveElement(E element) 
        voidsetMenge(de.dhbwstuttgart.typeinference.Menge<E> elements) 
        voidsubtract(CSet<E> anotherSet) 
        voidunite(CSet<E> anotherSet) -
        F�gt ein CMengeSet an!
        -
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
          -
        • - - -

          Methods inherited from interface java.lang.Iterable

          -iterator
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CMengeSet

          -
          public CMengeSet()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - -
          -
        • -

          addElement

          -
          public void addElement(E element)
          -
          -
          Specified by:
          -
          addElement in class CSet<E>
          -
          -
        • -
        - - - - - -
          -
        • -

          removeElement

          -
          public void removeElement(E element)
          -
          -
          Specified by:
          -
          removeElement in class CSet<E>
          -
          -
        • -
        - - - -
          -
        • -

          addAll

          -
          public void addAll(CMengeSet<E> set)
          -
        • -
        - - - -
          -
        • -

          getIterator

          -
          public java.util.Iterator<E> getIterator()
          -
          -
          Specified by:
          -
          getIterator in class CSet<E>
          -
          -
        • -
        - - - -
          -
        • -

          getMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<E> getMenge()
          -
        • -
        - - - -
          -
        • -

          setMenge

          -
          public void setMenge(de.dhbwstuttgart.typeinference.Menge<E> elements)
          -
        • -
        - - - -
          -
        • -

          unite

          -
          public void unite(CSet<E> anotherSet)
          -
          F�gt ein CMengeSet an! - Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente �bernommen)
          -
          -
          Specified by:
          -
          unite in class CSet<E>
          -
          Parameters:
          anotherSet - Das hinzuzuf�gende CMengeSet (CSet wird ignoriert)
          -
        • -
        - - - -
          -
        • -

          subtract

          -
          public void subtract(CSet<E> anotherSet)
          -
          -
          Specified by:
          -
          subtract in class CSet<E>
          -
          -
        • -
        - - - - - -
          -
        • -

          contains

          -
          public boolean contains(E element)
          -
          -
          Specified by:
          -
          contains in class CSet<E>
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          -
          Specified by:
          -
          equals in class CSet<E>
          -
          -
        • -
        - - - -
          -
        • -

          getCardinality

          -
          public int getCardinality()
          -
          -
          Specified by:
          -
          getCardinality in class CSet<E>
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html deleted file mode 100755 index 4c970400..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - -IHashSetElement - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Interface IHashSetElement

    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html deleted file mode 100755 index 650ce3bf..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - -IHashSetKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.set
    -

    Interface IHashSetKey

    -
    -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html deleted file mode 100755 index 2c2f757d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CHashtableSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CHashtableSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html deleted file mode 100755 index 68575973..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CMultiplyTupleSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CMultiplyTupleSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html deleted file mode 100755 index 7422535a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CReconstructionTupleSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CReconstructionTupleSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html deleted file mode 100755 index a50f0c8e..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html deleted file mode 100755 index dec3498d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html +++ /dev/null @@ -1,881 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CSubstitutionSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CSubstitutionSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html deleted file mode 100755 index 0754ef78..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CTripleSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CTripleSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html deleted file mode 100755 index d723c667..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CTypeAssumptionSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CTypeAssumptionSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html deleted file mode 100755 index 09436112..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CMengeSet - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.set.CMengeSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html deleted file mode 100755 index f33a552f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytypereconstruction.set.IHashSetElement - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytypereconstruction.set.IHashSetElement

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html deleted file mode 100755 index e99afc3c..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytypereconstruction.set.IHashSetKey - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytypereconstruction.set.IHashSetKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-frame.html deleted file mode 100755 index 4acbe270..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-frame.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.set - - - - -

    mycompiler.mytypereconstruction.set

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-summary.html deleted file mode 100755 index de77a78b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-summary.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.set - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction.set

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-tree.html deleted file mode 100755 index 3e59244d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-tree.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.set Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction.set

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-use.html deleted file mode 100755 index 6e282061..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/set/package-use.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction.set - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction.set

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html deleted file mode 100755 index 8a665cc6..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - -CInstVarTypeAssumption - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumption
    -

    Class CInstVarTypeAssumption

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetElement
      -
      -
      -
      -
      public class CInstVarTypeAssumption
      -extends CTypeAssumption
      -
      Version:
      -
      $Date: 2013/09/22 20:12:48 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html deleted file mode 100755 index 9dab43af..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - -CLocalVarTypeAssumption - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumption
    -

    Class CLocalVarTypeAssumption

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetElement
      -
      -
      -
      -
      public class CLocalVarTypeAssumption
      -extends CTypeAssumption
      -
      Version:
      -
      $Date: 2013/09/22 20:12:48 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CLocalVarTypeAssumption

          -
          public CLocalVarTypeAssumption(java.lang.String className,
          -                       java.lang.String methodName,
          -                       int methodParaCount,
          -                       int methodOverloadedID,
          -                       java.lang.String blockId,
          -                       java.lang.String identifier,
          -                       Type assumedType,
          -                       int lineNumber,
          -                       int offset,
          -                       de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> Offsetvektor)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getMethodOverloadedID

          -
          public int getMethodOverloadedID()
          -
        • -
        - - - -
          -
        • -

          getMethodName

          -
          public java.lang.String getMethodName()
          -
        • -
        - - - -
          -
        • -

          setMethodName

          -
          public void setMethodName(java.lang.String methodName)
          -
        • -
        - - - -
          -
        • -

          getMethodParaCount

          -
          public int getMethodParaCount()
          -
        • -
        - - - -
          -
        • -

          setMethodParaCount

          -
          public void setMethodParaCount(int methodParaCount)
          -
        • -
        - - - -
          -
        • -

          getBlockId

          -
          public java.lang.String getBlockId()
          -
        • -
        - - - -
          -
        • -

          setBlockId

          -
          public void setBlockId(java.lang.String blockId)
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          updateHashSetKey

          -
          public void updateHashSetKey(IHashSetKey key)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html deleted file mode 100755 index 196f9556..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - - -CMethodTypeAssumption - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumption
    -

    Class CMethodTypeAssumption

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetElement
      -
      -
      -
      -
      public class CMethodTypeAssumption
      -extends CTypeAssumption
      -
      Version:
      -
      $Date: 2013/09/22 20:12:48 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CMethodTypeAssumption

          -
          public CMethodTypeAssumption(Type classType,
          -                     java.lang.String identifier,
          -                     Type assumedType,
          -                     int parameterCount,
          -                     int lineNumber,
          -                     int offset,
          -                     de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> Offsetvektor,
          -                     de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> genericMethodParameters)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getParaCount

          -
          public int getParaCount()
          -
          Author: Jrg Buerle
          -
          Returns:
          Returns the ParaCount.
          -
        • -
        - - - -
          -
        • -

          getGenericMethodParameters

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenericMethodParameters()
          -
        • -
        - - - -
          -
        • -

          addParaAssumption

          -
          public void addParaAssumption(CParaTypeAssumption paraAssumption)
          -
        • -
        - - - - - - - -
          -
        • -

          getParaAssumptions

          -
          public de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> getParaAssumptions()
          -
          Author: Jrg Buerle
          -
          Returns:
          Returns the m_ParaAssumptions.
          -
        • -
        - - - - - - - - - - - - - - - - - - - -
          -
        • -

          getOverloadedMethodID

          -
          public int getOverloadedMethodID()
          -
        • -
        - - - - - - - -
          -
        • -

          updateHashSetKey

          -
          public void updateHashSetKey(IHashSetKey key)
          -
        • -
        - - - -
          -
        • -

          getClassType

          -
          public Type getClassType()
          -
          Liefert den angenommenen Typ f�r die Klasse, welche diese Methode enth�lt.
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html deleted file mode 100755 index 51a539cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - -CParaTypeAssumption - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumption
    -

    Class CParaTypeAssumption

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetElement
      -
      -
      -
      -
      public class CParaTypeAssumption
      -extends CTypeAssumption
      -
      Version:
      -
      $Date: 2013/09/22 20:12:48 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CParaTypeAssumption

          -
          public CParaTypeAssumption(java.lang.String className,
          -                   java.lang.String methodName,
          -                   int methodParaCount,
          -                   int methodOverloadedID,
          -                   java.lang.String identifier,
          -                   Type assumedType,
          -                   int lineNumber,
          -                   int offset,
          -                   de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> Offsetvektor)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html deleted file mode 100755 index 56a47a7a..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html +++ /dev/null @@ -1,555 +0,0 @@ - - - - - -CTypeAssumption - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumption
    -

    Class CTypeAssumption

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetElement
      -
      -
      -
      Direct Known Subclasses:
      -
      CInstVarTypeAssumption, CLocalVarTypeAssumption, CMethodTypeAssumption, CParaTypeAssumption
      -
      -
      -
      -
      public abstract class CTypeAssumption
      -extends java.lang.Object
      -implements IHashSetElement
      -
      Diese Klasse repr�sentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
      - Die von dieser Klasse abgeleiteten Subklassen stehen f�r bestimmte - Typannahmen des abstrakten Syntaxbaumes, wie z.B. f�r Felder, Methoden, - lokale Variablen, etc.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:48 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTypeAssumption

          -
          public CTypeAssumption(java.lang.String className,
          -               java.lang.String identifier,
          -               Type assumedType,
          -               int lineNumber,
          -               int offset,
          -               de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> OffsetVektor)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getClassName

          -
          public java.lang.String getClassName()
          -
        • -
        - - - -
          -
        • -

          setClassName

          -
          public void setClassName(java.lang.String className)
          -
        • -
        - - - -
          -
        • -

          getIdentifier

          -
          public java.lang.String getIdentifier()
          -
        • -
        - - - -
          -
        • -

          setIdentifier

          -
          public void setIdentifier(java.lang.String identifier)
          -
        • -
        - - - -
          -
        • -

          getAssumedType

          -
          public Type getAssumedType()
          -
        • -
        - - - -
          -
        • -

          setAssumedType

          -
          public void setAssumedType(Type assumedType)
          -
        • -
        - - - -
          -
        • -

          getLineNumber

          -
          public int getLineNumber()
          -
        • -
        - - - -
          -
        • -

          setLineNumber

          -
          public void setLineNumber(int lineNumber)
          -
        • -
        - - - -
          -
        • -

          getOffset

          -
          public int getOffset()
          -
        • -
        - - - -
          -
        • -

          addOffset

          -
          public void addOffset(int i)
          -
        • -
        - - - -
          -
        • -

          getOffsetMenge

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getOffsetMenge()
          -
        • -
        - - - -
          -
        • -

          setOffset

          -
          public void setOffset(int Offset)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public final boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          isPlaceholderVariable

          -
          public boolean isPlaceholderVariable()
          -
        • -
        - - - -
          -
        • -

          equalsAssumption

          -
          public abstract boolean equalsAssumption(CTypeAssumption assumption)
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public abstract CTypeAssumption clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html deleted file mode 100755 index 0e5c378b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html deleted file mode 100755 index 235ad28f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html deleted file mode 100755 index 82b0e463..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html deleted file mode 100755 index 03e03946..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html deleted file mode 100755 index 883189d9..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html +++ /dev/null @@ -1,617 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumption.CTypeAssumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html deleted file mode 100755 index 30fc35b4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumption - - - - -

    mycompiler.mytypereconstruction.typeassumption

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html deleted file mode 100755 index 10b33bd0..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumption - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction.typeassumption

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html deleted file mode 100755 index 06403220..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumption Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction.typeassumption

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html deleted file mode 100755 index 6e0bfece..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction.typeassumption - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction.typeassumption

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html deleted file mode 100755 index aec4011f..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - -CInstVarKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Class CInstVarKey

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetKey
      -
      -
      -
      -
      public class CInstVarKey
      -extends CTypeAssumptionKey
      -
      Version:
      -
      $Date: 2013/09/22 20:12:46 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringKEYPREFIX 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CInstVarKey(java.lang.String className, - java.lang.String identifier) 
        -
      • -
      - - -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          KEYPREFIX

          -
          public static java.lang.String KEYPREFIX
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CInstVarKey

          -
          public CInstVarKey(java.lang.String className,
          -           java.lang.String identifier)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html deleted file mode 100755 index 3079acb7..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html +++ /dev/null @@ -1,439 +0,0 @@ - - - - - -CLocalVarKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Class CLocalVarKey

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringKEYPREFIX 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        CLocalVarKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - int overloadedMethodID, - java.lang.String blockId, - java.lang.String identifier) 
        CLocalVarKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String blockId, - java.lang.String identifier) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        CLocalVarKeygetFirstMethodKey() -
        Liefert immer den Key der 1.
        -
        CLocalVarKeygetNextMethodKey() -
        Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1.
        -
        intgetOverloadedMethodID() -
        Liefert die �berladen-ID der Methode
        -
        booleanisOverloadedIDSet() -
        Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
        -
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          KEYPREFIX

          -
          public static java.lang.String KEYPREFIX
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CLocalVarKey

          -
          public CLocalVarKey(java.lang.String className,
          -            java.lang.String methodName,
          -            int methodParaCount,
          -            java.lang.String blockId,
          -            java.lang.String identifier)
          -
        • -
        - - - -
          -
        • -

          CLocalVarKey

          -
          public CLocalVarKey(java.lang.String className,
          -            java.lang.String methodName,
          -            int methodParaCount,
          -            int overloadedMethodID,
          -            java.lang.String blockId,
          -            java.lang.String identifier)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getNextMethodKey

          -
          public CLocalVarKey getNextMethodKey()
          -
          Description copied from interface: IMethodBoundKey
          -
          Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1. Methode (je nach reihenfolge - der Methodendeklaration) habe, kann ich durch den Aufruf - von getNextMethodKey() den Key der 2. Methode berechnen - lassen ohne dass der Key neu erstellt werden muss
          -
          -
          Specified by:
          -
          getNextMethodKey in interface IMethodBoundKey
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getOverloadedMethodID

          -
          public int getOverloadedMethodID()
          -
          Description copied from interface: IMethodBoundKey
          -
          Liefert die �berladen-ID der Methode
          -
          -
          Specified by:
          -
          getOverloadedMethodID in interface IMethodBoundKey
          -
          Returns:
          overloaded-ID
          -
        • -
        - - - -
          -
        • -

          isOverloadedIDSet

          -
          public boolean isOverloadedIDSet()
          -
          Description copied from interface: IMethodBoundKey
          -
          Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
          -
          -
          Specified by:
          -
          isOverloadedIDSet in interface IMethodBoundKey
          -
          Returns:
          true/false
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html deleted file mode 100755 index 902dfe07..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - - -CMethodKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Class CMethodKey

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringKEYPREFIX 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        CMethodKey(java.lang.String className, - java.lang.String identifier, - int paraCount) 
        CMethodKey(java.lang.String className, - java.lang.String identifier, - int paraCount, - int overloadedMethodID) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        CMethodKeygetFirstMethodKey() -
        Liefert immer den Key der 1.
        -
        CMethodKeygetNextMethodKey() -
        Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1.
        -
        intgetOverloadedMethodID() -
        Liefert die �berladen-ID der Methode
        -
        booleanisOverloadedIDSet() -
        Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
        -
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          KEYPREFIX

          -
          public static java.lang.String KEYPREFIX
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CMethodKey

          -
          public CMethodKey(java.lang.String className,
          -          java.lang.String identifier,
          -          int paraCount)
          -
        • -
        - - - -
          -
        • -

          CMethodKey

          -
          public CMethodKey(java.lang.String className,
          -          java.lang.String identifier,
          -          int paraCount,
          -          int overloadedMethodID)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getNextMethodKey

          -
          public CMethodKey getNextMethodKey()
          -
          Description copied from interface: IMethodBoundKey
          -
          Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1. Methode (je nach reihenfolge - der Methodendeklaration) habe, kann ich durch den Aufruf - von getNextMethodKey() den Key der 2. Methode berechnen - lassen ohne dass der Key neu erstellt werden muss
          -
          -
          Specified by:
          -
          getNextMethodKey in interface IMethodBoundKey
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getOverloadedMethodID

          -
          public int getOverloadedMethodID()
          -
          Description copied from interface: IMethodBoundKey
          -
          Liefert die �berladen-ID der Methode
          -
          -
          Specified by:
          -
          getOverloadedMethodID in interface IMethodBoundKey
          -
          Returns:
          overloaded-ID
          -
        • -
        - - - -
          -
        • -

          isOverloadedIDSet

          -
          public boolean isOverloadedIDSet()
          -
          Description copied from interface: IMethodBoundKey
          -
          Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
          -
          -
          Specified by:
          -
          isOverloadedIDSet in interface IMethodBoundKey
          -
          Returns:
          true/false
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html deleted file mode 100755 index 3567cbbe..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html +++ /dev/null @@ -1,435 +0,0 @@ - - - - - -CMethodParaKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Class CMethodParaKey

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Field Summary

        - - - - - - - - - - -
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringKEYPREFIX 
        -
      • -
      - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        CMethodParaKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - int overloadedMethodID, - java.lang.String identifier) 
        CMethodParaKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String identifier) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        CMethodParaKeygetFirstMethodKey() -
        Liefert immer den Key der 1.
        -
        CMethodParaKeygetNextMethodKey() -
        Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1.
        -
        intgetOverloadedMethodID() -
        Liefert die �berladen-ID der Methode
        -
        booleanisOverloadedIDSet() -
        Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
        -
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          KEYPREFIX

          -
          public static java.lang.String KEYPREFIX
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CMethodParaKey

          -
          public CMethodParaKey(java.lang.String className,
          -              java.lang.String methodName,
          -              int methodParaCount,
          -              java.lang.String identifier)
          -
        • -
        - - - -
          -
        • -

          CMethodParaKey

          -
          public CMethodParaKey(java.lang.String className,
          -              java.lang.String methodName,
          -              int methodParaCount,
          -              int overloadedMethodID,
          -              java.lang.String identifier)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getNextMethodKey

          -
          public CMethodParaKey getNextMethodKey()
          -
          Description copied from interface: IMethodBoundKey
          -
          Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1. Methode (je nach reihenfolge - der Methodendeklaration) habe, kann ich durch den Aufruf - von getNextMethodKey() den Key der 2. Methode berechnen - lassen ohne dass der Key neu erstellt werden muss
          -
          -
          Specified by:
          -
          getNextMethodKey in interface IMethodBoundKey
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getOverloadedMethodID

          -
          public int getOverloadedMethodID()
          -
          Description copied from interface: IMethodBoundKey
          -
          Liefert die �berladen-ID der Methode
          -
          -
          Specified by:
          -
          getOverloadedMethodID in interface IMethodBoundKey
          -
          Returns:
          overloaded-ID
          -
        • -
        - - - -
          -
        • -

          isOverloadedIDSet

          -
          public boolean isOverloadedIDSet()
          -
          Description copied from interface: IMethodBoundKey
          -
          Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
          -
          -
          Specified by:
          -
          isOverloadedIDSet in interface IMethodBoundKey
          -
          Returns:
          true/false
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html deleted file mode 100755 index 880e2367..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - -CTypeAssumptionKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Class CTypeAssumptionKey

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IHashSetKey
      -
      -
      -
      Direct Known Subclasses:
      -
      CInstVarKey, CLocalVarKey, CMethodKey, CMethodParaKey
      -
      -
      -
      -
      public abstract class CTypeAssumptionKey
      -extends java.lang.Object
      -implements IHashSetKey
      -
      Diese Klasse modelliert einen eindeutigen Schlssel fr eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
      -
      Version:
      -
      $Date: 2013/09/22 20:12:46 $
      -
      Author:
      -
      Jrg Buerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CTypeAssumptionKey() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        booleanequals(java.lang.Object obj) -
        Author: Jrg Buerle
        -
        java.lang.StringgetKeyString() -
        Author: Jrg Buerle
        -
        inthashCode() -
        Author: Jrg Buerle
        -
        java.lang.StringtoString() -

        Author: Jrg Buerle
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -getClass, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTypeAssumptionKey

          -
          public CTypeAssumptionKey()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getKeyString

          -
          public java.lang.String getKeyString()
          -
          Author: Jrg Buerle
          -
          Returns:
          Returns the KeyString.
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals(java.lang.Object obj)
          -
          Author: Jrg Buerle
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          Parameters:
          obj -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Author: Jrg Buerle
          -
          -
          Overrides:
          -
          hashCode in class java.lang.Object
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -

          Author: Jrg Buerle
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/IMethodBoundKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/IMethodBoundKey.html deleted file mode 100755 index 20eb2091..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/IMethodBoundKey.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -IMethodBoundKey - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.typeassumptionkey
    -

    Interface IMethodBoundKey

    -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        IMethodBoundKeygetFirstMethodKey() -
        Liefert immer den Key der 1.
        -
        IMethodBoundKeygetNextMethodKey() -
        Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1.
        -
        intgetOverloadedMethodID() -
        Liefert die �berladen-ID der Methode
        -
        booleanisOverloadedIDSet() -
        Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
        -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getNextMethodKey

          -
          IMethodBoundKey getNextMethodKey()
          -
          Berechnet anhand des aktuellen Schluessels den Schluessel - fuer die naechste Ueberlandene Methode - - Bsp: - - Es gibt 2 Methoden - - -overloaded(int a) - -overloaded(char a) - - Wenn ich den MethodKey der 1. Methode (je nach reihenfolge - der Methodendeklaration) habe, kann ich durch den Aufruf - von getNextMethodKey() den Key der 2. Methode berechnen - lassen ohne dass der Key neu erstellt werden muss
          -
        • -
        - - - -
          -
        • -

          getFirstMethodKey

          -
          IMethodBoundKey getFirstMethodKey()
          -
          Liefert immer den Key der 1. Methode
          -
        • -
        - - - -
          -
        • -

          getOverloadedMethodID

          -
          int getOverloadedMethodID()
          -
          Liefert die �berladen-ID der Methode
          -
          Returns:
          overloaded-ID
          -
        • -
        - - - -
          -
        • -

          isOverloadedIDSet

          -
          boolean isOverloadedIDSet()
          -
          Gibt an, ob die overloaded-id initialisiert wurde, - oder ob das Objekt mit dem "lazy"-konstruktor initialisiert wurde
          -
          Returns:
          true/false
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html deleted file mode 100755 index d15a0a13..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html deleted file mode 100755 index 228199bc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html deleted file mode 100755 index 1487b712..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html deleted file mode 100755 index ccc5bb2b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html deleted file mode 100755 index 79e482ed..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/IMethodBoundKey.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/IMethodBoundKey.html deleted file mode 100755 index c7067139..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/IMethodBoundKey.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - -Uses of Interface mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html deleted file mode 100755 index 3a2804f1..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumptionkey - - - - -

    mycompiler.mytypereconstruction.typeassumptionkey

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html deleted file mode 100755 index a43135d5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumptionkey - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction.typeassumptionkey

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html deleted file mode 100755 index 44ec7832..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.typeassumptionkey Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction.typeassumptionkey

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    -
      -
    • java.lang.Object -
        -
      • mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey (implements mycompiler.mytypereconstruction.set.IHashSetKey) -
          -
        • mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey
        • -
        • mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey (implements mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey)
        • -
        • mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey (implements mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey)
        • -
        • mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey (implements mycompiler.mytypereconstruction.typeassumptionkey.IMethodBoundKey)
        • -
        -
      • -
      -
    • -
    -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html deleted file mode 100755 index afc3e43d..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction.typeassumptionkey - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction.typeassumptionkey

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html deleted file mode 100755 index a47257fc..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - -FC_TTO - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.unify
    -

    Class FC_TTO

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.unify.FC_TTO
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class FC_TTO
      -extends java.lang.Object
      -
      Hilfsklasse f�r den Unifizierungsalgorithmus
      -
      Version:
      -
      $Date: 2013/09/22 20:12:50 $
      -
      Author:
      -
      Martin Pl�micke
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        FC_TTO(de.dhbwstuttgart.typeinference.Menge<Pair> fc, - de.dhbwstuttgart.typeinference.Menge tto, - de.dhbwstuttgart.typeinference.Menge<Class> classv) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        de.dhbwstuttgart.typeinference.Menge<Class>getClasses() 
        de.dhbwstuttgart.typeinference.Menge<Pair>getFC() 
        de.dhbwstuttgart.typeinference.MengegetTTO() 
        java.lang.StringtoString() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FC_TTO

          -
          public FC_TTO(de.dhbwstuttgart.typeinference.Menge<Pair> fc,
          -      de.dhbwstuttgart.typeinference.Menge tto,
          -      de.dhbwstuttgart.typeinference.Menge<Class> classv)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getFC

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> getFC()
          -
        • -
        - - - -
          -
        • -

          getTTO

          -
          public de.dhbwstuttgart.typeinference.Menge getTTO()
          -
        • -
        - - - -
          -
        • -

          getClasses

          -
          public de.dhbwstuttgart.typeinference.Menge<Class> getClasses()
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/MUB.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/MUB.html deleted file mode 100755 index afb1acbb..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/MUB.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - -MUB - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.unify
    -

    Class MUB

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.unify.MUB
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class MUB
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        de.dhbwstuttgart.typeinference.Menge<? extends Type>getMub() 
        de.dhbwstuttgart.typeinference.Menge<Pair>getUnifier() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getUnifier

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> getUnifier()
          -
        • -
        - - - -
          -
        • -

          getMub

          -
          public de.dhbwstuttgart.typeinference.Menge<? extends Type> getMub()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/Unify.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/Unify.html deleted file mode 100755 index dcdb3e7b..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/Unify.html +++ /dev/null @@ -1,753 +0,0 @@ - - - - - -Unify - - - - - - - - - - - -
    -
    mycompiler.mytypereconstruction.unify
    -

    Class Unify

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.mytypereconstruction.unify.Unify
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Unify
      -extends java.lang.Object
      -
      Implementierung des Unifizierungsalgorithmus
      -
      Version:
      -
      $Date: 2013/09/22 20:12:49 $
      -
      Author:
      -
      Martin Pl�micke, Thomas Ott
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Unify() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static de.dhbwstuttgart.typeinference.Menge<RefType>allGreater(BoundedGenericTypeVar ty, - de.dhbwstuttgart.typeinference.Menge<Pair> FC) 
        static de.dhbwstuttgart.typeinference.Menge<RefType>allGreater(RefType ty, - de.dhbwstuttgart.typeinference.Menge<Pair> FC) 
        static de.dhbwstuttgart.typeinference.Menge<RefType>allSmaller(RefType ty, - de.dhbwstuttgart.typeinference.Menge<Pair> FC) 
        static de.dhbwstuttgart.typeinference.Menge<Pair>copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp) 
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp) 
        static booleanhasSolvedForm(de.dhbwstuttgart.typeinference.Menge<Pair> E) 
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>instanceSmaller(Pair P, - FC_TTO fc_tto) 
        static PairisInFC(RefType R1, - RefType R2, - de.dhbwstuttgart.typeinference.Menge<Pair> FC) 
        static PairisInFCrechtsUnify(RefType RT1, - RefType RT2, - FC_TTO fc_tto) 
        static booleanisRealSubClass(java.lang.String Basis, - java.lang.String Mutter, - FC_TTO fc_tto) 
        static booleanisRXSimilarRY(RefType RFC, - RefType RY, - boolean allowTPH) 
        static booleanisTVinRefType(TypePlaceholder TV, - RefType RT) 
        static java.util.Hashtablematch(RefType FCtype, - RefType tomatch, - java.util.Hashtable<java.lang.String,Type> ht) 
        static intpi(int n, - java.lang.String C, - java.lang.String D, - de.dhbwstuttgart.typeinference.Menge tto) 
        static voidprintMenge(java.lang.String strMenge, - de.dhbwstuttgart.typeinference.Menge<Pair> E, - int nDebug) 
        static voidprintMengeUnifier(java.lang.String strMenge, - de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni, - int nDebug) 
        static de.dhbwstuttgart.typeinference.Menge<Pair>sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) 
        static de.dhbwstuttgart.typeinference.Menge<Pair>sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto, - boolean useSubst) 
        static booleanSubst(Pair P, - int nTypnrInPair, - TypePlaceholder a, - Type o, - boolean bMitVorbedingung) 
        static voidSubstHashtable(RefType typterm, - java.util.Hashtable<java.lang.String,Type> ht) 
        static de.dhbwstuttgart.typeinference.Menge<Pair>SubstHashtable2MengePair(java.util.Hashtable ht) 
        static voidSubstHashtableGeneric(RefType typterm, - java.util.Hashtable<java.lang.String,Type> ht) 
        static MUBunify_Mub(Type ty1, - Type ty2, - FC_TTO fc_tto) 
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unify(Type ty1, - Type ty2, - FC_TTO fc_tto) -
        Unifiziert ein Pair mit den Elementen ty1 und ty2 -> (ty1 < ty2)
        -
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) -
        Einstieg in die Unifizierung mit Wildcards
        -
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unifyOld(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) 
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unifyWC(Pair P, - FC_TTO fc_tto) -
        Einstieg in die Unifizierung mit Wildcards
        -
        static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unifyWC(Type ty1, - Type ty2, - FC_TTO fc_tto) -
        Einstieg in die Unifizierung mit Wildcards
        -
        static voidvarSubst(RefType typterm, - java.util.Hashtable<java.lang.String,Type> ht) 
        static java.util.Hashtable<java.lang.String,Type>MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Unify

          -
          public Unify()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          unify

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unify(Type ty1,
          -                                             Type ty2,
          -                                             FC_TTO fc_tto)
          -
          Unifiziert ein Pair mit den Elementen ty1 und ty2 -> (ty1 < ty2)
          -
          Parameters:
          ty1 -
          ty2 -
          fc_tto -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          unifyOld

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unifyOld(de.dhbwstuttgart.typeinference.Menge<Pair> E,
          -                                                FC_TTO fc_tto)
          -
        • -
        - - - -
          -
        • -

          unifyWC

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unifyWC(Type ty1,
          -                                               Type ty2,
          -                                               FC_TTO fc_tto)
          -
          Einstieg in die Unifizierung mit Wildcards
          -
          Parameters:
          ty1 - - Typ 1 der Unifizierung
          ty2 - - Typ 2 der Unifizierung
          fc_tto - - Hilfsklasse mit FC
          -
          Returns:
          Menge> - Ergebnispaare
          -
        • -
        - - - -
          -
        • -

          unifyWC

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unifyWC(Pair P,
          -                                               FC_TTO fc_tto)
          -
          Einstieg in die Unifizierung mit Wildcards
          -
          Parameters:
          P - - Paar das unifiziert werden soll.
          fc_tto - - Hilfsklasse mit FC
          -
          Returns:
          Menge> - Ergebnispaare
          -
        • -
        - - - -
          -
        • -

          unify

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
          -                                             FC_TTO fc_tto)
          -
          Einstieg in die Unifizierung mit Wildcards
          -
          Parameters:
          E - - Menge von Paaren die unifiziert werden sollen
          fc_tto - - Hilfsklasse mit FC
          -
          Returns:
          Menge> - Ergebnispaare - Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] - oder alle Elemente in der Form [A <. B, C <. D, ..., E in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          sub_unify

          -
          public static de.dhbwstuttgart.typeinference.Menge<Pair> sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
          -                               FC_TTO fc_tto)
          -
        • -
        - - - -
          -
        • -

          sub_unify

          -
          public static de.dhbwstuttgart.typeinference.Menge<Pair> sub_unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
          -                               FC_TTO fc_tto,
          -                               boolean useSubst)
          -
        • -
        - - - -
          -
        • -

          isRXSimilarRY

          -
          public static boolean isRXSimilarRY(RefType RFC,
          -                    RefType RY,
          -                    boolean allowTPH)
          -
        • -
        - - - -
          -
        • -

          SubstHashtable2MengePair

          -
          public static de.dhbwstuttgart.typeinference.Menge<Pair> SubstHashtable2MengePair(java.util.Hashtable ht)
          -
        • -
        - - - -
          -
        • -

          MengePair2SubstHashtableMengePair

          -
          public static java.util.Hashtable<java.lang.String,Type> MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v)
          -
        • -
        - - - -
          -
        • -

          copyMengePair

          -
          public static de.dhbwstuttgart.typeinference.Menge<Pair> copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp)
          -
        • -
        - - - -
          -
        • -

          copyMengeMengePair

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp)
          -
        • -
        - - - -
          -
        • -

          instanceSmaller

          -
          public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> instanceSmaller(Pair P,
          -                                                       FC_TTO fc_tto)
          -
        • -
        - - - -
          -
        • -

          allSmaller

          -
          public static de.dhbwstuttgart.typeinference.Menge<RefType> allSmaller(RefType ty,
          -                                   de.dhbwstuttgart.typeinference.Menge<Pair> FC)
          -
        • -
        - - - -
          -
        • -

          allGreater

          -
          public static de.dhbwstuttgart.typeinference.Menge<RefType> allGreater(BoundedGenericTypeVar ty,
          -                                   de.dhbwstuttgart.typeinference.Menge<Pair> FC)
          -
        • -
        - - - -
          -
        • -

          allGreater

          -
          public static de.dhbwstuttgart.typeinference.Menge<RefType> allGreater(RefType ty,
          -                                   de.dhbwstuttgart.typeinference.Menge<Pair> FC)
          -
        • -
        - - - -
          -
        • -

          isInFC

          -
          public static Pair isInFC(RefType R1,
          -          RefType R2,
          -          de.dhbwstuttgart.typeinference.Menge<Pair> FC)
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          Subst

          -
          public static boolean Subst(Pair P,
          -            int nTypnrInPair,
          -            TypePlaceholder a,
          -            Type o,
          -            boolean bMitVorbedingung)
          -
        • -
        - - - -
          -
        • -

          SubstHashtableGeneric

          -
          public static void SubstHashtableGeneric(RefType typterm,
          -                         java.util.Hashtable<java.lang.String,Type> ht)
          -
        • -
        - - - -
          -
        • -

          SubstHashtable

          -
          public static void SubstHashtable(RefType typterm,
          -                  java.util.Hashtable<java.lang.String,Type> ht)
          -
        • -
        - - - -
          -
        • -

          isRealSubClass

          -
          public static boolean isRealSubClass(java.lang.String Basis,
          -                     java.lang.String Mutter,
          -                     FC_TTO fc_tto)
          -
        • -
        - - - -
          -
        • -

          pi

          -
          public static int pi(int n,
          -     java.lang.String C,
          -     java.lang.String D,
          -     de.dhbwstuttgart.typeinference.Menge tto)
          -              throws SCException
          -
          Throws:
          -
          SCException
          -
        • -
        - - - -
          -
        • -

          printMengeUnifier

          -
          public static void printMengeUnifier(java.lang.String strMenge,
          -                     de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni,
          -                     int nDebug)
          -
        • -
        - - - -
          -
        • -

          printMenge

          -
          public static void printMenge(java.lang.String strMenge,
          -              de.dhbwstuttgart.typeinference.Menge<Pair> E,
          -              int nDebug)
          -
        • -
        - - - -
          -
        • -

          hasSolvedForm

          -
          public static boolean hasSolvedForm(de.dhbwstuttgart.typeinference.Menge<Pair> E)
          -
        • -
        - - - -
          -
        • -

          varSubst

          -
          public static void varSubst(RefType typterm,
          -            java.util.Hashtable<java.lang.String,Type> ht)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html deleted file mode 100755 index f1480e12..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.unify.FC_TTO - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.unify.FC_TTO

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/MUB.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/MUB.html deleted file mode 100755 index 4f1e66e4..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/MUB.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.unify.MUB - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.unify.MUB

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html deleted file mode 100755 index 27d64789..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.mytypereconstruction.unify.Unify - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.mytypereconstruction.unify.Unify

    -
    -
    No usage of mycompiler.mytypereconstruction.unify.Unify
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-frame.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-frame.html deleted file mode 100755 index dd9edd63..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-frame.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.unify - - - - -

    mycompiler.mytypereconstruction.unify

    -
    -

    Classes

    - -
    - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-summary.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-summary.html deleted file mode 100755 index 7e1fe726..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-summary.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.unify - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.mytypereconstruction.unify

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      FC_TTO -
      Hilfsklasse f�r den Unifizierungsalgorithmus
      -
      MUB 
      Unify -
      Implementierung des Unifizierungsalgorithmus
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-tree.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-tree.html deleted file mode 100755 index 29e920b5..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-tree.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - -mycompiler.mytypereconstruction.unify Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.mytypereconstruction.unify

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    -
      -
    • java.lang.Object -
        -
      • mycompiler.mytypereconstruction.unify.FC_TTO
      • -
      • mycompiler.mytypereconstruction.unify.MUB
      • -
      • mycompiler.mytypereconstruction.unify.Unify
      • -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-use.html b/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-use.html deleted file mode 100755 index b23af7c3..00000000 --- a/doc/LambdaJavadoc/mycompiler/mytypereconstruction/unify/package-use.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - -Uses of Package mycompiler.mytypereconstruction.unify - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.mytypereconstruction.unify

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/package-frame.html b/doc/LambdaJavadoc/mycompiler/package-frame.html deleted file mode 100755 index 03a2e0af..00000000 --- a/doc/LambdaJavadoc/mycompiler/package-frame.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -mycompiler - - - - -

    mycompiler

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/package-summary.html b/doc/LambdaJavadoc/mycompiler/package-summary.html deleted file mode 100755 index 5ec0af31..00000000 --- a/doc/LambdaJavadoc/mycompiler/package-summary.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - -mycompiler - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/package-tree.html b/doc/LambdaJavadoc/mycompiler/package-tree.html deleted file mode 100755 index e87e4725..00000000 --- a/doc/LambdaJavadoc/mycompiler/package-tree.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - -mycompiler Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/package-use.html b/doc/LambdaJavadoc/mycompiler/package-use.html deleted file mode 100755 index cb40a6f6..00000000 --- a/doc/LambdaJavadoc/mycompiler/package-use.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -Uses of Package mycompiler - - - - - - - - - - -
    -

    Uses of Package
    mycompiler

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/AbstractInferenceTest.html b/doc/LambdaJavadoc/mycompiler/test/AbstractInferenceTest.html deleted file mode 100755 index f8263481..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/AbstractInferenceTest.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - -AbstractInferenceTest - - - - - - - - - - - -
    -
    mycompiler.test
    -

    Class AbstractInferenceTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.AbstractInferenceTest
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidtestSetup() -
        runs the JUnit-Test, calls all compiler steps
        -
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          testSetup

          -
          public void testSetup()
          -               throws java.lang.Throwable
          -
          runs the JUnit-Test, calls all compiler steps
          -
          Throws:
          -
          java.lang.Throwable
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/AllTests.html b/doc/LambdaJavadoc/mycompiler/test/AllTests.html deleted file mode 100755 index bd5f58ac..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/AllTests.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTests - - - - - - - - - - - -
    -
    mycompiler.test
    -

    Class AllTests

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.AllTests
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTests
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AllTests() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTests

          -
          public AllTests()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/LambdaInterferenzTest.html b/doc/LambdaJavadoc/mycompiler/test/LambdaInterferenzTest.html deleted file mode 100755 index a3ed0cf7..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/LambdaInterferenzTest.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -LambdaInterferenzTest - - - - - - - - - - - -
    -
    mycompiler.test
    -

    Class LambdaInterferenzTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.LambdaInterferenzTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class LambdaInterferenzTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LambdaInterferenzTest

          -
          public LambdaInterferenzTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/Log4jWrapper.html b/doc/LambdaJavadoc/mycompiler/test/Log4jWrapper.html deleted file mode 100755 index f6e04411..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/Log4jWrapper.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - -Log4jWrapper - - - - - - - - - - - -
    -
    mycompiler.test
    -

    Class Log4jWrapper

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.Log4jWrapper
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Log4jWrapper
      -extends java.lang.Object
      -
      needed to assure one-time execution of configure script
      -
      Author:
      -
      tom
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidconfigureLog4j() 
        static Log4jWrappergetInstance() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getInstance

          -
          public static Log4jWrapper getInstance()
          -
        • -
        - - - -
          -
        • -

          configureLog4j

          -
          public void configureLog4j()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/AllTestsBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/AllTestsBlocks.html deleted file mode 100755 index f396a94d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/AllTestsBlocks.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsBlocks - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class AllTestsBlocks

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.blocks.AllTestsBlocks
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsBlocks
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AllTestsBlocks() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsBlocks

          -
          public AllTestsBlocks()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestForStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestForStmt.html deleted file mode 100755 index 2a3a3338..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestForStmt.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestForStmt - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestForStmt

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestForStmt
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      tests correct identification of for-stmt
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestForStmt(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestForStmt

          -
          public TestForStmt(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestIfStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestIfStmt.html deleted file mode 100755 index 717ac272..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestIfStmt.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestIfStmt - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestIfStmt

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestIfStmt
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct identification of if-stmt and block usage
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestIfStmt(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestIfStmt

          -
          public TestIfStmt(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestInferenceAcrossBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestInferenceAcrossBlocks.html deleted file mode 100755 index 7c49e5de..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestInferenceAcrossBlocks.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceAcrossBlocks - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestInferenceAcrossBlocks

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceAcrossBlocks
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct inference across different block with respect to local variables
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceAcrossBlocks

          -
          public TestInferenceAcrossBlocks(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleBlocks.html deleted file mode 100755 index 3539e37a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleBlocks.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleBlocks - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestSimpleBlocks

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleBlocks
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct detection of scope of variables in simple blocks without a language specific statement
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestSimpleBlocks(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleBlocks

          -
          public TestSimpleBlocks(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleVariable.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleVariable.html deleted file mode 100755 index b6634ab4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestSimpleVariable.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - -TestSimpleVariable - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestSimpleVariable

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleVariable
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct detection of a single variable in root block - TODO: maybe move to trival?
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestSimpleVariable(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleVariable

          -
          public TestSimpleVariable(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestUndeterminedReturnNegative.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestUndeterminedReturnNegative.html deleted file mode 100755 index b01f882e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestUndeterminedReturnNegative.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - -TestUndeterminedReturnNegative - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestUndeterminedReturnNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestUndeterminedReturnNegative
      -extends AbstractInferenceTest
      -
      16-05-08
      -
      Author:
      -
      this test checks a scenario where undefined return state is given by condition dependant retun statment# - Test expects an exception thrown
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestUndeterminedReturnNegative

          -
          public TestUndeterminedReturnNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestUninitializedVariable.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestUninitializedVariable.html deleted file mode 100755 index 033370fc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestUninitializedVariable.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - -TestUninitializedVariable - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestUninitializedVariable

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestUninitializedVariable
      -extends AbstractInferenceTest
      -
      29-05-08
      -
      Author:
      -
      this test checks a scenario where an uninitialized variable is incremented, which should be discarded by the compiler - Test expects an exception thrown
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestUninitializedVariable

          -
          public TestUninitializedVariable(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/TestWhileStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/TestWhileStmt.html deleted file mode 100755 index 3f8d48fe..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/TestWhileStmt.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestWhileStmt - - - - - - - - - - - -
    -
    mycompiler.test.blocks
    -

    Class TestWhileStmt

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestWhileStmt
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      simply verifies while-stmt recognition
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestWhileStmt(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestWhileStmt

          -
          public TestWhileStmt(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/AllTestsBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/AllTestsBlocks.html deleted file mode 100755 index 198b1dd7..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/AllTestsBlocks.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.AllTestsBlocks - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.AllTestsBlocks

    -
    -
    No usage of mycompiler.test.blocks.AllTestsBlocks
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestForStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestForStmt.html deleted file mode 100755 index 06227f9f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestForStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestForStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestForStmt

    -
    -
    No usage of mycompiler.test.blocks.TestForStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestIfStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestIfStmt.html deleted file mode 100755 index 4ec67c29..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestIfStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestIfStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestIfStmt

    -
    -
    No usage of mycompiler.test.blocks.TestIfStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestInferenceAcrossBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestInferenceAcrossBlocks.html deleted file mode 100755 index 0c142a84..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestInferenceAcrossBlocks.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestInferenceAcrossBlocks - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestInferenceAcrossBlocks

    -
    -
    No usage of mycompiler.test.blocks.TestInferenceAcrossBlocks
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleBlocks.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleBlocks.html deleted file mode 100755 index c4ea9014..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleBlocks.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestSimpleBlocks - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestSimpleBlocks

    -
    -
    No usage of mycompiler.test.blocks.TestSimpleBlocks
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleVariable.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleVariable.html deleted file mode 100755 index 676ad96b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestSimpleVariable.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestSimpleVariable - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestSimpleVariable

    -
    -
    No usage of mycompiler.test.blocks.TestSimpleVariable
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUndeterminedReturnNegative.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUndeterminedReturnNegative.html deleted file mode 100755 index 167900b7..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUndeterminedReturnNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestUndeterminedReturnNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestUndeterminedReturnNegative

    -
    -
    No usage of mycompiler.test.blocks.TestUndeterminedReturnNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUninitializedVariable.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUninitializedVariable.html deleted file mode 100755 index 5d5b3c97..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestUninitializedVariable.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestUninitializedVariable - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestUninitializedVariable

    -
    -
    No usage of mycompiler.test.blocks.TestUninitializedVariable
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestWhileStmt.html b/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestWhileStmt.html deleted file mode 100755 index 86b0b4f1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/class-use/TestWhileStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.blocks.TestWhileStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.blocks.TestWhileStmt

    -
    -
    No usage of mycompiler.test.blocks.TestWhileStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/blocks/package-frame.html deleted file mode 100755 index e9b15f38..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/package-frame.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -mycompiler.test.blocks - - - - -

    mycompiler.test.blocks

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/blocks/package-summary.html deleted file mode 100755 index 8fb29f6e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/package-summary.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -mycompiler.test.blocks - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.blocks

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/blocks/package-tree.html deleted file mode 100755 index 89e9e00f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/package-tree.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -mycompiler.test.blocks Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.blocks

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/blocks/package-use.html b/doc/LambdaJavadoc/mycompiler/test/blocks/package-use.html deleted file mode 100755 index c07c99ee..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/blocks/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.blocks - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.blocks

    -
    -
    No usage of mycompiler.test.blocks
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/class-use/AbstractInferenceTest.html b/doc/LambdaJavadoc/mycompiler/test/class-use/AbstractInferenceTest.html deleted file mode 100755 index 93c366c4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/class-use/AbstractInferenceTest.html +++ /dev/null @@ -1,845 +0,0 @@ - - - - - -Uses of Class mycompiler.test.AbstractInferenceTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.AbstractInferenceTest

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/class-use/AllTests.html b/doc/LambdaJavadoc/mycompiler/test/class-use/AllTests.html deleted file mode 100755 index 1e528ae2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/class-use/AllTests.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.AllTests - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.AllTests

    -
    -
    No usage of mycompiler.test.AllTests
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/class-use/LambdaInterferenzTest.html b/doc/LambdaJavadoc/mycompiler/test/class-use/LambdaInterferenzTest.html deleted file mode 100755 index 4387032d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/class-use/LambdaInterferenzTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.LambdaInterferenzTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.LambdaInterferenzTest

    -
    -
    No usage of mycompiler.test.LambdaInterferenzTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/class-use/Log4jWrapper.html b/doc/LambdaJavadoc/mycompiler/test/class-use/Log4jWrapper.html deleted file mode 100755 index 7852b811..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/class-use/Log4jWrapper.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.test.Log4jWrapper - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.Log4jWrapper

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/AllTestsComplexTypes.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/AllTestsComplexTypes.html deleted file mode 100755 index 6ab799d9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/AllTestsComplexTypes.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsComplexTypes - - - - - - - - - - - -
    -
    mycompiler.test.complexTypes
    -

    Class AllTestsComplexTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.complexTypes.AllTestsComplexTypes
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsComplexTypes
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsComplexTypes

          -
          public AllTestsComplexTypes()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMember.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMember.html deleted file mode 100755 index d159f709..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMember.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOwnClassMember - - - - - - - - - - - -
    -
    mycompiler.test.complexTypes
    -

    Class TestOwnClassMember

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOwnClassMember
      -extends AbstractInferenceTest
      -
      25-04-08
      -
      Author:
      -
      test checks for correct inference using a class member variable
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOwnClassMember(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOwnClassMember

          -
          public TestOwnClassMember(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMethod.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMethod.html deleted file mode 100755 index bc0b4847..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestOwnClassMethod.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOwnClassMethod - - - - - - - - - - - -
    -
    mycompiler.test.complexTypes
    -

    Class TestOwnClassMethod

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOwnClassMethod
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      tests inference using return statement of a member-method
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOwnClassMethod(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOwnClassMethod

          -
          public TestOwnClassMethod(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.html deleted file mode 100755 index 872d5c84..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestStandardLibInheritanceInference - - - - - - - - - - - -
    -
    mycompiler.test.complexTypes
    -

    Class TestStandardLibInheritanceInference

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestStandardLibInheritanceInference
      -extends AbstractInferenceTest
      -
      25-05-08
      -
      Author:
      -
      inference of std-types according to import statements with respect to inheritance structure
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestStandardLibInheritanceInference

          -
          public TestStandardLibInheritanceInference(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibMethod.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibMethod.html deleted file mode 100755 index 1da705a4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/TestStandardLibMethod.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestStandardLibMethod - - - - - - - - - - - -
    -
    mycompiler.test.complexTypes
    -

    Class TestStandardLibMethod

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestStandardLibMethod
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct inference of std types by their methods used
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestStandardLibMethod(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestStandardLibMethod

          -
          public TestStandardLibMethod(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/AllTestsComplexTypes.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/AllTestsComplexTypes.html deleted file mode 100755 index 3b1b3841..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/AllTestsComplexTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.complexTypes.AllTestsComplexTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.complexTypes.AllTestsComplexTypes

    -
    -
    No usage of mycompiler.test.complexTypes.AllTestsComplexTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMember.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMember.html deleted file mode 100755 index 0c3ab41d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMember.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.complexTypes.TestOwnClassMember - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.complexTypes.TestOwnClassMember

    -
    -
    No usage of mycompiler.test.complexTypes.TestOwnClassMember
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMethod.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMethod.html deleted file mode 100755 index add422e6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestOwnClassMethod.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.complexTypes.TestOwnClassMethod - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.complexTypes.TestOwnClassMethod

    -
    -
    No usage of mycompiler.test.complexTypes.TestOwnClassMethod
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibInheritanceInference.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibInheritanceInference.html deleted file mode 100755 index 00271574..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibInheritanceInference.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.complexTypes.TestStandardLibInheritanceInference - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.complexTypes.TestStandardLibInheritanceInference

    -
    -
    No usage of mycompiler.test.complexTypes.TestStandardLibInheritanceInference
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibMethod.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibMethod.html deleted file mode 100755 index 73e04d29..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/class-use/TestStandardLibMethod.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.complexTypes.TestStandardLibMethod - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.complexTypes.TestStandardLibMethod

    -
    -
    No usage of mycompiler.test.complexTypes.TestStandardLibMethod
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-frame.html deleted file mode 100755 index 75f8f2c0..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-frame.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -mycompiler.test.complexTypes - - - - -

    mycompiler.test.complexTypes

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-summary.html deleted file mode 100755 index e00ab969..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -mycompiler.test.complexTypes - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.complexTypes

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-tree.html deleted file mode 100755 index adf62297..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-tree.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - -mycompiler.test.complexTypes Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.complexTypes

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-use.html b/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-use.html deleted file mode 100755 index 10d1ed0d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/complexTypes/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.complexTypes - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.complexTypes

    -
    -
    No usage of mycompiler.test.complexTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html deleted file mode 100755 index 0b687ad4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/BlockExpect.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - -BlockExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class BlockExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.BlockExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IExpectation
      -
      -
      -
      -
      public class BlockExpect
      -extends java.lang.Object
      -implements IExpectation
      -
      15-04-08
      -
      Author:
      -
      expectation structure to define expectations for a particular block
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BlockExpect

          -
          public BlockExpect(java.lang.String parentBlockID,
          -           java.lang.String blockID)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addBlock

          -
          public void addBlock(BlockExpect block)
          -
        • -
        - - - -
          -
        • -

          addLocalVar

          -
          public void addLocalVar(VarExpect localVar)
          -
        • -
        - - - - - - - -
          -
        • -

          getLocalVar

          -
          public java.util.HashMap<java.lang.String,VarExpect> getLocalVar()
          -
        • -
        - - - -
          -
        • -

          setLocalVar

          -
          public void setLocalVar(java.util.HashMap<java.lang.String,VarExpect> localVar)
          -
        • -
        - - - -
          -
        • -

          getContainedBlocks

          -
          public de.dhbwstuttgart.typeinference.Menge<BlockExpect> getContainedBlocks()
          -
        • -
        - - - -
          -
        • -

          setContainedBlocks

          -
          public void setContainedBlocks(de.dhbwstuttgart.typeinference.Menge<BlockExpect> containedBlocks)
          -
        • -
        - - - -
          -
        • -

          getBlockID

          -
          public java.lang.String getBlockID()
          -
        • -
        - - - -
          -
        • -

          setBlockID

          -
          public void setBlockID(java.lang.String blockID)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html deleted file mode 100755 index ce897ff0..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/ClassExpect.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - -ClassExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class ClassExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.ClassExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IExpectation
      -
      -
      -
      -
      public class ClassExpect
      -extends java.lang.Object
      -implements IExpectation
      -
      15-04-08
      -
      Author:
      -
      expectation structure to define expectations for a particular class
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ClassExpect

          -
          public ClassExpect(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          addMember

          -
          public void addMember(VarExpect member)
          -
        • -
        - - - -
          -
        • -

          addMethod

          -
          public void addMethod(MethodExpect method)
          -
        • -
        - - - - - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getGenerics

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()
          -
        • -
        - - - -
          -
        • -

          setGenerics

          -
          public void setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)
          -
        • -
        - - - -
          -
        • -

          getMembers

          -
          public java.util.HashMap<java.lang.String,VarExpect> getMembers()
          -
        • -
        - - - -
          -
        • -

          setMembers

          -
          public void setMembers(java.util.HashMap<java.lang.String,VarExpect> members)
          -
        • -
        - - - - - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html deleted file mode 100755 index d21b4dca..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/Expectation.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - -Expectation - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class Expectation

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.Expectation
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IExpectation
      -
      -
      -
      -
      public class Expectation
      -extends java.lang.Object
      -implements IExpectation
      -
      15-04-08
      -
      Author:
      -
      expectation structure to define expectations for an entire testcase - holds information about classes, exceptions
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Expectation

          -
          public Expectation(ClassExpect classExpect)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          addClass

          -
          public void addClass(ClassExpect classExpect)
          -
        • -
        - - - -
          -
        • -

          addException

          -
          public void addException(java.lang.Exception e)
          -
        • -
        - - - -
          -
        • -

          getExceptions

          -
          public de.dhbwstuttgart.typeinference.Menge<java.lang.Exception> getExceptions()
          -
        • -
        - - - -
          -
        • -

          getClasses

          -
          public java.util.HashMap<java.lang.String,ClassExpect> getClasses()
          -
        • -
        - - - -
          -
        • -

          setClasses

          -
          public void setClasses(java.util.HashMap<java.lang.String,ClassExpect> classes)
          -
        • -
        - - - - -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/GenericTypeVarExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/GenericTypeVarExpect.html deleted file mode 100755 index f7849b74..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/GenericTypeVarExpect.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -GenericTypeVarExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class GenericTypeVarExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.GenericTypeVarExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IUnknownTypeExpect
      -
      -
      -
      -
      public class GenericTypeVarExpect
      -extends java.lang.Object
      -implements IUnknownTypeExpect
      -
      15-05-08
      -
      Author:
      -
      class used to define variable expectations for a GenericTypeVar
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        GenericTypeVarExpect(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetName() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GenericTypeVarExpect

          -
          public GenericTypeVarExpect(java.lang.String name)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IExpectation.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IExpectation.html deleted file mode 100755 index 5adf3137..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IExpectation.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - -IExpectation - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Interface IExpectation

    -
    -
    -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          verifyTypeExpectationsCompletelyMet

          -
          boolean verifyTypeExpectationsCompletelyMet()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IUnknownTypeExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IUnknownTypeExpect.html deleted file mode 100755 index 354b7fc4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/IUnknownTypeExpect.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - -IUnknownTypeExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Interface IUnknownTypeExpect

    -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetName() 
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getName

          -
          java.lang.String getName()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html deleted file mode 100755 index aac440db..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/MethodExpect.html +++ /dev/null @@ -1,589 +0,0 @@ - - - - - -MethodExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class MethodExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.MethodExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IExpectation
      -
      -
      -
      -
      public class MethodExpect
      -extends java.lang.Object
      -implements IExpectation
      -
      15-04-08
      -
      Author:
      -
      defines expectations for methods
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name,
          -            int overloadID)
          -
        • -
        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name,
          -            Type returntype)
          -
        • -
        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name,
          -            Type returntype,
          -            int overloadID)
          -
        • -
        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name,
          -            IUnknownTypeExpect unknownreturntype)
          -
        • -
        - - - -
          -
        • -

          MethodExpect

          -
          public MethodExpect(java.lang.String name,
          -            IUnknownTypeExpect unknownreturntype,
          -            int overloadID)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          addReturntype

          -
          public void addReturntype(Type returntype)
          -
        • -
        - - - -
          -
        • -

          addParameter

          -
          public void addParameter(VarExpect parameter)
          -
        • -
        - - - - - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getReturntypes

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getReturntypes()
          -
        • -
        - - - -
          -
        • -

          setReturntypes

          -
          public void setReturntypes(de.dhbwstuttgart.typeinference.Menge<Type> returntypes)
          -
        • -
        - - - -
          -
        • -

          getGenerics

          -
          public de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> getGenerics()
          -
        • -
        - - - -
          -
        • -

          setGenerics

          -
          public void setGenerics(de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> generics)
          -
        • -
        - - - -
          -
        • -

          getParameter

          -
          public java.util.HashMap<java.lang.String,VarExpect> getParameter()
          -
        • -
        - - - -
          -
        • -

          setParameter

          -
          public void setParameter(java.util.HashMap<java.lang.String,VarExpect> parameter)
          -
        • -
        - - - - - - - -
          -
        • -

          setBlock

          -
          public void setBlock(BlockExpect block)
          -
        • -
        - - - -
          -
        • -

          getOverloadID

          -
          public int getOverloadID()
          -
        • -
        - - - -
          -
        • -

          setOverloadID

          -
          public void setOverloadID(int overloadID)
          -
        • -
        - - - -
          -
        • -

          getReturntypesCopy

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getReturntypesCopy()
          -
        • -
        - - - -
          -
        • -

          setReturntypesCopy

          -
          public void setReturntypesCopy(de.dhbwstuttgart.typeinference.Menge<Type> returntypesCopy)
          -
        • -
        - - - - - - - -
          -
        • -

          getParaCount

          -
          public int getParaCount()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/TypePlaceholderExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/TypePlaceholderExpect.html deleted file mode 100755 index 2a5c2ae6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/TypePlaceholderExpect.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TypePlaceholderExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class TypePlaceholderExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.TypePlaceholderExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IUnknownTypeExpect
      -
      -
      -
      -
      public class TypePlaceholderExpect
      -extends java.lang.Object
      -implements IUnknownTypeExpect
      -
      15-05-08
      -
      Author:
      -
      type for defining an expected TypePlaceholder
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TypePlaceholderExpect(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetName() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TypePlaceholderExpect

          -
          public TypePlaceholderExpect(java.lang.String name)
          -
        • -
        -
      • -
      - - -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.html deleted file mode 100755 index 81e4bee4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - -UnknownTypesMappingExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class UnknownTypesMappingExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.UnknownTypesMappingExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class UnknownTypesMappingExpect
      -extends java.lang.Object
      -
      class is used to translate expected Typeplaceholder variable names to the ones used by the compiler allowing a comparison. It simply holds a registry that is filled upon detection of an unknown type which may later be in need of comparison - only helps verifying that same expected typeplaceholders are mapped to same assumed typeplaceholders
      -
      Author:
      -
      stresing
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddMapping(java.lang.String expectedTypeName, - java.lang.String foundTypeName) 
        java.lang.StringgetMappedType(java.lang.String expectedTypeName) -
        returns mapped Type name as of expectation or null if not yet mapped
        -
        java.util.HashMap<java.lang.String,java.lang.String>getUnknownTypeNameMapping() 
        voidsetUnknownTypeNameMapping(java.util.HashMap<java.lang.String,java.lang.String> unknownTypeNameMapping) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          UnknownTypesMappingExpect

          -
          public UnknownTypesMappingExpect()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getMappedType

          -
          public java.lang.String getMappedType(java.lang.String expectedTypeName)
          -
          returns mapped Type name as of expectation or null if not yet mapped
          -
          Parameters:
          foundTypeName -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          addMapping

          -
          public void addMapping(java.lang.String expectedTypeName,
          -              java.lang.String foundTypeName)
          -
        • -
        - - - -
          -
        • -

          getUnknownTypeNameMapping

          -
          public java.util.HashMap<java.lang.String,java.lang.String> getUnknownTypeNameMapping()
          -
        • -
        - - - -
          -
        • -

          setUnknownTypeNameMapping

          -
          public void setUnknownTypeNameMapping(java.util.HashMap<java.lang.String,java.lang.String> unknownTypeNameMapping)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html deleted file mode 100755 index c0d0dfe9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/VarExpect.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - -VarExpect - - - - - - - - - - - -
    -
    mycompiler.test.expectationTypes
    -

    Class VarExpect

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.expectationTypes.VarExpect
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IExpectation
      -
      -
      -
      -
      public class VarExpect
      -extends java.lang.Object
      -implements IExpectation
      -
      15-04-08
      -
      Author:
      -
      classes used to define expectation of a particular variable
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          VarExpect

          -
          public VarExpect(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          VarExpect

          -
          public VarExpect(java.lang.String name,
          -         Type expectedType)
          -
        • -
        - - - -
          -
        • -

          VarExpect

          -
          public VarExpect(java.lang.String name,
          -         IUnknownTypeExpect expectedUnknownType)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addExpectedType

          -
          public void addExpectedType(Type type)
          -
        • -
        - - - - - - - -
          -
        • -

          getExpectedType

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getExpectedType()
          -
        • -
        - - - -
          -
        • -

          setExpectedType

          -
          public void setExpectedType(de.dhbwstuttgart.typeinference.Menge<Type> expectedType)
          -
        • -
        - - - -
          -
        • -

          getName

          -
          public java.lang.String getName()
          -
        • -
        - - - -
          -
        • -

          setName

          -
          public void setName(java.lang.String name)
          -
        • -
        - - - -
          -
        • -

          getExpectedTypeCopy

          -
          public de.dhbwstuttgart.typeinference.Menge<Type> getExpectedTypeCopy()
          -
        • -
        - - - -
          -
        • -

          setExpectedTypeCopy

          -
          public void setExpectedTypeCopy(de.dhbwstuttgart.typeinference.Menge<Type> expectedTypeCopy)
          -
        • -
        - - - - - - - -
          -
        • -

          setExpectedUnknownType

          -
          public void setExpectedUnknownType(IUnknownTypeExpect expectedUnknownType)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html deleted file mode 100755 index 9aa7f0cc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/BlockExpect.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.BlockExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.BlockExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/ClassExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/ClassExpect.html deleted file mode 100755 index 49e9af8a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/ClassExpect.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.ClassExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.ClassExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/Expectation.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/Expectation.html deleted file mode 100755 index e3f0d324..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/Expectation.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.Expectation - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.Expectation

    -
    -
    No usage of mycompiler.test.expectationTypes.Expectation
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/GenericTypeVarExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/GenericTypeVarExpect.html deleted file mode 100755 index da5d3eac..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/GenericTypeVarExpect.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.GenericTypeVarExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.GenericTypeVarExpect

    -
    -
    No usage of mycompiler.test.expectationTypes.GenericTypeVarExpect
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IExpectation.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IExpectation.html deleted file mode 100755 index c4e9b5e9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IExpectation.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -Uses of Interface mycompiler.test.expectationTypes.IExpectation - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.test.expectationTypes.IExpectation

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IUnknownTypeExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IUnknownTypeExpect.html deleted file mode 100755 index 0045f7fc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/IUnknownTypeExpect.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - -Uses of Interface mycompiler.test.expectationTypes.IUnknownTypeExpect - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.test.expectationTypes.IUnknownTypeExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/MethodExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/MethodExpect.html deleted file mode 100755 index d515d7d8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/MethodExpect.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.MethodExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.MethodExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/TypePlaceholderExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/TypePlaceholderExpect.html deleted file mode 100755 index 8ef57db0..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/TypePlaceholderExpect.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.TypePlaceholderExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.TypePlaceholderExpect

    -
    -
    No usage of mycompiler.test.expectationTypes.TypePlaceholderExpect
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/UnknownTypesMappingExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/UnknownTypesMappingExpect.html deleted file mode 100755 index eb9a0e02..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/UnknownTypesMappingExpect.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.UnknownTypesMappingExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.UnknownTypesMappingExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/VarExpect.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/VarExpect.html deleted file mode 100755 index 34689915..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/class-use/VarExpect.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - -Uses of Class mycompiler.test.expectationTypes.VarExpect - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.expectationTypes.VarExpect

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-frame.html deleted file mode 100755 index c09d466f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-frame.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -mycompiler.test.expectationTypes - - - - -

    mycompiler.test.expectationTypes

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-summary.html deleted file mode 100755 index 54618f34..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-summary.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -mycompiler.test.expectationTypes - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.expectationTypes

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-tree.html deleted file mode 100755 index 25e88c3c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-tree.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - -mycompiler.test.expectationTypes Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.expectationTypes

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-use.html b/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-use.html deleted file mode 100755 index d6f94f6c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/expectationTypes/package-use.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - -Uses of Package mycompiler.test.expectationTypes - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.expectationTypes

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/AllTestsGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/AllTestsGenerics.html deleted file mode 100755 index eac59e59..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/AllTestsGenerics.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsGenerics - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class AllTestsGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.generics.AllTestsGenerics
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsGenerics
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AllTestsGenerics() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsGenerics

          -
          public AllTestsGenerics()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.html deleted file mode 100755 index a3d567ab..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestAssignmentTwoGenericTypesNegative - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestAssignmentTwoGenericTypesNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestAssignmentTwoGenericTypesNegative
      -extends AbstractInferenceTest
      -
      verifies correct detection of incompatible type assignments of two templates
      -
      Author:
      -
      13-05-08
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestAssignmentTwoGenericTypesNegative

          -
          public TestAssignmentTwoGenericTypesNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.html deleted file mode 100755 index c5546946..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassesWithBoundedGenericsOfTwoTypes - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestClassesWithBoundedGenericsOfTwoTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassesWithBoundedGenericsOfTwoTypes
      -extends AbstractInferenceTest
      -
      checks inference upon bounds, however test fails up to now, bounds are not considered
      -
      Author:
      -
      21-04-08
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassesWithBoundedGenericsOfTwoTypes

          -
          public TestClassesWithBoundedGenericsOfTwoTypes(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.html deleted file mode 100755 index 7254bd64..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassesWithBoundedGenericsUsedInMethods - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestClassesWithBoundedGenericsUsedInMethods

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassesWithBoundedGenericsUsedInMethods
      -extends AbstractInferenceTest
      -
      checks case of bounds being two classes, which should not be possible: multiple inheritance is not allowed in java
      -
      Author:
      -
      21-04-08
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassesWithBoundedGenericsUsedInMethods

          -
          public TestClassesWithBoundedGenericsUsedInMethods(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.html deleted file mode 100755 index fd0a0f81..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestExtendedClassesWithBoundedGenerics - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestExtendedClassesWithBoundedGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestExtendedClassesWithBoundedGenerics
      -extends AbstractInferenceTest
      -
      checks extended usage of generics, however test fails up to now because of no relation between class generics and method generics
      -
      Author:
      -
      21-04-08
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestExtendedClassesWithBoundedGenerics

          -
          public TestExtendedClassesWithBoundedGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenerics.html deleted file mode 100755 index cef0f6e1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestNestedGenerics - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestNestedGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestNestedGenerics
      -extends AbstractInferenceTest
      -
      16-05-08
      -
      Author:
      -
      this test tests for nested generics, meaning a generic whose bound is another class with a generic
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestNestedGenerics(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestNestedGenerics

          -
          public TestNestedGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenericsNonExistingType.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenericsNonExistingType.html deleted file mode 100755 index a5b3a276..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestNestedGenericsNonExistingType.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestNestedGenericsNonExistingType - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestNestedGenericsNonExistingType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestNestedGenericsNonExistingType
      -extends AbstractInferenceTest
      -
      16-05-08
      -
      Author:
      -
      tests case where bounds are of a non exisiting type -> should throw error
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestNestedGenericsNonExistingType

          -
          public TestNestedGenericsNonExistingType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.html deleted file mode 100755 index 33da2eb3..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleClassesWithBoundedGenerics - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestSimpleClassesWithBoundedGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleClassesWithBoundedGenerics
      -extends AbstractInferenceTest
      -
      13-05-08
      -
      Author:
      -
      test bounded generics
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleClassesWithBoundedGenerics

          -
          public TestSimpleClassesWithBoundedGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.html deleted file mode 100755 index 6308d25f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleClassesWithBoundedGenericsNegative - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestSimpleClassesWithBoundedGenericsNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleClassesWithBoundedGenericsNegative
      -extends AbstractInferenceTest
      -
      verifies correct identification of a bounded generic which is instanciated with a type not included in bounds
      -
      Author:
      -
      tom
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleClassesWithBoundedGenericsNegative

          -
          public TestSimpleClassesWithBoundedGenericsNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenerics.html deleted file mode 100755 index 3634f73d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleClassesWithGenerics - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestSimpleClassesWithGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleClassesWithGenerics
      -extends AbstractInferenceTest
      -
      checks simple usage of generics without bounds
      -
      Author:
      -
      tom
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleClassesWithGenerics

          -
          public TestSimpleClassesWithGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.html deleted file mode 100755 index ba7099b6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleClassesWithGenericsNegative - - - - - - - - - - - -
    -
    mycompiler.test.generics
    -

    Class TestSimpleClassesWithGenericsNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleClassesWithGenericsNegative
      -extends AbstractInferenceTest
      -
      checks whether wrong usage of generics is detected
      -
      Author:
      -
      tom
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleClassesWithGenericsNegative

          -
          public TestSimpleClassesWithGenericsNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/AllTestsGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/AllTestsGenerics.html deleted file mode 100755 index 9bc47aba..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/AllTestsGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.AllTestsGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.AllTestsGenerics

    -
    -
    No usage of mycompiler.test.generics.AllTestsGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestAssignmentTwoGenericTypesNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestAssignmentTwoGenericTypesNegative.html deleted file mode 100755 index 026849cc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestAssignmentTwoGenericTypesNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestAssignmentTwoGenericTypesNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestAssignmentTwoGenericTypesNegative

    -
    -
    No usage of mycompiler.test.generics.TestAssignmentTwoGenericTypesNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsOfTwoTypes.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsOfTwoTypes.html deleted file mode 100755 index 6bf9e615..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsOfTwoTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestClassesWithBoundedGenericsOfTwoTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestClassesWithBoundedGenericsOfTwoTypes

    -
    -
    No usage of mycompiler.test.generics.TestClassesWithBoundedGenericsOfTwoTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsUsedInMethods.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsUsedInMethods.html deleted file mode 100755 index dc629a10..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestClassesWithBoundedGenericsUsedInMethods.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestClassesWithBoundedGenericsUsedInMethods - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestClassesWithBoundedGenericsUsedInMethods

    -
    -
    No usage of mycompiler.test.generics.TestClassesWithBoundedGenericsUsedInMethods
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestExtendedClassesWithBoundedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestExtendedClassesWithBoundedGenerics.html deleted file mode 100755 index 735807f4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestExtendedClassesWithBoundedGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestExtendedClassesWithBoundedGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestExtendedClassesWithBoundedGenerics

    -
    -
    No usage of mycompiler.test.generics.TestExtendedClassesWithBoundedGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenerics.html deleted file mode 100755 index bea00efe..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestNestedGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestNestedGenerics

    -
    -
    No usage of mycompiler.test.generics.TestNestedGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenericsNonExistingType.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenericsNonExistingType.html deleted file mode 100755 index 98e3f4f2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestNestedGenericsNonExistingType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestNestedGenericsNonExistingType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestNestedGenericsNonExistingType

    -
    -
    No usage of mycompiler.test.generics.TestNestedGenericsNonExistingType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenerics.html deleted file mode 100755 index ee1de8e6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestSimpleClassesWithBoundedGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestSimpleClassesWithBoundedGenerics

    -
    -
    No usage of mycompiler.test.generics.TestSimpleClassesWithBoundedGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenericsNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenericsNegative.html deleted file mode 100755 index 51b26471..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithBoundedGenericsNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestSimpleClassesWithBoundedGenericsNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestSimpleClassesWithBoundedGenericsNegative

    -
    -
    No usage of mycompiler.test.generics.TestSimpleClassesWithBoundedGenericsNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenerics.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenerics.html deleted file mode 100755 index 645faa9b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestSimpleClassesWithGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestSimpleClassesWithGenerics

    -
    -
    No usage of mycompiler.test.generics.TestSimpleClassesWithGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenericsNegative.html b/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenericsNegative.html deleted file mode 100755 index b5efac8f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/class-use/TestSimpleClassesWithGenericsNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.generics.TestSimpleClassesWithGenericsNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.generics.TestSimpleClassesWithGenericsNegative

    -
    -
    No usage of mycompiler.test.generics.TestSimpleClassesWithGenericsNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/generics/package-frame.html deleted file mode 100755 index f35a7ae4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/package-frame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -mycompiler.test.generics - - - - -

    mycompiler.test.generics

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/generics/package-summary.html deleted file mode 100755 index 35a2306f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/package-summary.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - -mycompiler.test.generics - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.generics

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/generics/package-tree.html deleted file mode 100755 index f1a42952..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/package-tree.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -mycompiler.test.generics Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.generics

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/generics/package-use.html b/doc/LambdaJavadoc/mycompiler/test/generics/package-use.html deleted file mode 100755 index ac1c2884..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/generics/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.generics - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.generics

    -
    -
    No usage of mycompiler.test.generics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.html deleted file mode 100755 index 9f5b0f4b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsInferenceByCharacteristic - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class AllTestsInferenceByCharacteristic

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsInferenceByCharacteristic
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsInferenceByCharacteristic

          -
          public AllTestsInferenceByCharacteristic()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.html deleted file mode 100755 index 9563c0c2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByMember - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMember

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMember
      -extends AbstractInferenceTest
      -
      28-04-08
      -
      Author:
      -
      test inference by member of same class
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMember

          -
          public TestInferenceOwnTypeByMember(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.html deleted file mode 100755 index f56af669..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByMemberAcrossClasses - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMemberAcrossClasses

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMemberAcrossClasses
      -extends AbstractInferenceTest
      -
      28-04-08
      -
      Author:
      -
      test inference by member across different classes
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMemberAcrossClasses

          -
          public TestInferenceOwnTypeByMemberAcrossClasses(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.html deleted file mode 100755 index f094d766..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByMethodCall - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMethodCall

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMethodCall
      -extends AbstractInferenceTest
      -
      29-04-08
      -
      Author:
      -
      test checks extended inference by return type of a method of same class
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMethodCall

          -
          public TestInferenceOwnTypeByMethodCall(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.html deleted file mode 100755 index 07443b7f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByMethodCallAcrossClasses - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMethodCallAcrossClasses

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMethodCallAcrossClasses
      -extends AbstractInferenceTest
      -
      28-04-08
      -
      Author:
      -
      tests method call across classes
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMethodCallAcrossClasses

          -
          public TestInferenceOwnTypeByMethodCallAcrossClasses(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.html deleted file mode 100755 index 24efa6dd..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByMethodParameter - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMethodParameter

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMethodParameter
      -extends AbstractInferenceTest
      -
      28-04-08
      -
      Author:
      -
      checks inference by method parameter
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMethodParameter

          -
          public TestInferenceOwnTypeByMethodParameter(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.html deleted file mode 100755 index 4d305781..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInferenceOwnTypeByMethodReturnTypeMixed1 - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByMethodReturnTypeMixed1

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByMethodReturnTypeMixed1
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByMethodReturnTypeMixed1

          -
          public TestInferenceOwnTypeByMethodReturnTypeMixed1(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.html deleted file mode 100755 index c51d199c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByReturnType - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByReturnType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByReturnType
      -extends AbstractInferenceTest
      -
      28-04-08
      -
      Author:
      -
      checks inference by method return type
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByReturnType

          -
          public TestInferenceOwnTypeByReturnType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.html deleted file mode 100755 index 1a235c69..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceOwnTypeByReturnTypeAcrossClasses - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceOwnTypeByReturnTypeAcrossClasses

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceOwnTypeByReturnTypeAcrossClasses
      -extends AbstractInferenceTest
      -
      27-04-08
      -
      Author:
      -
      checks inference by return type across classes
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceOwnTypeByReturnTypeAcrossClasses

          -
          public TestInferenceOwnTypeByReturnTypeAcrossClasses(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.html deleted file mode 100755 index 3da70ce8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceStdTypeByOperation - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceStdTypeByOperation

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceStdTypeByOperation
      -extends AbstractInferenceTest
      -
      4-05-08
      -
      Author:
      -
      checks inference of std types by operation
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceStdTypeByOperation

          -
          public TestInferenceStdTypeByOperation(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.html deleted file mode 100755 index 852e4e4b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInferenceStdTypeByReturnType - - - - - - - - - - - -
    -
    mycompiler.test.inferenceByCharacteristic
    -

    Class TestInferenceStdTypeByReturnType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInferenceStdTypeByReturnType
      -extends AbstractInferenceTest
      -
      4-05-08
      -
      Author:
      -
      checks inference of std types by return type
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInferenceStdTypeByReturnType

          -
          public TestInferenceStdTypeByReturnType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/AllTestsInferenceByCharacteristic.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/AllTestsInferenceByCharacteristic.html deleted file mode 100755 index 6b287365..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/AllTestsInferenceByCharacteristic.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMember.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMember.html deleted file mode 100755 index bedbe258..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMember.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMember - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMember

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMember
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMemberAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMemberAcrossClasses.html deleted file mode 100755 index fb53768c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMemberAcrossClasses.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMemberAcrossClasses - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMemberAcrossClasses

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMemberAcrossClasses
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCall.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCall.html deleted file mode 100755 index 8bd166eb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCall.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCall - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCall

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCall
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCallAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCallAcrossClasses.html deleted file mode 100755 index ed92ee17..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodCallAcrossClasses.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCallAcrossClasses - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCallAcrossClasses

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodCallAcrossClasses
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodParameter.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodParameter.html deleted file mode 100755 index ef671b52..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodParameter.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodParameter - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodParameter

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodParameter
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodReturnTypeMixed1.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodReturnTypeMixed1.html deleted file mode 100755 index 8112e287..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByMethodReturnTypeMixed1.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodReturnTypeMixed1 - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodReturnTypeMixed1

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByMethodReturnTypeMixed1
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnType.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnType.html deleted file mode 100755 index 6a9a2d7f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnType

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnTypeAcrossClasses.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnTypeAcrossClasses.html deleted file mode 100755 index 6c61163c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceOwnTypeByReturnTypeAcrossClasses.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnTypeAcrossClasses - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnTypeAcrossClasses

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceOwnTypeByReturnTypeAcrossClasses
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByOperation.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByOperation.html deleted file mode 100755 index d7f7a1da..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByOperation.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByOperation - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByOperation

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByOperation
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByReturnType.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByReturnType.html deleted file mode 100755 index 4fdb3fab..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/class-use/TestInferenceStdTypeByReturnType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByReturnType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByReturnType

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic.TestInferenceStdTypeByReturnType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-frame.html deleted file mode 100755 index 1e0a3286..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-frame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -mycompiler.test.inferenceByCharacteristic - - - - -

    mycompiler.test.inferenceByCharacteristic

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-summary.html deleted file mode 100755 index c18bf157..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-summary.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - -mycompiler.test.inferenceByCharacteristic - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.inferenceByCharacteristic

    -
    - - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-tree.html deleted file mode 100755 index d0c3bcac..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-tree.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -mycompiler.test.inferenceByCharacteristic Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.inferenceByCharacteristic

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-use.html b/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-use.html deleted file mode 100755 index 40a79c7f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/inferenceByCharacteristic/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.inferenceByCharacteristic - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.inferenceByCharacteristic

    -
    -
    No usage of mycompiler.test.inferenceByCharacteristic
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.html deleted file mode 100755 index a3445586..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsInheritance - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class AllTestsInheritance

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.javaConcepts.inheritance.AllTestsInheritance
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsInheritance
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsInheritance

          -
          public AllTestsInheritance()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.html deleted file mode 100755 index c95f34ab..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceAcrossLevel - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceAcrossLevel

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceAcrossLevel
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceAcrossLevel

          -
          public TestInheritanceAcrossLevel(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.html deleted file mode 100755 index 25e60c4d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceCircle - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceCircle

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceCircle
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestInheritanceCircle(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceCircle

          -
          public TestInheritanceCircle(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.html deleted file mode 100755 index a2616064..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceConstructor - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceConstructor

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceConstructor
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceConstructor

          -
          public TestInheritanceConstructor(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.html deleted file mode 100755 index 6bf5ceb9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceMultiple - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceMultiple

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceMultiple
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestInheritanceMultiple(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceMultiple

          -
          public TestInheritanceMultiple(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.html deleted file mode 100755 index 69598fcb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceMultipleClasses - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceMultipleClasses

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceMultipleClasses
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceMultipleClasses

          -
          public TestInheritanceMultipleClasses(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.html deleted file mode 100755 index fe8045dd..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceOverriding - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceOverriding

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceOverriding
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceOverriding

          -
          public TestInheritanceOverriding(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.html deleted file mode 100755 index 0674bcec..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceTwoHierarchies - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestInheritanceTwoHierarchies

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceTwoHierarchies
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceTwoHierarchies

          -
          public TestInheritanceTwoHierarchies(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.html deleted file mode 100755 index d7b36308..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestSimpleInheritance - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.inheritance
    -

    Class TestSimpleInheritance

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleInheritance
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestSimpleInheritance(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleInheritance

          -
          public TestSimpleInheritance(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/AllTestsInheritance.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/AllTestsInheritance.html deleted file mode 100755 index eea6004b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/AllTestsInheritance.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.AllTestsInheritance - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.AllTestsInheritance

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.AllTestsInheritance
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceAcrossLevel.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceAcrossLevel.html deleted file mode 100755 index be772c78..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceAcrossLevel.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceAcrossLevel - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceAcrossLevel

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceAcrossLevel
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceCircle.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceCircle.html deleted file mode 100755 index 50a3242e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceCircle.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceCircle - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceCircle

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceCircle
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceConstructor.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceConstructor.html deleted file mode 100755 index 13884b95..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceConstructor.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceConstructor - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceConstructor

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceConstructor
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultiple.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultiple.html deleted file mode 100755 index 246c6a29..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultiple.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceMultiple - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceMultiple

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceMultiple
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultipleClasses.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultipleClasses.html deleted file mode 100755 index cc167ad9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceMultipleClasses.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceMultipleClasses - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceMultipleClasses

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceMultipleClasses
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceOverriding.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceOverriding.html deleted file mode 100755 index 9c78caab..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceOverriding.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceOverriding - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceOverriding

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceOverriding
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceTwoHierarchies.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceTwoHierarchies.html deleted file mode 100755 index 27955009..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestInheritanceTwoHierarchies.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestInheritanceTwoHierarchies - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestInheritanceTwoHierarchies

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestInheritanceTwoHierarchies
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestSimpleInheritance.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestSimpleInheritance.html deleted file mode 100755 index 3b6bf5a4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/class-use/TestSimpleInheritance.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.inheritance.TestSimpleInheritance - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.inheritance.TestSimpleInheritance

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance.TestSimpleInheritance
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-frame.html deleted file mode 100755 index fa4ae788..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-frame.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.inheritance - - - - -

    mycompiler.test.javaConcepts.inheritance

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-summary.html deleted file mode 100755 index f94f2360..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-summary.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.inheritance - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.javaConcepts.inheritance

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-tree.html deleted file mode 100755 index 74a7e07d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-tree.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.inheritance Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.javaConcepts.inheritance

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-use.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-use.html deleted file mode 100755 index b636fdec..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/inheritance/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.javaConcepts.inheritance - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.javaConcepts.inheritance

    -
    -
    No usage of mycompiler.test.javaConcepts.inheritance
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.html deleted file mode 100755 index b442a5cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsOverloading - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class AllTestsOverloading

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.javaConcepts.overloading.AllTestsOverloading
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsOverloading
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsOverloading

          -
          public AllTestsOverloading()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.html deleted file mode 100755 index 1c59c992..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingDifferentNumberOfParameters - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingDifferentNumberOfParameters

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingDifferentNumberOfParameters
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingDifferentNumberOfParameters

          -
          public OverloadingDifferentNumberOfParameters(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.html deleted file mode 100755 index bc56abc6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingDifferentNumberOfParametersAndDifferentTypes - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingDifferentNumberOfParametersAndDifferentTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingDifferentNumberOfParametersAndDifferentTypes
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingDifferentNumberOfParametersAndDifferentTypes

          -
          public OverloadingDifferentNumberOfParametersAndDifferentTypes(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.html deleted file mode 100755 index ddbbda2f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingGenericNotSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingGenericNotSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingGenericNotSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingGenericNotSameHierarchy

          -
          public OverloadingGenericNotSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.html deleted file mode 100755 index b84e7d0d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingGenericSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingGenericSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingGenericSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingGenericSameHierarchy

          -
          public OverloadingGenericSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.html deleted file mode 100755 index 573e3afc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingGenericTypeInferenceNotSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingGenericTypeInferenceNotSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingGenericTypeInferenceNotSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingGenericTypeInferenceNotSameHierarchy

          -
          public OverloadingGenericTypeInferenceNotSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.html deleted file mode 100755 index b5b4d500..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingGenericTypeInferenceSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingGenericTypeInferenceSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingGenericTypeInferenceSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingGenericTypeInferenceSameHierarchy

          -
          public OverloadingGenericTypeInferenceSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.html deleted file mode 100755 index 316780e5..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingNotSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingNotSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingNotSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingNotSameHierarchy

          -
          public OverloadingNotSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.html deleted file mode 100755 index bf75008e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        OverloadingSameHierarchy(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingSameHierarchy

          -
          public OverloadingSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.html deleted file mode 100755 index 843ed287..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingSameSignature - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingSameSignature

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingSameSignature
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        OverloadingSameSignature(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingSameSignature

          -
          public OverloadingSameSignature(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.html deleted file mode 100755 index ae44f3dc..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingSameSignatureDifferentReturnTypes - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingSameSignatureDifferentReturnTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingSameSignatureDifferentReturnTypes
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingSameSignatureDifferentReturnTypes

          -
          public OverloadingSameSignatureDifferentReturnTypes(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.html deleted file mode 100755 index 1859deef..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingSameSignatureGenerics - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingSameSignatureGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingSameSignatureGenerics
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingSameSignatureGenerics

          -
          public OverloadingSameSignatureGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.html deleted file mode 100755 index e4f09c64..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingTypeInferenceNotSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingTypeInferenceNotSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingTypeInferenceNotSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingTypeInferenceNotSameHierarchy

          -
          public OverloadingTypeInferenceNotSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.html deleted file mode 100755 index 8aa9dfa2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -OverloadingTypeInferenceSameHierarchy - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.overloading
    -

    Class OverloadingTypeInferenceSameHierarchy

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class OverloadingTypeInferenceSameHierarchy
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingTypeInferenceSameHierarchy

          -
          public OverloadingTypeInferenceSameHierarchy(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/AllTestsOverloading.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/AllTestsOverloading.html deleted file mode 100755 index 33c549a5..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/AllTestsOverloading.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.AllTestsOverloading - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.AllTestsOverloading

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.AllTestsOverloading
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParameters.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParameters.html deleted file mode 100755 index 55e9d100..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParameters.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParameters - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParameters

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParameters
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParametersAndDifferentTypes.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParametersAndDifferentTypes.html deleted file mode 100755 index d2da1805..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingDifferentNumberOfParametersAndDifferentTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParametersAndDifferentTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParametersAndDifferentTypes

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingDifferentNumberOfParametersAndDifferentTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericNotSameHierarchy.html deleted file mode 100755 index e7a20ac4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericNotSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingGenericNotSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingGenericNotSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingGenericNotSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericSameHierarchy.html deleted file mode 100755 index e7ab8dc7..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingGenericSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingGenericSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingGenericSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceNotSameHierarchy.html deleted file mode 100755 index 4077d9d1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceNotSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceNotSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceNotSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceNotSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceSameHierarchy.html deleted file mode 100755 index a9b2d867..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingGenericTypeInferenceSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingGenericTypeInferenceSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingNotSameHierarchy.html deleted file mode 100755 index da1c9518..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingNotSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingNotSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingNotSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingNotSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameHierarchy.html deleted file mode 100755 index d24a8b29..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignature.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignature.html deleted file mode 100755 index 457797ff..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignature.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingSameSignature - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingSameSignature

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingSameSignature
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureDifferentReturnTypes.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureDifferentReturnTypes.html deleted file mode 100755 index 540fac2c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureDifferentReturnTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureDifferentReturnTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureDifferentReturnTypes

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureDifferentReturnTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureGenerics.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureGenerics.html deleted file mode 100755 index 08ca204e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingSameSignatureGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureGenerics

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingSameSignatureGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceNotSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceNotSameHierarchy.html deleted file mode 100755 index b77017d0..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceNotSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceNotSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceNotSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceNotSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceSameHierarchy.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceSameHierarchy.html deleted file mode 100755 index 1cab5d96..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/class-use/OverloadingTypeInferenceSameHierarchy.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceSameHierarchy - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceSameHierarchy

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading.OverloadingTypeInferenceSameHierarchy
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-frame.html deleted file mode 100755 index 8772dd4b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.overloading - - - - -

    mycompiler.test.javaConcepts.overloading

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-summary.html deleted file mode 100755 index bcac68a4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-summary.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.overloading - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.javaConcepts.overloading

    -
    - - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-tree.html deleted file mode 100755 index 180e240a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.overloading Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.javaConcepts.overloading

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-use.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-use.html deleted file mode 100755 index 5ee16905..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/overloading/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.javaConcepts.overloading - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.javaConcepts.overloading

    -
    -
    No usage of mycompiler.test.javaConcepts.overloading
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.html deleted file mode 100755 index 651dd0a8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsStaticAccess - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.staticAccess
    -

    Class AllTestsStaticAccess

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsStaticAccess
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsStaticAccess

          -
          public AllTestsStaticAccess()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.html deleted file mode 100755 index 5aebce40..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestNonStaticAccess - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.staticAccess
    -

    Class TestNonStaticAccess

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestNonStaticAccess
      -extends AbstractInferenceTest
      -
      22-04-08
      -
      Author:
      -
      Tests non static access of a method or a member
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestNonStaticAccess(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestNonStaticAccess

          -
          public TestNonStaticAccess(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.html deleted file mode 100755 index 53f856b9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestStaticAccess - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.staticAccess
    -

    Class TestStaticAccess

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestStaticAccess
      -extends AbstractInferenceTest
      -
      22-04-08
      -
      Author:
      -
      Tests static access of a member or methods
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestStaticAccess(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestStaticAccess

          -
          public TestStaticAccess(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.html deleted file mode 100755 index 231b24d8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestStaticAccessError - - - - - - - - - - - -
    -
    mycompiler.test.javaConcepts.staticAccess
    -

    Class TestStaticAccessError

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestStaticAccessError
      -extends AbstractInferenceTest
      -
      22-04-08
      -
      Author:
      -
      checks static access to non-static elements -> should throw erro
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestStaticAccessError(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestStaticAccessError

          -
          public TestStaticAccessError(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/AllTestsStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/AllTestsStaticAccess.html deleted file mode 100755 index 6f7c1dda..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/AllTestsStaticAccess.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess

    -
    -
    No usage of mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestNonStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestNonStaticAccess.html deleted file mode 100755 index f1b62995..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestNonStaticAccess.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.staticAccess.TestNonStaticAccess - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.staticAccess.TestNonStaticAccess

    -
    -
    No usage of mycompiler.test.javaConcepts.staticAccess.TestNonStaticAccess
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccess.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccess.html deleted file mode 100755 index 04e03015..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccess.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.staticAccess.TestStaticAccess - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.staticAccess.TestStaticAccess

    -
    -
    No usage of mycompiler.test.javaConcepts.staticAccess.TestStaticAccess
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccessError.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccessError.html deleted file mode 100755 index 58dffd11..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/class-use/TestStaticAccessError.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.javaConcepts.staticAccess.TestStaticAccessError - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.javaConcepts.staticAccess.TestStaticAccessError

    -
    -
    No usage of mycompiler.test.javaConcepts.staticAccess.TestStaticAccessError
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-frame.html deleted file mode 100755 index 9bb3ba8a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-frame.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.staticAccess - - - - -

    mycompiler.test.javaConcepts.staticAccess

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-summary.html deleted file mode 100755 index fb73e32a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-summary.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.staticAccess - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.javaConcepts.staticAccess

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-tree.html deleted file mode 100755 index 751c8f62..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-tree.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -mycompiler.test.javaConcepts.staticAccess Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.javaConcepts.staticAccess

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-use.html b/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-use.html deleted file mode 100755 index 82aa038e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/javaConcepts/staticAccess/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.javaConcepts.staticAccess - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.javaConcepts.staticAccess

    -
    -
    No usage of mycompiler.test.javaConcepts.staticAccess
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/BasicAssumptionsTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/BasicAssumptionsTest.html deleted file mode 100755 index 92bb205f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/BasicAssumptionsTest.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -BasicAssumptionsTest - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class BasicAssumptionsTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.BasicAssumptionsTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class BasicAssumptionsTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BasicAssumptionsTest

          -
          public BasicAssumptionsTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/ConstructorTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/ConstructorTest.html deleted file mode 100755 index 1abb908f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/ConstructorTest.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -ConstructorTest - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class ConstructorTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.ConstructorTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ConstructorTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ConstructorTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ConstructorTest

          -
          public ConstructorTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/GenericVarTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/GenericVarTest.html deleted file mode 100755 index 1d565bb8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/GenericVarTest.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -GenericVarTest - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class GenericVarTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.GenericVarTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class GenericVarTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        GenericVarTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GenericVarTest

          -
          public GenericVarTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/OverloadingTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/OverloadingTest.html deleted file mode 100755 index 0e7afc07..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/OverloadingTest.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -OverloadingTest - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class OverloadingTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.OverloadingTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class OverloadingTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        OverloadingTest() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          OverloadingTest

          -
          public OverloadingTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/ParseMultipleFilesTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/ParseMultipleFilesTest.html deleted file mode 100755 index 37b64935..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/ParseMultipleFilesTest.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -ParseMultipleFilesTest - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class ParseMultipleFilesTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.ParseMultipleFilesTest
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ParseMultipleFilesTest
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ParseMultipleFilesTest

          -
          public ParseMultipleFilesTest()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestAssign.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestAssign.html deleted file mode 100755 index 9d93c626..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestAssign.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - -TestAssign - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestAssign

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.lambda.TestAssign
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestAssign
      -extends junit.framework.TestCase
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestAssign() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestAssign

          -
          public TestAssign()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestFunN.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestFunN.html deleted file mode 100755 index 7ca86fb4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestFunN.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestFunN - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestFunN

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestFunN
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestFunN
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestFunN() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestFunN

          -
          public TestFunN()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestIfStmt.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestIfStmt.html deleted file mode 100755 index 80b0c1a4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestIfStmt.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestIfStmt - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestIfStmt

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestIfStmt
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestIfStmt
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestIfStmt() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestIfStmt

          -
          public TestIfStmt()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestLambda.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestLambda.html deleted file mode 100755 index 13c20d64..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestLambda.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestLambda - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestLambda

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestLambda
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestLambda
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestLambda() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestLambda

          -
          public TestLambda()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestMethodCall.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestMethodCall.html deleted file mode 100755 index f4864948..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestMethodCall.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestMethodCall - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestMethodCall

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestMethodCall
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestMethodCall
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestMethodCall() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodCall

          -
          public TestMethodCall()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestThis.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestThis.html deleted file mode 100755 index b471944f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestThis.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestThis - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestThis

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestThis
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestThis
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestThis() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestThis

          -
          public TestThis()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/TestWhile.html b/doc/LambdaJavadoc/mycompiler/test/lambda/TestWhile.html deleted file mode 100755 index 1e414bf6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/TestWhile.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -TestWhile - - - - - - - - - - - -
    -
    mycompiler.test.lambda
    -

    Class TestWhile

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.lambda.TestWhile
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestWhile
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestWhile() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidexecuteTest() 
        voidtest() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestWhile

          -
          public TestWhile()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          test

          -
          public void test()
          -
        • -
        - - - -
          -
        • -

          executeTest

          -
          public void executeTest()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/BasicAssumptionsTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/BasicAssumptionsTest.html deleted file mode 100755 index 7181a781..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/BasicAssumptionsTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.BasicAssumptionsTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.BasicAssumptionsTest

    -
    -
    No usage of mycompiler.test.lambda.BasicAssumptionsTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ConstructorTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ConstructorTest.html deleted file mode 100755 index c0f949ec..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ConstructorTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.ConstructorTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.ConstructorTest

    -
    -
    No usage of mycompiler.test.lambda.ConstructorTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/GenericVarTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/GenericVarTest.html deleted file mode 100755 index 4ff6d174..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/GenericVarTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.GenericVarTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.GenericVarTest

    -
    -
    No usage of mycompiler.test.lambda.GenericVarTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/OverloadingTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/OverloadingTest.html deleted file mode 100755 index dffd3d0a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/OverloadingTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.OverloadingTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.OverloadingTest

    -
    -
    No usage of mycompiler.test.lambda.OverloadingTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ParseMultipleFilesTest.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ParseMultipleFilesTest.html deleted file mode 100755 index c3689513..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/ParseMultipleFilesTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.ParseMultipleFilesTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.ParseMultipleFilesTest

    -
    -
    No usage of mycompiler.test.lambda.ParseMultipleFilesTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestAssign.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestAssign.html deleted file mode 100755 index 4fe67f20..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestAssign.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestAssign - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestAssign

    -
    -
    No usage of mycompiler.test.lambda.TestAssign
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestFunN.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestFunN.html deleted file mode 100755 index 50fb8614..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestFunN.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestFunN - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestFunN

    -
    -
    No usage of mycompiler.test.lambda.TestFunN
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestIfStmt.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestIfStmt.html deleted file mode 100755 index 89bb6036..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestIfStmt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestIfStmt - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestIfStmt

    -
    -
    No usage of mycompiler.test.lambda.TestIfStmt
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestLambda.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestLambda.html deleted file mode 100755 index 14e5e1cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestLambda.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestLambda - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestLambda

    -
    -
    No usage of mycompiler.test.lambda.TestLambda
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestMethodCall.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestMethodCall.html deleted file mode 100755 index 66ebea4b..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestMethodCall.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestMethodCall - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestMethodCall

    -
    -
    No usage of mycompiler.test.lambda.TestMethodCall
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestThis.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestThis.html deleted file mode 100755 index fe3cae4f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestThis.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestThis - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestThis

    -
    -
    No usage of mycompiler.test.lambda.TestThis
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestWhile.html b/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestWhile.html deleted file mode 100755 index de7f128f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/class-use/TestWhile.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.lambda.TestWhile - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.lambda.TestWhile

    -
    -
    No usage of mycompiler.test.lambda.TestWhile
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/lambda/package-frame.html deleted file mode 100755 index e7b8d207..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/package-frame.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -mycompiler.test.lambda - - - - -

    mycompiler.test.lambda

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/lambda/package-summary.html deleted file mode 100755 index c584f408..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/package-summary.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - -mycompiler.test.lambda - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.lambda

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/lambda/package-tree.html deleted file mode 100755 index c4eb2aa6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/package-tree.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - -mycompiler.test.lambda Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.lambda

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/lambda/package-use.html b/doc/LambdaJavadoc/mycompiler/test/lambda/package-use.html deleted file mode 100755 index 36c4f804..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/lambda/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.lambda - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.lambda

    -
    -
    No usage of mycompiler.test.lambda
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.html deleted file mode 100755 index 32a4410e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - -AbstractInferenceTestExtendedOLD - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class AbstractInferenceTestExtendedOLD

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public abstract class AbstractInferenceTestExtendedOLD
      -extends AbstractInferenceTestOLD_2
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidtestSetup() -
        start test according to JUnit conventions
        -
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          testSetup

          -
          public void testSetup()
          -               throws java.lang.Throwable
          -
          start test according to JUnit conventions
          -
          Throws:
          -
          java.lang.Throwable
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOLD_2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOLD_2.html deleted file mode 100755 index a4d7a8a8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOLD_2.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -AbstractInferenceTestOLD_2 - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class AbstractInferenceTestOLD_2

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.notUsedAnymore.AbstractInferenceTestOLD_2
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.html deleted file mode 100755 index 44e6b8ea..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - -AbstractInferenceTestOld - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class AbstractInferenceTestOld

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.notUsedAnymore.AbstractInferenceTestOld
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public abstract class AbstractInferenceTestOld
      -extends junit.framework.TestCase
      -
      Todo: - inheritance - - exception handling cannot verify correct exception yet - - generic returntype does not work well - - cmethodkey-usage? - - log4j - - done: - exception handling - - commented asserts
      -
      Author:
      -
      Stresing - last change: 06-04-08
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidtestSetup() -
        runs the JUnit-Test, calls all compiler steps
        -
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          testSetup

          -
          public void testSetup()
          -               throws java.lang.Throwable
          -
          runs the JUnit-Test, calls all compiler steps
          -
          Throws:
          -
          java.lang.Throwable
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.html deleted file mode 100755 index 7d134426..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - -CTypeAssumptionWrapper - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class CTypeAssumptionWrapper

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class CTypeAssumptionWrapper
      -extends java.lang.Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CTypeAssumptionWrapper

          -
          public CTypeAssumptionWrapper(CTypeAssumption assumption)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          equals

          -
          public final boolean equals(java.lang.Object obj)
          -
          -
          Overrides:
          -
          equals in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          equalsAssumption

          -
          public boolean equalsAssumption(CTypeAssumption assumpt)
          -
        • -
        - - - -
          -
        • -

          getAssumedType

          -
          public Type getAssumedType()
          -
        • -
        - - - -
          -
        • -

          getClassName

          -
          public java.lang.String getClassName()
          -
        • -
        - - - -
          -
        • -

          getIdentifier

          -
          public java.lang.String getIdentifier()
          -
        • -
        - - - -
          -
        • -

          setAssumedType

          -
          public void setAssumedType(Type assumedType)
          -
        • -
        - - - -
          -
        • -

          setClassName

          -
          public void setClassName(java.lang.String className)
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html deleted file mode 100755 index 3a769c45..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/IResultValidator.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - -IResultValidator - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Interface IResultValidator

    -
    -
    -
    -
      -
    • -
      -
      -
      public interface IResultValidator
      -
    • -
    -
    -
    - -
    -
    - -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TEst_2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TEst_2.html deleted file mode 100755 index 5c5fd133..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TEst_2.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -TEst_2 - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TEst_2

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.notUsedAnymore.TEst_2
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TEst_2
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TEst_2() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidm2(java.lang.Object a) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TEst_2

          -
          public TEst_2()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          m2

          -
          public void m2(java.lang.Object a)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/Test.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/Test.html deleted file mode 100755 index 2e3ea6a0..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/Test.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -Test - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class Test

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.notUsedAnymore.Test
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Test
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Test() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Test

          -
          public Test()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.html deleted file mode 100755 index d2fab502..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - -TestAbstractInferenceTest - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestAbstractInferenceTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestAbstractInferenceTest
      -extends AbstractInferenceTestOLD_2
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidtestThisCase() 
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestAbstractInferenceTest

          -
          public TestAbstractInferenceTest(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          testThisCase

          -
          public void testThisCase()
          -                  throws java.lang.Throwable
          -
          Throws:
          -
          java.lang.Throwable
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.html deleted file mode 100755 index 80154454..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestAbstractInferenceTest2 - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestAbstractInferenceTest2

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestAbstractInferenceTest2
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestAbstractInferenceTest2

          -
          public TestAbstractInferenceTest2(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.html deleted file mode 100755 index eb678f93..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -TestClassMemberWithoutType - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestClassMemberWithoutType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassMemberWithoutType
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      todo: delete this test, cuz it does not make sense - - this test checks whether members without types are supported
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassMemberWithoutType

          -
          public TestClassMemberWithoutType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.html deleted file mode 100755 index 0dfd6c3d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestConstantsWithoutType - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestConstantsWithoutType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestConstantsWithoutType
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct detection of constants as members
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestConstantsWithoutType(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestConstantsWithoutType

          -
          public TestConstantsWithoutType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestGenerics.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestGenerics.html deleted file mode 100755 index d16c5002..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestGenerics - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestGenerics
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This test verifies identification of a simple method with returntype void
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestGenerics(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestGenerics

          -
          public TestGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.html deleted file mode 100755 index 30f40778..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestInheritanceCheckValidImplementationFromInterface - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestInheritanceCheckValidImplementationFromInterface

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • - -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInheritanceCheckValidImplementationFromInterface
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInheritanceCheckValidImplementationFromInterface

          -
          public TestInheritanceCheckValidImplementationFromInterface(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnType.html deleted file mode 100755 index 1e8e798f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnType.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestMethodReturnType - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestMethodReturnType

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodReturnType
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestMethodReturnType(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodReturnType

          -
          public TestMethodReturnType(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.html deleted file mode 100755 index b2263082..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestMethodReturnTypeNegative - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestMethodReturnTypeNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodReturnTypeNegative
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodReturnTypeNegative

          -
          public TestMethodReturnTypeNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.html deleted file mode 100755 index fd3e7ae4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestMethodReturnTypeNegative2 - - - - - - - - - - - -
    -
    mycompiler.test.notUsedAnymore
    -

    Class TestMethodReturnTypeNegative2

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodReturnTypeNegative2
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodReturnTypeNegative2

          -
          public TestMethodReturnTypeNegative2(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestExtendedOLD.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestExtendedOLD.html deleted file mode 100755 index 7ef2c20d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestExtendedOLD.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.AbstractInferenceTestExtendedOLD - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.AbstractInferenceTestExtendedOLD

    -
    -
    No usage of mycompiler.test.notUsedAnymore.AbstractInferenceTestExtendedOLD
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOLD_2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOLD_2.html deleted file mode 100755 index 86a5b696..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOLD_2.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.AbstractInferenceTestOLD_2 - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.AbstractInferenceTestOLD_2

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOld.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOld.html deleted file mode 100755 index a7f9d5f1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/AbstractInferenceTestOld.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.AbstractInferenceTestOld - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.AbstractInferenceTestOld

    -
    -
    No usage of mycompiler.test.notUsedAnymore.AbstractInferenceTestOld
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/CTypeAssumptionWrapper.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/CTypeAssumptionWrapper.html deleted file mode 100755 index 5bc30736..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/CTypeAssumptionWrapper.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper

    -
    -
    No usage of mycompiler.test.notUsedAnymore.CTypeAssumptionWrapper
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/IResultValidator.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/IResultValidator.html deleted file mode 100755 index 5ab1f290..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/IResultValidator.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Interface mycompiler.test.notUsedAnymore.IResultValidator - - - - - - - - - - -
    -

    Uses of Interface
    mycompiler.test.notUsedAnymore.IResultValidator

    -
    -
    No usage of mycompiler.test.notUsedAnymore.IResultValidator
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TEst_2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TEst_2.html deleted file mode 100755 index 12077565..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TEst_2.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TEst_2 - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TEst_2

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TEst_2
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/Test.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/Test.html deleted file mode 100755 index 29ac0bc3..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/Test.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.Test - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.Test

    -
    -
    No usage of mycompiler.test.notUsedAnymore.Test
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest.html deleted file mode 100755 index 8a0361c5..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestAbstractInferenceTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestAbstractInferenceTest

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestAbstractInferenceTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest2.html deleted file mode 100755 index d89c0a96..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestAbstractInferenceTest2.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestAbstractInferenceTest2 - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestAbstractInferenceTest2

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestAbstractInferenceTest2
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestClassMemberWithoutType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestClassMemberWithoutType.html deleted file mode 100755 index afbabaef..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestClassMemberWithoutType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestClassMemberWithoutType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestClassMemberWithoutType

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestClassMemberWithoutType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestConstantsWithoutType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestConstantsWithoutType.html deleted file mode 100755 index 3066f384..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestConstantsWithoutType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestConstantsWithoutType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestConstantsWithoutType

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestConstantsWithoutType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestGenerics.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestGenerics.html deleted file mode 100755 index 0a87c05c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestGenerics

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestInheritanceCheckValidImplementationFromInterface.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestInheritanceCheckValidImplementationFromInterface.html deleted file mode 100755 index 3b78de15..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestInheritanceCheckValidImplementationFromInterface.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestInheritanceCheckValidImplementationFromInterface - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestInheritanceCheckValidImplementationFromInterface

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestInheritanceCheckValidImplementationFromInterface
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnType.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnType.html deleted file mode 100755 index b5995a66..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnType.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestMethodReturnType - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestMethodReturnType

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestMethodReturnType
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative.html deleted file mode 100755 index a0c31a84..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative2.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative2.html deleted file mode 100755 index bc43ec9d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/class-use/TestMethodReturnTypeNegative2.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative2 - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative2

    -
    -
    No usage of mycompiler.test.notUsedAnymore.TestMethodReturnTypeNegative2
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-frame.html deleted file mode 100755 index 64b053e8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-frame.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - -mycompiler.test.notUsedAnymore - - - - -

    mycompiler.test.notUsedAnymore

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-summary.html deleted file mode 100755 index f43692a4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-summary.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - -mycompiler.test.notUsedAnymore - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.notUsedAnymore

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-tree.html deleted file mode 100755 index e0fe3ae6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-tree.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - -mycompiler.test.notUsedAnymore Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.notUsedAnymore

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-use.html b/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-use.html deleted file mode 100755 index c15a1b64..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/notUsedAnymore/package-use.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Uses of Package mycompiler.test.notUsedAnymore - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.notUsedAnymore

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/AllTestsOperators.html b/doc/LambdaJavadoc/mycompiler/test/operators/AllTestsOperators.html deleted file mode 100755 index be590d1c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/AllTestsOperators.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsOperators - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class AllTestsOperators

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.operators.AllTestsOperators
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsOperators
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AllTestsOperators() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsOperators

          -
          public AllTestsOperators()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorArithmetic.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorArithmetic.html deleted file mode 100755 index 86ca37f2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorArithmetic.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorArithmetic - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorArithmetic

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorArithmetic
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      checks arithmetic operations
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorArithmetic(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorArithmetic

          -
          public TestOperatorArithmetic(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBitwise.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBitwise.html deleted file mode 100755 index 471853f1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBitwise.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorBitwise - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorBitwise

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorBitwise
      -extends AbstractInferenceTest
      -
      29-05-08
      -
      Author:
      -
      checks bit operators
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorBitwise(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorBitwise

          -
          public TestOperatorBitwise(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBool.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBool.html deleted file mode 100755 index 6879dab9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorBool.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorBool - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorBool

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorBool
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      checks operators requiring boolean types
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorBool(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorBool

          -
          public TestOperatorBool(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorComparison.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorComparison.html deleted file mode 100755 index 394ac823..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorComparison.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorComparison - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorComparison

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorComparison
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      verifies types inferenced when using comparison operators
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorComparison(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorComparison

          -
          public TestOperatorComparison(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorIncrement.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorIncrement.html deleted file mode 100755 index c6c5f1fa..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorIncrement.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorIncrement - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorIncrement

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorIncrement
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      checks correct identification of types which the increment operator can be used for
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorIncrement(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorIncrement

          -
          public TestOperatorIncrement(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorObjects.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorObjects.html deleted file mode 100755 index 7d980cca..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorObjects.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorObjects - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorObjects

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorObjects
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      checks object usage
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorObjects(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorObjects

          -
          public TestOperatorObjects(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorString.html b/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorString.html deleted file mode 100755 index d86a6c29..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/TestOperatorString.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestOperatorString - - - - - - - - - - - -
    -
    mycompiler.test.operators
    -

    Class TestOperatorString

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestOperatorString
      -extends AbstractInferenceTest
      -
      12-04-08
      -
      Author:
      -
      checks whether plus operator can be used on strings
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestOperatorString(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestOperatorString

          -
          public TestOperatorString(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/AllTestsOperators.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/AllTestsOperators.html deleted file mode 100755 index 76af9383..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/AllTestsOperators.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.AllTestsOperators - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.AllTestsOperators

    -
    -
    No usage of mycompiler.test.operators.AllTestsOperators
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorArithmetic.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorArithmetic.html deleted file mode 100755 index b0474e52..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorArithmetic.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorArithmetic - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorArithmetic

    -
    -
    No usage of mycompiler.test.operators.TestOperatorArithmetic
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBitwise.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBitwise.html deleted file mode 100755 index 87764104..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBitwise.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorBitwise - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorBitwise

    -
    -
    No usage of mycompiler.test.operators.TestOperatorBitwise
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBool.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBool.html deleted file mode 100755 index 149e4350..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorBool.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorBool - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorBool

    -
    -
    No usage of mycompiler.test.operators.TestOperatorBool
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorComparison.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorComparison.html deleted file mode 100755 index fc6f4d10..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorComparison.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorComparison - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorComparison

    -
    -
    No usage of mycompiler.test.operators.TestOperatorComparison
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorIncrement.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorIncrement.html deleted file mode 100755 index 1b0359fb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorIncrement.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorIncrement - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorIncrement

    -
    -
    No usage of mycompiler.test.operators.TestOperatorIncrement
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorObjects.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorObjects.html deleted file mode 100755 index 05f59648..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorObjects.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorObjects - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorObjects

    -
    -
    No usage of mycompiler.test.operators.TestOperatorObjects
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorString.html b/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorString.html deleted file mode 100755 index dc185ce4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/class-use/TestOperatorString.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.operators.TestOperatorString - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.operators.TestOperatorString

    -
    -
    No usage of mycompiler.test.operators.TestOperatorString
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/operators/package-frame.html deleted file mode 100755 index 242e2fc8..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/package-frame.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -mycompiler.test.operators - - - - -

    mycompiler.test.operators

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/operators/package-summary.html deleted file mode 100755 index 33049ba3..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/package-summary.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - -mycompiler.test.operators - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.operators

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/operators/package-tree.html deleted file mode 100755 index 20c6d031..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/package-tree.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - -mycompiler.test.operators Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.operators

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/operators/package-use.html b/doc/LambdaJavadoc/mycompiler/test/operators/package-use.html deleted file mode 100755 index f635064c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/operators/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.operators - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.operators

    -
    -
    No usage of mycompiler.test.operators
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/package-frame.html deleted file mode 100755 index f067f42d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/package-frame.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -mycompiler.test - - - - -

    mycompiler.test

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/package-summary.html deleted file mode 100755 index 632ba414..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/package-summary.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -mycompiler.test - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      AbstractInferenceTest -
      Todo: - - exception handling cannot verify correct exception yet - - done: - exception handling - - commented asserts - - log4j - - cmethodkey usage - - Typeplaceholder support
      -
      AllTests 
      LambdaInterferenzTest 
      Log4jWrapper -
      needed to assure one-time execution of configure script
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/package-tree.html deleted file mode 100755 index 3fe21b53..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -mycompiler.test Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/package-use.html b/doc/LambdaJavadoc/mycompiler/test/package-use.html deleted file mode 100755 index 72fc89f9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/package-use.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - -Uses of Package mycompiler.test - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.html deleted file mode 100755 index 59808579..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsPrimitiveTypes - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class AllTestsPrimitiveTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsPrimitiveTypes
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsPrimitiveTypes

          -
          public AllTestsPrimitiveTypes()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/BooleanTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/BooleanTest.html deleted file mode 100755 index 77c2ca94..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/BooleanTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -BooleanTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class BooleanTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class BooleanTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type boolean
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        BooleanTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BooleanTest

          -
          public BooleanTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/ByteTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/ByteTest.html deleted file mode 100755 index 49f4af56..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/ByteTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -ByteTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class ByteTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class ByteTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type byte
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ByteTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ByteTest

          -
          public ByteTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/CharTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/CharTest.html deleted file mode 100755 index 5e3326d6..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/CharTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -CharTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class CharTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class CharTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      chck type character
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        CharTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          CharTest

          -
          public CharTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/DoubleTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/DoubleTest.html deleted file mode 100755 index 62425b94..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/DoubleTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -DoubleTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class DoubleTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class DoubleTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type double
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        DoubleTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          DoubleTest

          -
          public DoubleTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/FloatTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/FloatTest.html deleted file mode 100755 index 295539be..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/FloatTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -FloatTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class FloatTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class FloatTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type Float
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        FloatTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FloatTest

          -
          public FloatTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/IntegerTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/IntegerTest.html deleted file mode 100755 index 17ed802c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/IntegerTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -IntegerTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class IntegerTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class IntegerTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type Integer
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        IntegerTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          IntegerTest

          -
          public IntegerTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/LongTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/LongTest.html deleted file mode 100755 index 6430769c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/LongTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -LongTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class LongTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class LongTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type Long
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        LongTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          LongTest

          -
          public LongTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/StringTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/StringTest.html deleted file mode 100755 index 601878a1..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/StringTest.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -StringTest - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class StringTest

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class StringTest
      -extends AbstractInferenceTest
      -
      02-04-08
      -
      Author:
      -
      check type String
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        StringTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          StringTest

          -
          public StringTest(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/TestSimpleTypes.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/TestSimpleTypes.html deleted file mode 100755 index 75569bb2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/TestSimpleTypes.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestSimpleTypes - - - - - - - - - - - -
    -
    mycompiler.test.primitiveTypes
    -

    Class TestSimpleTypes

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestSimpleTypes
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This test verifies identification of a simple method with returntype void
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestSimpleTypes(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestSimpleTypes

          -
          public TestSimpleTypes(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/AllTestsPrimitiveTypes.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/AllTestsPrimitiveTypes.html deleted file mode 100755 index 9da35a60..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/AllTestsPrimitiveTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes

    -
    -
    No usage of mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/BooleanTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/BooleanTest.html deleted file mode 100755 index 4dad4226..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/BooleanTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.BooleanTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.BooleanTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.BooleanTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/ByteTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/ByteTest.html deleted file mode 100755 index 93cacc0e..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/ByteTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.ByteTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.ByteTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.ByteTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/CharTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/CharTest.html deleted file mode 100755 index 2badeb34..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/CharTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.CharTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.CharTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.CharTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/DoubleTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/DoubleTest.html deleted file mode 100755 index 8fa3fa5d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/DoubleTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.DoubleTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.DoubleTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.DoubleTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/FloatTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/FloatTest.html deleted file mode 100755 index b2f60e7d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/FloatTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.FloatTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.FloatTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.FloatTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/IntegerTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/IntegerTest.html deleted file mode 100755 index 4c62987c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/IntegerTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.IntegerTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.IntegerTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.IntegerTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/LongTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/LongTest.html deleted file mode 100755 index ef2bf44a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/LongTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.LongTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.LongTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.LongTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/StringTest.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/StringTest.html deleted file mode 100755 index 778dcbd3..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/StringTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.StringTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.StringTest

    -
    -
    No usage of mycompiler.test.primitiveTypes.StringTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/TestSimpleTypes.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/TestSimpleTypes.html deleted file mode 100755 index 29ec4a41..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/class-use/TestSimpleTypes.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.primitiveTypes.TestSimpleTypes - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.primitiveTypes.TestSimpleTypes

    -
    -
    No usage of mycompiler.test.primitiveTypes.TestSimpleTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-frame.html deleted file mode 100755 index 87453148..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-frame.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -mycompiler.test.primitiveTypes - - - - -

    mycompiler.test.primitiveTypes

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-summary.html deleted file mode 100755 index 12549f78..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-summary.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - -mycompiler.test.primitiveTypes - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.primitiveTypes

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-tree.html deleted file mode 100755 index 0edd1280..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-tree.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -mycompiler.test.primitiveTypes Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.primitiveTypes

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-use.html b/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-use.html deleted file mode 100755 index f5ceb3c5..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/primitiveTypes/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.primitiveTypes - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.primitiveTypes

    -
    -
    No usage of mycompiler.test.primitiveTypes
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/AllTestsTrivial.html b/doc/LambdaJavadoc/mycompiler/test/trivial/AllTestsTrivial.html deleted file mode 100755 index 201a1914..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/AllTestsTrivial.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -AllTestsTrivial - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class AllTestsTrivial

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.trivial.AllTestsTrivial
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class AllTestsTrivial
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        AllTestsTrivial() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AllTestsTrivial

          -
          public AllTestsTrivial()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmpty.html deleted file mode 100755 index cf842d2a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmpty.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassEmpty - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestClassEmpty

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassEmpty
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This tests verifies correct detection of an empty class.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestClassEmpty(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassEmpty

          -
          public TestClassEmpty(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmptyGenerics.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmptyGenerics.html deleted file mode 100755 index 27d09a13..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassEmptyGenerics.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassEmptyGenerics - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestClassEmptyGenerics

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassEmptyGenerics
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This tests verifies correct identification of a generic class.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestClassEmptyGenerics(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassEmptyGenerics

          -
          public TestClassEmptyGenerics(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMember.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMember.html deleted file mode 100755 index c4d6325d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMember.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassMember - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestClassMember

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassMember
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This test verifies correct detection of a member variable.
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestClassMember(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassMember

          -
          public TestClassMember(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMemberAssignment.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMemberAssignment.html deleted file mode 100755 index c052db7a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestClassMemberAssignment.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestClassMemberAssignment - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestClassMemberAssignment

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestClassMemberAssignment
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      This test verifies correct member assignments.
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClassMemberAssignment

          -
          public TestClassMemberAssignment(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstants.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstants.html deleted file mode 100755 index 7840b059..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstants.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestConstants - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestConstants

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestConstants
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      this test checks correct detection of constants as members
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestConstants(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestConstants

          -
          public TestConstants(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructor.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructor.html deleted file mode 100755 index acab21bf..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructor.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestConstructor - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestConstructor

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestConstructor
      -extends AbstractInferenceTest
      -
      13-04-08
      -
      Author:
      -
      This test verifies correct identification of a Constructor
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestConstructor(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestConstructor

          -
          public TestConstructor(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructorNegative.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructorNegative.html deleted file mode 100755 index 4fa39e63..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestConstructorNegative.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestConstructorNegative - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestConstructorNegative

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestConstructorNegative
      -extends AbstractInferenceTest
      -
      13-04-08
      -
      Author:
      -
      This test verifies that it's not allowed for a constructor to return a value
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestConstructorNegative(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestConstructorNegative

          -
          public TestConstructorNegative(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceEmpty.html deleted file mode 100755 index 83258b98..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceEmpty.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInterfaceEmpty - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestInterfaceEmpty

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInterfaceEmpty
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This test verifies correct detection of simple interface
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestInterfaceEmpty(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInterfaceEmpty

          -
          public TestInterfaceEmpty(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMember.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMember.html deleted file mode 100755 index 7e131512..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMember.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInterfaceMember - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestInterfaceMember

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInterfaceMember
      -extends AbstractInferenceTest
      -
      18-04-08
      -
      Author:
      -
      This test verifies correct detection of an interface with a single member
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestInterfaceMember(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInterfaceMember

          -
          public TestInterfaceMember(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMethod.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMethod.html deleted file mode 100755 index dae5b609..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceMethod.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInterfaceMethod - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestInterfaceMethod

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInterfaceMethod
      -extends AbstractInferenceTest
      -
      10-04-08
      -
      Author:
      -
      This test verifies correct detection of an interface with a method
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestInterfaceMethod(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInterfaceMethod

          -
          public TestInterfaceMethod(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceNotInferenced.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceNotInferenced.html deleted file mode 100755 index 06ff2a8f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestInterfaceNotInferenced.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestInterfaceNotInferenced - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestInterfaceNotInferenced

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestInterfaceNotInferenced
      -extends AbstractInferenceTest
      -
      20-05-08
      -
      Author:
      -
      checks that interfaces do not get inferenced according to discussion with M. Pl�micke
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestInterfaceNotInferenced

          -
          public TestInterfaceNotInferenced(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmpty.html deleted file mode 100755 index aa531f1c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmpty.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestMethodEmpty - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestMethodEmpty

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodEmpty
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      This test verifies identification of a simple method with return type void
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestMethodEmpty(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodEmpty

          -
          public TestMethodEmpty(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyGeneric.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyGeneric.html deleted file mode 100755 index badd46fe..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyGeneric.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -TestMethodEmptyGeneric - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestMethodEmptyGeneric

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodEmptyGeneric
      -extends AbstractInferenceTest
      -
      01-04-08
      -
      Author:
      -
      Simply tests recognition of a generic method with return type void
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestMethodEmptyGeneric(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodEmptyGeneric

          -
          public TestMethodEmptyGeneric(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameter.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameter.html deleted file mode 100755 index 68701956..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameter.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -TestMethodEmptyParameter - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestMethodEmptyParameter

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodEmptyParameter
      -extends AbstractInferenceTest
      -
      TODO:
      -
      Author:
      -
      tom - - Test simple empty methods with parameters -> parameters will be inference to genericstypevar
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestMethodEmptyParameter(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodEmptyParameter

          -
          public TestMethodEmptyParameter(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.html b/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.html deleted file mode 100755 index 6c98b718..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - -TestMethodEmptyParameterGenericExtends - - - - - - - - - - - -
    -
    mycompiler.test.trivial
    -

    Class TestMethodEmptyParameterGenericExtends

    -
    -
    -
      -
    • java.lang.Object
    • -
    • - -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TestMethodEmptyParameterGenericExtends
      -extends AbstractInferenceTest
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestMethodEmptyParameterGenericExtends

          -
          public TestMethodEmptyParameterGenericExtends(java.lang.String name)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/AllTestsTrivial.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/AllTestsTrivial.html deleted file mode 100755 index 8b27b894..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/AllTestsTrivial.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.AllTestsTrivial - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.AllTestsTrivial

    -
    -
    No usage of mycompiler.test.trivial.AllTestsTrivial
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmpty.html deleted file mode 100755 index 92f6f121..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmpty.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestClassEmpty - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestClassEmpty

    -
    -
    No usage of mycompiler.test.trivial.TestClassEmpty
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmptyGenerics.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmptyGenerics.html deleted file mode 100755 index 71b6d363..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassEmptyGenerics.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestClassEmptyGenerics - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestClassEmptyGenerics

    -
    -
    No usage of mycompiler.test.trivial.TestClassEmptyGenerics
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMember.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMember.html deleted file mode 100755 index 7d0e7695..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMember.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestClassMember - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestClassMember

    -
    -
    No usage of mycompiler.test.trivial.TestClassMember
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMemberAssignment.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMemberAssignment.html deleted file mode 100755 index 3fc7ba59..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestClassMemberAssignment.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestClassMemberAssignment - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestClassMemberAssignment

    -
    -
    No usage of mycompiler.test.trivial.TestClassMemberAssignment
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstants.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstants.html deleted file mode 100755 index 7086a37d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstants.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestConstants - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestConstants

    -
    -
    No usage of mycompiler.test.trivial.TestConstants
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructor.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructor.html deleted file mode 100755 index 545f1d8d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructor.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestConstructor - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestConstructor

    -
    -
    No usage of mycompiler.test.trivial.TestConstructor
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructorNegative.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructorNegative.html deleted file mode 100755 index 93fc8553..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestConstructorNegative.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestConstructorNegative - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestConstructorNegative

    -
    -
    No usage of mycompiler.test.trivial.TestConstructorNegative
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceEmpty.html deleted file mode 100755 index 41b64064..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceEmpty.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestInterfaceEmpty - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestInterfaceEmpty

    -
    -
    No usage of mycompiler.test.trivial.TestInterfaceEmpty
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMember.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMember.html deleted file mode 100755 index 5a81e327..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMember.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestInterfaceMember - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestInterfaceMember

    -
    -
    No usage of mycompiler.test.trivial.TestInterfaceMember
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMethod.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMethod.html deleted file mode 100755 index 84272e18..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceMethod.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestInterfaceMethod - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestInterfaceMethod

    -
    -
    No usage of mycompiler.test.trivial.TestInterfaceMethod
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceNotInferenced.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceNotInferenced.html deleted file mode 100755 index b552ff85..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestInterfaceNotInferenced.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestInterfaceNotInferenced - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestInterfaceNotInferenced

    -
    -
    No usage of mycompiler.test.trivial.TestInterfaceNotInferenced
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmpty.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmpty.html deleted file mode 100755 index 3ed8c854..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmpty.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestMethodEmpty - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestMethodEmpty

    -
    -
    No usage of mycompiler.test.trivial.TestMethodEmpty
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyGeneric.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyGeneric.html deleted file mode 100755 index 9ea7c11c..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyGeneric.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestMethodEmptyGeneric - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestMethodEmptyGeneric

    -
    -
    No usage of mycompiler.test.trivial.TestMethodEmptyGeneric
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameter.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameter.html deleted file mode 100755 index b4056fe9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameter.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestMethodEmptyParameter - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestMethodEmptyParameter

    -
    -
    No usage of mycompiler.test.trivial.TestMethodEmptyParameter
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameterGenericExtends.html b/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameterGenericExtends.html deleted file mode 100755 index be13a6cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/class-use/TestMethodEmptyParameterGenericExtends.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.trivial.TestMethodEmptyParameterGenericExtends - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.trivial.TestMethodEmptyParameterGenericExtends

    -
    -
    No usage of mycompiler.test.trivial.TestMethodEmptyParameterGenericExtends
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/trivial/package-frame.html deleted file mode 100755 index baf88b6f..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/package-frame.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - -mycompiler.test.trivial - - - - -

    mycompiler.test.trivial

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/trivial/package-summary.html deleted file mode 100755 index 45a6de4a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/package-summary.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - -mycompiler.test.trivial - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.trivial

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/trivial/package-tree.html deleted file mode 100755 index f2497b7a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/package-tree.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -mycompiler.test.trivial Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.trivial

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/trivial/package-use.html b/doc/LambdaJavadoc/mycompiler/test/trivial/package-use.html deleted file mode 100755 index 4e807864..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/trivial/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.trivial - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.trivial

    -
    -
    No usage of mycompiler.test.trivial
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.html deleted file mode 100755 index ce67fa03..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - -TrAlgorithmTestSuite - - - - - - - - - - - -
    -
    mycompiler.test.unittest.typeReconstructionTest
    -

    Class TrAlgorithmTestSuite

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TrAlgorithmTestSuite
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static junit.framework.Testsuite() -
        JUnit Tests for main type reconstruction algorithms
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TrAlgorithmTestSuite

          -
          public TrAlgorithmTestSuite()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          suite

          -
          public static junit.framework.Test suite()
          -
          JUnit Tests for main type reconstruction algorithms
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.html deleted file mode 100755 index b1fabe88..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - -TrMakeFCTest - - - - - - - - - - - -
    -
    mycompiler.test.unittest.typeReconstructionTest
    -

    Class TrMakeFCTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TrMakeFCTest
      -extends junit.framework.TestCase
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TrMakeFCTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidsetUp() 
        voidtearDown() 
        voidtestAllMakeFC() 
        voidtestTrivialMakeFC() 
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TrMakeFCTest

          -
          public TrMakeFCTest(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setUp

          -
          public void setUp()
          -
          -
          Overrides:
          -
          setUp in class junit.framework.TestCase
          -
          -
        • -
        - - - -
          -
        • -

          tearDown

          -
          public void tearDown()
          -
          -
          Overrides:
          -
          tearDown in class junit.framework.TestCase
          -
          -
        • -
        - - - -
          -
        • -

          testTrivialMakeFC

          -
          public void testTrivialMakeFC()
          -
        • -
        - - - -
          -
        • -

          testAllMakeFC

          -
          public void testAllMakeFC()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.html deleted file mode 100755 index 38cc379a..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - -TrSubUnifyTest - - - - - - - - - - - -
    -
    mycompiler.test.unittest.typeReconstructionTest
    -

    Class TrSubUnifyTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TrSubUnifyTest
      -extends junit.framework.TestCase
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TrSubUnifyTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidsetUp() 
        static voidsetUpBeforeClass() 
        voidtearDown() 
        voidtestSubUnifyReduce2() 
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TrSubUnifyTest

          -
          public TrSubUnifyTest(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setUpBeforeClass

          -
          public static void setUpBeforeClass()
          -                             throws java.lang.Exception
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        - - - -
          -
        • -

          setUp

          -
          public void setUp()
          -           throws java.lang.Exception
          -
          -
          Overrides:
          -
          setUp in class junit.framework.TestCase
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        - - - -
          -
        • -

          tearDown

          -
          public void tearDown()
          -              throws java.lang.Exception
          -
          -
          Overrides:
          -
          tearDown in class junit.framework.TestCase
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        - - - -
          -
        • -

          testSubUnifyReduce2

          -
          public void testSubUnifyReduce2()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.html deleted file mode 100755 index b1db34d4..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - -TrUnifyTest - - - - - - - - - - - -
    -
    mycompiler.test.unittest.typeReconstructionTest
    -

    Class TrUnifyTest

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • junit.framework.Assert
      • -
      • -
          -
        • junit.framework.TestCase
        • -
        • -
            -
          • mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      junit.framework.Test
      -
      -
      -
      -
      public class TrUnifyTest
      -extends junit.framework.TestCase
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TrUnifyTest(java.lang.String name) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidsetUp() 
        voidsetUpBeforeClass() 
        voidtearDown() 
        voidtestUnifyErase1() 
        voidtestUnifyReduce1() 
        voidtestUnifytesting() 
        -
          -
        • - - -

          Methods inherited from class junit.framework.TestCase

          -countTestCases, getName, run, run, runBare, setName, toString
        • -
        -
          -
        • - - -

          Methods inherited from class junit.framework.Assert

          -assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TrUnifyTest

          -
          public TrUnifyTest(java.lang.String name)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setUpBeforeClass

          -
          public void setUpBeforeClass()
          -
        • -
        - - - -
          -
        • -

          setUp

          -
          public void setUp()
          -           throws java.lang.Exception
          -
          -
          Overrides:
          -
          setUp in class junit.framework.TestCase
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        - - - -
          -
        • -

          tearDown

          -
          public void tearDown()
          -              throws java.lang.Exception
          -
          -
          Overrides:
          -
          tearDown in class junit.framework.TestCase
          -
          Throws:
          -
          java.lang.Exception
          -
        • -
        - - - -
          -
        • -

          testUnifytesting

          -
          public void testUnifytesting()
          -
        • -
        - - - -
          -
        • -

          testUnifyReduce1

          -
          public void testUnifyReduce1()
          -
        • -
        - - - -
          -
        • -

          testUnifyErase1

          -
          public void testUnifyErase1()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrAlgorithmTestSuite.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrAlgorithmTestSuite.html deleted file mode 100755 index 3bc5c6d2..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrAlgorithmTestSuite.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite

    -
    -
    No usage of mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrMakeFCTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrMakeFCTest.html deleted file mode 100755 index 63bd550d..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrMakeFCTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest

    -
    -
    No usage of mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrSubUnifyTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrSubUnifyTest.html deleted file mode 100755 index 656e75ae..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrSubUnifyTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest

    -
    -
    No usage of mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrUnifyTest.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrUnifyTest.html deleted file mode 100755 index 58dfa676..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/class-use/TrUnifyTest.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest

    -
    -
    No usage of mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-frame.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-frame.html deleted file mode 100755 index 7b001c71..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-frame.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -mycompiler.test.unittest.typeReconstructionTest - - - - -

    mycompiler.test.unittest.typeReconstructionTest

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-summary.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-summary.html deleted file mode 100755 index 8b5422cb..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-summary.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - -mycompiler.test.unittest.typeReconstructionTest - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.test.unittest.typeReconstructionTest

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-tree.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-tree.html deleted file mode 100755 index 5e03b5c3..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -mycompiler.test.unittest.typeReconstructionTest Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.test.unittest.typeReconstructionTest

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    -
      -
    • java.lang.Object -
        -
      • junit.framework.Assert -
          -
        • junit.framework.TestCase (implements junit.framework.Test) -
            -
          • mycompiler.test.unittest.typeReconstructionTest.TrMakeFCTest
          • -
          • mycompiler.test.unittest.typeReconstructionTest.TrSubUnifyTest
          • -
          • mycompiler.test.unittest.typeReconstructionTest.TrUnifyTest
          • -
          -
        • -
        -
      • -
      • mycompiler.test.unittest.typeReconstructionTest.TrAlgorithmTestSuite
      • -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-use.html b/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-use.html deleted file mode 100755 index 7319b1d9..00000000 --- a/doc/LambdaJavadoc/mycompiler/test/unittest/typeReconstructionTest/package-use.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Package mycompiler.test.unittest.typeReconstructionTest - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.test.unittest.typeReconstructionTest

    -
    -
    No usage of mycompiler.test.unittest.typeReconstructionTest
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/ConstantValueAttribute.html b/doc/LambdaJavadoc/mycompiler/unused/ConstantValueAttribute.html deleted file mode 100755 index 298fe7e3..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/ConstantValueAttribute.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - -ConstantValueAttribute - - - - - - - - - - - -
    -
    mycompiler.unused
    -

    Class ConstantValueAttribute

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.unused.ConstantValueAttribute
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class ConstantValueAttribute
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ConstantValueAttribute

          -
          public ConstantValueAttribute()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/Import.html b/doc/LambdaJavadoc/mycompiler/unused/Import.html deleted file mode 100755 index 42900cff..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/Import.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - -Import - - - - - - - - - - - -
    -
    mycompiler.unused
    -

    Class Import

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class Import
      -extends Status
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        Import() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Import

          -
          public Import()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/JavaCompiler.html b/doc/LambdaJavadoc/mycompiler/unused/JavaCompiler.html deleted file mode 100755 index 1e21adf7..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/JavaCompiler.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - -JavaCompiler - - - - - - - - - - - -
    -
    mycompiler.unused
    -

    Class JavaCompiler

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class JavaCompiler
      -extends JavaParser
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          JavaCompiler

          -
          public JavaCompiler()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/TestClass.html b/doc/LambdaJavadoc/mycompiler/unused/TestClass.html deleted file mode 100755 index 21d0fdfb..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/TestClass.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - -TestClass - - - - - - - - - - - -
    -
    mycompiler.unused
    -

    Class TestClass

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • mycompiler.unused.TestClass
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class TestClass
      -extends java.lang.Object
      -
      Version:
      -
      $Date: 2013/09/22 20:12:55 $
      -
      Author:
      -
      J�rg B�uerle
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TestClass() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TestClass

          -
          public TestClass()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          main

          -
          public static void main(java.lang.String[] args)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/class-use/ConstantValueAttribute.html b/doc/LambdaJavadoc/mycompiler/unused/class-use/ConstantValueAttribute.html deleted file mode 100755 index a2303846..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/class-use/ConstantValueAttribute.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.unused.ConstantValueAttribute - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.unused.ConstantValueAttribute

    -
    -
    No usage of mycompiler.unused.ConstantValueAttribute
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/class-use/Import.html b/doc/LambdaJavadoc/mycompiler/unused/class-use/Import.html deleted file mode 100755 index c5fbeae7..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/class-use/Import.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Uses of Class mycompiler.unused.Import - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.unused.Import

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/class-use/JavaCompiler.html b/doc/LambdaJavadoc/mycompiler/unused/class-use/JavaCompiler.html deleted file mode 100755 index aac7a3ce..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/class-use/JavaCompiler.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.unused.JavaCompiler - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.unused.JavaCompiler

    -
    -
    No usage of mycompiler.unused.JavaCompiler
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/class-use/TestClass.html b/doc/LambdaJavadoc/mycompiler/unused/class-use/TestClass.html deleted file mode 100755 index 49e8eb61..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/class-use/TestClass.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class mycompiler.unused.TestClass - - - - - - - - - - -
    -

    Uses of Class
    mycompiler.unused.TestClass

    -
    -
    No usage of mycompiler.unused.TestClass
    - - - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/package-frame.html b/doc/LambdaJavadoc/mycompiler/unused/package-frame.html deleted file mode 100755 index 5a847620..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/package-frame.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -mycompiler.unused - - - - -

    mycompiler.unused

    - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/package-summary.html b/doc/LambdaJavadoc/mycompiler/unused/package-summary.html deleted file mode 100755 index 79ed95c6..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/package-summary.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - -mycompiler.unused - - - - - - - -
    - - - - - -
    - - -
    -

    Package mycompiler.unused

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/package-tree.html b/doc/LambdaJavadoc/mycompiler/unused/package-tree.html deleted file mode 100755 index 137ef970..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -mycompiler.unused Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package mycompiler.unused

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/mycompiler/unused/package-use.html b/doc/LambdaJavadoc/mycompiler/unused/package-use.html deleted file mode 100755 index 11011e11..00000000 --- a/doc/LambdaJavadoc/mycompiler/unused/package-use.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Uses of Package mycompiler.unused - - - - - - - - - - -
    -

    Uses of Package
    mycompiler.unused

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/overview-frame.html b/doc/LambdaJavadoc/overview-frame.html deleted file mode 100755 index 3ac2fd94..00000000 --- a/doc/LambdaJavadoc/overview-frame.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -Overview List - - - - - - -

     

    - - diff --git a/doc/LambdaJavadoc/overview-summary.html b/doc/LambdaJavadoc/overview-summary.html deleted file mode 100755 index fa8988a7..00000000 --- a/doc/LambdaJavadoc/overview-summary.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - -Overview - - - - - - - -
    - - - - - -
    - - - - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/overview-tree.html b/doc/LambdaJavadoc/overview-tree.html deleted file mode 100755 index 71e00b63..00000000 --- a/doc/LambdaJavadoc/overview-tree.html +++ /dev/null @@ -1,683 +0,0 @@ - - - - - -Class Hierarchy - - - - - - - -
    - - - - - -
    - - - -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -

    Enum Hierarchy

    -
      -
    • java.lang.Object -
        -
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) - -
      • -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/package-list b/doc/LambdaJavadoc/package-list deleted file mode 100755 index 2cf0c5a7..00000000 --- a/doc/LambdaJavadoc/package-list +++ /dev/null @@ -1,35 +0,0 @@ -myJvmDisassembler -mycompiler -mycompiler.mybytecode -mycompiler.myclass -mycompiler.myexception -mycompiler.myinterface -mycompiler.mymodifier -mycompiler.myoperator -mycompiler.myparser -mycompiler.mystatement -mycompiler.mytest -mycompiler.mytype -mycompiler.mytypereconstruction -mycompiler.mytypereconstruction.replacementlistener -mycompiler.mytypereconstruction.set -mycompiler.mytypereconstruction.typeassumption -mycompiler.mytypereconstruction.typeassumptionkey -mycompiler.mytypereconstruction.unify -mycompiler.test -mycompiler.test.blocks -mycompiler.test.complexTypes -mycompiler.test.expectationTypes -mycompiler.test.generics -mycompiler.test.inferenceByCharacteristic -mycompiler.test.javaConcepts.inheritance -mycompiler.test.javaConcepts.overloading -mycompiler.test.javaConcepts.staticAccess -mycompiler.test.lambda -mycompiler.test.notUsedAnymore -mycompiler.test.operators -mycompiler.test.primitiveTypes -mycompiler.test.trivial -mycompiler.test.unittest.typeReconstructionTest -mycompiler.unused -typinferenz diff --git a/doc/LambdaJavadoc/resources/background.gif b/doc/LambdaJavadoc/resources/background.gif deleted file mode 100755 index f471940fde2f39ef8943a6af9569bcf986b1579b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2313 zcmV+k3HJ6!Nk%w1VKM-40OkMy00030|NlK(aXwsfKV5S}VtGJbbVOr%L0@%CZH88Q zl{{NzcR^uxNo<2iYk@pjY)*5FJz8x~bc{)B zfk z+1T6M-s9WdW8dcJ-wO*3@9+W*5AY543-j^$^!EPz_4eHZ2#>)41`h@dc!2OAgN6$a zCS2I?;lqgx6IR4nkpTe;1RN0f=zxMq2O=q`94V5d$&e>Unta)^<;;^G3>e7yp=ZvW z6DIW3xpSvaogXF?_4%`@(V;s}NR^5J!3hrtJV@1QRV&r5S*L!zYE|rss${iFkg&!? zTN5V#)~=bmMorwgZsEpdOE)iExo+FO-8;8Kga{=HbSQCnF=E6W3?o*|ID%uwi5**> zJXy127Y9m+=HQ|PhXWi+xNwoWv}n_%Pq%(e+H~mGqhq5kv4Mo|-n~g|7!F*xZ{xv< zCpXS~dGg^IGK?4@J-T%b(XnUHFul6n<@2&4)zzyO2) z3Q8`i0+UKY*`$}e9mmp;tg*))`|PsK1|hAo%u0K$vDwm4gaSkm0j{`26k#qAKmbuhxZ#cquDR>B zD{s8+&TH-uNg$C#68QG}1HMBHfrP&L@@w$F_!itRzXdCN@V|LDAu%3!IDtq1#1UV7 z#1RxvT=B(DWbCoU5l=ia$Pp`Hgb_?Mp@hmtxZDI2N-)v#$}PXVvdm1d>@v(v`0TUJ zF)Pu89(q`zv=w^nVTIF3@3BYIPA}c`(@ZCAwbNBEt@PDUKe5CTR8aB66IE1!w%Amt zy+jpcn~k>GZpVFg+H6x{_uOksvBlq0OyT$6TyQZ37k(cOxZr|JEx1sGm<(M9gH z-~PMqyn|tT=))UN`|-FFFUA#KToK0fUOaz=7}Z~KeHhVC&%O27cTfHQ^WBU8z4p&T zp#>D|V}XShTD;Hx745Iz{`>K-Z$A|7!*Boo{mY;G21vjH8t{M!OrQc6$iN0V@PQDF zpadsK!3tXNf*8!81~qnXWuHZ)kytd=_y+ADWvw31ouV;CdZ#ya*(l7-A-C-Y^+iit8O zBy3*`Ls$|5Hn4m_^I^|C7{m7EFn|5vTk;|oywIgCc9Bb*=L+Y$)M>9GC<|HGs@6NB zHLY%03!dDf=eDRt2O6lVSFRcsuWZEwU?=z$CZ0W?#VJfdN>HG(l%oKpyiftJc|Y)xkjSJYCrQal-0PC~()T9xwF!Jf zVi1UA#3BBbh(i8r5&v#Pz!cF41KjbCc?4u2@@Q~oKLirt2TM30;y6b+zyX2`Yl9u; z`0$3;v0-YUp&7NdPT#q`cZlbij$jvbRk6R>8g*>}*b9E+WDwmpHAAxYzyT aU_pX{M6b8i>#Dq3onfZy}_nli%!Q$ZV%e&!tN2 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 YpWXKgmku8Vj|K)Vje`mzEKCg608Q#dYybcN diff --git a/doc/LambdaJavadoc/serialized-form.html b/doc/LambdaJavadoc/serialized-form.html deleted file mode 100755 index 5be47c9e..00000000 --- a/doc/LambdaJavadoc/serialized-form.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -Serialized Form - - - - - - - -
    - - - - - -
    - - -
    -

    Serialized Form

    -
    -
    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/stylesheet.css b/doc/LambdaJavadoc/stylesheet.css deleted file mode 100755 index 0aeaa97f..00000000 --- a/doc/LambdaJavadoc/stylesheet.css +++ /dev/null @@ -1,474 +0,0 @@ -/* Javadoc style sheet */ -/* -Overall document style -*/ -body { - background-color:#ffffff; - color:#353833; - font-family:Arial, Helvetica, sans-serif; - font-size:76%; - margin:0; -} -a:link, a:visited { - text-decoration:none; - color:#4c6b87; -} -a:hover, a:focus { - text-decoration:none; - color:#bb7a2a; -} -a:active { - text-decoration:none; - color:#4c6b87; -} -a[name] { - color:#353833; -} -a[name]:hover { - text-decoration:none; - color:#353833; -} -pre { - font-size:1.3em; -} -h1 { - font-size:1.8em; -} -h2 { - font-size:1.5em; -} -h3 { - font-size:1.4em; -} -h4 { - font-size:1.3em; -} -h5 { - font-size:1.2em; -} -h6 { - font-size:1.1em; -} -ul { - list-style-type:disc; -} -code, tt { - font-size:1.2em; -} -dt code { - font-size:1.2em; -} -table tr td dt code { - font-size:1.2em; - vertical-align:top; -} -sup { - font-size:.6em; -} -/* -Document title and Copyright styles -*/ -.clear { - clear:both; - height:0px; - overflow:hidden; -} -.aboutLanguage { - float:right; - padding:0px 21px; - font-size:.8em; - z-index:200; - margin-top:-7px; -} -.legalCopy { - margin-left:.5em; -} -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color:#FFFFFF; - text-decoration:none; -} -.bar a:hover, .bar a:focus { - color:#bb7a2a; -} -.tab { - background-color:#0066FF; - background-image:url(resources/titlebar.gif); - background-position:left top; - background-repeat:no-repeat; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* -Navigation bar styles -*/ -.bar { - background-image:url(resources/background.gif); - background-repeat:repeat-x; - color:#FFFFFF; - padding:.8em .5em .4em .8em; - height:auto;/*height:1.8em;*/ - font-size:1em; - margin:0; -} -.topNav { - background-image:url(resources/background.gif); - background-repeat:repeat-x; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; -} -.bottomNav { - margin-top:10px; - background-image:url(resources/background.gif); - background-repeat:repeat-x; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; -} -.subNav { - background-color:#dee3e9; - border-bottom:1px solid #9eadc0; - float:left; - width:100%; - overflow:hidden; -} -.subNav div { - clear:left; - float:left; - padding:0 0 5px 6px; -} -ul.navList, ul.subNavList { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.navList li{ - list-style:none; - float:left; - padding:3px 6px; -} -ul.subNavList li{ - list-style:none; - float:left; - font-size:90%; -} -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { - color:#FFFFFF; - text-decoration:none; -} -.topNav a:hover, .bottomNav a:hover { - text-decoration:none; - color:#bb7a2a; -} -.navBarCell1Rev { - background-image:url(resources/tab.gif); - background-color:#a88834; - color:#FFFFFF; - margin: auto 5px; - border:1px solid #c9aa44; -} -/* -Page header and footer styles -*/ -.header, .footer { - clear:both; - margin:0 20px; - padding:5px 0 0 0; -} -.indexHeader { - margin:10px; - position:relative; -} -.indexHeader h1 { - font-size:1.3em; -} -.title { - color:#2c4557; - margin:10px 0; -} -.subTitle { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 25px 0; - padding:0; -} -.footer ul { - margin:20px 0 5px 0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:1.2em; -} -/* -Heading styles -*/ -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color:#dee3e9; - border-top:1px solid #9eadc0; - border-bottom:1px solid #9eadc0; - margin:0 0 6px -8px; - padding:2px 5px; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - background-color:#dee3e9; - border-top:1px solid #9eadc0; - border-bottom:1px solid #9eadc0; - margin:0 0 6px -8px; - padding:2px 5px; -} -ul.blockList ul.blockList li.blockList h3 { - padding:0; - margin:15px 0; -} -ul.blockList li.blockList h2 { - padding:0px 0 20px 0; -} -/* -Page layout container styles -*/ -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { - clear:both; - padding:10px 20px; - position:relative; -} -.indexContainer { - margin:10px; - position:relative; - font-size:1.0em; -} -.indexContainer h2 { - font-size:1.1em; - padding:0 0 3px 0; -} -.indexContainer ul { - margin:0; - padding:0; -} -.indexContainer ul li { - list-style:none; -} -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { - font-size:1.1em; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin:10px 0 10px 20px; -} -.serializedFormContainer dl.nameValue dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -.serializedFormContainer dl.nameValue dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* -List styles -*/ -ul.horizontal li { - display:inline; - font-size:0.9em; -} -ul.inheritance { - margin:0; - padding:0; -} -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; -} -ul.blockList, ul.blockListLast { - margin:10px 0 10px 0; - padding:0; -} -ul.blockList li.blockList, ul.blockListLast li.blockList { - list-style:none; - margin-bottom:25px; -} -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { - padding:0px 20px 5px 10px; - border:1px solid #9eadc0; - background-color:#f9f9f9; -} -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding:0 0 5px 8px; - background-color:#ffffff; - border:1px solid #9eadc0; - border-top:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left:0; - padding-left:0; - padding-bottom:15px; - border:none; - border-bottom:1px solid #9eadc0; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style:none; - border-bottom:none; - padding-bottom:0; -} -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top:0; - margin-bottom:1px; -} -/* -Table styles -*/ -.contentContainer table, .classUseContainer table, .constantValuesContainer table { - border-bottom:1px solid #9eadc0; - width:100%; -} -.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table { - width:100%; -} -.contentContainer .description table, .contentContainer .details table { - border-bottom:none; -} -.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{ - vertical-align:top; - padding-right:20px; -} -.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast, -.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast, -.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne, -.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne { - padding-right:3px; -} -.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#FFFFFF; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0px; - margin:0px; -} -caption a:link, caption a:hover, caption a:active, caption a:visited { - color:#FFFFFF; -} -.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span { - white-space:nowrap; - padding-top:8px; - padding-left:8px; - display:block; - float:left; - background-image:url(resources/titlebar.gif); - height:18px; -} -.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd { - width:10px; - background-image:url(resources/titlebar_end.gif); - background-repeat:no-repeat; - background-position:top right; - position:relative; - float:left; -} -ul.blockList ul.blockList li.blockList table { - margin:0 0 12px 0px; - width:100%; -} -.tableSubHeadingColor { - background-color: #EEEEFF; -} -.altColor { - background-color:#eeeeef; -} -.rowColor { - background-color:#ffffff; -} -.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td { - text-align:left; - padding:3px 3px 3px 7px; -} -th.colFirst, th.colLast, th.colOne, .constantValuesContainer th { - background:#dee3e9; - border-top:1px solid #9eadc0; - border-bottom:1px solid #9eadc0; - text-align:left; - padding:3px 3px 3px 7px; -} -td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { - font-weight:bold; -} -td.colFirst, th.colFirst { - border-left:1px solid #9eadc0; - white-space:nowrap; -} -td.colLast, th.colLast { - border-right:1px solid #9eadc0; -} -td.colOne, th.colOne { - border-right:1px solid #9eadc0; - border-left:1px solid #9eadc0; -} -table.overviewSummary { - padding:0px; - margin-left:0px; -} -table.overviewSummary td.colFirst, table.overviewSummary th.colFirst, -table.overviewSummary td.colOne, table.overviewSummary th.colOne { - width:25%; - vertical-align:middle; -} -table.packageSummary td.colFirst, table.overviewSummary th.colFirst { - width:25%; - vertical-align:middle; -} -/* -Content styles -*/ -.description pre { - margin-top:0; -} -.deprecatedContent { - margin:0; - padding:10px 0; -} -.docSummary { - padding:0; -} -/* -Formatting effect styles -*/ -.sourceLineNo { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:.9em; -} -.block { - display:block; - margin:3px 0 0 0; -} -.strong { - font-weight:bold; -} diff --git a/doc/LambdaJavadoc/typinferenz/Constraint.html b/doc/LambdaJavadoc/typinferenz/Constraint.html deleted file mode 100755 index aa91e70b..00000000 --- a/doc/LambdaJavadoc/typinferenz/Constraint.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - -Constraint - - - - - - - - - - - -
    -
    typinferenz
    -

    Class Constraint

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.Constraint
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      SingleConstraint
      -
      -
      -
      -
      public class Constraint
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - - - - -
        Constructors 
        Constructor and Description
        Constraint() 
        Constraint(Type p1, - Type p2) -
        Erstellt ein neues Oder Constraint und f�gt bereits ein Constraint hinzu.
        -
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddConstraint(Pair toAdd) -
        Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw.
        -
        voidaddOderConstraint(Type p1, - Type p2) -
        F�gt ein Pair(p1, p2) dem Constraint hinzu
        -
        de.dhbwstuttgart.typeinference.Menge<Pair>getConstraintPairs() 
        java.lang.StringtoString() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Constraint

          -
          public Constraint(Type p1,
          -          Type p2)
          -
          Erstellt ein neues Oder Constraint und f�gt bereits ein Constraint hinzu.
          -
          Parameters:
          p1 -
          p2 -
          -
        • -
        - - - -
          -
        • -

          Constraint

          -
          public Constraint()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getConstraintPairs

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> getConstraintPairs()
          -
        • -
        - - - -
          -
        • -

          addOderConstraint

          -
          public void addOderConstraint(Type p1,
          -                     Type p2)
          -
          F�gt ein Pair(p1, p2) dem Constraint hinzu
          -
          Parameters:
          p1 -
          p2 -
          -
        • -
        - - - -
          -
        • -

          addConstraint

          -
          public void addConstraint(Pair toAdd)
          -
          Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw. TypePlaceholder sind, so werden sie in einen RefType umgewandelt.
          -
          Parameters:
          toAdd -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/ConstraintsSet.html b/doc/LambdaJavadoc/typinferenz/ConstraintsSet.html deleted file mode 100755 index ff8428c0..00000000 --- a/doc/LambdaJavadoc/typinferenz/ConstraintsSet.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - -ConstraintsSet - - - - - - - - - - - -
    -
    typinferenz
    -

    Class ConstraintsSet

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.ConstraintsSet
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<Constraint>
      -
      -
      -
      -
      public class ConstraintsSet
      -extends java.lang.Object
      -implements java.lang.Iterable<Constraint>
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ConstraintsSet() 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidadd(Constraint constraint) 
        voidadd(ConstraintsSet CSet) 
        de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>getConstraints() -
        Liefert alle Constraintsvariationen, allerdings in Form von Pair's.
        -
        java.util.Iterator<Constraint>iterator() 
        java.lang.StringtoString() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ConstraintsSet

          -
          public ConstraintsSet()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          add

          -
          public void add(Constraint constraint)
          -
        • -
        - - - -
          -
        • -

          getConstraints

          -
          public de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> getConstraints()
          -
          Liefert alle Constraintsvariationen, allerdings in Form von Pair's.
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          iterator

          -
          public java.util.Iterator<Constraint> iterator()
          -
          -
          Specified by:
          -
          iterator in interface java.lang.Iterable<Constraint>
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/FreshTypeVariable.html b/doc/LambdaJavadoc/typinferenz/FreshTypeVariable.html deleted file mode 100755 index 6a9d5574..00000000 --- a/doc/LambdaJavadoc/typinferenz/FreshTypeVariable.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - -FreshTypeVariable - - - - - - - - - - - -
    -
    typinferenz
    -

    Class FreshTypeVariable

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      IItemWithOffset
      -
      -
      -
      -
      public class FreshTypeVariable
      -extends Type
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FreshTypeVariable

          -
          public FreshTypeVariable(int offset)
          -
        • -
        - - - -
          -
        • -

          FreshTypeVariable

          -
          public FreshTypeVariable(java.lang.String hint)
          -
          Aufruf f�r Debug-Zwecke.
          -
          Parameters:
          hint - - Eine Message die von der toString - Methode ausgegeben wird.
          -
        • -
        - - - -
          -
        • -

          FreshTypeVariable

          -
          public FreshTypeVariable()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          Description copied from class: Type
          -

          Author: J�rg B�uerle
          -
          -
          Overrides:
          -
          toString in class Type
          -
          -
        • -
        - - - -
          -
        • -

          printJavaCode

          -
          public java.lang.String printJavaCode(ResultSet resultSet)
          -
          -
          Overrides:
          -
          printJavaCode in class Type
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/FunN.html b/doc/LambdaJavadoc/typinferenz/FunN.html deleted file mode 100755 index 1e993189..00000000 --- a/doc/LambdaJavadoc/typinferenz/FunN.html +++ /dev/null @@ -1,395 +0,0 @@ - - - - - -FunN - - - - - - - - - - - -
    -
    typinferenz
    -

    Class FunN

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          FunN

          -
          public FunN(Type R,
          -    de.dhbwstuttgart.typeinference.Menge<Type> T)
          -
          Parameters:
          R -
          T -
          -
        • -
        - - - -
          -
        • -

          FunN

          -
          public FunN(int parameterCount)
          -
          Erstellt eine FunN: - FunN - R und T1 - TparameterCount werden mit TypePlaceholdern besetzt.
          -
          Parameters:
          parameterCount -
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          getTypeLineNumber

          -
          public int getTypeLineNumber()
          -
          Description copied from interface: ITypeReplacementListener
          -
          Gibt die Zeilennummer zur�ck, in der eine TypePlaceholder - angelegt worden ist. -
          Author: J�rg B�uerle
          -
          -
          Specified by:
          -
          getTypeLineNumber in interface ITypeReplacementListener
          -
          Returns:
          Die Zeilennummer
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          clone

          -
          public RefType clone()
          -
          Ein �berschreiben der clone-Methode ist notwendig, da sonst beim Unify-Algorithmus die Clone-Methode der Superklasse "RefType" ausgef�hrt wird.
          -
          -
          Overrides:
          -
          clone in class RefType
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/KarthesischesProdukt.html b/doc/LambdaJavadoc/typinferenz/KarthesischesProdukt.html deleted file mode 100755 index c33eafac..00000000 --- a/doc/LambdaJavadoc/typinferenz/KarthesischesProdukt.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - -KarthesischesProdukt - - - - - - - - - - - -
    -
    typinferenz
    -

    Class KarthesischesProdukt<M>

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.KarthesischesProdukt<M>
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class KarthesischesProdukt<M>
      -extends java.lang.Object
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<M>>berechneKarthesischesProdukt(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<M>> m1) 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          KarthesischesProdukt

          -
          public KarthesischesProdukt()
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          berechneKarthesischesProdukt

          -
          public de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<M>> berechneKarthesischesProdukt(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<M>> m1)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/Overloading.html b/doc/LambdaJavadoc/typinferenz/Overloading.html deleted file mode 100755 index 0a02f17e..00000000 --- a/doc/LambdaJavadoc/typinferenz/Overloading.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - -Overloading - - - - - - - - - - - -
    -
    typinferenz
    -

    Class Overloading

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.Overloading
      • -
      -
    • -
    -
    -
      -
    • -
      -
      -
      public class Overloading
      -extends java.lang.Object
      -
      Author:
      -
      Andreas Stadelmeier, a10023
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        ConstraintgenerateConsstraints() -
        Vereinfachte Version von Overloading...
        -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Overloading

          -
          public Overloading(TypeAssumptions ass,
          -           MethodCall method,
          -           Type type)
          -
          methodCall : type
          -
          Parameters:
          ass -
          method -
          type - - eine Type-Assumption/oder Type f�r den R�ckgabetyp des MethodCall
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          generateConsstraints

          -
          public Constraint generateConsstraints()
          -
          Vereinfachte Version von Overloading... - Es darf nur die erste gefundene Assumption verwendet werden, sonst widerspr�chliche constraints - - Spezifikation: - overloading determines for all possible overloadings and overridings - of a method the constraints, where constraints itself forms - the constraints from the receiver type, the argument types, the return - type and a given type assumption for the method. If it is a - method from a class, which is not the actual class (this), all type - variables are replaced by fresh type variables (fresh), as different - instances can occur. sargs determines all type assumptions of a - method, where the argument types are supertypes of a minimal type - assumption.
          -
          Returns:
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/ResultSet.html b/doc/LambdaJavadoc/typinferenz/ResultSet.html deleted file mode 100755 index 0ab5a88f..00000000 --- a/doc/LambdaJavadoc/typinferenz/ResultSet.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - -ResultSet - - - - - - - - - - - -
    -
    typinferenz
    -

    Class ResultSet

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.ResultSet
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<Pair>
      -
      -
      -
      -
      public class ResultSet
      -extends java.lang.Object
      -implements java.lang.Iterable<Pair>
      -
      Im Grunde Sammlung von Pair s mit Equal-Operatoren.
      -
      Author:
      -
      Andreas Stadelmeier, a10023
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        ResultSet(de.dhbwstuttgart.typeinference.Menge<Pair> resultSet) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        booleancontains(Type tA1) -
        Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ.
        -
        de.dhbwstuttgart.typeinference.Menge<Pair>getResultSet() 
        TypegetTypeEqualTo(Type type) -
        L�st den �bergebenen Typ auf.
        -
        java.util.Iterator<Pair>iterator() 
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ResultSet

          -
          public ResultSet(de.dhbwstuttgart.typeinference.Menge<Pair> resultSet)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getResultSet

          -
          public de.dhbwstuttgart.typeinference.Menge<Pair> getResultSet()
          -
        • -
        - - - -
          -
        • -

          getTypeEqualTo

          -
          public Type getTypeEqualTo(Type type)
          -
          L�st den �bergebenen Typ auf. R�ckgabetyp ist ein Reftype oder Void
          -
          Parameters:
          type -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          iterator

          -
          public java.util.Iterator<Pair> iterator()
          -
          -
          Specified by:
          -
          iterator in interface java.lang.Iterable<Pair>
          -
          -
        • -
        - - - -
          -
        • -

          contains

          -
          public boolean contains(Type tA1)
          -
          Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgel�st. - Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht.
          -
          Parameters:
          tA1 -
          -
          Returns:
          true, falls der gesuchte Typ enthalten ist.
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/SingleConstraint.html b/doc/LambdaJavadoc/typinferenz/SingleConstraint.html deleted file mode 100755 index deb16936..00000000 --- a/doc/LambdaJavadoc/typinferenz/SingleConstraint.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - -SingleConstraint - - - - - - - - - - - -
    -
    typinferenz
    -

    Class SingleConstraint

    -
    -
    - -
    -
      -
    • -
      -
      -
      public class SingleConstraint
      -extends Constraint
      -
      Beschreibung von Herrn Plümicke: - "The set of constraints consists of constraints of the form θ R θ' , where θ and - θ' are Java types and R (R ∈ { < , -
      Author:
      -
      AI10023 - Andreas Stadelmeier - - Die Klasse stellt ein OderConstraint-Set dar, welches nur aus einem Constraint besteht.
      -
    • -
    -
    -
    -
      -
    • - - - -
        -
      • - - -

        Method Summary

        - - - - - - - - - - - - - - - - - - -
        Methods 
        Modifier and TypeMethod and Description
        voidaddConstraint(Pair toAdd) -
        Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw.
        -
        PairgetPair() 
        java.lang.StringtoString() 
        - -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          SingleConstraint

          -
          public SingleConstraint(Type p1,
          -                Type p2)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getPair

          -
          public Pair getPair()
          -
        • -
        - - - -
          -
        • -

          addConstraint

          -
          public void addConstraint(Pair toAdd)
          -
          Description copied from class: Constraint
          -
          Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw. TypePlaceholder sind, so werden sie in einen RefType umgewandelt.
          -
          -
          Overrides:
          -
          addConstraint in class Constraint
          -
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class Constraint
          -
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/Typable.html b/doc/LambdaJavadoc/typinferenz/Typable.html deleted file mode 100755 index d94c5c0f..00000000 --- a/doc/LambdaJavadoc/typinferenz/Typable.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -Typable - - - - - - - - - - - -
    -
    typinferenz
    -

    Interface Typable

    -
    -
    - -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setTypeVariable

          -
          void setTypeVariable(Type typ)
          -
          Parameters:
          typ - Der Typ der Typable-Expression/Statement
          -
        • -
        - - - -
          -
        • -

          getTypeVariable

          -
          Type getTypeVariable()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/TypeAssumptions.html b/doc/LambdaJavadoc/typinferenz/TypeAssumptions.html deleted file mode 100755 index 230c511b..00000000 --- a/doc/LambdaJavadoc/typinferenz/TypeAssumptions.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - -TypeAssumptions - - - - - - - - - - - -
    -
    typinferenz
    -

    Class TypeAssumptions

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • typinferenz.TypeAssumptions
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.lang.Iterable<CTypeAssumption>
      -
      -
      -
      -
      public class TypeAssumptions
      -extends java.lang.Object
      -implements java.lang.Iterable<CTypeAssumption>
      -
      Eine Sammlung von TypeAssumptions. - Jede Expression und jedes Statement erh�lt beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter �bergeben.
      -
      Author:
      -
      janulrich
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TypeAssumptions

          -
          public TypeAssumptions()
          -
        • -
        - - - -
          -
        • -

          TypeAssumptions

          -
          public TypeAssumptions(java.lang.String klassenname)
          -
          Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
          -
          Parameters:
          klassenname - - Wert f�r "this"
          -
        • -
        - - - -
          -
        • -

          TypeAssumptions

          -
          public TypeAssumptions(CTypeAssumptionSet ass,
          -               java.lang.String classname)
          -
        • -
        - - - -
          -
        • -

          TypeAssumptions

          -
          public TypeAssumptions(TypeAssumptions assumptions2)
          -
        • -
        -
      • -
      - -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setThisClassname

          -
          public void setThisClassname(java.lang.String name)
          -
          Im AssumptionSet muss je nach Umfeld der Wert von "this" neu gesetzt werden. - Dies �bernimmt diese Funktion.
          -
          Parameters:
          name - - Der Klassenname der von this referenzierten Klasse.
          -
        • -
        - - - -
          -
        • -

          addInstVarAssumption

          -
          public void addInstVarAssumption(java.lang.String className,
          -                        java.lang.String identifier,
          -                        Type assumedType)
          -
          Erstellt eine CInstVarTypeAssumption und f�gt sie den Assumptions hinzu.
          -
          Parameters:
          className -
          identifier -
          assumedType -
          -
        • -
        - - - -
          -
        • -

          addMethodAssumption

          -
          public void addMethodAssumption(Type classType,
          -                       java.lang.String identifier,
          -                       Type assumedType,
          -                       de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> parameterTypes)
          -
          Ruft createMethodAssumption auf und f�gt die Assumption dem AssumptionSet hinzu
          -
          Parameters:
          classType -
          identifier -
          assumedType -
          parameterTypes -
          -
        • -
        - - - -
          -
        • -

          createMethodAssumption

          -
          public static CMethodTypeAssumption createMethodAssumption(Type classType,
          -                                           java.lang.String identifier,
          -                                           Type assumedType,
          -                                           de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> parameterTypes)
          -
          Parameters:
          className -
          identifier -
          assumedType - - ReturnTyp der Methode
          parameterTypes - - Liste der Parameter der Methode. TIPP: Zur Erstellung der CParaTypeAssumption-Liste kann die Methode TypeAssumptions.createCParaTypeAssumption verwendert werden.
          -
        • -
        - - - -
          -
        • -

          createFieldVarAssumption

          -
          public static CInstVarTypeAssumption createFieldVarAssumption(java.lang.String className,
          -                                              java.lang.String fieldName,
          -                                              Type type)
          -
        • -
        - - - -
          -
        • -

          createCParaTypeAssumption

          -
          public static CParaTypeAssumption createCParaTypeAssumption(java.lang.String identifier,
          -                                            Type assumedType)
          -
          Erstellt eine CParaTypeAssumption. - Diese enth�lt nur den Identifier und den Typ des Parameters. Die Zuordnung zu einer Methode und einer Klasse erh�lt die Assumption erst durch den Einsatz in der TypeAssumptions.addMethodAssumption.
          -
          Parameters:
          identifier -
          assumedType -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          addLocalVarAssumption

          -
          public void addLocalVarAssumption()
          -
        • -
        - - - -
          -
        • -

          getVarType

          -
          public Type getVarType(java.lang.String variableName)
          -
          Durchsucht die Assumptions des aktuellen G�ltigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag f�r den �bergebenen Variablennamen. - In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem �bergebenen Variablennamen gesucht.
          -
          Parameters:
          variableName - - der Identifier der gesuchten Variablen
          -
          Returns:
          - Der Typ f�r diesen Identifier.
          -
        • -
        - - - -
          -
        • -

          getInstVarAssumptions

          -
          public TypeAssumptions getInstVarAssumptions()
          -
          Ermittelt alle Assumptions zu Instanzvariablen, welche sich in der Klasse "this" befinden, also der Klasse f�r welche dieses AssumptionSet g�ltig ist.
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getMethodAssumptions

          -
          public de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodAssumptions(java.lang.String className,
          -                                                           java.lang.String methodName)
          -
          Sucht nach MethodAssumptions einer bestimmten Klasse mit einem bestimmten Namen.
          -
          Parameters:
          className -
          methodName -
          parameterCount -
          -
          Returns:
          -
        • -
        - - - -
          -
        • -

          getMethodAssumptions

          -
          public de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodAssumptions(java.lang.String methodName,
          -                                                           int parameterCount)
          -
          Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
          -
          Parameters:
          methodName -
          parameterCount - Anzahl der Parameter der gesuchten Methoden-Assumption
          -
          Returns:
          -
        • -
        - - - - - - - - - - - - - - - - - - - -
          -
        • -

          iterator

          -
          public java.util.Iterator<CTypeAssumption> iterator()
          -
          -
          Specified by:
          -
          iterator in interface java.lang.Iterable<CTypeAssumption>
          -
          -
        • -
        - - - -
          -
        • -

          clone

          -
          public TypeAssumptions clone()
          -
          -
          Overrides:
          -
          clone in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          getAssumptionsFor

          -
          public TypeAssumptions getAssumptionsFor(java.lang.String classname)
          -
          Jede erstellte Assumption wird von der TypeAssumptions-Klasse gespeichert. - Diese Funktion ermittelt alle zu einer Klasse geh�renden Assumptions.
          -
          Parameters:
          classname -
          -
          Returns:
          Alle Assumptions mit - assumption.getClassname().equals(classname) - der this-Wert ist auf "classname" gesetzt.
          -
        • -
        - - - -
          -
        • -

          toString

          -
          public java.lang.String toString()
          -
          -
          Overrides:
          -
          toString in class java.lang.Object
          -
          -
        • -
        - - - -
          -
        • -

          getThisValue

          -
          public Type getThisValue()
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/TypinferenzException.html b/doc/LambdaJavadoc/typinferenz/TypinferenzException.html deleted file mode 100755 index 8011597b..00000000 --- a/doc/LambdaJavadoc/typinferenz/TypinferenzException.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - -TypinferenzException - - - - - - - - - - - -
    -
    typinferenz
    -

    Class TypinferenzException

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • java.lang.Throwable
      • -
      • -
          -
        • java.lang.Exception
        • -
        • -
            -
          • java.lang.RuntimeException
          • -
          • -
              -
            • typinferenz.TypinferenzException
            • -
            -
          • -
          -
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      java.io.Serializable
      -
      -
      -
      -
      public class TypinferenzException
      -extends java.lang.RuntimeException
      -
      Eine RuntimeException, welche bei einem Fehler w�hrend des Typinferenzalgorithmus ausgel�st wird. - Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgel�st.
      -
      Author:
      -
      Andreas Stadelmeier, a10023
      -
      See Also:
      Serialized Form
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Summary

        - - - - - - - - -
        Constructors 
        Constructor and Description
        TypinferenzException(java.lang.String message) 
        -
      • -
      - -
        -
      • - - -

        Method Summary

        -
          -
        • - - -

          Methods inherited from class java.lang.Throwable

          -addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • -
        -
          -
        • - - -

          Methods inherited from class java.lang.Object

          -equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • -
        -
      • -
      -
    • -
    -
    -
    -
      -
    • - -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TypinferenzException

          -
          public TypinferenzException(java.lang.String message)
          -
        • -
        -
      • -
      -
    • -
    -
    -
    - - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/Constraint.html b/doc/LambdaJavadoc/typinferenz/class-use/Constraint.html deleted file mode 100755 index 3fa461d8..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/Constraint.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -Uses of Class typinferenz.Constraint - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.Constraint

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/ConstraintsSet.html b/doc/LambdaJavadoc/typinferenz/class-use/ConstraintsSet.html deleted file mode 100755 index 3a9e46b6..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/ConstraintsSet.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - -Uses of Class typinferenz.ConstraintsSet - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.ConstraintsSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/FreshTypeVariable.html b/doc/LambdaJavadoc/typinferenz/class-use/FreshTypeVariable.html deleted file mode 100755 index c917616b..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/FreshTypeVariable.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.FreshTypeVariable - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.FreshTypeVariable

    -
    -
    No usage of typinferenz.FreshTypeVariable
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/FunN.html b/doc/LambdaJavadoc/typinferenz/class-use/FunN.html deleted file mode 100755 index fec5f8da..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/FunN.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.FunN - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.FunN

    -
    -
    No usage of typinferenz.FunN
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/KarthesischesProdukt.html b/doc/LambdaJavadoc/typinferenz/class-use/KarthesischesProdukt.html deleted file mode 100755 index c538de14..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/KarthesischesProdukt.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.KarthesischesProdukt - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.KarthesischesProdukt

    -
    -
    No usage of typinferenz.KarthesischesProdukt
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/Overloading.html b/doc/LambdaJavadoc/typinferenz/class-use/Overloading.html deleted file mode 100755 index 46637c50..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/Overloading.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.Overloading - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.Overloading

    -
    -
    No usage of typinferenz.Overloading
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/ResultSet.html b/doc/LambdaJavadoc/typinferenz/class-use/ResultSet.html deleted file mode 100755 index b90b526a..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/ResultSet.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - -Uses of Class typinferenz.ResultSet - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.ResultSet

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/SingleConstraint.html b/doc/LambdaJavadoc/typinferenz/class-use/SingleConstraint.html deleted file mode 100755 index 360edef7..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/SingleConstraint.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.SingleConstraint - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.SingleConstraint

    -
    -
    No usage of typinferenz.SingleConstraint
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/Typable.html b/doc/LambdaJavadoc/typinferenz/class-use/Typable.html deleted file mode 100755 index 0a5641af..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/Typable.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -Uses of Interface typinferenz.Typable - - - - - - - - - - -
    -

    Uses of Interface
    typinferenz.Typable

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/TypeAssumptions.html b/doc/LambdaJavadoc/typinferenz/class-use/TypeAssumptions.html deleted file mode 100755 index 23ce1dfd..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/TypeAssumptions.html +++ /dev/null @@ -1,489 +0,0 @@ - - - - - -Uses of Class typinferenz.TypeAssumptions - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.TypeAssumptions

    -
    -
    - -
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/class-use/TypinferenzException.html b/doc/LambdaJavadoc/typinferenz/class-use/TypinferenzException.html deleted file mode 100755 index ad8806a5..00000000 --- a/doc/LambdaJavadoc/typinferenz/class-use/TypinferenzException.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Uses of Class typinferenz.TypinferenzException - - - - - - - - - - -
    -

    Uses of Class
    typinferenz.TypinferenzException

    -
    -
    No usage of typinferenz.TypinferenzException
    - - - - - - diff --git a/doc/LambdaJavadoc/typinferenz/package-frame.html b/doc/LambdaJavadoc/typinferenz/package-frame.html deleted file mode 100755 index 734d3c41..00000000 --- a/doc/LambdaJavadoc/typinferenz/package-frame.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -typinferenz - - - - -

    typinferenz

    - - - diff --git a/doc/LambdaJavadoc/typinferenz/package-summary.html b/doc/LambdaJavadoc/typinferenz/package-summary.html deleted file mode 100755 index adeb52e9..00000000 --- a/doc/LambdaJavadoc/typinferenz/package-summary.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - -typinferenz - - - - - - - -
    - - - - - -
    - - -
    -

    Package typinferenz

    -
    -
    -
      -
    • - - - - - - - - - - - - -
      Interface Summary 
      InterfaceDescription
      Typable 
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      Constraint 
      ConstraintsSet 
      FreshTypeVariable 
      FunN 
      KarthesischesProdukt<M> 
      Overloading 
      ResultSet -
      Im Grunde Sammlung von Pair s mit Equal-Operatoren.
      -
      SingleConstraint -
      Beschreibung von Herrn Plümicke: - "The set of constraints consists of constraints of the form θ R θ' , where θ and - θ' are Java types and R (R ∈ { < , -
      TypeAssumptions -
      Eine Sammlung von TypeAssumptions.
      -
      -
    • -
    • - - - - - - - - - - - - -
      Exception Summary 
      ExceptionDescription
      TypinferenzException -
      Eine RuntimeException, welche bei einem Fehler w�hrend des Typinferenzalgorithmus ausgel�st wird.
      -
      -
    • -
    -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/typinferenz/package-tree.html b/doc/LambdaJavadoc/typinferenz/package-tree.html deleted file mode 100755 index 3edf7bf1..00000000 --- a/doc/LambdaJavadoc/typinferenz/package-tree.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - -typinferenz Class Hierarchy - - - - - - - -
    - - - - - -
    - - -
    -

    Hierarchy For Package typinferenz

    -Package Hierarchies: - -
    -
    -

    Class Hierarchy

    - -

    Interface Hierarchy

    - -
    - -
    - - - - - -
    - - - - diff --git a/doc/LambdaJavadoc/typinferenz/package-use.html b/doc/LambdaJavadoc/typinferenz/package-use.html deleted file mode 100755 index e4cfb70d..00000000 --- a/doc/LambdaJavadoc/typinferenz/package-use.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - -Uses of Package typinferenz - - - - - - - - - - -
    -

    Uses of Package
    typinferenz

    -
    -
    - -
    - - - - - - From ae40372a8b59e2d34f0eae27c1565f8d7d82e2cc Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 12 May 2015 14:57:12 +0200 Subject: [PATCH 087/186] =?UTF-8?q?Encoding=20auf=20UTF-8=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/bytecode/ClassFile.java | 16 +- .../dhbwstuttgart/bytecode/CodeAttribute.java | 2 +- src/de/dhbwstuttgart/bytecode/JVMCode.java | 2 +- .../dhbwstuttgart/core/ConsoleInterface.java | 6 +- src/de/dhbwstuttgart/core/MyCompiler.java | 86 ++++---- src/de/dhbwstuttgart/core/MyCompilerAPI.java | 22 +- src/de/dhbwstuttgart/logger/Logger.java | 8 +- .../logger/LoggerConfiguration.java | 2 +- .../dhbwstuttgart/logger/SectionLogger.java | 2 +- .../CTypeReconstructionException.java | 2 +- .../dhbwstuttgart/parser/JavaClassName.java | 2 +- src/de/dhbwstuttgart/parser/JavaLexer.java | 2 +- src/de/dhbwstuttgart/parser/JavaParser.java | 24 +-- src/de/dhbwstuttgart/parser/Token.java | 6 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 134 ++++++------ .../dhbwstuttgart/syntaxtree/ClassBody.java | 8 +- .../dhbwstuttgart/syntaxtree/ClassHelper.java | 4 +- src/de/dhbwstuttgart/syntaxtree/Field.java | 6 +- .../syntaxtree/FieldDeclaration.java | 14 +- .../syntaxtree/FormalParameter.java | 8 +- src/de/dhbwstuttgart/syntaxtree/Generic.java | 2 +- .../syntaxtree/ImportDeclarations.java | 2 +- src/de/dhbwstuttgart/syntaxtree/Method.java | 32 +-- .../syntaxtree/ParameterList.java | 4 +- .../dhbwstuttgart/syntaxtree/SourceFile.java | 132 ++++++------ .../syntaxtree/SyntaxTreeNode.java | 16 +- .../dhbwstuttgart/syntaxtree/misc/DeclId.java | 10 +- .../dhbwstuttgart/syntaxtree/misc/UsedId.java | 10 +- .../syntaxtree/statement/Assign.java | 2 +- .../syntaxtree/statement/Binary.java | 4 +- .../syntaxtree/statement/Block.java | 8 +- .../syntaxtree/statement/DoubleLiteral.java | 4 +- .../syntaxtree/statement/Expr.java | 6 +- .../syntaxtree/statement/ExprStmt.java | 2 +- .../syntaxtree/statement/FloatLiteral.java | 4 +- .../syntaxtree/statement/IfStmt.java | 16 +- .../syntaxtree/statement/InstVar.java | 4 +- .../syntaxtree/statement/IntLiteral.java | 4 +- .../statement/LambdaExpression.java | 14 +- .../syntaxtree/statement/LocalOrFieldVar.java | 4 +- .../syntaxtree/statement/LocalVarDecl.java | 12 +- .../syntaxtree/statement/LongLiteral.java | 4 +- .../syntaxtree/statement/MethodCall.java | 28 +-- .../syntaxtree/statement/NewArray.java | 4 +- .../syntaxtree/statement/NewClass.java | 6 +- .../syntaxtree/statement/Receiver.java | 4 +- .../syntaxtree/statement/Statement.java | 6 +- .../syntaxtree/statement/SuperCall.java | 2 +- .../syntaxtree/statement/This.java | 2 +- .../syntaxtree/statement/ThisCall.java | 2 +- .../syntaxtree/statement/WhileStmt.java | 2 +- .../syntaxtree/type/BaseType.java | 4 +- .../syntaxtree/type/BooleanType.java | 4 +- .../type/BoundedGenericTypeVar.java | 2 +- .../syntaxtree/type/CharacterType.java | 4 +- .../syntaxtree/type/DoubleType.java | 4 +- .../syntaxtree/type/ExtendsWildcardType.java | 42 ++-- .../syntaxtree/type/FloatType.java | 4 +- .../type/FreshExtendsWildcardType.java | 36 ++-- .../type/FreshSuperWildcardType.java | 36 ++-- .../syntaxtree/type/FreshWildcardType.java | 48 ++--- .../syntaxtree/type/GenericTypeVar.java | 20 +- .../syntaxtree/type/IMatchable.java | 10 +- .../syntaxtree/type/ITypeContainer.java | 6 +- .../syntaxtree/type/IntegerType.java | 4 +- .../syntaxtree/type/LongType.java | 4 +- .../syntaxtree/type/RefType.java | 22 +- .../syntaxtree/type/ReturnType.java | 4 +- .../syntaxtree/type/SuperWildcardType.java | 40 ++-- .../dhbwstuttgart/syntaxtree/type/Type.java | 16 +- .../syntaxtree/type/TypePlaceholder.java | 88 ++++---- .../dhbwstuttgart/syntaxtree/type/Void.java | 6 +- .../syntaxtree/type/WildcardType.java | 24 +-- src/de/dhbwstuttgart/typeinference/FunN.java | 10 +- .../typeinference/FunNInterface.java | 6 +- .../typeinference/FunNMethod.java | 6 +- .../typeinference/JavaCodeResult.java | 4 +- .../typeinference/KarthesischesProdukt.java | 8 +- .../typeinference/OderConstraint.java | 8 +- src/de/dhbwstuttgart/typeinference/Pair.java | 30 +-- .../typeinference/ResultSet.java | 8 +- .../typeinference/SingleConstraint.java | 16 +- .../typeinference/TypeInsertable.java | 6 +- .../dhbwstuttgart/typeinference/Typeable.java | 2 +- .../typeinference/TypeinferenceResultSet.java | 28 +-- .../typeinference/UndConstraint.java | 2 +- .../dhbwstuttgart/typeinference/UndMenge.java | 2 +- .../typeinference/assumptions/Assumption.java | 2 +- .../assumptions/ParameterAssumption.java | 2 +- .../assumptions/TypeAssumptions.java | 46 ++--- .../exceptions/TypeinferenceException.java | 4 +- .../GenericTypeInsertPoint.java | 20 +- .../typedeployment/TypeInsertPoint.java | 8 +- .../typedeployment/TypeInsertSet.java | 26 +-- .../typeinference/unify/CSubstitution.java | 18 +- .../unify/CSubstitutionGenVar.java | 4 +- .../typeinference/unify/CSubstitutionSet.java | 4 +- .../typeinference/unify/CVectorSet.java | 10 +- .../typeinference/unify/FC_TTO.java | 4 +- .../typeinference/unify/Unify.java | 192 +++++++++--------- 100 files changed, 806 insertions(+), 806 deletions(-) diff --git a/src/de/dhbwstuttgart/bytecode/ClassFile.java b/src/de/dhbwstuttgart/bytecode/ClassFile.java index e4f0144c..2ace9462 100755 --- a/src/de/dhbwstuttgart/bytecode/ClassFile.java +++ b/src/de/dhbwstuttgart/bytecode/ClassFile.java @@ -48,7 +48,7 @@ public class ClassFile // ino.end // ino.class.ClassFile.21492.body { - public boolean hamaAload0 = false; //hama: f�gt in Konstruktor und set Methode ein aload_0 ein wird f�r StoreSomethingParmCon ben�tigt + public boolean hamaAload0 = false; //hama: f�gt in Konstruktor und set Methode ein aload_0 ein wird f�r StoreSomethingParmCon ben�tigt // ino.attribute.codegenlog.21495.decldescription type=line // Logger fuer Code-Gen @@ -391,15 +391,15 @@ public class ClassFile //aload_0 zuwening im Konstruktor erzeugt. Deshalb schreibe ich //es hier hard rein. //Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist - //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case - //in allen anderen F�llen wird f�lschlicher Weise das aload_0 einef�gt. + //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case + //in allen anderen F�llen wird f�lschlicher Weise das aload_0 einef�gt. if(this.hamaAload0 == true) { byte b2 = 42; Byte b1 = new Byte(b2); code.add_code(b1); - codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in Konstrukor eingef�gt!!!"); + codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in Konstrukor eingef�gt!!!"); } //hama: bis hier experimentell if(block != null) @@ -418,9 +418,9 @@ public class ClassFile //aload_0 zuwening in der set Methode erzeugt. Deshalb schreibe ich //es hier hard rein. //Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist - //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case - //in allen anderen F�llen einer Set Methode wird f�lschlicher Weise das - //aload_0 einef�gt. + //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case + //in allen anderen F�llen einer Set Methode wird f�lschlicher Weise das + //aload_0 einef�gt. if(this.hamaAload0 == true) { if(name.equals("set")) @@ -429,7 +429,7 @@ public class ClassFile Byte b1 = new Byte(b2); code.add_code(b1); - codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in die set Methode eingef�gt!!!"); + codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in die set Methode eingef�gt!!!"); } } //hama: bis hier experimentell. diff --git a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java index 47fee80c..8cff67c4 100755 --- a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java +++ b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java @@ -1,5 +1,5 @@ //PL 14-03-21: calculate_max_stack() duerfte nicht stimmen -//vorübergehend max_stack und set_max_stack eingeführt +//vorübergehend max_stack und set_max_stack eingeführt //in codegen "short max_stack = calculate_max_stack();" auskommentiert //muss wieder einkommentiert werden diff --git a/src/de/dhbwstuttgart/bytecode/JVMCode.java b/src/de/dhbwstuttgart/bytecode/JVMCode.java index 6dbeb2f5..a1df3da4 100755 --- a/src/de/dhbwstuttgart/bytecode/JVMCode.java +++ b/src/de/dhbwstuttgart/bytecode/JVMCode.java @@ -1083,7 +1083,7 @@ public class JVMCode String type_neu = ((GenericTypeVar)paralist.elementAt(i)).getName(); if(type_neu.equals(type)) { - codegenlog.debug("Typ wurde auf java.lang.Object geändert! (da Typparameter)"); + codegenlog.debug("Typ wurde auf java.lang.Object geändert! (da Typparameter)"); type = "Object"; } } diff --git a/src/de/dhbwstuttgart/core/ConsoleInterface.java b/src/de/dhbwstuttgart/core/ConsoleInterface.java index fff92abf..83b4f7e7 100755 --- a/src/de/dhbwstuttgart/core/ConsoleInterface.java +++ b/src/de/dhbwstuttgart/core/ConsoleInterface.java @@ -20,7 +20,7 @@ public class ConsoleInterface { for(String file : args){ filenames.add(file); } - Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken + Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken run(filenames); } @@ -47,7 +47,7 @@ public class ConsoleInterface { /////////////////////// // Ausgabe: /////////////////////// - if(resultSet == null)System.out.println("Keine Lösung!"); + if(resultSet == null)System.out.println("Keine Lösung!"); ArrayList resultJavaCodes = new ArrayList(); for(TypeinferenceResultSet result : resultSet){ String javaCode = result.getInterferedClass().printJavaCode(result); @@ -55,7 +55,7 @@ public class ConsoleInterface { } for(String out : resultJavaCodes){ - System.out.println("\nMögliche Typisierung:\n\n"); + System.out.println("\nMögliche Typisierung:\n\n"); System.out.println(out); } }catch(Exception e){ diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index bd7fe90d..3866e2aa 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -83,7 +83,7 @@ public class MyCompiler implements MyCompilerAPI // ino.attribute.m_AbstractSyntaxTree.21280.decldescription type=javadoc /** * Der abstrake Syntaxbaum - *
    Autor: J�rg B�uerle + *
    Autor: J�rg B�uerle */ // ino.end // ino.attribute.m_AbstractSyntaxTree.21280.declaration @@ -92,10 +92,10 @@ public class MyCompiler implements MyCompilerAPI // ino.method.MyCompiler.21283.defdescription type=javadoc /** - * Author: J�rg B�uerle
    - * Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden - * k�nnen, sondern nur eine API zur Verf�gung gestellt werden. - * @param logger Konfiguration für Debug Ausgabe TODO + * Author: J�rg B�uerle
    + * Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden + * k�nnen, sondern nur eine API zur Verf�gung gestellt werden. + * @param logger Konfiguration für Debug Ausgabe TODO */ // ino.end // ino.method.MyCompiler.21283.definition @@ -109,8 +109,8 @@ public class MyCompiler implements MyCompilerAPI // ino.method.getAPI.21286.defdescription type=javadoc /** - * Author: J�rg B�uerle
    - * Stellt eine neue Instanz der CompilerAPI zur Verf�gung. + * Author: J�rg B�uerle
    + * Stellt eine neue Instanz der CompilerAPI zur Verf�gung. * Diese Methode sollte von der IDE aus aufgerufen werden, * um eine Quellcode-Datei zu kompilieren. * @return Die Compiler-API @@ -132,8 +132,8 @@ public class MyCompiler implements MyCompilerAPI /** * Author: Thomas Ott
    * Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen - * GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t. - * Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine + * GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t. + * Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine * RefTypes. Dies wird durch diese Methode nachgeholt.
    * Bsp.: class JoergsTolleKlasse extends MartinsSuperklasse *
    Wie man an diesem Beispiel sieht, kann nur eine Superklasse instantiierte @@ -153,7 +153,7 @@ public class MyCompiler implements MyCompilerAPI //wandleGeneric2RefType SOLLTE NICHT NUR FUER LISTEN //VON TYPEN FUNKTIONIEREN PL 05-01-19 // otth: GenericTypeVar in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln, - // falls: f�r GenericTypeVar existiert eine gleichnamige Klasse + // falls: f�r GenericTypeVar existiert eine gleichnamige Klasse if(Parameter == null) return; for( int i = 0; i < Parameter.size(); i++) @@ -165,7 +165,7 @@ public class MyCompiler implements MyCompilerAPI if ( TempParameter instanceof GenericTypeVar) { inferencelog.debug("Generic, WANDLE: " + TempParameter.getName()); - // existiert f�r GenericTypeVar eine deklarierte Klasse + // existiert f�r GenericTypeVar eine deklarierte Klasse for( int k = 0; k < KlassenVektor.size(); k++) { if( KlassenVektor.elementAt(k).getSimpleName().equals(TempParameter.getSimpleName()) ) @@ -228,9 +228,9 @@ public class MyCompiler implements MyCompilerAPI /** * Parst den Quellcode und baut den abstrakten Syntaxbaum auf. Danach wird * automatisch der von Thomas Ott implementierte Algorithmus - * NewTVar(jclass) (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) + * NewTVar(jclass) (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) * aufgerufen. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param reader * @throws IOException * @throws JavaParser.yyException @@ -248,7 +248,7 @@ public class MyCompiler implements MyCompilerAPI parserlog.info("#########################################\n"); ////////////////////////////////////// - // Alte Daten l�schen: + // Alte Daten l�schen: ////////////////////////////////////// m_AbstractSyntaxTree = null; @@ -268,7 +268,7 @@ public class MyCompiler implements MyCompilerAPI //PL 05-07-31 verschoben nach SourceFile.java in Methode typeReconstruction // otth: TypePlaceholders in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln, - // falls: f�r TypePlaceholder existiert eine gleichnamige Klasse + // falls: f�r TypePlaceholder existiert eine gleichnamige Klasse // Superklasse suchen //for( int i = 0; i < srcFile.KlassenVektor.size(); i++ ) //{ @@ -309,10 +309,10 @@ public class MyCompiler implements MyCompilerAPI if ( tempKlassBody != null ) { strKlasse = tempKlasse.getName(); - parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse); + parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse); parserlog.debug( "------------------------------------"); - // Schleife �ber alle fielddeclarations + // Schleife �ber alle fielddeclarations tempMengeFieldDecl = tempKlassBody.getFields(); for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { @@ -321,7 +321,7 @@ public class MyCompiler implements MyCompilerAPI { //parserlog.debug("T->Konstruktor: " + ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name() + " - ReturnType: " + tempFieldDecl.getTypeName()); - // pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!! + // pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!! String strConstName = ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name(); // Konstruktorname if ( !strConstName.equals( strKlasse ) ) { @@ -336,9 +336,9 @@ public class MyCompiler implements MyCompilerAPI Methode.set_ExceptionList( Konstruktor.get_ExceptionList() ); Methode.setReturnType( Konstruktor.getReturnType() ); Methode.setDeclIdMenge( Konstruktor.getDeclIdMenge() ); - // types_in_parameterlist wird wohl erst sp�ter und intern gef�llt + // types_in_parameterlist wird wohl erst sp�ter und intern gef�llt - // R�ckgabetyp = Objekt der Klasse 'TypePlaceholder' + // R�ckgabetyp = Objekt der Klasse 'TypePlaceholder' // #JB# 31.03.2005 // ########################################################### @@ -359,7 +359,7 @@ public class MyCompiler implements MyCompilerAPI // Debugg-Infos parserlog.debug(""); - parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse); + parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse); parserlog.debug( "-----------------------------------------"); for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { @@ -389,14 +389,14 @@ public class MyCompiler implements MyCompilerAPI tempMethod = (Method)tempFieldDecl; tempReturn = tempMethod.getReturnType(); - // Funktionen ohne definierten R�ckgabetyp suchen!!! + // Funktionen ohne definierten R�ckgabetyp suchen!!! if( tempReturn instanceof TypePlaceholder ) { - // Methode mit nicht-definiertem R�ckgabetyp gefunden! + // Methode mit nicht-definiertem R�ckgabetyp gefunden! // #JB# 31.03.2005 // ########################################################### - // Wird bereits �ber fresh() gemacht!! + // Wird bereits �ber fresh() gemacht!! //tempReturn.setName( TypePlaceholder.makeNewName() ); // ########################################################### parserlog.debug(""); @@ -425,7 +425,7 @@ public class MyCompiler implements MyCompilerAPI // #JB# 31.03.2005 // ########################################################### - // Wird bereits �ber fresh() gemacht!! + // Wird bereits �ber fresh() gemacht!! //tempType.setName( TypePlaceholder.makeNewName() ); // ########################################################### } @@ -458,7 +458,7 @@ public class MyCompiler implements MyCompilerAPI ///////////////////////////////////////////////////////////////////////////////////////////////// // ino.method.init.21295.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Initialisiert den Compiler */ // ino.end @@ -476,11 +476,11 @@ public class MyCompiler implements MyCompilerAPI // ino.method.parse.21298.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Ruft die Parse-Methode. * @param file Die Quellcode-Datei * @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert. - * @throws IOException Wenn was schief l�uft. + * @throws IOException Wenn was schief l�uft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. */ // ino.end @@ -500,9 +500,9 @@ public class MyCompiler implements MyCompilerAPI // ino.method.typeReconstruction.21304.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Ruft den Typrekonstruktionsalgorithmus auf. - * @return Die Menge aller m�glichen Typkombinationen + * @return Die Menge aller m�glichen Typkombinationen * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @throws CTypeReconstructionException Wenn ein Fehler bei der * Typrekonstruktion auftritt. @@ -538,13 +538,13 @@ public class MyCompiler implements MyCompilerAPI /** * Erstellt die FunN-Assumptions - * Fun0-FunN (momentan für N = 6) + * Fun0-FunN (momentan für N = 6) * @return */ private TypeAssumptions makeFunNAssumptions(){ TypeAssumptions ret = new TypeAssumptions(); - //Basic Assumptions für die FunN Interfaces: + //Basic Assumptions für die FunN Interfaces: //TODO: Hier mehr als Fun1-Fun5 implementieren for(int i = 0; i<6; i++){ FunNInterface funN = new FunNInterface(i); @@ -556,8 +556,8 @@ public class MyCompiler implements MyCompilerAPI } /** - * Author: J�rg B�uerle
    - * Generiert den Bytecode und das Class-File f�r den Syntaxbaum. + * Author: J�rg B�uerle
    + * Generiert den Bytecode und das Class-File f�r den Syntaxbaum. * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @@ -583,7 +583,7 @@ public class MyCompiler implements MyCompilerAPI // ino.method.main.21313.defdescription type=javadoc /** - * Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet + * Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet * werden kann. * @param args Klassendatei */ @@ -696,7 +696,7 @@ public class MyCompiler implements MyCompilerAPI for( int i = 0; i < containedTypes.size(); i++) { Type tempParameter = (Type)(containedTypes.elementAt(i)); - // Nat�rlich nur RefTypes updaten + // Nat�rlich nur RefTypes updaten if(tempParameter instanceof RefType){ RefType typ=(RefType)tempParameter; UsedId fullyQualifiedName=UsedId.createFromQualifiedName(typ.getTypeName(),typ.getOffset()); @@ -717,9 +717,9 @@ public class MyCompiler implements MyCompilerAPI // ino.end */ /** - * @author Arne Lüdtke + * @author Arne Lüdtke * Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv. - * ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden. + * ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden. * @param T - Typ, bei welchem die GTVs ersetzt werden sollen. */ public static Type makeGenericTypeVars2TypePlaceHolders(Type T) @@ -811,12 +811,12 @@ public class MyCompiler implements MyCompilerAPI StringReader srcreader = new StringReader(fileData.toString()); //Den aus der Datei ausgelesenen Quellcode zu einem Syntaxbaum parsen: - this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen... + this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen... } /* String gesamterSrc = ""; - //Hier werden alle übergebenen Dateinamen abgearbeitet: + //Hier werden alle übergebenen Dateinamen abgearbeitet: for(String filename : filenames){ try { StringBuffer fileData = new StringBuffer(); @@ -829,15 +829,15 @@ public class MyCompiler implements MyCompilerAPI fileData.append(readData); } reader.close(); - gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen... + gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen... } catch (Exception e) { e.printStackTrace(); - throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden."); + throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden."); } } try { - // und anschließend zum Parsen übergeben. + // und anschließend zum Parsen übergeben. this.parse(gesamterSrc.toString()); } catch (Exception e) { e.printStackTrace(); diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index 24b7728c..16fc0bd8 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; * IDE als Compiler-API zum Kompilieren einer Quellcode-Datei * dienen und stellt somit die Schnittstelle zur Studienarbeit * von Markus Melzer (Eclipse-Plugin) dar. - * @author Jörg Bäuerle + * @author Jörg Bäuerle * @version $Date: 2013/09/09 11:04:24 $ */ // ino.end @@ -36,7 +36,7 @@ public interface MyCompilerAPI // ino.method.init.21331.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Initialisiert den Compiler */ // ino.end @@ -46,11 +46,11 @@ public interface MyCompilerAPI // ino.method.parse.21334.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf. * @param file Die Quellcode-Datei * @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert. - * @throws IOException Wenn was schief läuft. + * @throws IOException Wenn was schief läuft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. */ // ino.end @@ -61,10 +61,10 @@ public interface MyCompilerAPI // ino.method.parse.21337.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Parst einen String und baut den abstrakten Syntaxbaum auf. * @param srcCode Der zu parsende Quellcode - * @throws IOException Wenn was schief läuft. + * @throws IOException Wenn was schief läuft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. // ino.end @@ -76,9 +76,9 @@ public interface MyCompilerAPI // ino.method.typeReconstruction.21340.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Ruft den Typrekonstruktionsalgorithmus auf. - * @return Die Menge aller möglichen Typkombinationen + * @return Die Menge aller möglichen Typkombinationen * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @throws CTypeReconstructionException Wenn ein Fehler bei der * Typrekonstruktion auftritt. @@ -91,8 +91,8 @@ public interface MyCompilerAPI // ino.method.codeGeneration.21346.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    - * Generiert den Bytecode und das Class-File für den Syntaxbaum. + * Author: Jörg Bäuerle
    + * Generiert den Bytecode und das Class-File für den Syntaxbaum. * @param syntaxTree Der Syntaxbaum * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @throws JVMCodeException @@ -124,7 +124,7 @@ public interface MyCompilerAPI // ino.end /** - * Parst zusammenhängende JavaKlassen in verschiedenen Dateien. + * Parst zusammenhängende JavaKlassen in verschiedenen Dateien. * @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen */ public void parse(Menge filenames) throws ParserError; diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java index 983369bb..98107988 100755 --- a/src/de/dhbwstuttgart/logger/Logger.java +++ b/src/de/dhbwstuttgart/logger/Logger.java @@ -34,8 +34,8 @@ public class Logger { */ /** - * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. - * Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten. + * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. + * Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten. * @param message * @param section */ @@ -45,7 +45,7 @@ public class Logger { /** * Liefert den Logger mit dem angegebenen Namen. - * Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist. + * Ãœblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist. * @param name - Name der Klasse ( Ermittelbar mittels .class.getName() ) * @return */ @@ -94,7 +94,7 @@ public class Logger { } /** - * wird hier null übergeben, so wird sämtliches Logging unterdrückt. + * wird hier null übergeben, so wird sämtliches Logging unterdrückt. */ public static void setStandardConfiguration(LoggerConfiguration config) { Logger.standardConfiguration = config; diff --git a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java index 56d57d99..275c68a3 100644 --- a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java +++ b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java @@ -12,7 +12,7 @@ public class LoggerConfiguration{ public LoggerConfiguration setOutput(Section forSection, PrintStream output){ if(outputs.containsKey(forSection)){ - //throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); + //throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); if(outputs.get(forSection).equals(output)){ //do nothing }else{ diff --git a/src/de/dhbwstuttgart/logger/SectionLogger.java b/src/de/dhbwstuttgart/logger/SectionLogger.java index dd786328..66fbbd80 100644 --- a/src/de/dhbwstuttgart/logger/SectionLogger.java +++ b/src/de/dhbwstuttgart/logger/SectionLogger.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.logger; import java.util.logging.Level; /** - * Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt + * Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java index 5a7d0bca..3ca780a7 100755 --- a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java +++ b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.core.IItemWithOffset; // ino.class.CTypeReconstructionException.23746.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2006/06/13 10:37:31 $ */ // ino.end diff --git a/src/de/dhbwstuttgart/parser/JavaClassName.java b/src/de/dhbwstuttgart/parser/JavaClassName.java index 372b647d..352437c4 100644 --- a/src/de/dhbwstuttgart/parser/JavaClassName.java +++ b/src/de/dhbwstuttgart/parser/JavaClassName.java @@ -66,7 +66,7 @@ public class JavaClassName { return false; if (packageName != null && other.packageName != null) { if (!packageName.equals(other.packageName)) - return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden + return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden } return true; } diff --git a/src/de/dhbwstuttgart/parser/JavaLexer.java b/src/de/dhbwstuttgart/parser/JavaLexer.java index db5eb4f2..2479f279 100644 --- a/src/de/dhbwstuttgart/parser/JavaLexer.java +++ b/src/de/dhbwstuttgart/parser/JavaLexer.java @@ -1,7 +1,7 @@ /******************************************** * file: JavaLexer.lex * * * - * enth�lt die JLex-Spezifikation f�r die * + * enth�lt die JLex-Spezifikation f�r die * * Generierung des lexical analyzers * * * ********************************************/ diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 2baa8e12..5f023cb0 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -46,7 +46,7 @@ void initUsedIdsToCheck() { } //PL 05-07-30 eingefuegt. ENDE -//LUAR 07-05-29 Anfang für Wildcard Test +//LUAR 07-05-29 Anfang für Wildcard Test public Menge testPair = new Menge(); //LUAR 07-05-29 Ende // line 53 "-" @@ -817,7 +817,7 @@ case 19: { UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() ); - UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ yyVal = UI; } break; @@ -980,7 +980,7 @@ case 36: pl.getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null, ((Token)yyVals[0+yyTop]).getOffset())); /*pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); yyVal = pl; } break; @@ -991,7 +991,7 @@ case 37: RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); pl.getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal = pl; } break; @@ -1012,7 +1012,7 @@ case 39: ((ParaList)yyVals[-2+yyTop]).getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(), null,((Token)yyVals[0+yyTop]).getOffset())); /*$1.getParalist().addElement(new TypePlaceholder($3.getLexem()));*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist: " + ((ParaList)yyVals[-2+yyTop]).getParalist(), Section.PARSER); yyVal=((ParaList)yyVals[-2+yyTop]); } @@ -1023,7 +1023,7 @@ case 40: RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); ((ParaList)yyVals[-5+yyTop]).getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal=((ParaList)yyVals[-5+yyTop]); } break; @@ -1252,7 +1252,7 @@ case 71: { if (((Menge)yyVals[0+yyTop]) != null) { /*$1.set_ParaList($2.get_ParaList());*/ - ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ + ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ /* otth: originale (also diese) Parameterliste retten */ /*((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() );*/ } @@ -1410,7 +1410,7 @@ case 91: break; case 92: // line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - {/*angefügt von Andreas Stadelmeier*/ + {/*angefügt von Andreas Stadelmeier*/ ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); yyVal=((FieldDeclaration)yyVals[-1+yyTop]); @@ -1906,7 +1906,7 @@ case 153: /* #JB# 10.04.2005 */ /* ########################################################### */ met.setLineNumber(((Token)yyVals[-2+yyTop]).getLineNumber()); - met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId DImethod = new DeclId(); DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem()); @@ -1921,7 +1921,7 @@ case 154: /* #JB# 10.04.2005 */ /* ########################################################### */ met_para.setLineNumber(((Token)yyVals[-3+yyTop]).getLineNumber()); - met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId Dimet_para = new DeclId(); Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem()); @@ -1990,7 +1990,7 @@ case 161: { FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop])); FP.setType(((Type)yyVals[-1+yyTop])); - /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/ + /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/ yyVal=FP; } break; @@ -2042,7 +2042,7 @@ case 166: /* #JB# 10.04.2005 */ /* ########################################################### */ DI.setLineNumber(((Token)yyVals[0+yyTop]).getLineNumber()); - DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DI.set_Name(((Token)yyVals[0+yyTop]).getLexem()); yyVal=DI; diff --git a/src/de/dhbwstuttgart/parser/Token.java b/src/de/dhbwstuttgart/parser/Token.java index a371818e..7e6f005c 100755 --- a/src/de/dhbwstuttgart/parser/Token.java +++ b/src/de/dhbwstuttgart/parser/Token.java @@ -16,7 +16,7 @@ public class Token private int m_LineNumber; // ino.end // ino.attribute.m_Offset.24871.declaration - private int m_Offset;//hinzugefügt hoth: 14.04.2006 + private int m_Offset;//hinzugefügt hoth: 14.04.2006 // ino.end @@ -54,7 +54,7 @@ public class Token // ino.end // ino.method.Token.24883.defdescription type=line - // hinzugefügt hoth: 14.04.2006 + // hinzugefügt hoth: 14.04.2006 // ino.end // ino.method.Token.24883.definition Token (int tok, String s, int lineNumber, int charOffset) @@ -69,7 +69,7 @@ public class Token // ino.end // ino.method.Token.24886.defdescription type=line - // hinzugefügt hoth: 14.04.2006 + // hinzugefügt hoth: 14.04.2006 // ino.end // ino.method.Token.24886.definition Token (int tok, char c, int lineNumber, int charOffset) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 8f63cd5a..b93e7df9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -125,7 +125,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.attribute.containedTypes.23032.decldescription type=line // PL 05-07-30 eingefuegt. Vektor aller Typdeklarationen, die in der Klasse - // vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt. + // vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt. // ino.end // ino.attribute.containedTypes.23032.declaration private Menge containedTypes = new Menge(); @@ -134,7 +134,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I private Menge usedIdsToCheck = new Menge(); // ino.end - private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden. + private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden. // ino.attribute.parserlog.23038.declaration //protected Logger parselog = Logger.getLogger("parser"); @@ -157,14 +157,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I superclassid=null; } this.offset = offset; - if(!name.equals("Object"))//Alle Klassen außer Object erben von Object: + if(!name.equals("Object"))//Alle Klassen außer Object erben von Object: this.superClass = new Class("Object", -1).getType(); } // ino.end /** - * Erstellt eine Klasse, welche nur für die Assumptions verwendet wird. - * Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody. + * Erstellt eine Klasse, welche nur für die Assumptions verwendet wird. + * Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody. * @param name * @param superClass * @param modifiers @@ -285,8 +285,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** * @author Andreas Stadelmeier, a10023 - * Fügt der Klasse eine Feld hinzu. - * Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um. + * Fügt der Klasse eine Feld hinzu. + * Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um. * @param feld */ public void addField(Field i) @@ -328,7 +328,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.complete_paralist.23062.body { - //Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen + //Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen Menge child = paralist; paralist = (Menge)superclassid.get_ParaList(); @@ -344,7 +344,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** - * Generiert die ClassFile für diese Klasse. + * Generiert die ClassFile für diese Klasse. * @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen. * @return * @throws JVMCodeException @@ -371,7 +371,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // pkgName = sf.getPackageName().get_codegen_UsedId() + "/"; //} - //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: + //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: String packageName = ""; if(pkgName != null) packageName = pkgName.get_Name_1Element(); classfile.add_class(getName(), superClass, getAccessFlags()); @@ -409,36 +409,36 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.end /** - * Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt. - * Der ClassBody enthält sämtliche Felder dieser Klasse. - * Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen. - * (Nur einmal während des Parsens aufrufen!) + * Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt. + * Der ClassBody enthält sämtliche Felder dieser Klasse. + * Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen. + * (Nur einmal während des Parsens aufrufen!) */ public void set_ClassBody(ClassBody body) { Menge tempFields=body.getFields(); for(Field f : this.getFields()){ - if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?) + if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?) Method m = (Method)f; /* * Ermitteln ob es sich bei der Methode um einen Konstruktor handelt: * (Parser kann nicht zwischen Methode und Konstruktor unterscheiden. - * Denn für einen Konstruktor gelten besondere Regeln: + * Denn für einen Konstruktor gelten besondere Regeln: * -Typ des Blocks eines Konstruktor ist void (kein Return-Statement) - * -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse + * -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse * -Ein Konstruktor kann nicht aufgerufen werden (nur mit new) */ - if(m.get_Method_Name().equals(""))throw new TypeinferenceException(" ist kein gültiger Methodenname", m); + if(m.get_Method_Name().equals(""))throw new TypeinferenceException(" ist kein gültiger Methodenname", m); if((m.get_Method_Name().equals(this.getName()))) { Constructor constructor = new Constructor(m); - tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen + tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen }else{ - //Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen: + //Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen: tempFields.add(m); } }else{ - tempFields.add(f); //Ansonsten das Feld anfügen... + tempFields.add(f); //Ansonsten das Feld anfügen... } } @@ -640,14 +640,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ///////////////////////////////////////////////////////////////////////// // ino.method.TRProg.23110.defdescription type=javadoc /** - * Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst + * Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst * die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe - * f�r den Algorithmus dienen.
    - * (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) - *
    Author: J�rg B�uerle + * f�r den Algorithmus dienen.
    + * (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) + *
    Author: J�rg B�uerle * @param supportData * @param globalAssumptions - * @return Liste aller bisher berechneten, m�glichen Typkombinationen + * @return Liste aller bisher berechneten, m�glichen Typkombinationen * @throws CTypeReconstructionException */ // ino.end @@ -671,16 +671,16 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ////////////////////////////// //Erzeuge Assumptions: TypeAssumptions assumptions = this.getPrivateFieldAssumptions(); - //Globale Assumptions anfügen: + //Globale Assumptions anfügen: assumptions.add(globalAssumptions); ConstraintsSet oderConstraints = new ConstraintsSet(); for(Type gparam : this.get_ParaList()){ - if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen + if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen } for(Type gparam : this.get_ParaList()){ - if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen + if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen } typinferenzLog.debug("Erstellte Assumptions: "+assumptions, Section.TYPEINFERENCE); @@ -709,7 +709,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /* CReconstructionTupleSet retTupleSet = this.TRStart(methodList, V, V_fields_methods, supportData); - inferencelog.debug("Bin aus TRStart() zur�ck in TRProg()."); + inferencelog.debug("Bin aus TRStart() zur�ck in TRProg()."); ////////////////////////////// // Neu Ergebnismenge A aller // Typannahmen erzeugen: @@ -717,12 +717,12 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I inferencelog.debug("Erstelle Ergebnismenge..."); Menge newA = new Menge(); - // Alle bisherigen M�glichkeiten an Typkombinationen durchgehen: + // Alle bisherigen M�glichkeiten an Typkombinationen durchgehen: Menge oldA = supportData.getA(); for(int i=0; i retTupleIt = retTupleSet.getIterator(); while(retTupleIt.hasNext()){ CReconstructionTuple possibleTuple = retTupleIt.next(); @@ -745,7 +745,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } newReconResult.addGenericTypeVars(this.getName(), genericsList); - //Hinzuf�gen: + //Hinzuf�gen: newA.addElement(newReconResult); } } @@ -761,7 +761,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(this.methodList != null) return this.methodList; - //TODO: Unnötige Berechnungen im folgenden Code rauskürzen: + //TODO: Unnötige Berechnungen im folgenden Code rauskürzen: ////////////////////////////// // Die Eingabedaten bauen: ////////////////////////////// @@ -774,7 +774,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ////////////////////////////// // Alle Felder durchgehen: // Zuerst alle Attribute, dann Methoden - // ge�ndert: hoth 06.04.2006 + // ge�ndert: hoth 06.04.2006 ////////////////////////////// for(Field field : this.getFields()) @@ -813,7 +813,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I methodList.addElement(method); - // F�r V_fields_methods: + // F�r V_fields_methods: CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(this.getType(), method.get_Method_Name(), method.getReturnType(), method.getParameterCount(),method.getLineNumber(),method.getOffset(),new Menge(),method.getGenericMethodParameters()); // Typannahme bauen... @@ -826,7 +826,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I method.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); - // F�r die V_i: + // F�r die V_i: CTypeAssumptionSet localAssum = new CTypeAssumptionSet(); // Bauen... @@ -834,7 +834,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(parameterList!=null){ for(int i=0; i()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -847,13 +847,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I - // F�r die V_i: + // F�r die V_i: CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),"1", para.getIdentifier(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); rememberLocals.addElement(varAssum); } } - // ...und hinzuf�gen: + // ...und hinzuf�gen: V.addElement(localAssum); } @@ -866,15 +866,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ /** - * Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese. - * Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben. + * Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese. + * Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben. * @return Die erstellten TypeAssumptions */ private TypeAssumptions getPrivateFieldAssumptions() { - if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden. + if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden. TypeAssumptions assumptions = new TypeAssumptions(this.getName()); - //this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden. - //Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist. + //this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden. + //Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist. //CLocalVarTypeAssumption thisAssumption = new CLocalVarTypeAssumption(this.name, name, 0, 0, name, "this", new RefType(name,0), 0, 0, null); //assumptions.setThisV(thisAssumption); @@ -882,20 +882,20 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(!field.isPublic())assumptions.add(field.createTypeAssumptions(this)); } - //Eine Assumption für den Standardkonstruktor: - // (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt) - //auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird. - //if(assumptions.getMethodAssumptions(this.getName(), "").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde: + //Eine Assumption für den Standardkonstruktor: + // (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt) + //auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird. + //if(assumptions.getMethodAssumptions(this.getName(), "").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde: // assumptions.addMethodAssumption(new RefType(this.getName(),0), "", new RefType(this.getName(),0), new Menge()); //} - this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. + this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. return assumptions; } /* public ConstraintsSet TYPE(Menge methodList, Menge fielddeclarationList, TypeAssumptions assumptions){ ConstraintsSet ret = new ConstraintsSet(); - // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. + // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. //TypeAssumptions assumptionsPlusFieldAssumptions = new TypeAssumptions(assumptions); for(Expr expr : fielddeclarationList){ //ret.add(expr.TYPEStmt(assumptionsPlusFieldAssumptions)); @@ -912,9 +912,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.RetType.23119.defdescription type=javadoc /** - * Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.
    - * (siehe Algorithmus RetType, Martin Pl�micke) - *
    Author: J�rg B�uerle + * Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.
    + * (siehe Algorithmus RetType, Martin Pl�micke) + *
    Author: J�rg B�uerle * @param me * @param V * @return @@ -936,7 +936,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ // ino.method.toString.23125.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -954,7 +954,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.wandleRefTypeAttributes2GenericAttributes.23128.defdescription type=javadoc /** - * Alle Methoden der Klassen überprüfen, ob sie als + * Alle Methoden der Klassen überprüfen, ob sie als * RefType deklarierte Attribute haben, die aber GenericTypeVars sind * und ggf. ersetzen * @@ -1043,7 +1043,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** - * Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet. + * Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet. * Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt. * @return Java-Sourcefile */ @@ -1073,7 +1073,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I classBodyCode.attach(bodyString); - //Zuerst die generischen Parameter für diese Klasse berechnen: + //Zuerst die generischen Parameter für diese Klasse berechnen: //this.createGenericTypeVars(classBodyCode.getUnresolvedTPH()); if(this.genericClassParameters != null && this.genericClassParameters.size()>0){ @@ -1094,9 +1094,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } /** - * Errechnet die Generischen Parameter der Klasse für diese Klasse. - * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. - * @param tphs : Alle übriggebliebenen TypePLaceholder + * Errechnet die Generischen Parameter der Klasse für diese Klasse. + * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. + * @param tphs : Alle übriggebliebenen TypePLaceholder private void createGenericTypeVars(Menge tphs){ this.genericClassParameters = new GenericDeclarationList(new Menge()); @@ -1107,8 +1107,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } */ /** - * Errechnet die Generischen Parameter der Klasse für diese Klasse. - * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. + * Errechnet die Generischen Parameter der Klasse für diese Klasse. + * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. * @param reconstructionResult public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){ @@ -1193,7 +1193,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } this.fielddecl = tempFields; - //Prüfen ob ein Konstruktor vorhanden ist: + //Prüfen ob ein Konstruktor vorhanden ist: boolean constructorVorhanden = false; for(Field f : this.getFields()){ if(f instanceof Constructor){ @@ -1201,7 +1201,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I break; } } - if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: + if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this)); this.addField(standardKonstruktor); } @@ -1289,7 +1289,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I @Override public int getGenericVarDeclarationOffset(){ - // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn + // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn if(this.genericClassParameters != null){ return this.genericClassParameters.getEndOffset(); }else{ @@ -1299,7 +1299,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** * Die Super Klasse dieser Klasse. - * @return null für Klasse Object + * @return null für Klasse Object */ public Type getSuperClass(){ return this.superClass; diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java index c8fae5a0..e0b36c8f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java @@ -103,7 +103,7 @@ Paratyp gesetzt."); } /** * @author Andreas Stadelmeier, a10023 - * Fügt der Klasse eine Feld hinzu. + * Fügt der Klasse eine Feld hinzu. * @param feld */ public void addField(Field i) @@ -305,7 +305,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) { if( ((RefType)TempParameter).get_ParaList().size() != KlassenVektor.elementAt(k).get_ParaList().size() ) { - parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD ); + parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD ); System.exit( 1 ); } else @@ -332,7 +332,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) } else { - // Tylose Variablen d�rfen nicht deklariert sein + // Tylose Variablen d�rfen nicht deklariert sein for( int k = 0; k < KlassenVektor.size(); k++) { if( KlassenVektor.elementAt(k).getName().equals(TempParameter.getName()) ) @@ -350,7 +350,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) // ino.method.toString.23203.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java index c8b53433..36560d7e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java @@ -18,8 +18,8 @@ public class ClassHelper /** * HOTI * Diese Methode sucht in der Klassendefinition nach einen GTV, die - * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden - * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls * angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert * die Methode null. * @param type diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index b54de818..0437b44c 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -79,7 +79,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta public Menge getDeclIdMenge() { - // otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) + // otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) return declid; } @@ -95,7 +95,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta public abstract JavaCodeResult printJavaCode(ResultSet resultSet); /** - * Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember + * Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember * @param classmember * @return */ @@ -150,7 +150,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta @Override public int getGenericVarDeclarationOffset(){ - // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn + // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn if(this.genericParameters != null){ return this.genericParameters.getEndOffset(); }else{ diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index e47a0ce9..5eef3ade 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -21,7 +21,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** - * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung + * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung * Beispiel: 'public Feld FeldVar = FeldWert;' * @author janulrich * @@ -33,8 +33,8 @@ public class FieldDeclaration extends Field{ //private Menge parameter; /** - * Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. - * Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig. + * Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. + * Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig. */ public FieldDeclaration(String name, Type typ){ super(0);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset @@ -88,7 +88,7 @@ public class FieldDeclaration extends Field{ ////////////////////////////// TypeAssumptions assumptions = new TypeAssumptions(); /* - * Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen. + * Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen. * Wird das Feld mit einem Typ initialisiert so muss dieser auch in die Assumptions. */ if(this.getType() == null)throw new TypeinferenceException("Der Typ eines Feldes darf nicht null sein", this); @@ -117,7 +117,7 @@ public class FieldDeclaration extends Field{ @Override public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) { if(this.wert == null && (this.getType() == null || this.getType() instanceof TypePlaceholder)) - throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this); + throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this); ConstraintsSet ret = new ConstraintsSet(); TypeAssumptions localAssumptions = publicAssumptions.clone(); @@ -151,7 +151,7 @@ public class FieldDeclaration extends Field{ ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht if(this.wert!=null){ - //Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement: + //Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement: ret.add(this.wert.TYPEExpr(localAssumptions)); ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType)); } @@ -161,7 +161,7 @@ public class FieldDeclaration extends Field{ @Override public void wandleRefTypeAttributes2GenericAttributes(Menge paralist){ super.wandleRefTypeAttributes2GenericAttributes(paralist); - if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben + if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben } } diff --git a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java index d229de60..c4115bc4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java +++ b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java @@ -43,7 +43,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns @Override public boolean equals(Object object) { - //if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen. + //if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen. if(!(object instanceof FormalParameter))return false; FormalParameter equals = (FormalParameter)object; if((this.type==null)!=(equals.type == null))return false; @@ -56,7 +56,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.setType.23404.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param t */ // ino.end @@ -142,7 +142,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.getLineNumber.23425.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -158,7 +158,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.getTypeLineNumber.23431.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Generic.java b/src/de/dhbwstuttgart/syntaxtree/Generic.java index 7bcb538a..bcd36611 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Generic.java +++ b/src/de/dhbwstuttgart/syntaxtree/Generic.java @@ -6,7 +6,7 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; /** - * Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field) + * Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field) * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java index 0ecbaa6d..a25efc00 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java +++ b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java @@ -14,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.misc.UsedId; * HOTI 4.5.06 * Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) * Der Parser kann keine Generischen Typen darstellen, damit trotzdem - * an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung... + * an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung... */ // ino.end // ino.class.ImportDeclarations.23434.declaration diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index a776235a..f068ab67 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -86,7 +86,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.attribute.m_LineNumber.23512.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.attribute.inferencelog.23515.declaration protected static Logger inferencelog = Logger.getLogger("inference"); // ino.end @@ -389,7 +389,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.getOffset.23590.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23590.definition public int getOffset() @@ -410,7 +410,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.setOffset.23596.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23596.definition public void setOffset(int Offset) @@ -439,7 +439,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.method.toString.23605.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -529,8 +529,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = new ConstraintsSet(); TypeAssumptions localAss = new TypeAssumptions(); - localAss.add(ass); //Die globalen Assumptions anhängen - //Generische Parameterdeklarationen den Assumptions anfügen: + localAss.add(ass); //Die globalen Assumptions anhängen + //Generische Parameterdeklarationen den Assumptions anfügen: for(GenericTypeVar gtv : this.getGenericParameter()){ localAss.add(gtv.createAssumptions()); } @@ -549,7 +549,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable this.returntype = replaceType; } */ - //Die Parameter zu den Assumptions hinzufügen: + //Die Parameter zu den Assumptions hinzufügen: if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){ param.setType(param.getType().checkTYPE(localAss, this)); @@ -567,7 +567,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable localAss.addAssumption(new ParameterAssumption(param)); } ret.add(this.block.TYPEStmt(localAss)); - //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: + //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this))); return ret; } @@ -629,7 +629,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //methodList.addElement(method); - //F�r V_fields_methods: + //F�r V_fields_methods: CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Menge(),this.getGenericMethodParameters()); // Typannahme bauen... @@ -642,7 +642,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable this.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); - //F�r die V_i: + //F�r die V_i: CTypeAssumptionSet localAssum = new CTypeAssumptionSet(); //Bauen... @@ -650,7 +650,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable if(parameterList!=null){ for(int i=0; i()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -660,15 +660,15 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable methodAssum.addParaAssumption(paraAssum); - // F�r die V_i: + // F�r die V_i: CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); //rememberLocals.addElement(varAssum); } } - //...und hinzuf�gen: + //...und hinzuf�gen: - assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen + assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen //Hier wird der Typ der als Assumption eingetragen wird in die Variable assumedType dieser Klasse geschrieben: if(this.assumedType == null) // Falls der Typ nicht schon gesetzt ist. Das ist der Fall, falls die Methode ein Konstruktor ist @@ -682,7 +682,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void parserPostProcessing(SyntaxTreeNode parent){ if(this.getType()==null)this.setType(TypePlaceholder.fresh(this)); - //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: + //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: //Class parentClass = (Class)parent; if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); super.parserPostProcessing(parent); @@ -714,7 +714,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // Methode und Block teilen sich einen ReturnType: //this.block.setType(t); this.returntype = t; - this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) + this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) } /** diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index 2deffc91..7839e55d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -105,7 +105,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable + * Author: J�rg B�uerle
    * @return Die Anzahl der Parameter */ // ino.end @@ -132,7 +132,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterabletrue
    gesetzt ist, wird immer als Superklasse Object - * mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ - * auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine - * Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es + * mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ + * auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine + * Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es * die superclass von allen Class-Objekten. (Wenn true ist jede Class automatisch * wenn nicht anders eingegeben Subclass von Object (Wie es sein muss)) */ @@ -87,7 +87,7 @@ public class SourceFile // ino.attribute.READ_BASE_TYPE_SUPERCLASSES_FROM_JRE.21364.decldescription type=javadoc /** - * Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert + * Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert * durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen. D.h. * Integer hat bspw. nicht die Superklasse Number sondern OBJECT. * Dies verursacht bei den Int-Operationen ein Problem @@ -100,7 +100,7 @@ public class SourceFile /** * @autor PL - * Wenn dieses Flag auf false ist, werden für alle importierten Klassen + * Wenn dieses Flag auf false ist, werden für alle importierten Klassen * KEINE Superklassen geladen. */ private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE = false; @@ -128,7 +128,7 @@ public class SourceFile // ino.end /** - * Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. + * Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. * SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar. */ public SourceFile(){ @@ -178,12 +178,12 @@ public class SourceFile // ino.end // ino.attribute.baseTypeTranslationTable.21385.decldescription type=javadoc /** - * Table zum Übersetzen der nicht implementierten Base-Types: - * Überall im Compiler wird statt bspw. int Integer verwendet + * Table zum Ãœbersetzen der nicht implementierten Base-Types: + * Ãœberall im Compiler wird statt bspw. int Integer verwendet * d.h. 1+2 liefert ein Integer - * Deshalb benötigen wir hier eine Tabelle, mit der man die von + * Deshalb benötigen wir hier eine Tabelle, mit der man die von * der JRE gelieferten Base-Typen (int,char, etc) und die Objekt- - * Typen umwandeln können + * Typen umwandeln können */ // ino.end // ino.attribute.baseTypeTranslationTable.21385.declaration @@ -295,7 +295,7 @@ public class SourceFile // ino.method.makeFC.21403.defdescription type=javadoc /** * Erstellt die Finite Closure - * @return FC_TTO-Object, welches die Finite Closure repräsentiert + * @return FC_TTO-Object, welches die Finite Closure repräsentiert */ // ino.end // ino.method.makeFC.21403.definition @@ -311,7 +311,7 @@ public class SourceFile globalAssumptions.add(this.getPublicFieldAssumptions()); // 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen - Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. + Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType()); @@ -327,10 +327,10 @@ public class SourceFile //System.out.println("FCPair: "+p); if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen. Type superTypeFromAssumptions = ass.getTypeFor(t2, t2).getType(); //In den Assumptions den SuperTyp nachschlagen - if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. + if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. vFC.add(p); } - basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen + basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen }else{ //System.out.println("Wurde nicht aufgenommen"); } @@ -403,7 +403,7 @@ public class SourceFile // konkret: rechte Seite von FC nach Typkonstruktoren in der Parameterliste durchsuchen for( int n = 0; n < vFC.size(); n++ ) { - // Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage + // Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage Pair PTypKonst = vFC.elementAt(n); // Parameter des rechten Typausdrucks des betrachteten Paars extrahieren @@ -445,7 +445,7 @@ public class SourceFile { inferencelog.debug(" gefundener Typ links: " + ((RefType)(PSuchen.TA1)).getName(), Section.FINITECLOSURE ); inferencelog.debug(" gefundener Typ rechts: " + ((RefType)(PSuchen.TA2)).getName() , Section.FINITECLOSURE); - // Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat + // Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat // Substitution //Pair P = new Pair( PSuchen.getTA1Copy( ), PSuchen.getTA2Copy( ) ); //linker Typterm bleibt gleich @@ -498,7 +498,7 @@ public class SourceFile // new RefType( (RefType)vPara.elementAt(u) ), // false ); // rechte Seite substituieren //Es genuegt die rechte Seite zu substituieren, da - //die linke Seite ein Typterm ausschlie�lich mit + //die linke Seite ein Typterm ausschlie�lich mit //Typvariablen ist } //Unify.SubstHashtableGeneric(((RefType)P.TA1), hts); //funktioniert nicht @@ -597,7 +597,7 @@ public class SourceFile } } // end for: linke Seite suchen } // end if: Element ist RefType - } // end for: Transitivit�ten berechnen + } // end for: Transitivit�ten berechnen //PL HIER REFLEXIVE HUELLE EINFUEGEN // 05-01-07 @@ -658,13 +658,13 @@ public class SourceFile ///////////////////////////////////////////////////////////////////////// // ino.method.typeReconstruction.21406.defdescription type=javadoc /** - * Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - * Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als - * Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen - * Typkombinationen f�r alle Klassen zusammen. - *
    Author: J�rg B�uerle - * @return Liste aller m�glichen Typkombinationen - * @throws CTypeReconstructionException Wenn was schief l�uft + * Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. + * Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als + * Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen + * Typkombinationen f�r alle Klassen zusammen. + *
    Author: J�rg B�uerle + * @return Liste aller m�glichen Typkombinationen + * @throws CTypeReconstructionException Wenn was schief l�uft */ // ino.end // ino.method.typeReconstruction.21406.definition @@ -678,7 +678,7 @@ public class SourceFile //Logger initialisieren: Logger typinferenzLog = Logger.getLogger("Typeinference"); - //Alle Assumptions für diese SourceFile sammeln: + //Alle Assumptions für diese SourceFile sammeln: for(Class klasse : this.KlassenVektor){ globalAssumptions.add(klasse.getPublicFieldAssumptions()); } @@ -703,14 +703,14 @@ public class SourceFile //Karthesisches Produkt bilden: //////////////// - //Unmögliche ConstraintsSets aussortieren durch Unifizierung + //Unmögliche ConstraintsSets aussortieren durch Unifizierung Unifier unifier = (pairs)->{ Menge> retValue = new Menge<>(); retValue = Unify.unify(pairs, finiteClosure); return retValue;}; //oderConstraints.filterWrongConstraints(unifier); oderConstraints.unifyUndConstraints(unifier); - typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); + typinferenzLog.debug("Ãœbriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): Menge> xConstraints = oderConstraints.cartesianProduct(); /* @@ -731,10 +731,10 @@ public class SourceFile ////////////////////////////// boolean unifyFail = true; for(Menge constraints : xConstraints){ - //Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen: + //Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen: Menge> result = new Menge>(); - //Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden. + //Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden. for(Pair p : constraints){ if(p.TA1 instanceof FunN){ p.TA1 = p.TA1.clone(); @@ -802,7 +802,7 @@ public class SourceFile ).collect(Menge::new, Menge::add, Menge::addAll); //Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen - //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen + //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen Menge> indexeset = new Menge<>(); if (constraintsclonevars != null && constraintsclonevars.size()>0) { indexeset = Unify.schnitt(constraintsclonevars); @@ -880,7 +880,7 @@ public class SourceFile }); //Menge> unifyResult = Unify.unify(constraintsClone, finiteClosure); - //Dann den Ergebnissen anfügen + //Dann den Ergebnissen anfügen result.addAll(unifyResult); // Debugoutput:Menge> @@ -888,10 +888,10 @@ public class SourceFile //typinferenzLog.debug("Unifiziertes Ergebnis: "+result, Section.TYPEINFERENCE); /* - // Prüfe ob eindeutige Lösung: + // Prüfe ob eindeutige Lösung: if(result.size()>1 && !Unify.hasSolvedForm(result.elementAt(0))){ - typinferenzLog.debug("Keine eindeutige Lösung!"); + typinferenzLog.debug("Keine eindeutige Lösung!"); }else if(result.size()>1){ @@ -912,9 +912,9 @@ public class SourceFile //typinferenzLog.debug(this.printJavaCode(new ResultSet(new Menge()))); - //Für jede Klasse in diesem SourceFile gilt das selbe ResultSet: + //Für jede Klasse in diesem SourceFile gilt das selbe ResultSet: for(Class klasse : this.KlassenVektor){ - //Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen: + //Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen: for(Menge resultSet : result){ unifyFail = false; //Ein Unifiziertes Ergebnis ist entstanden (es kann auch leer sein, das bedeutet nur, dass die Constraints mindestens in einem Fall Sinn ergaben) //Add Result set as a new ReconstructionResult to ret: @@ -922,7 +922,7 @@ public class SourceFile ret.add(reconstructionResult); //ResultSet res = new ResultSet(resultSet); - typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE); + typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE); typinferenzLog.debug(klasse.printJavaCode(reconstructionResult), Section.TYPEINFERENCE); } @@ -934,8 +934,8 @@ public class SourceFile return ret; /* // HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit - // in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird. - // Wers braucht kanns natürlich ausschalten + // in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird. + // Wers braucht kanns natürlich ausschalten // inferencelog.setLevel(Level.INFO); @@ -966,7 +966,7 @@ public class SourceFile this.KlassenVektor); } - // HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als + // HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als // RefType deklarierte Attribute haben, die aber GenericTypeVars sind // Bsp.: // bei public E elementAt(i){...} wird E vorerst als RefType erkannt @@ -1014,10 +1014,10 @@ public class SourceFile inferencelog.info("Rufe \"SourceFile.makeFC()\"..."); - inferencelog.info("������������������������������������"); + inferencelog.info("������������������������������������"); FC_TTO finiteClosure = this.makeFC(); - inferencelog.info("������������������������������������"); - inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck."); + inferencelog.info("������������������������������������"); + inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck."); this.removeBasicAssumptions(); // PL 05-08-02 @@ -1031,19 +1031,19 @@ public class SourceFile Interface intf = intf_it.next(); // HOTI In diesem Moment gibt es nur _eine_ potentielle CTypeReconstructionResult, d.h. - // dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden + // dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden //intf.addThisToAssumptions(basics); } - // Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen: + // Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen: TypeAssumptions publicFieldsAssumptions = new TypeAssumptions(); for(Class cl : KlassenVektor){ publicFieldsAssumptions.add(cl.getPublicFieldAssumptions()); } - // Die BasicAssumptions anfügen: + // Die BasicAssumptions anfügen: publicFieldsAssumptions.add(this.getBasicAssumptions()); // Fuer jede Klasse separat den TRA aufrufen @@ -1064,7 +1064,7 @@ public class SourceFile * Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet * @return - @Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt + @Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt private TypeAssumptions getBasicAssumptions() { TypeAssumptions ret = new TypeAssumptions(null); @@ -1077,7 +1077,7 @@ public class SourceFile mod.addModifier(new Public()); - // Für jede einzelne Klasse + // Für jede einzelne Klasse while (imports.size()>0) { UsedId importDecl = imports.get(0); @@ -1209,9 +1209,9 @@ public class SourceFile }*/ /** - * Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen. + * Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen. * @param imports - * @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen. + * @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen. * @return */ private TypeAssumptions makeBasicAssumptionsFromJRE(Menge imports, boolean withSubtypes) @@ -1228,10 +1228,10 @@ public class SourceFile Modifiers mod = new Modifiers(); mod.addModifier(new Public()); - //Für Object: + //Für Object: imports.add(new UsedId("java.lang.Object",-1)); - // Für jede einzelne Klasse + // Für jede einzelne Klasse while (imports.size()>0) { UsedId importDecl = imports.get(0); @@ -1394,7 +1394,7 @@ public class SourceFile return new Class("java.lang.Object",new Modifiers(), 0); } - Menge supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen: + Menge supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen: java.lang.reflect.TypeVariable[] superclassTVS=s.getTypeParameters(); for(int tvi=0;tviAchtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes + * Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen. + *
    Achtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes * ersetzt werden.
    - * Author: J�rg B�uerle + * Author: J�rg B�uerle * * @return A priori Typinformationen * @throws ClassNotFoundException @@ -1599,7 +1599,7 @@ public class SourceFile // Menge bauen: //------------------------ foo.addClassName("java.lang.Menge"); //PL 05-08-01 eingefuegt - TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar + TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar Menge typeGenPara = new Menge(); typeGenPara.addElement(new GenericTypeVar(E.getName(),-1)); foo.addGenericTypeVars("java.lang.Menge", typeGenPara); @@ -1641,7 +1641,7 @@ public class SourceFile */ TypeAssumptions ret = new TypeAssumptions(); - //Basic Assumptions für die FunN Interfaces: + //Basic Assumptions für die FunN Interfaces: //TODO: Hier mehr als Fun1-Fun5 implementieren for(int i = 0; i<6; i++){ FunNInterface funN = new FunNInterface(i); @@ -1649,7 +1649,7 @@ public class SourceFile } - return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen + return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen } // ino.end @@ -1666,8 +1666,8 @@ public class SourceFile // ino.method.removeBasicAssumptions.21424.defdescription type=javadoc /** - * L�scht die Anfangsinformation wieder aus dem Klassenvektor - *
    Author: J�rg B�uerle + * L�scht die Anfangsinformation wieder aus dem Klassenvektor + *
    Author: J�rg B�uerle */ // ino.end // ino.method.removeBasicAssumptions.21424.definition @@ -1687,11 +1687,11 @@ public class SourceFile // ino.method.getPackageName.21427.defdescription type=javadoc /** - * Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars + * Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars * dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen * in der - * Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. - *
    Author: J�rg B�uerle + * Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. + *
    Author: J�rg B�uerle * @param res * / * /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){ diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index a1b43e84..e263adc3 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -21,11 +21,11 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ /** * Wird nach dem Parsen aufgerufen. - * Erfüllt folgenden Aufgaben: - * 1. Füllt fehlende Typangaben mit TPHs auf. - * 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + * Erfüllt folgenden Aufgaben: + * 1. Füllt fehlende Typangaben mit TPHs auf. + * 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) * 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. - * 4. Führt einen Teil des Syntaxckecks durch. + * 4. Führt einen Teil des Syntaxckecks durch. * */ public void parserPostProcessing(SyntaxTreeNode parent) { @@ -63,13 +63,13 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ SyntaxTreeNode equal = (SyntaxTreeNode)object; if(!equal.getDescription().equals(this.getDescription()))return false; if(this.getParent()!=null) - if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen. + if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen. return true; } /** * Methode zur Generierung der TypeInsertPoints - * @param insertSet - Generierte InsertPoints werden dem insertSet angefügt + * @param insertSet - Generierte InsertPoints werden dem insertSet angefügt * @param result - Das ResultSet auf dessen Basis die InsertPoints generiert werden */ public void addTypeInsertPoints(TypeInsertSet insertSet,ResultSet result) { @@ -77,7 +77,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ node.addTypeInsertPoints(insertSet, result); } - TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten + TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten //Fall der Knoten ein TypeInsertable ist, kann direkt der TypeInsertPoint generiert werden. if(this instanceof TypeInsertable){ TypeInsertable that = (TypeInsertable)this; @@ -87,7 +87,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ insertSet.add(tip);//ret.addAll(((TypePlaceholder)t).getTypeInsertPoints(result)); } /* - //Für den Fall, dass dieser Knoten Generische Variablen halten kann. + //Für den Fall, dass dieser Knoten Generische Variablen halten kann. if(that instanceof Generic && that.getOffset()>=0){ //Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden: Menge uTPHs = insertSet.getUnresolvedTPHs(); diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java index 4d750fa2..679125ed 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java @@ -54,7 +54,7 @@ public class DeclId // ino.attribute.m_LineNumber.23295.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.attribute.codegenlog.23298.decldescription type=line // Logger fuer Code-Gen // ino.end @@ -199,7 +199,7 @@ public class DeclId Constant ct = new Constant(name, modifiers); ct.setType(type); if (!(wert instanceof Expr)) - throw new JVMCodeException("Das Generieren einer Konstante dieses Typs wird nicht unterstützt!"); + throw new JVMCodeException("Das Generieren einer Konstante dieses Typs wird nicht unterstützt!"); ct.setValue((Expr) wert); ct.codegen( classfile, paralist); @@ -277,7 +277,7 @@ public class DeclId // ino.end // ino.method.getOffset.23349.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23349.definition public int getOffset() @@ -289,7 +289,7 @@ public class DeclId // ino.end // ino.method.setOffset.23352.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23352.definition public void setOffset(int Offset) @@ -302,7 +302,7 @@ public class DeclId // ino.method.toString.23355.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java index 25837caf..e02d0cb3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java @@ -31,7 +31,7 @@ public class UsedId implements IItemWithOffset // ino.attribute.vParaOrg.23672.declaration public Menge vParaOrg = null; // otth: originale Parameterliste // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.method.UsedId.23675.definition public UsedId(int offset) @@ -49,7 +49,7 @@ public class UsedId implements IItemWithOffset } // ino.method.getOffset.23678.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23678.definition public int getOffset() @@ -70,7 +70,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.setOffset.23684.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23684.definition public void setOffset(int Offset) @@ -219,7 +219,7 @@ public class UsedId implements IItemWithOffset // ino.method.toString.23723.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -228,7 +228,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.toString.23723.body { - return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier + return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier /*String s = ""; for(int i = 0; iAuthor: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index f48cb7e7..c86f7c51 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -251,8 +251,8 @@ public class Binary extends BinaryExpr ret.add(this.expr1.TYPEExpr(assumptions)); ret.add(this.expr2.TYPEExpr(assumptions)); /** - * Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter - * Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints. + * Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter + * Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints. * @param expr1 * @param expr2 * @return diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index f330bffc..18275a7e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -128,7 +128,7 @@ public class Block extends Statement // ino.method.toString.25083.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -174,7 +174,7 @@ public class Block extends Statement typinferenceLog.debug("Prozessing statement: "+stmt, Section.TYPEINFERENCE); ret.add(stmt.TYPEStmt(assumptions)); /* if((stmt instanceof Return)){ - ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. + ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. } */ } @@ -188,7 +188,7 @@ public class Block extends Statement if (!(stmt.getReturnType() instanceof Void)) if (this.getReturnType() instanceof Void) { //this.setTypeVariable(stmt.getTypeVariable()); - throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this); + throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this); } else { TypePlaceholder tph = TypePlaceholder.fresh(this); @@ -212,7 +212,7 @@ public class Block extends Statement typinferenceLog.debug("Prozessing statement: "+stmt); ret.add(stmt.TYPEStmt(assumptions)); if((stmt instanceof Return)){ - ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. + ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. } } return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index 4215b26c..8b5ce901 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -79,7 +79,7 @@ public class DoubleLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r DoubleLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r DoubleLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -142,7 +142,7 @@ public class DoubleLiteral extends Literal // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index 8cc69721..57bffa6d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -95,15 +95,15 @@ public abstract class Expr extends ExprStmt /** * @author AI10023 - Andreas Stadelmeier - * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke + * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke * Jede Expression wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen. */ public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions); /** * @author AI10023 - Andreas Stadelmeier - * Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss. - * Denn Expressions müssen diese Funktion nicht implementieren. + * Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss. + * Denn Expressions müssen diese Funktion nicht implementieren. */ @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){ diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java index 34c0a8fb..abdda826 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java @@ -52,7 +52,7 @@ public abstract class ExprStmt extends Statement // ino.method.getTypeLineNumber.25291.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index 06e3b7bf..68671710 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -74,7 +74,7 @@ public class FloatLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r FloatLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r FloatLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -138,7 +138,7 @@ public class FloatLiteral extends Literal // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 1f0e2617..b0e798f9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -197,18 +197,18 @@ public class IfStmt extends Statement int breakpoint2 = code.get_code_length(); if(!(else_block==null || else_block instanceof EmptyStmt)) { - //hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug, - //der zuerst im Use Case Toggle1 bemerkt wurde. Hier wird nun gepr�ft ob der + //hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug, + //der zuerst im Use Case Toggle1 bemerkt wurde. Hier wird nun gepr�ft ob der //letzte Befehl in einem if-Block ein return war. Trifft dieser Fall zu, - //so wird kein goto Befehl (f�r das �berspringen des else-Blocks eingef�gt) - //-> das verlangt die vm ->der code w�re nicht erreichbar. - //Allerdings k�nnte das return-Statement nat�rlich auch an einer anderen - //Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die + //so wird kein goto Befehl (f�r das �berspringen des else-Blocks eingef�gt) + //-> das verlangt die vm ->der code w�re nicht erreichbar. + //Allerdings k�nnte das return-Statement nat�rlich auch an einer anderen + //Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die //Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit //Toggle3 zu erzeugen - wird aber richtig generiert. //letztes Statement im Menge in s schreiben //Statement s = (Statement)(((Block)this.then_block).statements.lastElement()); - //Instanz von Return zum pr�fen anlegen + //Instanz von Return zum pr�fen anlegen Return r = new Return(getOffset(),getVariableLength()); if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) ) @@ -252,7 +252,7 @@ public class IfStmt extends Statement ConstraintsSet ret = new ConstraintsSet(); this.setType(TypePlaceholder.fresh(this)); - ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt) + ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt) ret.add(this.then_block.TYPEStmt(assumptions)); if(else_block!=null){ ret.add(this.else_block.TYPEStmt(assumptions)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java index 246ca279..c6a254c8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java @@ -80,7 +80,7 @@ public class InstVar extends Expr // ino.method.InstVar.25414.defdescription type=javadoc /** * macht aus einem UsedId mit einem Menge von Strings eine InstVar - *
    Author: Martin Pl�micke PL 05-08-17 + *
    Author: Martin Pl�micke PL 05-08-17 * @param ui * @return */ @@ -180,7 +180,7 @@ public class InstVar extends Expr // ino.method.toString.25441.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index 1484b53f..7a4c15ad 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -77,7 +77,7 @@ public class IntLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r IntLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r IntLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -138,7 +138,7 @@ public class IntLiteral extends Literal // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 6ca6dcfe..fc66ae38 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -129,32 +129,32 @@ public class LambdaExpression extends Expr{ * TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) = * let * AssArgs = { xi : ai | ai fresh type variables } - * (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) + * (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) * | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt ) * in * (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a, - * ConS ∪ { (FunN a) }), + * ConS ∪ { (FunN a) }), * where a is a fresh type variable */ @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); - //Die Assumptions für die Parameter der LambdaExpression + //Die Assumptions für die Parameter der LambdaExpression TypeAssumptions ArgumentAssumptions = new TypeAssumptions(this.getParentClass().getName()); Menge paramTypes = new Menge(); for(FormalParameter param : params.formalparameter){ if(param.getType()==null)param.setType(TypePlaceholder.fresh(this)); int offset = 0; - //Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt: + //Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt: ArgumentAssumptions.addAssumption(new ParameterAssumption(param)); paramTypes.add(param.getType()); } this.setType(TypePlaceholder.fresh(this)); - //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: + //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression - //Die Constraints für ParameterTypen und Ret Typ erstellen: + //Die Constraints für ParameterTypen und Ret Typ erstellen: Menge modifiedParamTypes = new Menge<>(); for(Type pT : paramTypes){ if(pT instanceof WildcardType){ @@ -175,7 +175,7 @@ public class LambdaExpression extends Expr{ if(retType instanceof SuperWildcardType){ throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this); }else{ - //retType bleibt unverändert + //retType bleibt unverändert } }else{ retType = new ExtendsWildcardType((ObjectType) retType); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index e558d172..2a3f38b6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -148,7 +148,7 @@ public class LocalOrFieldVar extends Expr // ino.method.toString.25534.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -174,7 +174,7 @@ public class LocalOrFieldVar extends Expr @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); - //gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen: + //gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen: Type thisTypeAssumption = assumptions.getVarType(this.get_Name(), this.getParentClass()); if(thisTypeAssumption == null)throw new TypeinferenceException("Eine Variable "+this.get_Name()+" ist in den Assumptions nicht vorhanden",this); Type thisType = thisTypeAssumption.checkTYPE(assumptions, this); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 9b937799..0b7a283d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -214,7 +214,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable parserlog.debug(c.getName()+" "+c.get_ParaList().size()); SCStatementException ex = new SCStatementException(); SCExcept e = new SCExcept(); - e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!"); + e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!"); e.set_function("complete_parahashtable() --> check_anz()"); e.set_statement(type.getName().toString()); ex.addException(e); @@ -279,7 +279,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.getLineNumber.25602.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -319,7 +319,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.getTypeLineNumber.25611.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -335,7 +335,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.toString.25617.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -371,8 +371,8 @@ public class LocalVarDecl extends Statement implements TypeInsertable /** * @author Andreas Stadelmeier, a10023 - * Der Typ der Variablendeklaration wird den Assumptions angefügt. - * Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt. + * Der Typ der Variablendeklaration wird den Assumptions angefügt. + * Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt. */ @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index 0cc8fd14..157234a3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -78,7 +78,7 @@ public class LongLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r LongLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r LongLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -140,7 +140,7 @@ public class LongLiteral extends Literal // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 190df4da..398ab68b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -149,7 +149,7 @@ public class MethodCall extends Expr // ino.method.toString.25738.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -182,16 +182,16 @@ public class MethodCall extends Expr /** * @author AI10023 - Andreas Stadelmeier * - * Mögliche Probleme: + * Mögliche Probleme: * Wenn die Methode ohne Angabe eines Receivers im Quelltext steht: * methodCall(param); -> (bedeutet:) this.methodCall(param); - * Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff) + * Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff) */ @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - //Hier der Ablauf für einen Methodenaufruf: + //Hier der Ablauf für einen Methodenaufruf: ConstraintsSet ret = new ConstraintsSet(); - //Der Return-Type des MEthodenaufrufs ist zunächst unbekannt: + //Der Return-Type des MEthodenaufrufs ist zunächst unbekannt: this.setType(TypePlaceholder.fresh(this)); //Berechne die Constraints des Receivers if(receiver == null){ @@ -199,19 +199,19 @@ public class MethodCall extends Expr } ret.add(receiver.get_Expr().TYPEExpr(assumptions)); - //Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden) + //Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden) if(this.arglist != null)for(Expr arg : this.arglist.expr){ ret.add(arg.TYPEExpr(assumptions)); } - //Noch das Overloading-Constraint anhängen: + //Noch das Overloading-Constraint anhängen: ret.add(overloading(assumptions)); return ret; } /** - * Erstellt die Constraints für den eigentlichen Methodenaufruf. + * Erstellt die Constraints für den eigentlichen Methodenaufruf. * Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet. * @param assumptions * @return @@ -222,9 +222,9 @@ public class MethodCall extends Expr OderConstraint oCons = new OderConstraint(); Menge methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size()); if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+this.get_Name()+" ist in den Assumptions nicht vorhanden", this); - //Alle möglichen Methoden durchgehen: + //Alle möglichen Methoden durchgehen: for(MethodAssumption methodAssumption : methodAssumptions){ - //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: + //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions)); } @@ -244,22 +244,22 @@ public class MethodCall extends Expr * method, where the argument types are supertypes of a minimal type * assumption. * - * @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden. + * @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden. * * @return */ public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ UndConstraint methodConstraint = new UndConstraint(); - //Ein Constraint für den ReturnType der Methode... + //Ein Constraint für den ReturnType der Methode... methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this)); - //Ein Constraint für die Parameter der Methode... + //Ein Constraint für die Parameter der Methode... for(int i=0; i + * Author: J�rg B�uerle
    * @return Returns the type. */ // ino.end @@ -66,7 +66,7 @@ public class NewArray extends Expr // ino.method.setType.25806.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param type The type to set. */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index a4e646c4..12cf8422 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -131,7 +131,7 @@ public class NewClass extends Expr // ino.method.toString.25867.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -158,10 +158,10 @@ public class NewClass extends Expr @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - //TODO: Das hier noch vervollständigen + //TODO: Das hier noch vervollständigen ConstraintsSet ret = new ConstraintsSet(); UndConstraint callConstraints = new UndConstraint(); - //Die Auskommentierten Zeilen gehören zu MethodRefNew + //Die Auskommentierten Zeilen gehören zu MethodRefNew //Menge argumentTypeList = new Menge(); //for(Expr expr : this.arglist.expr){ // argumentTypeList.add(expr.getTypeVariable()); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java index 0558c4f7..ddb35586 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java @@ -34,7 +34,7 @@ public class Receiver // ino.method.Receiver.26132.defdescription type=javadoc /** - * Autor: J�rg B�uerle + * Autor: J�rg B�uerle * @param expr */ // ino.end @@ -76,7 +76,7 @@ public class Receiver // ino.method.toString.26147.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index c30794f7..a450bb1d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -83,7 +83,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @author AI10023 - Andreas Stadelmeier - * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke + * 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); @@ -96,7 +96,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @author Andreas Stadelmeier, a10023 - * Sollte von jedem Statement überschrieben werden. + * Sollte von jedem Statement überschrieben werden. * Liefert Informationen zum Statment und dessen Typ. * @return */ @@ -108,7 +108,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @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. + * Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren. */ public void setType(Type t) { diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index c5f208b1..262da736 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -67,7 +67,7 @@ public class SuperCall extends ThisCall return ret; }else{ //Ansonsten Fehler ausgeben: - throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this); + throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 5c4eecc5..32b6ad8f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -124,7 +124,7 @@ public class This extends Expr public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); //this.set_Type(new); - //this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen. + //this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen. this.setType(this.getParentClass().getType()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java index 506c6d3e..7ca986b5 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java @@ -87,7 +87,7 @@ public class ThisCall extends MethodCall return ret; }else{ //Ansonsten Fehler ausgeben: - throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this); + throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index e9d32933..48f24c64 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -136,7 +136,7 @@ public class WhileStmt extends Statement // ino.method.toString.26360.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java b/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java index 3c4899fc..c5adcbe0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java @@ -40,7 +40,7 @@ public abstract class BaseType extends Type // ino.method.equals.26445.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -85,7 +85,7 @@ public abstract class BaseType extends Type @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden. + return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden. } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java b/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java index cd912907..b1c88056 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java @@ -22,7 +22,7 @@ public class BooleanType extends BaseType // ino.method.equals.26458.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class BooleanType extends BaseType // ino.method.clone.26461.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index 1be887c9..ad2d5ea5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -87,7 +87,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = super.TYPE(ass); //ass.addGenericVarAssumption(this); - //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds + //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds Menge tempBounds = new Menge<>(); if(this.bounds != null){ for(ObjectType ev : this.bounds){ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java b/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java index 7f36e038..166192af 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java @@ -22,7 +22,7 @@ public class CharacterType extends BaseType // ino.method.equals.26499.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class CharacterType extends BaseType // ino.method.clone.26502.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java b/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java index 83e2c803..50d4df58 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java @@ -22,7 +22,7 @@ public class DoubleType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class DoubleType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 0a10cfc8..347fbbe8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -21,8 +21,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{ /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine ExtendsWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine ExtendsWildcard */ public ExtendsWildcardType (int offset, ObjectType extendsType) { @@ -35,10 +35,10 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt den Typen in der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt den Typen in der Wildcard zurück. * Beispiel: ? extends Integer. - * Integer wird zurückgegeben. + * Integer wird zurückgegeben. */ public ObjectType get_ExtendsType() { @@ -46,8 +46,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -55,8 +55,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public ExtendsWildcardType clone() @@ -66,7 +66,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Vergleicht mit einem anderen Objekt. * @param obj - Object to compare. */ @@ -83,9 +83,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshExtendsWildcardType GetFreshWildcardType() { @@ -93,9 +93,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). - * Überschreibt die Methode der Superklasse. + * Ãœberschreibt die Methode der Superklasse. */ public Type GetWildcardType() { @@ -103,7 +103,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard * @param T - Type to be set */ @@ -114,7 +114,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). * Implementiert ITypeContainer */ @@ -124,9 +124,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public ObjectType getMatchType() { @@ -153,7 +153,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. + //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java b/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java index 32cfc5df..716f5bad 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java @@ -22,7 +22,7 @@ public class FloatType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class FloatType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java index 1a5c2447..4c5d8e4f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java @@ -7,8 +7,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc private ObjectType extendsBoundType; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshExtendsWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshExtendsWildcard */ public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset) { @@ -17,8 +17,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Privater Konstruktor für clone + * Author: Arne Lüdtke
    + * Privater Konstruktor für clone */ private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name) { @@ -27,8 +27,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshExtendsWildcardType clone() @@ -50,8 +50,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die Grenze der Wildcard zurück + * Author: Arne Lüdtke
    + * Gibt die Grenze der Wildcard zurück */ public ObjectType get_ExtendsBound() { @@ -59,8 +59,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { @@ -74,9 +74,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die passende ExtendsWildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende ExtendsWildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public ExtendsWildcardType get_WildcardType() { @@ -84,9 +84,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java index 6670db46..743c6f30 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java @@ -7,8 +7,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha private ObjectType superBoundType; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshSuperWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshSuperWildcard */ public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset) { @@ -17,8 +17,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Privater Konstruktor für clone + * Author: Arne Lüdtke
    + * Privater Konstruktor für clone */ private FreshSuperWildcardType(ObjectType superBound,SyntaxTreeNode parent,int offset, String name) { @@ -27,8 +27,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshSuperWildcardType clone() @@ -50,8 +50,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt die Grenze der Wildcard zurück + * Author: Arne Lüdtke
    + * Gibt die Grenze der Wildcard zurück */ public ObjectType get_SuperBound() { @@ -59,8 +59,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { @@ -74,9 +74,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt die passende SuperWildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende SuperWildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public SuperWildcardType get_WildcardType() { @@ -84,9 +84,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java index 535545af..73f8019c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java @@ -14,8 +14,8 @@ public class FreshWildcardType extends Type { private Menge upperBounds = new Menge(); /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshWildcard */ public FreshWildcardType(SyntaxTreeNode parent, int offset) { @@ -24,9 +24,9 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Protected Konstruktor für clone. - * Protected, da vererbte Klassen ihn verwenden müssen. + * Author: Arne Lüdtke
    + * Protected Konstruktor für clone. + * Protected, da vererbte Klassen ihn verwenden müssen. */ protected FreshWildcardType(SyntaxTreeNode parent, int offset, String name) { @@ -35,8 +35,8 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -56,8 +56,8 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshWildcardType clone() @@ -66,19 +66,19 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { //Da die Namensgebung von Typeplaceholdern und FreshWildcards identisch ist, - //und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird, + //und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird, //Wenn eine FreshWildcard mit einem TypePlaceholder verglichen wird. return (obj instanceof FreshWildcardType) && super.equals(obj); } /** - * Erzeugt einen neuen Namen, und gibt diesen zurück + * Erzeugt einen neuen Namen, und gibt diesen zurück * Methode aus TypePlaceholder kopiert */ private static JavaClassName makeNewName() @@ -86,14 +86,14 @@ public class FreshWildcardType extends Type { // luar: Methode aus TypePlaceholder kopiert. String strReturn = strNextName; - // n�chster Name berechnen und in strNextName speichern + // n�chster Name berechnen und in strNextName speichern inc( strNextName.length() - 1 ); return new JavaClassName(strReturn); } /** - * Hilfsmethode für makeNewName + * Hilfsmethode für makeNewName * Methode aus TypePlaceholder kopiert */ private static void inc(int i) @@ -112,18 +112,18 @@ public class FreshWildcardType extends Type { // aktuelle Stelle: auf A zuruecksetzen manipulate( i, 'A' ); - // vorherige Stelle erh�hen + // vorherige Stelle erh�hen inc( i - 1 ); } else { - // aktueller Buchstabe �ndern + // aktueller Buchstabe �ndern manipulate( i, cBuchstabe ); } } /** - * Hilfsmethode für makeNewName + * Hilfsmethode für makeNewName * Methode aus TypePlaceholder kopiert */ private static void manipulate( int nStelle, char nWert ) @@ -141,24 +141,24 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt die passende WildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende WildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public WildcardType get_WildcardType() { return new WildcardType(null, this.getParent(),this.getOffset()); } /** - * Author: Arne Lüdtke
    - * Gibt den Menge der oberen Grenzen zurück + * Author: Arne Lüdtke
    + * Gibt den Menge der oberen Grenzen zurück */ public Menge get_UpperBounds() { return this.upperBounds; } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Menge der oberen Grenzen */ public void set_UpperBounds(Menge bounds) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 30d3d317..a1492e46 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -24,8 +24,8 @@ import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; // ino.class.GenericTypeVar.26505.description type=javadoc /** - * TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert. - * @author J�rg B�uerle + * TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert. + * @author J�rg B�uerle * @version $Date: 2013/09/22 20:12:53 $ */ // ino.end @@ -38,9 +38,9 @@ public class GenericTypeVar extends ObjectType //Menge extendVars = new Menge(); protected Pair genericConstraint; /** - * Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch - * Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation. - *
    Autor: J�rg B�uerle + * Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch + * Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation. + *
    Autor: J�rg B�uerle */ // ino.method.GenericTypeVar.26509.defdescription type=line // private Hashtable> m_TypeErasureList; @@ -79,7 +79,7 @@ public class GenericTypeVar extends ObjectType */ // ino.method.clone.26512.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -94,7 +94,7 @@ public class GenericTypeVar extends ObjectType // ino.method.equals.26515.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param obj * @return */ @@ -200,7 +200,7 @@ public class GenericTypeVar extends ObjectType } /** - * Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions. + * Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions. * @param ass * @return */ @@ -212,7 +212,7 @@ public class GenericTypeVar extends ObjectType @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden. + ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden. return super.TYPE(ass, parent); } @@ -224,7 +224,7 @@ public class GenericTypeVar extends ObjectType public void parserPostProcessing(SyntaxTreeNode parent) { //SyntaxTreeNode parentTemp = this.parent; super.parserPostProcessing(parent); - //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. + //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. } public GTVDeclarationContext getDeclarationContext() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java b/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java index 0395001e..1a125293 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java @@ -2,17 +2,17 @@ package de.dhbwstuttgart.syntaxtree.type; /** * Dieses Interface wird von allen Klassen implementiert, die weitere Klassen - * enthalten, die im match des Unify beachtet werden müssen. + * enthalten, die im match des Unify beachtet werden müssen. * - * @author Arne Lüdtke + * @author Arne Lüdtke * */ public interface IMatchable { /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ Type getMatchType(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java b/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java index 2c8ad5c0..3ad4a511 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java @@ -2,16 +2,16 @@ package de.dhbwstuttgart.syntaxtree.type; /** * Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten. - * Wird für diverse Hilfsmethoden verwendet. + * Wird für diverse Hilfsmethoden verwendet. * - * @author Arne Lüdtke + * @author Arne Lüdtke * */ public interface ITypeContainer { /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). * Implementiert ITypeContainer */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java b/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java index e94dc34e..84f0b1da 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java @@ -22,7 +22,7 @@ public class IntegerType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class IntegerType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java b/src/de/dhbwstuttgart/syntaxtree/type/LongType.java index a465dcd8..5b016403 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/LongType.java @@ -22,7 +22,7 @@ public class LongType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class LongType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 321b222b..bb938fe8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -86,7 +86,7 @@ public class RefType extends ObjectType implements IMatchable public int hashCode() { int hash = 0; hash += super.hashCode(); - hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps + hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps return hash; } @@ -114,8 +114,8 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * Erstellt einen Referenztyp aus dem übergebenen Type. - * Dabei wird der Name und der Offset des baseType's übernommen. + * Erstellt einen Referenztyp aus dem übergebenen Type. + * Dabei wird der Name und der Offset des baseType's übernommen. * @param baseType */ public RefType( Type baseType){ @@ -229,8 +229,8 @@ public class RefType extends ObjectType implements IMatchable /** * HOTI * Diese Methode sucht in der Klassendefinition nach einen GTV, die - * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden - * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls * angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert * die Methode null. * @param type @@ -314,8 +314,8 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus. - * In einem RefType dürfen keine GTVs enthalten sein. + * Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus. + * In einem RefType dürfen keine GTVs enthalten sein. * @param v */ // ino.method.set_ParaList.26661.definition @@ -336,7 +336,7 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus + * @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus */ // ino.method.get_ParaList.26664.definition public Menge get_ParaList() @@ -737,9 +737,9 @@ public class RefType extends ObjectType implements IMatchable } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java b/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java index 9426f88f..e7c4a3bf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java @@ -21,7 +21,7 @@ public class ReturnType extends Type // ino.method.equals.26710.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -42,7 +42,7 @@ public class ReturnType extends Type // ino.method.clone.26713.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index cd477222..be2ba3b6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -23,8 +23,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine SuperWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine SuperWildcard */ public SuperWildcardType(int offset, ObjectType innerType) { @@ -32,10 +32,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt den Typen in der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt den Typen in der Wildcard zurück. * Beispiel: ? super Integer. - * Integer wird zurückgegeben. + * Integer wird zurückgegeben. */ public ObjectType get_SuperType() { @@ -43,8 +43,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -52,8 +52,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public SuperWildcardType clone() @@ -63,9 +63,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshSuperWildcardType GetFreshWildcardType() { @@ -73,9 +73,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_innerType(). - * Überschreibt die Methode der Superklasse + * Ãœberschreibt die Methode der Superklasse */ public Type GetWildcardType() { @@ -83,7 +83,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard * @param T - Type to be set */ @@ -94,7 +94,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_innerType(). * Implementiert ITypeContainer */ @@ -104,9 +104,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { @@ -119,7 +119,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Vergleicht mit einem anderen Objekt. * @param obj - Object to compare. */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index 55dbc284..801dd754 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -170,7 +170,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.equals.26765.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -194,7 +194,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.clone.26768.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return // ino.end @@ -212,7 +212,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.toString.26771.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -288,7 +288,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset } /** - * Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt. + * Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt. * @param tph * @return */ @@ -297,9 +297,9 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset } /** - * Prüft ob der Typ in den Assumptions ass vorhanden ist. - * Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird. - * @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + * Prüft ob der Typ in den Assumptions ass vorhanden ist. + * Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird. + * @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ ConstraintType t = ass.getTypeFor(this, this); @@ -308,7 +308,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return t; } */ - //TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen. + //TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen. public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ ConstraintType t = ass.getTypeFor(this, parent); if(t==null) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 2db31137..41a43d47 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -20,11 +20,11 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; // ino.class.TypePlaceholder.26780.description type=javadoc /** - * Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben + * Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben * Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool * und * ist in einer zentralen Registry, d.h. einer Hashtable abgelegt. - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/06/19 12:45:37 $ */ // ino.end @@ -50,9 +50,9 @@ public class TypePlaceholder extends ObjectType // ino.method.TypePlaceholder.26794.defdescription type=javadoc /** - * Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die + * Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die * Factory-Methode fresh() erzeugt. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param typeName Der Name der TypePlaceholder-Variablen */ // ino.end @@ -64,14 +64,14 @@ public class TypePlaceholder extends ObjectType super(parent, -1); if(typeName == null)throw new NullPointerException(); this.name = new JavaClassName(typeName); - if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE); + if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE); } // ino.end // ino.method.getInstance.26797.defdescription type=javadoc /** * Statische Methode, um einen TypePlaceholder aus der Registry zu holen. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param name Der Name des TypePlaceholders * @return Der TypePlaceholder oder null, falls er nicht in der * Registry existiert @@ -88,7 +88,7 @@ public class TypePlaceholder extends ObjectType /** * Generiert einen neuen TPH mit einem bestimmten Namen. - * Wird benötigt, wenn aus Generischen Variablen TPH generiert werden. + * Wird benötigt, wenn aus Generischen Variablen TPH generiert werden. * @param name * @return */ @@ -110,7 +110,7 @@ public class TypePlaceholder extends ObjectType /** * @author Andreas Stadelmeier, a10023 * Ruft die TypePlaceholder.fresh()-Methode auf. - * Fügt zusätzlich einen Replacementlistener hinzu. + * Fügt zusätzlich einen Replacementlistener hinzu. * @param listener * @return */ @@ -129,8 +129,8 @@ public class TypePlaceholder extends ObjectType // ino.method.makeNewName.26803.defdescription type=javadoc /** - * Berechnet einen neuen, eindeutigen Namen f�r eine neue - * TypePlaceholder.
    Author: J�rg B�uerle + * Berechnet einen neuen, eindeutigen Namen f�r eine neue + * TypePlaceholder.
    Author: J�rg B�uerle * @return Der Name */ // ino.end @@ -142,7 +142,7 @@ public class TypePlaceholder extends ObjectType // otth: Funktion berechnet einen neuen Namen anhand eines alten gespeicherten String strReturn = strNextName; - // n�chster Name berechnen und in strNextName speichern + // n�chster Name berechnen und in strNextName speichern inc( strNextName.length() - 1 ); return strReturn; @@ -152,7 +152,7 @@ public class TypePlaceholder extends ObjectType // ino.method.inc.26806.defdescription type=javadoc /** * Hilfsfunktion zur Berechnung eines neuen Namens - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param i */ // ino.end @@ -162,10 +162,10 @@ public class TypePlaceholder extends ObjectType // ino.method.inc.26806.body { // otth: Hilfsfunktion zur Berechnung eines neuen Namens - // otth: Erh�hung des Buchstabens an der Stelle i im String strNextName - // otth: Nach �berlauf: rekursiver Aufruf + // otth: Erh�hung des Buchstabens an der Stelle i im String strNextName + // otth: Nach �berlauf: rekursiver Aufruf - // falls i = -1 --> neuer Buchstabe vorne anf�gen + // falls i = -1 --> neuer Buchstabe vorne anf�gen if ( i == -1 ) { strNextName = "A" + strNextName; @@ -179,12 +179,12 @@ public class TypePlaceholder extends ObjectType // aktuelle Stelle: auf A zuruecksetzen manipulate( i, 'A' ); - // vorherige Stelle erh�hen + // vorherige Stelle erh�hen inc( i - 1 ); } else { - // aktueller Buchstabe �ndern + // aktueller Buchstabe �ndern manipulate( i, cBuchstabe ); } @@ -194,7 +194,7 @@ public class TypePlaceholder extends ObjectType // ino.method.manipulate.26809.defdescription type=javadoc /** * Hilfsfunktion zur Berechnung eines neuen Namens. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param nStelle * @param nWert */ @@ -221,7 +221,7 @@ public class TypePlaceholder extends ObjectType // ino.method.equals.26812.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -244,9 +244,9 @@ public class TypePlaceholder extends ObjectType // ino.method.deleteRegistry.26839.defdescription type=javadoc /** - * L�scht die komplette Registry von TypePlaceholders. Sollte nur und - * ausschlie�lich von MyCompiler.init() aufgerufen werden!!! - *
    Author: J�rg B�uerle + * L�scht die komplette Registry von TypePlaceholders. Sollte nur und + * ausschlie�lich von MyCompiler.init() aufgerufen werden!!! + *
    Author: J�rg B�uerle */ // ino.end // ino.method.deleteRegistry.26839.definition @@ -262,12 +262,12 @@ public class TypePlaceholder extends ObjectType // ino.method.clone.26842.defdescription type=javadoc /** * Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die - * Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen + * Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen * muss.
    * Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich - * �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen + * �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen * benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -283,7 +283,7 @@ public class TypePlaceholder extends ObjectType /** * @author Andreas Stadelmeier, a10023 - * Überschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!) + * Ãœberschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!) */ @Override public String get_Name(){ @@ -300,15 +300,15 @@ public class TypePlaceholder extends ObjectType // ino.end /////////////////////////////////////////////////////////////////// - // Spezialfunktionen, f�r makeFC() und unify() + // Spezialfunktionen, f�r makeFC() und unify() // Sollten sonst nicht aufgerufen werden... /////////////////////////////////////////////////////////////////// // ino.method.backdoorFresh.26848.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen - * werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. - *
    Author: J�rg B�uerle + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen + * werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. + *
    Author: J�rg B�uerle * @return Eine neue TypePlaceholder */ // ino.end @@ -332,14 +332,14 @@ public class TypePlaceholder extends ObjectType // ino.method.backdoorSetName.26851.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    * ACHTUNG: Diese TypePlaceholder darf nicht Teil des abstrakten * Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende - * TypePlaceholder nicht �ber die Methode fresh(), - * sondern �ber backdoorCreate() oder backdoorClone() + * TypePlaceholder nicht �ber die Methode fresh(), + * sondern �ber backdoorCreate() oder backdoorClone() * erzeugt worden ist. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param varName Der Name des zu erzeugenden TypePlaceholders */ // ino.end @@ -354,10 +354,10 @@ public class TypePlaceholder extends ObjectType // ino.method.backdoorCreate.26854.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in - * der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig - * losgel�st vom abstrakten Syntaxbaum.
    Author: J�rg B�uerle + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in + * der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig + * losgel�st vom abstrakten Syntaxbaum.
    Author: J�rg B�uerle * @param name * @return */ @@ -387,9 +387,9 @@ public class TypePlaceholder extends ObjectType public JavaCodeResult printJavaCode(ResultSet resultSet) { Type equalType = resultSet.getTypeEqualTo(this); if(equalType == null || equalType.equals(this)){ - //Für den Fall das der TPH nicht aufgelöst werden konnte. + //Für den Fall das der TPH nicht aufgelöst werden konnte. JavaCodeResult ret = new JavaCodeResult(this.getName().toString()); - //Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden + //Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden ret.addUnresolvedTPH(this); return ret; } @@ -401,9 +401,9 @@ public class TypePlaceholder extends ObjectType * Berechnet die InsertPoints dieses TypePlaceholders. * Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert, * ob sie von TypeInsertable erben. - * Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint. + * Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint. * Mehrere TypeInsertPoint's ergeben ein TypeInsertSet. - * @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält. + * @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält. * @return * @see TypeInsertPoint */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Void.java b/src/de/dhbwstuttgart/syntaxtree/type/Void.java index 1e58e564..e97a809f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Void.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Void.java @@ -26,7 +26,7 @@ public class Void extends RefType // ino.method.equals.26864.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -57,7 +57,7 @@ public class Void extends RefType // ino.method.clone.26867.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -77,7 +77,7 @@ public class Void extends RefType @Override public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method) { - return this;//VOID ist immer korrekt, das wird vom Parser geprüft + return this;//VOID ist immer korrekt, das wird vom Parser geprüft } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index e051c38d..b07a94b6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -21,8 +21,8 @@ public class WildcardType extends Type{ protected ObjectType innerType = null; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine Wildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine Wildcard */ public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset) { @@ -31,8 +31,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. */ public WildcardType clone() { @@ -49,9 +49,9 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshWildcardType GetFreshWildcardType() { @@ -59,8 +59,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Die Allgemeine Wildcard enthält keinen Typen. + * Author: Arne Lüdtke
    + * Die Allgemeine Wildcard enthält keinen Typen. */ public Type GetWildcardType() { @@ -68,7 +68,7 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen. * @param T - Type to be set */ diff --git a/src/de/dhbwstuttgart/typeinference/FunN.java b/src/de/dhbwstuttgart/typeinference/FunN.java index 4a47c75c..d03559ec 100755 --- a/src/de/dhbwstuttgart/typeinference/FunN.java +++ b/src/de/dhbwstuttgart/typeinference/FunN.java @@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; /** - * @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke + * @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke * "interface FunN { R apply(T1 arg1, T2 arg2, ... , TN argN); }" * @author A10023 - Andreas Stadelmeier * @@ -30,7 +30,7 @@ public class FunN extends RefType { /** * @author Andreas Stadelmeier, a10023 - * Benötigt für den Typinferenzalgorithmus für Java 8 + * Benötigt für den Typinferenzalgorithmus für Java 8 * Generiert einen RefType auf eine FunN - Klasse. * @param R * @param T @@ -73,8 +73,8 @@ public class FunN extends RefType { } /** - * Muss nach jeder Änderung von T oder R aufgerufen werden. - * Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus. + * Muss nach jeder Änderung von T oder R aufgerufen werden. + * Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus. */ private void calculateNewParalist(){ Menge t = new Menge(); @@ -143,7 +143,7 @@ public class FunN extends RefType { } */ /** - * Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden. + * Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden. @Override public FunN clone() { diff --git a/src/de/dhbwstuttgart/typeinference/FunNInterface.java b/src/de/dhbwstuttgart/typeinference/FunNInterface.java index 9f285fe9..2074e03b 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNInterface.java +++ b/src/de/dhbwstuttgart/typeinference/FunNInterface.java @@ -20,13 +20,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; */ public class FunNInterface extends Class{ //TODO: Diese Klasse sollte eigentlich von Interface erben - //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. + //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. //private Menge gtvparalist; /** - * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. + * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. * @param N - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt R apply(T1 par1); */ public FunNInterface(int N) { @@ -72,7 +72,7 @@ public class FunNInterface extends Class{ } /** - * Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode + * Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode * @return */ private FunNMethod getApplyFunction(){ diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index 07a4182c..1a7f6e74 100755 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -18,12 +18,12 @@ public class FunNMethod extends Method{ */ public FunNMethod(Menge paralist){ super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode - int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp + int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp this.setType(paralist.firstElement()); this.set_DeclId(new DeclId("apply")); ParameterList pl = new ParameterList(); Menge fpList = new Menge(); - for(int i = 1;i fpList = new Menge(); - for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. + for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. DeclId paramName = new DeclId("T"+i); FormalParameter parameter = new FormalParameter(paramName); parameter.setType(TypePlaceholder.fresh(parameter)); diff --git a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java index c5cf63a3..fff505d2 100755 --- a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java +++ b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java @@ -24,7 +24,7 @@ public class JavaCodeResult{ public JavaCodeResult attach(JavaCodeResult javaCodeResult){ this.javaCode += javaCodeResult.getJavaCode(); - //Alle TPH anfügen: + //Alle TPH anfügen: for(TypePlaceholder tph : javaCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph); return this; } @@ -39,7 +39,7 @@ public class JavaCodeResult{ } /** - * Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden. + * Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden. * Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ. * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 7646b1d6..527e8f4e 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -13,7 +13,7 @@ public abstract class KarthesischesProdukt { ret.add(v); } return ret; - //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); } return berechneKarthesischesProdukt(m1, null); } @@ -45,7 +45,7 @@ public abstract class KarthesischesProdukt { ret = new Menge>(); ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) ); }else{ - throw new TypinferenzException("Der übergebene Vektor m1 ist leer."); + throw new TypinferenzException("Der übergebene Vektor m1 ist leer."); } return ret;*/ @@ -53,10 +53,10 @@ public abstract class KarthesischesProdukt { private static Menge> karthesischesProdukt(Menge m1, Menge m2){ Menge> ret = new Menge>(); - /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden + /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden if(m2.size() == 0){//Sonderfall, m2 ist leer: ret.add(m1); - return ret; //Die restliche Berechnungen können übersprungen werden. + return ret; //Die restliche Berechnungen können übersprungen werden. } */ //for(M o1 : m1){ diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index e48ac30e..1db2aa71 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -15,7 +15,7 @@ public class OderConstraint extends OderMenge{ private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); /** - * Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu. + * Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu. * @param p1 * @param p2 */ @@ -30,7 +30,7 @@ public class OderConstraint extends OderMenge{ /** - * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. + * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. * @return public Menge getConstraintPairs(){ @@ -44,7 +44,7 @@ public class OderConstraint extends OderMenge{ */ /** - * Fügt ein Pair(p1, p2) dem Constraint hinzu + * Fügt ein Pair(p1, p2) dem Constraint hinzu * @param p1 * @param p2 */ @@ -64,7 +64,7 @@ public class OderConstraint extends OderMenge{ this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint); } - //TODO: Funktionalität für filter implementieren + //TODO: Funktionalität für filter implementieren void filterWrongConstraints(Unifier unifier) { /* Menge filteredConstraints = new Menge<>(); diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 01d74989..1d08ae51 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -43,15 +43,15 @@ public class Pair // ino.attribute.bSubst.26552.decldescription type=line // false <--> vorinitialisierter Wert // true <--> Dieses Paar entstand durch reduce1-Regel (=.) - // --> Name von TA1 mu� gleich sein wie Name von TA2 + // --> Name von TA1 mu� gleich sein wie Name von TA2 // Nur noch reduce2-Regel anwendbar // luar 15-04-2007 - // Der Unify mit Wildcards benötigt 3 verschiedene Operatoren. + // Der Unify mit Wildcards benötigt 3 verschiedene Operatoren. // Deshalb wurde der boolean durch einen Enum ersetzt. // Smaller <--> vorinitialisierter Wert // SmallerExtends <--> Kleiner extends (wie vorinitialisiert, nur mit einschluss der Wildcard) - // Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein. + // Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein. // ino.end // ino.attribute.bSubst.26552.declaration @@ -301,7 +301,7 @@ public class Pair // ino.method.equals.26588.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param obj * @return */ @@ -321,8 +321,8 @@ public class Pair // ino.end /** - * Author: Arne Lüdtke
    - * Überprüft ob die Paare die gleichen Instanzen sind. + * Author: Arne Lüdtke
    + * Ãœberprüft ob die Paare die gleichen Instanzen sind. */ public boolean instanzeEquals(Object obj) { @@ -330,7 +330,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ Equal ist. */ public boolean OperatorEqual() @@ -339,7 +339,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ Smaller ist. */ public boolean OperatorSmaller() @@ -348,7 +348,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ SmallerExtends ist. */ public boolean OperatorSmallerExtends() @@ -357,8 +357,8 @@ public class Pair } /** - * Author: Arne Lüdtke
    - * Gibt den Operator zurück. + * Author: Arne Lüdtke
    + * Gibt den Operator zurück. */ public PairOperator GetOperator() { @@ -366,7 +366,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Operator * @param operator - Operator to set. */ @@ -376,7 +376,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Erzeugt einen Klon des Paares. */ public Pair clone() @@ -385,8 +385,8 @@ public class Pair } /** - * Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück. - * (Immer zwischen 0 und 2 Stück ;P) + * Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück. + * (Immer zwischen 0 und 2 Stück ;P) * @return */ public Menge getTypePlaceholder() { diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index 6073b795..64737673 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -33,7 +33,7 @@ public class ResultSet implements Iterable { } /** - * Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void + * Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void * @param type * @return */ @@ -62,7 +62,7 @@ public class ResultSet implements Iterable { } /** - * Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst. + * Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst. * Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht. * @param tA1 * @return true, falls der gesuchte Typ enthalten ist. @@ -86,7 +86,7 @@ public class ResultSet implements Iterable { /** - * Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen. + * Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen. * Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt. * @return */ @@ -109,7 +109,7 @@ public class ResultSet implements Iterable { } /** - * Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden. + * Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden. * @param unresolvedTPH * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 49639533..8b0907f0 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -11,9 +11,9 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** - * Beschreibung von Herrn Plümicke: - * "The set of constraints consists of constraints of the form θ R θ' , where θ and - * θ' are Java types and R (R ∈ { < , { - //private Pair constraintPair; //entspricht θ condition θ' + //private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) public SingleConstraint(ConstraintType p1, ConstraintType p2){ @@ -41,7 +41,7 @@ public class SingleConstraint extends EinzelElement{ } /* - @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. + @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. public Menge getConstraintPairs(){ Menge ret = new Menge(); ret.add(constraintPair); @@ -50,7 +50,7 @@ public class SingleConstraint extends EinzelElement{ */ public void addConstraint(ConstraintPair toAdd){ - //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); + //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); Type p1 = toAdd.getPair().TA1; Type p2 = toAdd.getPair().TA2; @@ -64,12 +64,12 @@ public class SingleConstraint extends EinzelElement{ //if((p1 instanceof GenericTypeVar))p1 = ((GenericTypeVar)p1).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// //if((p2 instanceof GenericTypeVar))p2 = ((GenericTypeVar)p2).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// - // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. + // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1); //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2); //if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2))) - //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: + //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: // throw new TypinferenzException("Ein Constraint darf nur aus TypePlaceholdern und Reftypes bestehen"); //} //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); diff --git a/src/de/dhbwstuttgart/typeinference/TypeInsertable.java b/src/de/dhbwstuttgart/typeinference/TypeInsertable.java index 39411208..f4b62ddb 100644 --- a/src/de/dhbwstuttgart/typeinference/TypeInsertable.java +++ b/src/de/dhbwstuttgart/typeinference/TypeInsertable.java @@ -11,11 +11,11 @@ public interface TypeInsertable extends Typeable, IItemWithOffset { public String getIdentifier(); /** - * Errechnet den TypeInsertPoint für das TypeInsertable. - * TypeInsertPoints sollten nur über diese Funktion erstellt werden. + * Errechnet den TypeInsertPoint für das TypeInsertable. + * TypeInsertPoints sollten nur über diese Funktion erstellt werden. * @param tph * @param resultSet - * @return - kann auch null zurückgeben. + * @return - kann auch null zurückgeben. */ public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet); diff --git a/src/de/dhbwstuttgart/typeinference/Typeable.java b/src/de/dhbwstuttgart/typeinference/Typeable.java index 72c902d3..85118f5d 100755 --- a/src/de/dhbwstuttgart/typeinference/Typeable.java +++ b/src/de/dhbwstuttgart/typeinference/Typeable.java @@ -6,7 +6,7 @@ public interface Typeable { /** * @author Andreas Stadelmeier, a10023 * Jede Expression und jedes Statement muss im Zuge des Typinferenzalgorithmus das Interfece Typable einbinden. - * Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden. + * Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden. * Dabei kann auch eine FreshTypeVariable als Typ vergeben werden. * @param typ Der Typ der Typable-Expression/Statement */ diff --git a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java index 58297499..7c5d9f9a 100755 --- a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java @@ -19,12 +19,12 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; // ino.class.CTypeReconstructionResult.27238.description type=javadoc /** - * Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche + * Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche * Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine - * Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
    - * Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die - * Compiler-API zur�ckgegeben. - * @author J�rg B�uerle + * Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
    + * Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die + * Compiler-API zur�ckgegeben. + * @author J�rg B�uerle * @version $Date: 2013/09/22 20:13:02 $ */ // ino.end @@ -41,7 +41,7 @@ public class TypeinferenceResultSet * Das unifizierte ConstaraintsSet */ private ResultSet unifiedConstraints; - private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert. + private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert. // ino.method.CTypeReconstructionResult.27256.definition public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge constraints, ResultSet unifiedConstraints) @@ -57,7 +57,7 @@ public class TypeinferenceResultSet /** * @author Andreas Stadelmeier, a10023 * Anhand des Syntaxbaums errechnet der Typinferenzalgorithmus ein Set von Constraints. - * Diese Funktion ist nur für automatisierte Tests interessant. + * Diese Funktion ist nur für automatisierte Tests interessant. * Zum abrufen der Unifizierten Constraints siehe getUnifiedConstraints() * @return */ @@ -67,8 +67,8 @@ public class TypeinferenceResultSet /** * @author Andreas Stadelmeier, a10023 - * Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints. - * Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu. + * Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints. + * Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu. * @return Das fertige ConstraintsSet dieser CTypeRecunstructionResult */ public ResultSet getUnifiedConstraints() { @@ -77,7 +77,7 @@ public class TypeinferenceResultSet /** - * Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert. + * Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert. * @author Andreas Stadelmeier, a10023 */ public Type getTypeOfPlaceholder(TypePlaceholder tph){ @@ -86,7 +86,7 @@ public class TypeinferenceResultSet /** * Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse. - * @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist. + * @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist. */ public de.dhbwstuttgart.syntaxtree.Class getInterferedClass(){ return this.ownerOfResultSet; @@ -98,8 +98,8 @@ public class TypeinferenceResultSet } /** - * Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext - * Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet. + * Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext + * Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet. * * @return */ @@ -112,7 +112,7 @@ public class TypeinferenceResultSet } /** - * Startet die Bytecodegenerierung dieser Lösung. + * Startet die Bytecodegenerierung dieser Lösung. * Dabei wird die codegen-Methode der inferierten Klasse mit diesem ResultSet aufgerufen. */ public void codegen(){ diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 55d3e67c..3c221d66 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -7,7 +7,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.unify.Unifier; /** - * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. + * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index 1f4d75df..709b263d 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -34,7 +34,7 @@ public class UndMenge
    implements KomplexeMenge{ ret = km.cartesianProduct(); }else{ Menge> cartesianProduct = new Menge<>(); - for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: + for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: Menge undElement = new Menge(); undElement.addAll(cloner.deepClone(r)); undElement.addAll(m); diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java index 837dcfa4..0c66535e 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java @@ -11,7 +11,7 @@ public class Assumption { private TypeInsertable typable; /** - * Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden. + * Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden. */ protected Assumption(){ } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java index ffbcec8f..89364bc0 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.assumptions; import de.dhbwstuttgart.syntaxtree.FormalParameter; /** - * ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode. + * ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode. * * @author janulrich * diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 5a017420..f9b4428d 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** * Eine Sammlung von TypeAssumptions. - * Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben. + * Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben. * @author janulrich * * Es gibt verschiedene Assumptions: @@ -52,7 +52,7 @@ public class TypeAssumptions { /** * Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this" - * @param klassenname - Wert für "this" + * @param klassenname - Wert für "this" */ public TypeAssumptions(){ //this.thisClassName = klassenname; @@ -64,7 +64,7 @@ public class TypeAssumptions { } /** - * Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht. + * Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht. * @param withName * @return */ @@ -80,7 +80,7 @@ public class TypeAssumptions { * Liefert den Typ einer Feldvariable der Klasse inClass * @param withName * @param inClass - * @return null, falls die Klasse kein zugängliches Feld enthält + * @return null, falls die Klasse kein zugängliches Feld enthält */ public Type getTypeOfFieldVar(String withName, Class inClass){ for(FieldAssumption fa : this.getFieldVars(withName)){ @@ -102,7 +102,7 @@ public class TypeAssumptions { } /** - * Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse + * Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse * @param withName * @return */ @@ -121,7 +121,7 @@ public class TypeAssumptions { * Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern. * @param methodName * @param i Die Parameter, welche die Methode verarbeiten soll - * @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können. + * @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können. */ public Menge getMethodAssumptions(String methodName, int parameterCount){ Menge ret = new Menge(); @@ -133,7 +133,7 @@ public class TypeAssumptions { //TODO: Dieser Teil mit der Generierung von FunN-Methoden kann raus, da die FunNInterfaces sich in den Basic-Assumptions befinden sollten. //Falls es sich um die apply-Methode eines FunN-Interface handelt: - //if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen. + //if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen. //CMethodTypeAssumption funNAssumption = new FunN(parameterCount).toCMethodTypeAssumption(); // MethodAssumption funNAssumption = new MethodAssumption(new FunNMethod(parameterCount), new FunNInterface(parameter)); // ret.add(funNAssumption); @@ -144,11 +144,11 @@ public class TypeAssumptions { /** - * Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen. - * In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht. + * Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen. + * In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht. * @param variableName - der Identifier der gesuchten Variablen - * @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht. - * @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt. + * @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht. + * @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt. */ public Type getVarType(String variableName, Class inScope){ //Zuerst die Parameter durchsuchen @@ -193,7 +193,7 @@ public class TypeAssumptions { } /** - * Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind. + * Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind. * @param className * @return */ @@ -280,7 +280,7 @@ public class TypeAssumptions { /** * Kontrolliert den vom Parser gesetzten Typ. - * Erweitert dessen Bezeichnung, wenn nötig. + * Erweitert dessen Bezeichnung, wenn nötig. * @param t * @return null, falls der Typ nicht vorhanden ist. */ @@ -305,14 +305,14 @@ public class TypeAssumptions { match = name.equals(typName); if(match && t instanceof RefType){ RefType tr = (RefType)t; - RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer) + RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer) - //Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben: + //Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben: if(tr.get_ParaList()!=null && tr.getParaList().size()>0){ ret.set_ParaList(tr.getParaList()); } - //Der RefType muss zusätzlich seine Parameter prüfen. + //Der RefType muss zusätzlich seine Parameter prüfen. Menge parameterList = new Menge<>(); if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){ ConstraintType ct = param.TYPE(this, inNode); @@ -334,7 +334,7 @@ public class TypeAssumptions { GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext(); //Der GTV-Kontext von inNOde GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext(); - //Überprüfungen (siehe Dokumentation): + //Ãœberprüfungen (siehe Dokumentation): if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false; }else{ //GTV wurde in Methode oder Feld definiert: @@ -353,7 +353,7 @@ public class TypeAssumptions { } if(t.getName() == null)throw new DebugException(t.toString()); - //Spezialfälle bei char, int, boolean, .... + //Spezialfälle bei char, int, boolean, .... String name = t.getName().toString(); switch(name){ case "int": @@ -374,8 +374,8 @@ public class TypeAssumptions { } /** - * Fügt eine TypAssumption an. - * Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind. + * Fügt eine TypAssumption an. + * Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind. * Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren. * @param classAssumption */ @@ -397,7 +397,7 @@ public class TypeAssumptions { } /** - * Fügt eine Generische Typvariablen den Assumptions hinzu + * Fügt eine Generische Typvariablen den Assumptions hinzu * @param genericTypeVar */ public void addGenericVarAssumption( @@ -410,13 +410,13 @@ public class TypeAssumptions { } public Type checkType(RefType type, SyntaxTreeNode parent) { - ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen + ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen type.setName(t.getType().getName()); //Und diesen auf den Typ anwenden return t.getType(); } /** - * Prüft einen Typ auf das vorhandensein in den BasicAssumptions. + * Prüft einen Typ auf das vorhandensein in den BasicAssumptions. * Dabei werden alle Konstruktoren nach diesem Typ durchsucht. Denn jede Klasse hat einen Konstruktor und der muss in den TypeAssumptions vorhanden sein. * @param t * @return diff --git a/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java b/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java index 69db2739..4108f1e7 100755 --- a/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java +++ b/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java @@ -4,8 +4,8 @@ import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; /** - * Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird. - * Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst. + * Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird. + * Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst. * @author Andreas Stadelmeier, a10023 * */ diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index 287774ef..50f9e081 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -17,9 +17,9 @@ import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** - * Ein InsertPoint für Generische Variablen + * Ein InsertPoint für Generische Variablen * Wird beim Einsetzen eines TIP generiert. - * Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile. + * Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile. * @author janulrich * */ @@ -37,7 +37,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint { } /** - * Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert. + * Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert. * @return */ public String getTypeInsertString() { @@ -55,7 +55,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint { @Override public int compareTo(SourcePatchPoint arg0) { int ret = super.compareTo(arg0); - if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden. + if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden. return ret; } @@ -95,7 +95,7 @@ class GenericVarPatch { private Menge usedTPHs; /** - * Fügt eine generische Variable in Form eines Pairs an. + * Fügt eine generische Variable in Form eines Pairs an. * @param p */ public void add(Pair p){ @@ -112,10 +112,10 @@ class GenericVarPatch { } public String getInsertString(ResultSet rs){ - //Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden: + //Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden: /* - * Dies geht mit der momentanen Variante nur für die genericVarDeclarations. - * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, + * Dies geht mit der momentanen Variante nur für die genericVarDeclarations. + * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, * welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind. */ Menge tmpGenVars = new Menge<>(); @@ -126,7 +126,7 @@ class GenericVarPatch { } this.genericVarDeclarations = tmpGenVars; - //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: + //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: String ret = ""; Iterator it1 = this.genericVarDeclarations.iterator(); boolean bereitsVorhanden = false; @@ -194,7 +194,7 @@ class GenericVarExtendsDeclarationPatch { private Pair genericPair; /** - * Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2 + * Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2 * @param tph * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java index 6e1dfded..2d4f0fc3 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java @@ -14,7 +14,7 @@ import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** - * Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar. + * Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar. * Mehrere TypeInsertPoint's werden in einem TypInsertSet zusammengefasst. * @author janulrich * @@ -41,7 +41,7 @@ public class TypeInsertPoint extends SourcePatchPoint { } /** - * Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein. + * Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein. * @param fileContent - der Quelltext * @param additionalOffset - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden. * @return @@ -59,7 +59,7 @@ public class TypeInsertPoint extends SourcePatchPoint { /** * - * @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde. + * @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde. */ public int getOffset(){ return this.getInsertPoint().getOffset(); @@ -79,7 +79,7 @@ public class TypeInsertPoint extends SourcePatchPoint { } /** - * @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt. + * @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt. */ public IItemWithOffset getInsertPoint(){ return this.point; diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 890c7a72..7e7bb3a0 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -19,9 +19,9 @@ import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; /** - * Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören. - * Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt, - * müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden. + * Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören. + * Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt, + * müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden. * @author janulrich * */ @@ -37,7 +37,7 @@ public class TypeInsertSet { } /** - * Fügt einen TypeInsertPoint dem TypeInsertSet hinzu. + * Fügt einen TypeInsertPoint dem TypeInsertSet hinzu. * @param typeInsertPoint * @return */ @@ -48,7 +48,7 @@ public class TypeInsertSet { } /** - * Fügt nur einen einzelnen TypeInsertPoint in fileContent ein. + * Fügt nur einen einzelnen TypeInsertPoint in fileContent ein. * @param tip * @param fileContent * @return @@ -60,7 +60,7 @@ public class TypeInsertSet { } /** - * Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu + * Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu * @param tip * @param tpj */ @@ -68,8 +68,8 @@ public class TypeInsertSet { /* * Ablauf: * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. - * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) - * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) + * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. @@ -102,7 +102,7 @@ public class TypeInsertSet { /* - // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) + // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){ if(!allTPHs.contains(tph)){ allTPHs.add(tph); @@ -144,7 +144,7 @@ public class TypeInsertSet { } /** - * Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein + * Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein * @param fileContent * @return */ @@ -160,7 +160,7 @@ public class TypeInsertSet { /** * * @param node - * @return - null, falls kein InsertPoint für node vorhanden. + * @return - null, falls kein InsertPoint für node vorhanden. */ public TypeInsertPoint getInsertPointFor(TypeInsertable node){ for(TypeInsertPoint point : points){ @@ -179,14 +179,14 @@ public class TypeInsertSet { //Jeder TypeInsertPoint muss auch in equals vorkommen: if(!equals.points.contains(point)) return false; - //... aber nicht öfter als 1x : + //... aber nicht öfter als 1x : if(equals.points.lastIndexOf(point)!=equals.points.indexOf(point))return false; } return true; } /** - * Fügt TypeInsertPoints an + * Fügt TypeInsertPoints an * @param insertPoints */ public void add(Menge insertPoints) { diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java index 42e776ce..eef00233 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java @@ -30,7 +30,7 @@ import de.dhbwstuttgart.typeinference.Pair; * TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser * Klasse werden in der Regel aus * Pair-Objekten erzeugt. - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2006/07/10 11:27:04 $ */ // ino.end @@ -74,7 +74,7 @@ public class CSubstitution // ino.method.CSubstitution.27021.body { if(!(unifier.TA1 instanceof TypePlaceholder)){ - throw new CTypeReconstructionException("Unifier enth�lt keinen Typeplaceholder",unifier.TA1); + throw new CTypeReconstructionException("Unifier enth�lt keinen Typeplaceholder",unifier.TA1); } m_TypeVar = (TypePlaceholder)unifier.TA1; m_Type = unifier.TA2; @@ -84,7 +84,7 @@ public class CSubstitution // ino.method.getType.27024.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the Type. */ // ino.end @@ -99,7 +99,7 @@ public class CSubstitution // ino.method.setType.27027.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param type The Type to set. */ // ino.end @@ -114,7 +114,7 @@ public class CSubstitution // ino.method.getTypeVar.27030.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the TypeVar. */ // ino.end @@ -129,7 +129,7 @@ public class CSubstitution // ino.method.setTypeVar.27033.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param typeVar The TypeVar to set. */ // ino.end @@ -184,7 +184,7 @@ public class CSubstitution // ino.method.applyUnifier.27048.defdescription type=javadoc /** * Wendet den Unifier auf die rechte Seite dieser Substitution an. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param unifier */ // ino.end @@ -207,8 +207,8 @@ public class CSubstitution // ino.method.applySubstitution.27051.defdescription type=javadoc /** - * Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an. - *
    Author: J�rg B�uerle + * Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an. + *
    Author: J�rg B�uerle * @param type Der zu untersuchende Typ * @param unifierSub Die anzuwendende Substitution * @return Den ermittelnden Typ diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java index 45a8f740..e1676902 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java @@ -11,7 +11,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; * TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser * Klasse werden in der Regel aus * Pair-Objekten erzeugt. - * @author Martin Pl�micke + * @author Martin Pl�micke * @version $Date: 2006/06/13 10:37:32 $ */ // ino.end @@ -45,7 +45,7 @@ public class CSubstitutionGenVar extends CSubstitution // ino.method.getTypeVar.27070.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the TypeVar. */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java index f02fd605..e10f62aa 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java @@ -12,7 +12,7 @@ import de.dhbwstuttgart.typeinference.Pair; // ino.class.CSubstitutionSet.27471.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/03/27 18:29:34 $ */ // ino.end @@ -71,7 +71,7 @@ public class CSubstitutionSet extends CVectorSet // ino.method.applyUnifier.27487.defdescription type=javadoc /** * Wendet den Unifier auf die rechten Seiten alle Substitutionen an. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param unifier */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java index e126c557..96d45191 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.typeinference.Menge; // ino.class.CMengeSet.27519.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/02/07 05:08:51 $ */ // ino.end @@ -85,9 +85,9 @@ public abstract class CVectorSet extends CSet // ino.end /** - * Fügt ein CMengeSet an! - * Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen) - * @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert) + * Fügt ein CMengeSet an! + * Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen) + * @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert) */ // ino.method.unite.27544.definition public void unite(CSet anotherSet) @@ -99,7 +99,7 @@ public abstract class CVectorSet extends CSet } CVectorSet MengeSet = (CVectorSet)anotherSet; - // Elemente der anderen Menge hinzuf�gen: + // Elemente der anderen Menge hinzuf�gen: Iterator it = MengeSet.getIterator(); while(it.hasNext()){ E elem = it.next(); diff --git a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java index 9dc23f47..708959ae 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java +++ b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java @@ -11,8 +11,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; // ino.class.FC_TTO.28013.description type=javadoc /** - * Hilfsklasse f�r den Unifizierungsalgorithmus - * @author Martin Pl�micke + * Hilfsklasse f�r den Unifizierungsalgorithmus + * @author Martin Pl�micke * @version $Date: 2013/05/12 14:00:05 $ */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 37e1857e..d10f9e41 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -46,7 +46,7 @@ import de.dhbwstuttgart.typeinference.UndConstraint; // ino.class.Unify.28049.description type=javadoc /** * Implementierung des Unifizierungsalgorithmus - * @author Martin Pl�micke, Thomas Ott + * @author Martin Pl�micke, Thomas Ott * @version $Date: 2013/05/22 22:23:50 $ */ // ino.end @@ -116,7 +116,7 @@ public class Unify * Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] * oder alle Elemente in der Form [A <. B, C <. D, ..., E in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ public static Menge> unify (Menge E, FC_TTO fc_tto) { @@ -140,7 +140,7 @@ public class Unify } else if(!(p.TA1 instanceof TypePlaceholder) && !(p.TA2 instanceof TypePlaceholder)) { - //Diese Paare können nicht mehr Unifiziert werden. fail. + //Diese Paare können nicht mehr Unifiziert werden. fail. inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten."); return new Menge>(); } @@ -152,8 +152,8 @@ public class Unify if(!Eq1.contains(p)) Eq2.add(p); } - /* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt. - * Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt + /* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt. + * Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt * werden, aus denen dann das kartesische Produkt gebildet wird.*/ Menge>> cartProduktSets = new Menge>>(); for(Pair p : Eq2) @@ -165,7 +165,7 @@ public class Unify p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); //HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12 //Dann ist THP <. TPH in Eq2 anstatt in Eq1 - //Muesste mit folgendem if gelöst sein. PL 15-03-17 + //Muesste mit folgendem if gelöst sein. PL 15-03-17 if (p.TA2 instanceof TypePlaceholder) { Eq1.addElement(p); // Eq2.remove(p); @@ -216,7 +216,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } -// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. +// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -315,7 +315,7 @@ public class Unify } else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) { - //Paar unverändert lassen, wenn eine GenericTypeVar ist + //Paar unverändert lassen, wenn eine GenericTypeVar ist Menge> setofsetofpairs = new Menge>(); Menge vTmp = new Menge(); vTmp.add(p); @@ -357,7 +357,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } - //Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. + //Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -532,7 +532,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } -// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. +// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA1)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -631,7 +631,7 @@ public class Unify } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern + //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); for (Menge> vecvecpair : cartProduktSets){ @@ -688,7 +688,7 @@ public class Unify } //Schritt 5: Einsetzen der Subst Regel - //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. + //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. Menge> changedSets = new Menge>(); Menge> notChangedSets = new Menge>(); for(Menge vecpair : bigCartProductErg) @@ -742,29 +742,29 @@ public class Unify } } - //Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird. + //Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird. Menge> Eq2Set = new Menge>(); - //Schritt 6A: Beginnen mit Schritt 1 bei den geänderten. + //Schritt 6A: Beginnen mit Schritt 1 bei den geänderten. for(Menge vecpair : changedSets) { Menge> unifyErgs = unify(vecpair,fc_tto); - //Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden. + //Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden. Eq2Set.addAll(unifyErgs); } - //Schritt 6B Einfügen der nicht geänderten. + //Schritt 6B Einfügen der nicht geänderten. //Schritt 7: Aussortieren der falschen Sets /* * Durch die Rekursion in Schritt 6A sind die Ergebnisse, welche in 6A dazukommen auf jeden Fall korrekt. - * Es müssen nur die Ergebnisse aus 6B geprüft werden. + * Es müssen nur die Ergebnisse aus 6B geprüft werden. */ for(Menge vecpair : notChangedSets) { - //Überprüfen ob Menge in SolvedForm ist. + //Ãœberprüfen ob Menge in SolvedForm ist. if(hasSolvedForm(vecpair)) //PL 13-05-22 hasSolvedForm angepasst { - //Überprüfung auf FreshTypeVars in den Typen + //Ãœberprüfung auf FreshTypeVars in den Typen boolean foundFresh = false; for(Pair p : vecpair) { @@ -782,14 +782,14 @@ public class Unify } } - //Ergebnis zurückgeben. + //Ergebnis zurückgeben. return Eq2Set; } /** * PL 2014-10-25 * schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind - * Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind. + * Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind. * @param var * @param vars * @param indexe @@ -840,10 +840,10 @@ public class Unify * Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge
    * In diesm fall wird b = Number aus dem Menge entfernt. * - * Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht. + * Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht. * - * @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen. - * @param test - RefType gegen den geprüft werden soll. + * @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen. + * @param test - RefType gegen den geprüft werden soll. */ private static void testUnifyErg(Menge> unifyErgs, RefType test) { @@ -857,7 +857,7 @@ public class Unify vec--; } } - //Gleiche Mengeen löschen + //Gleiche Mengeen löschen for(int i = 0; i < unifyErgs.size(); i++) { Menge p1 = unifyErgs.elementAt(i); @@ -886,13 +886,13 @@ public class Unify } /** - * Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. + * Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. * Beispiel: otherPairTypes = [Integer, Number, Menge], TA1 = TPH a. * return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge]] * * @param TA1 - Der Typ der immer vorne steht * @param otherPairTypes - Die anderen Typen - * @return - Ein Menge> der alle Paare enthält. + * @return - Ein Menge> der alle Paare enthält. */ private static Menge> generateSetOfSetOfPair(Type TA1, Menge otherPairTypes) { @@ -993,7 +993,7 @@ public class Unify //Menge wird geclont, Elemente nicht //Menge Mub = (Menge)ub.clone(); - //Elemente die nicht kleinste obere Schranken sind, werden gel�scht + //Elemente die nicht kleinste obere Schranken sind, werden gel�scht //FUNKTIONIERT NICHT. SIEHE iftest.java PL 08-08-13 for (int i = 0; i < ub.size(); i++) { for (int j = 0; j < ub.size(); j++) { @@ -1049,7 +1049,7 @@ throws MatchException // ino.method.match.28064.body { //PL 05-01-22 - //gibt eine Substitution zur�ck, die den Variablen aus FCtype + //gibt eine Substitution zur�ck, die den Variablen aus FCtype //die Typterme aus tomatch zu ordnet. Es wird davon ausgegangen, dass //FCtype gegen tomatch gematcht werden kann. if (FCtype.getTypeName().equals(tomatch.getTypeName())) { @@ -1093,7 +1093,7 @@ throws MatchException // ino.method.sub_unify.28067.body { //PL 05-01-21 umbenannt in sub_unify - //Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht. + //Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht. // otth: Unifikation - Versuch 1 :-) //Menge FC = fc_tto.getFC(); @@ -1118,7 +1118,7 @@ throws MatchException inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + ""); inferencelog.debug( "--------------------------------------------------"); - // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. + // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. //ERASE3 if( P.isEqual() && P.OperatorEqual() ) { @@ -1240,13 +1240,13 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } else { - inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); + inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); break; } } @@ -1297,13 +1297,13 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } else { - inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); + inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); break; } } @@ -1374,7 +1374,7 @@ throws MatchException RefType TA1 = null; RefType TA2 = null; - //Hier werden die RefTypes gefüllt. + //Hier werden die RefTypes gefüllt. if(P.TA1 instanceof RefType && P.TA2 instanceof RefType) { TA1 = (RefType)P.TA1; @@ -1396,7 +1396,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1429,7 +1429,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1449,7 +1449,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1562,7 +1562,7 @@ throws MatchException } - // Subst --> noch zu pr�fen + // Subst --> noch zu pr�fen if( P.TA1 instanceof TypePlaceholder && P.OperatorEqual() && useSubst) //&& P.TA2 instanceof RefType ) //PL 05-02-09 P.TA@ duerfen auch TypePlaceholder sein /* BEISPIEL: @@ -1716,7 +1716,7 @@ throws MatchException /** * Implementiert die reduceEq Regel des sub_unify - * Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren. + * Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren. */ private static void reduceEq(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { @@ -1738,11 +1738,11 @@ throws MatchException inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); - // hier mu� die PERMUTATION erfolgen + // hier mu� die PERMUTATION erfolgen inferencelog.debug("---- PAARBILDUNG "); for( int k = 0; k < L1.size(); k++ ) { - // pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-) + // pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-) //luar 19-04-2007 durch das pi kann reduce2 auch als reduceEq verwendet werden. Wenn das pi durch k ersetzt wird, muss reduceEq entsprechend ausprogrammiert werden. Pair P2 = new Pair( L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) ), L2.elementAt(k), PairOperator.Equal ); inferencelog.debug("---- Paar1: (" + (L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) )).getName() + ", " + (L2.elementAt(k)).getName() + P2.OperatorEqual() + ")"); @@ -2041,7 +2041,7 @@ throws MatchException //LIEGT //erlegigt 06-04-28 Menge res = sub_unify(subunifypair, fc_tto); - if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. inferencelog.debug("HasSolvedForm: "); printMenge("RES_SMALLER", res, 6); ht = MengePair2SubstHashtableMengePair(res); @@ -2222,7 +2222,7 @@ throws MatchException { // otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten - // z.B. Menge w�re hier gleich wie Menge + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA @@ -2270,7 +2270,7 @@ throws MatchException { // otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten - // z.B. Menge w�re hier gleich wie Menge + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA @@ -2308,7 +2308,7 @@ throws MatchException Menge vp = sub_unify(R2vec, fc_tto); printMenge("VP", vp, 6); - if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. //if( isRXSimilarRY( RFC, R2 ) ) { inferencelog.debug("SIMILAR2"); @@ -2405,7 +2405,7 @@ throws MatchException if (o instanceof RefType) {//PL 05-02-09 eingefuegt siehe Methodenkopf if( bMitVorbedingung && isTVinRefType( a, (RefType)o ) ) { - inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName()); + inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName()); return false; } } @@ -2415,7 +2415,7 @@ throws MatchException { // Parameterliste durchgehen Menge vTemp = ((RefType)T).get_ParaList(); - Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs + Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs //sonst werden nicht alle Elemente der Forschleife durchlaufen for( int i = 0; i < vTemp.size(); i++ ) { @@ -2461,7 +2461,7 @@ throws MatchException return true; } } - //Wildcard ergänzt PL 14-12-05 + //Wildcard ergänzt PL 14-12-05 if ( T instanceof ExtendsWildcardType ) { Type Temp = ((ExtendsWildcardType) T).get_ExtendsType(); @@ -2476,7 +2476,7 @@ throws MatchException } } } - //Wildcard ergänzt PL 14-12-05 + //Wildcard ergänzt PL 14-12-05 if ( T instanceof SuperWildcardType ) { Type Temp = ((SuperWildcardType) T).get_SuperType(); @@ -2557,7 +2557,7 @@ throws MatchException { - // otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist + // otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist // Basisklasse suchen Menge tto = fc_tto.getTTO(); @@ -2581,9 +2581,9 @@ throws MatchException } /* - * Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist. - * Sollte ein anderes Element gefunden werden ist Reduce nicht möglich. - * Beispiel: Matrix <. Menge> ist nur durch adapt möglich. + * Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist. + * Sollte ein anderes Element gefunden werden ist Reduce nicht möglich. + * Beispiel: Matrix <. Menge> ist nur durch adapt möglich. */ for(Type t : s) { @@ -2717,7 +2717,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if( n >= vD.size() ) throw F; - // Permuationswert f�r 'n' berechnen + // Permuationswert f�r 'n' berechnen Type TV = (Type)vD.elementAt(n); int nPos = -1; @@ -2749,12 +2749,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.method.printMengeUnifier.28121.body { //PL 05-01-21 - //Ruft f�r eine Menge von Unifikatoren die Methode + //Ruft f�r eine Menge von Unifikatoren die Methode //printMenge auf for (int i = 0; i < Uni.size(); i++) { inferencelog.debug((i+1) + ". Unifier"); printMenge(strMenge, Uni.elementAt(i), nDebug); - if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. inferencelog.debug((i+1) + ". Unifier ist in 'Solved form'!\n"); } else { @@ -2781,7 +2781,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } for( int tt = 0; tt < E.size(); tt++ ) { - //luar 13-03-07 If Else Block gelöscht, da sinnlos. + //luar 13-03-07 If Else Block gelöscht, da sinnlos. if( tt > 0 ) strTemp = strTemp + ",\n" + E.elementAt(tt).toString(); else @@ -2874,7 +2874,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Menge TVec an. - * Rückgabe ist ein ErgebnisMenge + * Rückgabe ist ein ErgebnisMenge */ private static Menge CaptureConversion(Menge TVec, FC_TTO fc_tto) { @@ -2882,7 +2882,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: for(ObjectType t : TVec) { ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto); - //CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen. + //CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen. if(ccT != null) retVec.add(ccT); } @@ -2892,7 +2892,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt die CaptureConversion von einem Typ. * - * @param T - Übergebener Typ, von welchem die CaptureConversion gemacht werden soll. + * @param T - Ãœbergebener Typ, von welchem die CaptureConversion gemacht werden soll. * @param fc_tto - Hilfsklasse. * @return - CC(T) */ @@ -2927,7 +2927,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(t instanceof WildcardType) { FreshWildcardType fwcT = ((WildcardType)t).GetFreshWildcardType(); - //Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt. + //Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt. if(cl.get_ParaList().elementAt(i) instanceof BoundedGenericTypeVar) { BoundedGenericTypeVar bgv = (BoundedGenericTypeVar)cl.get_ParaList().elementAt(i); @@ -2941,7 +2941,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } refT.set_ParaList(ccTypes); } - //Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben. + //Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben. if(ccDone) return refT; else @@ -2958,13 +2958,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Von hier an Greater implementierung 28-03-07 /** - * Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen - * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. + * Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen + * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. */ /** - * Erzeugt alle Typen die greater sind als T. Gibt diese zurück. - * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Erzeugt alle Typen die greater sind als T. Gibt diese zurück. + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greater(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 @@ -2989,22 +2989,22 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //greater1 Erzeugen Menge greater1Erg = greater1(T,fc_tto); - //Reflexivität, deshalb T hinzufügen. + //Reflexivität, deshalb T hinzufügen. if(!greater1Erg.contains(T)) greater1Erg.add(T); - //Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen. + //Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen. for(ObjectType t : greater1Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen + //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen Menge greater2Erg = greater2(greater1Erg,fc_tto); for(ObjectType t : greater2Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen + //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen Menge greater3Erg = greater3(greater2Erg,fc_tto); for(ObjectType t : greater3Erg) if(!retVec.contains(t)) @@ -3015,7 +3015,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater1 Schritt von greater. - * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greater1(ObjectType T, FC_TTO fc_tto) { @@ -3053,8 +3053,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter - * welcher für die rekursion erforderlich ist mit übergeben muss. + * Ãœberladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + * welcher für die rekursion erforderlich ist mit übergeben muss. */ private static Menge> cartProductType (Menge> vec) { @@ -3063,7 +3063,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt das Kartesische Product von mehreren Mengeen von Typen. - * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf. + * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf. */ private static Menge> cartProductType (Menge> vec, int index) { @@ -3098,8 +3098,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter - * welcher für die rekursion erforderlich ist mit übergeben muss. + * Ãœberladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + * welcher für die rekursion erforderlich ist mit übergeben muss. */ private static Menge> cartProductPair (Menge> vec) { @@ -3108,7 +3108,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt das Kartesische Product von mehreren Mengeen von Paaren. - * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf. + * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf. */ private static Menge> cartProductPair (Menge> vec, int index) { @@ -3168,7 +3168,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greaterArg Schritt von greater - * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greaterArg(Type T, FC_TTO fc_tto) { @@ -3224,7 +3224,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return new Menge(); */ - //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 + //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 else if(T instanceof TypePlaceholder) retVec.add(T); //Diese Abfrage verhindert, dass bei FunN Wildcard-Typen generiert werden //PL 13-05-22 @@ -3253,7 +3253,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: - * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. + * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. * Wenn das Funktioniert, dann ist der Typ auf der rechten Seite auch greater. * */ Hashtable ht = new Hashtable(); @@ -3278,7 +3278,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: RefType TA2neu = ((RefType)p.TA2).clone(); SubstHashtableGeneric(TA2neu,ht); - //TA2neu ist greater als T. Einfügen in retVec + //TA2neu ist greater als T. Einfügen in retVec if(!retVec.contains(TA2neu)) retVec.add(TA2neu); } @@ -3308,12 +3308,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Von hier an Smaller implementierung luar 28-03-07 /** - * Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen - * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. + * Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen + * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. */ /** - * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. + * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. */ private static Menge smaller(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 @@ -3349,18 +3349,18 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(!smaller12Erg.contains(T)) smaller12Erg.add(T); - //Ergebnise in retVec einfügen. Doppelte werden gelöscht. + //Ergebnise in retVec einfügen. Doppelte werden gelöscht. for(ObjectType t : smaller12Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. + //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. Menge smaller3Erg = smaller3(smaller12Erg,fc_tto); for(ObjectType t : smaller3Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. + //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. Menge smaller4Erg = smaller4(smaller3Erg); for(ObjectType t : smaller4Erg) if(!retVec.contains(t)) @@ -3409,7 +3409,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); if(T instanceof ExtendsWildcardType) { - //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. + //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. ExtendsWildcardType exT = (ExtendsWildcardType)T; Menge smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); for(ObjectType t : smallerTypes) @@ -3420,7 +3420,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } else if(T instanceof SuperWildcardType) { - //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. + //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; Menge greaterTypes = greater0(suT.get_SuperType(),fc_tto); for(ObjectType t : greaterTypes) @@ -3459,7 +3459,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: - * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. + * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. * Wenn das Funktioniert, dann ist der Typ auf der linken Seite auch smaller. * */ Hashtable ht = new Hashtable(); @@ -3482,7 +3482,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Macht hat funktioniert. In Linker Seite Typen substituieren RefType TA1neu = ((RefType)p.TA1).clone(); SubstHashtableGeneric(TA1neu,ht); - //TA1neu ist smaller als T. Einfügen in retVec + //TA1neu ist smaller als T. Einfügen in retVec if(!retVec.contains(TA1neu)) retVec.add(TA1neu); } @@ -3532,12 +3532,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält. + * Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält. */ private static boolean DelFreshWildcardTypeVar(Type T) { //luar 29-05-2007 - //Überprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist. + //Ãœberprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist. if(T instanceof RefType) { RefType refT = (RefType)T; @@ -3546,7 +3546,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(DelFreshWildcardTypeVar(t)) return true; } - //Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen. + //Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen. if(T instanceof ExtendsWildcardType) return DelFreshWildcardTypeVar(((ExtendsWildcardType)T).get_ExtendsType()); From 2b47b8e5bf66687f5b3da23fefe70e364881792f Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 12 May 2015 19:49:27 +0200 Subject: [PATCH 088/186] =?UTF-8?q?Javadoc=20generieren=20und=20Aufr=C3=A4?= =?UTF-8?q?umen:=20S=C3=A4mtliche=20codegen-Methoden=20und=20Hilfsklassen?= =?UTF-8?q?=20zu=20Generierung=20von=20Bytecode=20l=C3=B6schen.=20Unn?= =?UTF-8?q?=C3=B6tige=20Tests=20entfernen.=20ANTLR-Package=20entfernen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/org.eclipse.core.resources.prefs | 2 +- bin/bytecode/FieldTest.jav | 6 - bin/mycompiler/test/blocks/TestForStmt.jav | 32 - bin/mycompiler/test/blocks/TestIfStmt.jav | 27 - .../test/blocks/TestInferenceAcrossBlocks.jav | 12 - .../test/blocks/TestSimpleBlocks.jav | 18 - .../test/blocks/TestSimpleVariable.jav | 7 - bin/mycompiler/test/blocks/TestSwitchStmt.jav | 11 - .../test/blocks/TestTryCatchBlock.jav | 14 - .../blocks/TestUndeterminedReturnNegative.jav | 12 - .../test/blocks/TestUninitializedVariable.jav | 11 - bin/mycompiler/test/blocks/TestWhileStmt.jav | 9 - .../test/complexTypes/TestOwnClassMember.jav | 9 - .../test/complexTypes/TestOwnClassMethod.jav | 12 - .../TestStandardLibInheritanceInference.jav | 12 - .../complexTypes/TestStandardLibMember.jav | 11 - .../complexTypes/TestStandardLibMethod.jav | 20 - .../JvmDisassembler/jvmDisassembler.java | 4 +- src/de/dhbwstuttgart/antlr/.classpath | 7 - src/de/dhbwstuttgart/antlr/.gitignore | 107 - src/de/dhbwstuttgart/antlr/.idea/.name | 1 - src/de/dhbwstuttgart/antlr/.idea/antlr.iml | 11 - src/de/dhbwstuttgart/antlr/.idea/compiler.xml | 23 - .../.idea/copyright/profiles_settings.xml | 3 - .../dhbwstuttgart/antlr/.idea/encodings.xml | 5 - .../.idea/libraries/antlr_4_4_complete.xml | 9 - src/de/dhbwstuttgart/antlr/.idea/misc.xml | 5 - src/de/dhbwstuttgart/antlr/.idea/modules.xml | 9 - .../antlr/.idea/scopes/scope_settings.xml | 5 - src/de/dhbwstuttgart/antlr/.idea/vcs.xml | 7 - .../dhbwstuttgart/antlr/.idea/workspace.xml | 572 -- src/de/dhbwstuttgart/antlr/.project | 17 - src/de/dhbwstuttgart/antlr/Java8.g4 | 1028 --- src/de/dhbwstuttgart/antlr/Java8.tokens | 201 - .../dhbwstuttgart/antlr/Java8BaseVisitor.java | 723 -- src/de/dhbwstuttgart/antlr/Java8Lexer.java | 517 -- src/de/dhbwstuttgart/antlr/Java8Lexer.tokens | 201 - src/de/dhbwstuttgart/antlr/Java8Parser.java | 7394 ----------------- src/de/dhbwstuttgart/antlr/Java8Visitor.java | 621 -- src/de/dhbwstuttgart/antlr/VisitorTest.java | 93 - src/de/dhbwstuttgart/antlr/makefile | 3 - src/de/dhbwstuttgart/bytecode/Attribute.java | 61 - .../dhbwstuttgart/bytecode/AttributeInfo.java | 91 - .../bytecode/CONSTANT_Class_info.java | 60 - .../bytecode/CONSTANT_Double_info.java | 71 - .../bytecode/CONSTANT_Fieldref_info.java | 83 - .../bytecode/CONSTANT_Float_info.java | 52 - .../bytecode/CONSTANT_Integer_info.java | 56 - .../CONSTANT_InterfaceMethodref_info.java | 84 - .../bytecode/CONSTANT_Long_info.java | 83 - .../bytecode/CONSTANT_Methodref_info.java | 83 - .../bytecode/CONSTANT_NameAndType_info.java | 83 - .../bytecode/CONSTANT_String_info.java | 59 - .../bytecode/CONSTANT_Utf8_info.java | 65 - src/de/dhbwstuttgart/bytecode/CPInfo.java | 58 - src/de/dhbwstuttgart/bytecode/ClassFile.java | 862 -- .../bytecode/ClassFileMember.java | 10 - .../dhbwstuttgart/bytecode/CodeAttribute.java | 1098 --- .../bytecode/ExceptionTable.java | 58 - src/de/dhbwstuttgart/bytecode/FieldInfo.java | 203 - src/de/dhbwstuttgart/bytecode/JVMCode.java | 1392 ---- src/de/dhbwstuttgart/bytecode/Key.java | 125 - src/de/dhbwstuttgart/bytecode/MethodInfo.java | 138 - .../dhbwstuttgart/bytecode/SignatureInfo.java | 276 - .../dhbwstuttgart/core/ConsoleInterface.java | 9 +- src/de/dhbwstuttgart/core/MyCompiler.java | 94 +- src/de/dhbwstuttgart/core/MyCompilerAPI.java | 33 +- src/de/dhbwstuttgart/logger/Logger.java | 8 +- .../logger/LoggerConfiguration.java | 2 +- .../dhbwstuttgart/logger/SectionLogger.java | 2 +- .../CTypeReconstructionException.java | 2 +- .../dhbwstuttgart/parser/JavaClassName.java | 2 +- src/de/dhbwstuttgart/parser/JavaLexer.java | 2 +- src/de/dhbwstuttgart/parser/JavaParser.java | 24 +- src/de/dhbwstuttgart/parser/Token.java | 6 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 134 +- .../dhbwstuttgart/syntaxtree/ClassBody.java | 34 +- .../dhbwstuttgart/syntaxtree/ClassHelper.java | 4 +- src/de/dhbwstuttgart/syntaxtree/Constant.java | 31 +- .../dhbwstuttgart/syntaxtree/Constructor.java | 1 - src/de/dhbwstuttgart/syntaxtree/Field.java | 9 +- .../syntaxtree/FieldDeclaration.java | 21 +- .../syntaxtree/FormalParameter.java | 20 +- src/de/dhbwstuttgart/syntaxtree/Generic.java | 2 +- .../syntaxtree/ImportDeclarations.java | 2 +- .../dhbwstuttgart/syntaxtree/Interface.java | 1 - .../syntaxtree/InterfaceBody.java | 38 - src/de/dhbwstuttgart/syntaxtree/Method.java | 70 +- .../syntaxtree/ParameterList.java | 48 +- .../dhbwstuttgart/syntaxtree/SourceFile.java | 133 +- .../syntaxtree/SyntaxTreeNode.java | 16 +- .../dhbwstuttgart/syntaxtree/misc/DeclId.java | 101 +- .../dhbwstuttgart/syntaxtree/misc/UsedId.java | 39 +- .../syntaxtree/operator/AddOp.java | 7 - .../syntaxtree/operator/DivideOp.java | 16 - .../syntaxtree/operator/EqualOp.java | 47 - .../syntaxtree/operator/GreaterEquOp.java | 35 - .../syntaxtree/operator/GreaterOp.java | 34 - .../syntaxtree/operator/LessEquOp.java | 34 - .../syntaxtree/operator/LessOp.java | 34 - .../syntaxtree/operator/LogOp.java | 177 +- .../syntaxtree/operator/MinusOp.java | 18 +- .../syntaxtree/operator/ModuloOp.java | 16 - .../syntaxtree/operator/NotEqualOp.java | 45 - .../syntaxtree/operator/Operator.java | 39 +- .../syntaxtree/operator/PlusOp.java | 17 - .../syntaxtree/operator/RelOp.java | 7 - .../syntaxtree/operator/TimesOp.java | 28 - .../syntaxtree/statement/ArgumentList.java | 35 - .../syntaxtree/statement/Assign.java | 93 +- .../syntaxtree/statement/Binary.java | 87 +- .../syntaxtree/statement/Block.java | 25 +- .../syntaxtree/statement/BoolLiteral.java | 34 - .../syntaxtree/statement/CastExpr.java | 28 - .../syntaxtree/statement/CharLiteral.java | 30 - .../syntaxtree/statement/DoubleLiteral.java | 53 +- .../syntaxtree/statement/EmptyStmt.java | 9 - .../syntaxtree/statement/Expr.java | 6 +- .../syntaxtree/statement/ExprStmt.java | 2 +- .../syntaxtree/statement/FloatLiteral.java | 52 +- .../syntaxtree/statement/ForStmt.java | 10 - .../syntaxtree/statement/IfStmt.java | 133 +- .../syntaxtree/statement/InstVar.java | 25 +- .../syntaxtree/statement/InstanceOf.java | 17 +- .../syntaxtree/statement/IntLiteral.java | 51 +- .../statement/LambdaExpression.java | 25 +- .../syntaxtree/statement/Literal.java | 20 - .../syntaxtree/statement/LocalOrFieldVar.java | 71 +- .../syntaxtree/statement/LocalVarDecl.java | 29 +- .../syntaxtree/statement/LongLiteral.java | 57 +- .../syntaxtree/statement/MethodCall.java | 38 +- .../syntaxtree/statement/NegativeExpr.java | 32 - .../syntaxtree/statement/NewArray.java | 27 +- .../syntaxtree/statement/NewClass.java | 42 +- .../syntaxtree/statement/NotExpr.java | 31 - .../syntaxtree/statement/Null.java | 13 - .../syntaxtree/statement/PositivExpr.java | 10 - .../syntaxtree/statement/PostDecExpr.java | 80 - .../syntaxtree/statement/PostIncExpr.java | 80 - .../syntaxtree/statement/PreDecExpr.java | 80 - .../syntaxtree/statement/PreIncExpr.java | 80 - .../syntaxtree/statement/Receiver.java | 4 +- .../syntaxtree/statement/Return.java | 13 - .../syntaxtree/statement/Statement.java | 13 +- .../syntaxtree/statement/StringLiteral.java | 30 - .../syntaxtree/statement/SuperCall.java | 5 +- .../syntaxtree/statement/This.java | 15 +- .../syntaxtree/statement/ThisCall.java | 5 +- .../syntaxtree/statement/UnaryExpr.java | 6 - .../syntaxtree/statement/UnaryMinus.java | 15 +- .../syntaxtree/statement/UnaryNot.java | 31 +- .../syntaxtree/statement/WhileStmt.java | 57 +- .../syntaxtree/type/BaseType.java | 4 +- .../syntaxtree/type/BooleanType.java | 4 +- .../type/BoundedGenericTypeVar.java | 22 +- .../syntaxtree/type/CRefTypeSet.java | 29 - .../syntaxtree/type/CharacterType.java | 4 +- .../syntaxtree/type/DoubleType.java | 4 +- .../syntaxtree/type/ExtendsWildcardType.java | 42 +- .../syntaxtree/type/FloatType.java | 4 +- .../type/FreshExtendsWildcardType.java | 36 +- .../type/FreshSuperWildcardType.java | 36 +- .../syntaxtree/type/FreshWildcardType.java | 48 +- .../syntaxtree/type/GenericTypeVar.java | 20 +- .../syntaxtree/type/IMatchable.java | 10 +- .../syntaxtree/type/ITypeContainer.java | 6 +- .../syntaxtree/type/IntegerType.java | 4 +- .../syntaxtree/type/LongType.java | 4 +- .../syntaxtree/type/RefType.java | 49 +- .../syntaxtree/type/ReturnType.java | 4 +- .../syntaxtree/type/SuperWildcardType.java | 40 +- .../dhbwstuttgart/syntaxtree/type/Type.java | 49 +- .../syntaxtree/type/TypePlaceholder.java | 88 +- .../dhbwstuttgart/syntaxtree/type/Void.java | 6 +- .../syntaxtree/type/WildcardType.java | 24 +- src/de/dhbwstuttgart/typeinference/FunN.java | 10 +- .../typeinference/FunNInterface.java | 6 +- .../typeinference/FunNMethod.java | 6 +- .../typeinference/JavaCodeResult.java | 4 +- .../typeinference/KarthesischesProdukt.java | 8 +- .../typeinference/OderConstraint.java | 8 +- src/de/dhbwstuttgart/typeinference/Pair.java | 30 +- .../typeinference/ResultSet.java | 8 +- .../typeinference/SingleConstraint.java | 16 +- .../typeinference/TypeInsertable.java | 6 +- .../dhbwstuttgart/typeinference/Typeable.java | 2 +- .../typeinference/TypeinferenceResultSet.java | 28 +- .../typeinference/UndConstraint.java | 2 +- .../dhbwstuttgart/typeinference/UndMenge.java | 2 +- .../typeinference/assumptions/Assumption.java | 2 +- .../assumptions/ParameterAssumption.java | 2 +- .../assumptions/TypeAssumptions.java | 46 +- .../exceptions/TypeinferenceException.java | 4 +- .../GenericTypeInsertPoint.java | 20 +- .../typedeployment/TypeInsertPoint.java | 8 +- .../typedeployment/TypeInsertSet.java | 26 +- .../typeinference/unify/CSubstitution.java | 18 +- .../unify/CSubstitutionGenVar.java | 4 +- .../typeinference/unify/CSubstitutionSet.java | 4 +- .../typeinference/unify/CVectorSet.java | 10 +- .../typeinference/unify/FC_TTO.java | 4 +- .../typeinference/unify/Unify.java | 195 +- test/bytecode/BytecodeTester.java | 45 - test/bytecode/EmptyClassTest.java | 21 - test/bytecode/FieldTest.jav | 6 - test/bytecode/GeneralTest.java | 35 - test/bytecode/MethodTest.java | 12 - test/mycompiler/test/AllTests.java | 41 - .../test/LambdaInterferenzTest.java | 15 - test/mycompiler/test/Log4jWrapper.java | 35 - .../test/blocks/AllTestsBlocks.java | 23 - test/mycompiler/test/blocks/TestForStmt.jav | 32 - test/mycompiler/test/blocks/TestForStmt.java | 75 - test/mycompiler/test/blocks/TestIfStmt.jav | 27 - test/mycompiler/test/blocks/TestIfStmt.java | 74 - .../test/blocks/TestInferenceAcrossBlocks.jav | 12 - .../blocks/TestInferenceAcrossBlocks.java | 45 - .../test/blocks/TestSimpleBlocks.jav | 18 - .../test/blocks/TestSimpleBlocks.java | 56 - .../test/blocks/TestSimpleVariable.jav | 7 - .../test/blocks/TestSimpleVariable.java | 43 - .../mycompiler/test/blocks/TestSwitchStmt.jav | 11 - .../test/blocks/TestTryCatchBlock.jav | 14 - .../blocks/TestUndeterminedReturnNegative.jav | 12 - .../TestUndeterminedReturnNegative.java | 53 - .../test/blocks/TestUninitializedVariable.jav | 11 - .../blocks/TestUninitializedVariable.java | 45 - test/mycompiler/test/blocks/TestWhileStmt.jav | 9 - .../mycompiler/test/blocks/TestWhileStmt.java | 43 - .../complexTypes/AllTestsComplexTypes.java | 19 - .../test/complexTypes/TestOwnClassMember.jav | 9 - .../test/complexTypes/TestOwnClassMember.java | 41 - .../test/complexTypes/TestOwnClassMethod.jav | 12 - .../test/complexTypes/TestOwnClassMethod.java | 47 - .../TestStandardLibInheritanceInference.jav | 12 - .../TestStandardLibInheritanceInference.java | 44 - .../complexTypes/TestStandardLibMember.jav | 11 - .../complexTypes/TestStandardLibMethod.jav | 20 - .../complexTypes/TestStandardLibMethod.java | 53 - .../test/expectationTypes/BlockExpect.java | 74 - .../test/expectationTypes/ClassExpect.java | 92 - .../test/expectationTypes/Expectation.java | 58 - .../GenericTypeVarExpect.java | 21 - .../test/expectationTypes/IExpectation.java | 12 - .../expectationTypes/IUnknownTypeExpect.java | 12 - .../test/expectationTypes/MethodExpect.java | 157 - .../TypePlaceholderExpect.java | 21 - .../UnknownTypesMappingExpect.java | 42 - .../test/expectationTypes/VarExpect.java | 80 - .../test/generics/AllTestsGenerics.java | 25 - .../TestAssignmentTwoGenericTypesNegative.jav | 12 - ...TestAssignmentTwoGenericTypesNegative.java | 51 - ...stClassesWithBoundedGenericsOfTwoTypes.jav | 17 - ...tClassesWithBoundedGenericsOfTwoTypes.java | 86 - ...lassesWithBoundedGenericsUsedInMethods.jav | 21 - ...assesWithBoundedGenericsUsedInMethods.java | 75 - ...TestExtendedClassesWithBoundedGenerics.jav | 34 - ...estExtendedClassesWithBoundedGenerics.java | 90 - .../test/generics/TestNestedGenerics.jav | 14 - .../test/generics/TestNestedGenerics.java | 64 - .../TestNestedGenericsNonExistingType.jav | 6 - .../TestNestedGenericsNonExistingType.java | 51 - .../TestSimpleClassesWithBoundedGenerics.jav | 30 - .../TestSimpleClassesWithBoundedGenerics.java | 71 - ...mpleClassesWithBoundedGenericsNegative.jav | 17 - ...pleClassesWithBoundedGenericsNegative.java | 62 - .../TestSimpleClassesWithGenerics.jav | 17 - .../TestSimpleClassesWithGenerics.java | 58 - .../TestSimpleClassesWithGenericsNegative.jav | 17 - ...TestSimpleClassesWithGenericsNegative.java | 59 - .../AllTestsInferenceByCharacteristic.java | 26 - .../TestInferenceOwnTypeByMember.jav | 16 - .../TestInferenceOwnTypeByMember.java | 52 - ...tInferenceOwnTypeByMemberAcrossClasses.jav | 14 - ...InferenceOwnTypeByMemberAcrossClasses.java | 47 - .../TestInferenceOwnTypeByMethodCall.jav | 32 - .../TestInferenceOwnTypeByMethodCall.java | 68 - ...erenceOwnTypeByMethodCallAcrossClasses.jav | 18 - ...renceOwnTypeByMethodCallAcrossClasses.java | 55 - .../TestInferenceOwnTypeByMethodParameter.jav | 19 - ...TestInferenceOwnTypeByMethodParameter.java | 61 - ...ferenceOwnTypeByMethodReturnTypeMixed1.jav | 20 - ...erenceOwnTypeByMethodReturnTypeMixed1.java | 71 - .../TestInferenceOwnTypeByReturnType.jav | 18 - .../TestInferenceOwnTypeByReturnType.java | 56 - ...erenceOwnTypeByReturnTypeAcrossClasses.jav | 23 - ...renceOwnTypeByReturnTypeAcrossClasses.java | 66 - .../TestInferenceStdTypeByMember.jav | 9 - .../TestInferenceStdTypeByOperation.jav | 13 - .../TestInferenceStdTypeByOperation.java | 47 - .../TestInferenceStdTypeByReturnType.jav | 18 - .../TestInferenceStdTypeByReturnType.java | 80 - .../inheritance/AllTestsInheritance.java | 24 - .../TestInheritanceAcrossLevel.jav | 56 - .../TestInheritanceAcrossLevel.java | 92 - .../inheritance/TestInheritanceCircle.jav | 41 - .../inheritance/TestInheritanceCircle.java | 82 - .../TestInheritanceConstructor.jav | 27 - .../TestInheritanceConstructor.java | 56 - .../inheritance/TestInheritanceMultiple.jav | 22 - .../inheritance/TestInheritanceMultiple.java | 56 - .../TestInheritanceMultipleClasses.jav | 8 - .../TestInheritanceMultipleClasses.java | 34 - .../inheritance/TestInheritanceOverriding.jav | 27 - .../TestInheritanceOverriding.java | 55 - .../TestInheritanceTwoHierarchies.jav | 37 - .../TestInheritanceTwoHierarchies.java | 83 - .../inheritance/TestSimpleInheritance.jav | 13 - .../inheritance/TestSimpleInheritance.java | 42 - .../overloading/AllTestsOverloading.java | 31 - ...OverloadingDifferentNumberOfParameters.jav | 6 - ...verloadingDifferentNumberOfParameters.java | 51 - ...entNumberOfParametersAndDifferentTypes.jav | 9 - ...ntNumberOfParametersAndDifferentTypes.java | 66 - .../OverloadingGenericNotSameHierarchy.jav | 13 - .../OverloadingGenericNotSameHierarchy.java | 56 - .../OverloadingGenericSameHierarchy.jav | 8 - .../OverloadingGenericSameHierarchy.java | 61 - ...ngGenericTypeInferenceNotSameHierarchy.jav | 19 - ...gGenericTypeInferenceNotSameHierarchy.java | 77 - ...adingGenericTypeInferenceSameHierarchy.jav | 20 - ...dingGenericTypeInferenceSameHierarchy.java | 91 - .../OverloadingNotSameHierarchy.jav | 8 - .../OverloadingNotSameHierarchy.java | 45 - .../overloading/OverloadingSameHierarchy.jav | 7 - .../overloading/OverloadingSameHierarchy.java | 46 - .../overloading/OverloadingSameSignature.jav | 6 - .../overloading/OverloadingSameSignature.java | 27 - ...adingSameSignatureDifferentReturnTypes.jav | 7 - ...dingSameSignatureDifferentReturnTypes.java | 26 - .../OverloadingSameSignatureGenerics.jav | 8 - .../OverloadingSameSignatureGenerics.java | 25 - ...erloadingTypeInferenceNotSameHierarchy.jav | 12 - ...rloadingTypeInferenceNotSameHierarchy.java | 45 - .../OverloadingTypeInferenceSameHierarchy.jav | 16 - ...OverloadingTypeInferenceSameHierarchy.java | 47 - .../staticAccess/AllTestsStaticAccess.java | 19 - .../staticAccess/TestNonStaticAccess.jav | 19 - .../staticAccess/TestNonStaticAccess.java | 53 - .../staticAccess/TestStaticAccess.jav | 18 - .../staticAccess/TestStaticAccess.java | 53 - .../staticAccess/TestStaticAccessError.jav | 17 - .../staticAccess/TestStaticAccessError.java | 54 - .../test/lambda/AllgemeinerLambdaTest1.java | 28 - .../test/lambda/BasicAssumptions.jav | 12 - .../test/lambda/BasicAssumptionsTest.java | 30 - .../test/lambda/ConstructorTest.java | 47 - .../test/lambda/ConstructorTestFile1.jav | 8 - .../test/lambda/ConstructorTestFile2.jav | 7 - .../test/lambda/GenericParameterTest.jav | 7 - .../test/lambda/GenericParameterTest.java | 22 - .../mycompiler/test/lambda/GenericVarTest.jav | 7 - .../test/lambda/GenericVarTest.java | 28 - test/mycompiler/test/lambda/LambdaTest1.jav | 7 - .../test/lambda/OverloadingTest.jav | 21 - .../test/lambda/OverloadingTest.java | 28 - .../test/lambda/ParseMultipleFilesTest.java | 45 - test/mycompiler/test/lambda/TestAssign.jav | 3 - test/mycompiler/test/lambda/TestAssign.java | 35 - test/mycompiler/test/lambda/TestFunN.jav | 2 - test/mycompiler/test/lambda/TestFunN.java | 29 - test/mycompiler/test/lambda/TestIfStmt.jav | 13 - test/mycompiler/test/lambda/TestIfStmt.java | 28 - test/mycompiler/test/lambda/TestInterface.jav | 9 - .../mycompiler/test/lambda/TestInterface.java | 24 - test/mycompiler/test/lambda/TestLambda.jav | 3 - test/mycompiler/test/lambda/TestLambda.java | 38 - .../mycompiler/test/lambda/TestMethodCall.jav | 17 - .../test/lambda/TestMethodCall.java | 29 - test/mycompiler/test/lambda/TestThis.java | 29 - test/mycompiler/test/lambda/TestWhile.jav | 10 - test/mycompiler/test/lambda/TestWhile.java | 37 - test/mycompiler/test/lambda/ThisTest.jav | 5 - .../test/lambda/parseMultipleFilesFile1.jav | 18 - .../test/lambda/parseMultipleFilesFile2.jav | 7 - .../test/lambda/testResults/LambdaTest.log | 0 .../AbstractInferenceTestExtendedOLD.java | 149 - .../AbstractInferenceTestOLD_2.java | 278 - .../AbstractInferenceTestOld.java | 381 - .../CTypeAssumptionWrapper.java | 60 - .../test/notUsedAnymore/IResultValidator.java | 11 - .../test/notUsedAnymore/TEst_2.java | 25 - test/mycompiler/test/notUsedAnymore/Test.java | 67 - .../TestAbstractInferenceTest.jav | 20 - .../TestAbstractInferenceTest.java | 304 - .../TestAbstractInferenceTest2.jav | 21 - .../TestAbstractInferenceTest2.java | 56 - .../TestClassMemberWithoutType.jav | 5 - .../TestClassMemberWithoutType.java | 37 - .../TestConstantsWithoutType.jav | 6 - .../TestConstantsWithoutType.java | 39 - .../test/notUsedAnymore/TestGenerics.jav | 8 - .../test/notUsedAnymore/TestGenerics.java | 60 - ...eCheckValidImplementationFromInterface.jav | 7 - ...CheckValidImplementationFromInterface.java | 42 - ...lidImplementationFromInterfaceNegative.jav | 7 - ...idImplementationFromInterfaceNegative2.jav | 14 - .../notUsedAnymore/TestMethodReturnType.jav | 21 - .../notUsedAnymore/TestMethodReturnType.java | 64 - .../TestMethodReturnTypeGeneric.jav | 15 - .../TestMethodReturnTypeNegative.jav | 8 - .../TestMethodReturnTypeNegative.java | 42 - .../TestMethodReturnTypeNegative2.jav | 11 - .../TestMethodReturnTypeNegative2.java | 38 - .../test/operators/AllTestsOperators.java | 22 - .../test/operators/TestOperatorArithmetic.jav | 40 - .../operators/TestOperatorArithmetic.java | 110 - .../test/operators/TestOperatorBitwise.jav | 45 - .../test/operators/TestOperatorBitwise.java | 129 - .../test/operators/TestOperatorBool.jav | 19 - .../test/operators/TestOperatorBool.java | 58 - .../test/operators/TestOperatorComparison.jav | 22 - .../operators/TestOperatorComparison.java | 84 - .../test/operators/TestOperatorIncrement.jav | 11 - .../test/operators/TestOperatorIncrement.java | 65 - .../test/operators/TestOperatorObjects.jav | 18 - .../test/operators/TestOperatorObjects.java | 48 - .../test/operators/TestOperatorString.jav | 11 - .../test/operators/TestOperatorString.java | 41 - .../AllTestsPrimitiveTypes.java | 25 - .../test/primitiveTypes/BooleanTest.jav | 5 - .../test/primitiveTypes/BooleanTest.java | 38 - .../test/primitiveTypes/ByteTest.jav | 6 - .../test/primitiveTypes/ByteTest.java | 45 - .../test/primitiveTypes/CharTest.jav | 5 - .../test/primitiveTypes/CharTest.java | 38 - .../test/primitiveTypes/DoubleTest.jav | 5 - .../test/primitiveTypes/DoubleTest.java | 38 - .../test/primitiveTypes/FloatTest.jav | 5 - .../test/primitiveTypes/FloatTest.java | 38 - .../test/primitiveTypes/IntegerTest.jav | 5 - .../test/primitiveTypes/IntegerTest.java | 43 - .../test/primitiveTypes/LongTest.jav | 5 - .../test/primitiveTypes/LongTest.java | 38 - .../test/primitiveTypes/StringTest.jav | 5 - .../test/primitiveTypes/StringTest.java | 38 - .../test/primitiveTypes/TestSimpleTypes.jav | 22 - .../test/primitiveTypes/TestSimpleTypes.java | 53 - .../test/trivial/AllTestsTrivial.java | 30 - .../test/trivial/TestClassEmpty.jav | 3 - .../test/trivial/TestClassEmpty.java | 34 - .../test/trivial/TestClassEmptyGenerics.jav | 4 - .../test/trivial/TestClassEmptyGenerics.java | 36 - .../test/trivial/TestClassMember.jav | 6 - .../test/trivial/TestClassMember.java | 45 - .../trivial/TestClassMemberAssignment.jav | 22 - .../trivial/TestClassMemberAssignment.java | 53 - .../mycompiler/test/trivial/TestConstants.jav | 6 - .../test/trivial/TestConstants.java | 39 - .../test/trivial/TestConstructor.jav | 20 - .../test/trivial/TestConstructor.java | 51 - .../test/trivial/TestConstructorNegative.jav | 8 - .../test/trivial/TestConstructorNegative.java | 45 - .../test/trivial/TestInterfaceEmpty.jav | 4 - .../test/trivial/TestInterfaceEmpty.java | 33 - .../test/trivial/TestInterfaceMember.jav | 5 - .../test/trivial/TestInterfaceMember.java | 37 - .../test/trivial/TestInterfaceMethod.jav | 10 - .../test/trivial/TestInterfaceMethod.java | 50 - .../trivial/TestInterfaceNotInferenced.jav | 10 - .../trivial/TestInterfaceNotInferenced.java | 48 - .../test/trivial/TestMethodEmpty.jav | 6 - .../test/trivial/TestMethodEmpty.java | 38 - .../test/trivial/TestMethodEmptyGeneric.jav | 10 - .../test/trivial/TestMethodEmptyGeneric.java | 46 - .../test/trivial/TestMethodEmptyParameter.jav | 16 - .../trivial/TestMethodEmptyParameter.java | 52 - ...TestMethodEmptyParameterGenericExtends.jav | 9 - ...estMethodEmptyParameterGenericExtends.java | 53 - .../TrAlgorithmTestSuite.java | 26 - .../typeReconstructionTest/TrMakeFCTest.java | 178 - .../TrSubUnifyTest.java | 636 -- .../typeReconstructionTest/TrUnifyTest.java | 177 - test/parser/GeneralParserTest.java | 12 +- .../InsertSingleTypeTest.java | 10 +- .../KarthesischesProduktTest.java | 43 - .../MartinTestCases/Tester.java | 9 +- test/plugindevelopment/SyntaxTreeTests.java | 2 +- test/plugindevelopment/TRMEqualTest.java | 132 - .../TypeInsertSetEqualTest.java | 48 - test/plugindevelopment/TypeInsertTester.java | 4 +- .../MultipleTypesInsertTester.java | 10 +- 482 files changed, 837 insertions(+), 31071 deletions(-) delete mode 100644 bin/bytecode/FieldTest.jav delete mode 100755 bin/mycompiler/test/blocks/TestForStmt.jav delete mode 100755 bin/mycompiler/test/blocks/TestIfStmt.jav delete mode 100755 bin/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav delete mode 100755 bin/mycompiler/test/blocks/TestSimpleBlocks.jav delete mode 100755 bin/mycompiler/test/blocks/TestSimpleVariable.jav delete mode 100755 bin/mycompiler/test/blocks/TestSwitchStmt.jav delete mode 100755 bin/mycompiler/test/blocks/TestTryCatchBlock.jav delete mode 100755 bin/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav delete mode 100755 bin/mycompiler/test/blocks/TestUninitializedVariable.jav delete mode 100755 bin/mycompiler/test/blocks/TestWhileStmt.jav delete mode 100755 bin/mycompiler/test/complexTypes/TestOwnClassMember.jav delete mode 100755 bin/mycompiler/test/complexTypes/TestOwnClassMethod.jav delete mode 100755 bin/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav delete mode 100755 bin/mycompiler/test/complexTypes/TestStandardLibMember.jav delete mode 100755 bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav delete mode 100644 src/de/dhbwstuttgart/antlr/.classpath delete mode 100644 src/de/dhbwstuttgart/antlr/.gitignore delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/.name delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/antlr.iml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/compiler.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/copyright/profiles_settings.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/encodings.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/libraries/antlr_4_4_complete.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/misc.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/modules.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/scopes/scope_settings.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/vcs.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.idea/workspace.xml delete mode 100644 src/de/dhbwstuttgart/antlr/.project delete mode 100644 src/de/dhbwstuttgart/antlr/Java8.g4 delete mode 100644 src/de/dhbwstuttgart/antlr/Java8.tokens delete mode 100644 src/de/dhbwstuttgart/antlr/Java8BaseVisitor.java delete mode 100644 src/de/dhbwstuttgart/antlr/Java8Lexer.java delete mode 100644 src/de/dhbwstuttgart/antlr/Java8Lexer.tokens delete mode 100644 src/de/dhbwstuttgart/antlr/Java8Parser.java delete mode 100644 src/de/dhbwstuttgart/antlr/Java8Visitor.java delete mode 100644 src/de/dhbwstuttgart/antlr/VisitorTest.java delete mode 100644 src/de/dhbwstuttgart/antlr/makefile delete mode 100755 src/de/dhbwstuttgart/bytecode/Attribute.java delete mode 100755 src/de/dhbwstuttgart/bytecode/AttributeInfo.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Class_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Double_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Fieldref_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Float_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Integer_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_InterfaceMethodref_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Long_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Methodref_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_NameAndType_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_String_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CONSTANT_Utf8_info.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CPInfo.java delete mode 100755 src/de/dhbwstuttgart/bytecode/ClassFile.java delete mode 100644 src/de/dhbwstuttgart/bytecode/ClassFileMember.java delete mode 100755 src/de/dhbwstuttgart/bytecode/CodeAttribute.java delete mode 100755 src/de/dhbwstuttgart/bytecode/ExceptionTable.java delete mode 100755 src/de/dhbwstuttgart/bytecode/FieldInfo.java delete mode 100755 src/de/dhbwstuttgart/bytecode/JVMCode.java delete mode 100755 src/de/dhbwstuttgart/bytecode/Key.java delete mode 100755 src/de/dhbwstuttgart/bytecode/MethodInfo.java delete mode 100755 src/de/dhbwstuttgart/bytecode/SignatureInfo.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java delete mode 100644 test/bytecode/BytecodeTester.java delete mode 100644 test/bytecode/EmptyClassTest.java delete mode 100644 test/bytecode/FieldTest.jav delete mode 100644 test/bytecode/GeneralTest.java delete mode 100644 test/bytecode/MethodTest.java delete mode 100755 test/mycompiler/test/AllTests.java delete mode 100755 test/mycompiler/test/LambdaInterferenzTest.java delete mode 100755 test/mycompiler/test/Log4jWrapper.java delete mode 100755 test/mycompiler/test/blocks/AllTestsBlocks.java delete mode 100755 test/mycompiler/test/blocks/TestForStmt.jav delete mode 100755 test/mycompiler/test/blocks/TestForStmt.java delete mode 100755 test/mycompiler/test/blocks/TestIfStmt.jav delete mode 100755 test/mycompiler/test/blocks/TestIfStmt.java delete mode 100755 test/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav delete mode 100755 test/mycompiler/test/blocks/TestInferenceAcrossBlocks.java delete mode 100755 test/mycompiler/test/blocks/TestSimpleBlocks.jav delete mode 100755 test/mycompiler/test/blocks/TestSimpleBlocks.java delete mode 100755 test/mycompiler/test/blocks/TestSimpleVariable.jav delete mode 100755 test/mycompiler/test/blocks/TestSimpleVariable.java delete mode 100755 test/mycompiler/test/blocks/TestSwitchStmt.jav delete mode 100755 test/mycompiler/test/blocks/TestTryCatchBlock.jav delete mode 100755 test/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav delete mode 100755 test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java delete mode 100755 test/mycompiler/test/blocks/TestUninitializedVariable.jav delete mode 100755 test/mycompiler/test/blocks/TestUninitializedVariable.java delete mode 100755 test/mycompiler/test/blocks/TestWhileStmt.jav delete mode 100755 test/mycompiler/test/blocks/TestWhileStmt.java delete mode 100755 test/mycompiler/test/complexTypes/AllTestsComplexTypes.java delete mode 100755 test/mycompiler/test/complexTypes/TestOwnClassMember.jav delete mode 100755 test/mycompiler/test/complexTypes/TestOwnClassMember.java delete mode 100755 test/mycompiler/test/complexTypes/TestOwnClassMethod.jav delete mode 100755 test/mycompiler/test/complexTypes/TestOwnClassMethod.java delete mode 100755 test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav delete mode 100755 test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.java delete mode 100755 test/mycompiler/test/complexTypes/TestStandardLibMember.jav delete mode 100755 test/mycompiler/test/complexTypes/TestStandardLibMethod.jav delete mode 100755 test/mycompiler/test/complexTypes/TestStandardLibMethod.java delete mode 100755 test/mycompiler/test/expectationTypes/BlockExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/ClassExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/Expectation.java delete mode 100755 test/mycompiler/test/expectationTypes/GenericTypeVarExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/IExpectation.java delete mode 100755 test/mycompiler/test/expectationTypes/IUnknownTypeExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/MethodExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/TypePlaceholderExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.java delete mode 100755 test/mycompiler/test/expectationTypes/VarExpect.java delete mode 100755 test/mycompiler/test/generics/AllTestsGenerics.java delete mode 100755 test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.jav delete mode 100755 test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java delete mode 100755 test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.jav delete mode 100755 test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java delete mode 100755 test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.jav delete mode 100755 test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java delete mode 100755 test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.jav delete mode 100755 test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java delete mode 100755 test/mycompiler/test/generics/TestNestedGenerics.jav delete mode 100755 test/mycompiler/test/generics/TestNestedGenerics.java delete mode 100755 test/mycompiler/test/generics/TestNestedGenericsNonExistingType.jav delete mode 100755 test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.jav delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithGenerics.jav delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.jav delete mode 100755 test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByMember.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.java delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav delete mode 100755 test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.java delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.jav delete mode 100755 test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.jav delete mode 100755 test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.java delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.java delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.jav delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.jav delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.jav delete mode 100755 test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.java delete mode 100755 test/mycompiler/test/lambda/AllgemeinerLambdaTest1.java delete mode 100755 test/mycompiler/test/lambda/BasicAssumptions.jav delete mode 100755 test/mycompiler/test/lambda/BasicAssumptionsTest.java delete mode 100755 test/mycompiler/test/lambda/ConstructorTest.java delete mode 100755 test/mycompiler/test/lambda/ConstructorTestFile1.jav delete mode 100755 test/mycompiler/test/lambda/ConstructorTestFile2.jav delete mode 100644 test/mycompiler/test/lambda/GenericParameterTest.jav delete mode 100644 test/mycompiler/test/lambda/GenericParameterTest.java delete mode 100755 test/mycompiler/test/lambda/GenericVarTest.jav delete mode 100755 test/mycompiler/test/lambda/GenericVarTest.java delete mode 100755 test/mycompiler/test/lambda/LambdaTest1.jav delete mode 100755 test/mycompiler/test/lambda/OverloadingTest.jav delete mode 100755 test/mycompiler/test/lambda/OverloadingTest.java delete mode 100755 test/mycompiler/test/lambda/ParseMultipleFilesTest.java delete mode 100755 test/mycompiler/test/lambda/TestAssign.jav delete mode 100755 test/mycompiler/test/lambda/TestAssign.java delete mode 100755 test/mycompiler/test/lambda/TestFunN.jav delete mode 100755 test/mycompiler/test/lambda/TestFunN.java delete mode 100755 test/mycompiler/test/lambda/TestIfStmt.jav delete mode 100755 test/mycompiler/test/lambda/TestIfStmt.java delete mode 100644 test/mycompiler/test/lambda/TestInterface.jav delete mode 100644 test/mycompiler/test/lambda/TestInterface.java delete mode 100755 test/mycompiler/test/lambda/TestLambda.jav delete mode 100755 test/mycompiler/test/lambda/TestLambda.java delete mode 100755 test/mycompiler/test/lambda/TestMethodCall.jav delete mode 100755 test/mycompiler/test/lambda/TestMethodCall.java delete mode 100755 test/mycompiler/test/lambda/TestThis.java delete mode 100755 test/mycompiler/test/lambda/TestWhile.jav delete mode 100755 test/mycompiler/test/lambda/TestWhile.java delete mode 100755 test/mycompiler/test/lambda/ThisTest.jav delete mode 100755 test/mycompiler/test/lambda/parseMultipleFilesFile1.jav delete mode 100755 test/mycompiler/test/lambda/parseMultipleFilesFile2.jav delete mode 100644 test/mycompiler/test/lambda/testResults/LambdaTest.log delete mode 100755 test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java delete mode 100755 test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOLD_2.java delete mode 100755 test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java delete mode 100755 test/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.java delete mode 100755 test/mycompiler/test/notUsedAnymore/IResultValidator.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TEst_2.java delete mode 100755 test/mycompiler/test/notUsedAnymore/Test.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestGenerics.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestGenerics.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative2.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnType.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnType.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeGeneric.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.java delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.jav delete mode 100755 test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.java delete mode 100755 test/mycompiler/test/operators/AllTestsOperators.java delete mode 100755 test/mycompiler/test/operators/TestOperatorArithmetic.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorArithmetic.java delete mode 100755 test/mycompiler/test/operators/TestOperatorBitwise.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorBitwise.java delete mode 100755 test/mycompiler/test/operators/TestOperatorBool.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorBool.java delete mode 100755 test/mycompiler/test/operators/TestOperatorComparison.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorComparison.java delete mode 100755 test/mycompiler/test/operators/TestOperatorIncrement.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorIncrement.java delete mode 100755 test/mycompiler/test/operators/TestOperatorObjects.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorObjects.java delete mode 100755 test/mycompiler/test/operators/TestOperatorString.jav delete mode 100755 test/mycompiler/test/operators/TestOperatorString.java delete mode 100755 test/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.java delete mode 100755 test/mycompiler/test/primitiveTypes/BooleanTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/BooleanTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/ByteTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/ByteTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/CharTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/CharTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/DoubleTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/DoubleTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/FloatTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/FloatTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/IntegerTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/IntegerTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/LongTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/LongTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/StringTest.jav delete mode 100755 test/mycompiler/test/primitiveTypes/StringTest.java delete mode 100755 test/mycompiler/test/primitiveTypes/TestSimpleTypes.jav delete mode 100755 test/mycompiler/test/primitiveTypes/TestSimpleTypes.java delete mode 100755 test/mycompiler/test/trivial/AllTestsTrivial.java delete mode 100755 test/mycompiler/test/trivial/TestClassEmpty.jav delete mode 100755 test/mycompiler/test/trivial/TestClassEmpty.java delete mode 100755 test/mycompiler/test/trivial/TestClassEmptyGenerics.jav delete mode 100755 test/mycompiler/test/trivial/TestClassEmptyGenerics.java delete mode 100755 test/mycompiler/test/trivial/TestClassMember.jav delete mode 100755 test/mycompiler/test/trivial/TestClassMember.java delete mode 100755 test/mycompiler/test/trivial/TestClassMemberAssignment.jav delete mode 100755 test/mycompiler/test/trivial/TestClassMemberAssignment.java delete mode 100755 test/mycompiler/test/trivial/TestConstants.jav delete mode 100755 test/mycompiler/test/trivial/TestConstants.java delete mode 100755 test/mycompiler/test/trivial/TestConstructor.jav delete mode 100755 test/mycompiler/test/trivial/TestConstructor.java delete mode 100755 test/mycompiler/test/trivial/TestConstructorNegative.jav delete mode 100755 test/mycompiler/test/trivial/TestConstructorNegative.java delete mode 100755 test/mycompiler/test/trivial/TestInterfaceEmpty.jav delete mode 100755 test/mycompiler/test/trivial/TestInterfaceEmpty.java delete mode 100755 test/mycompiler/test/trivial/TestInterfaceMember.jav delete mode 100755 test/mycompiler/test/trivial/TestInterfaceMember.java delete mode 100755 test/mycompiler/test/trivial/TestInterfaceMethod.jav delete mode 100755 test/mycompiler/test/trivial/TestInterfaceMethod.java delete mode 100755 test/mycompiler/test/trivial/TestInterfaceNotInferenced.jav delete mode 100755 test/mycompiler/test/trivial/TestInterfaceNotInferenced.java delete mode 100755 test/mycompiler/test/trivial/TestMethodEmpty.jav delete mode 100755 test/mycompiler/test/trivial/TestMethodEmpty.java delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyGeneric.jav delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyGeneric.java delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyParameter.jav delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyParameter.java delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.jav delete mode 100755 test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java delete mode 100755 test/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.java delete mode 100755 test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java delete mode 100755 test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java delete mode 100755 test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java delete mode 100644 test/plugindevelopment/KarthesischesProduktTest.java delete mode 100644 test/plugindevelopment/TRMEqualTest.java delete mode 100644 test/plugindevelopment/TypeInsertSetEqualTest.java diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 70bbb4df..83b729ef 100755 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 +encoding//src/de/dhbwstuttgart/core/MyCompiler.java=UTF-8 encoding//src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java=UTF-8 encoding//src/de/dhbwstuttgart/typeinference/SingleConstraint.java=UTF-8 encoding//src/de/dhbwstuttgart/typeinference/UndConstraint.java=UTF-8 -encoding/=ISO-8859-1 diff --git a/bin/bytecode/FieldTest.jav b/bin/bytecode/FieldTest.jav deleted file mode 100644 index 57f1614a..00000000 --- a/bin/bytecode/FieldTest.jav +++ /dev/null @@ -1,6 +0,0 @@ -class FieldTest{ - String var; - String methode(String para1){ - return var; - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestForStmt.jav b/bin/mycompiler/test/blocks/TestForStmt.jav deleted file mode 100755 index a12ba6c8..00000000 --- a/bin/mycompiler/test/blocks/TestForStmt.jav +++ /dev/null @@ -1,32 +0,0 @@ - -public class TestForStmt { - - public void m1() { - - i; - for (i=0;i<5;i++) { - - } - } - - public void m2() { - i; - for (i=0;i<5;i++) { - j; - j="abc"; - } - j; - j=3; - } - - public m3() { - i; - for (i=0;i<5;i++) { - j; - for (j=0;j<5;j++) { - return i==j; - } - } - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestIfStmt.jav b/bin/mycompiler/test/blocks/TestIfStmt.jav deleted file mode 100755 index de6e7e12..00000000 --- a/bin/mycompiler/test/blocks/TestIfStmt.jav +++ /dev/null @@ -1,27 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; - -public class TestIfStmt { - - public m1() { - a; - if (a) { - return a; - } - else - return false; - } - - public m2() { - a; - c; - a = new Menge(); - if (a.isEmpty()) { - c="empty"; - } - else if (a.size()==1) { - c="almost empty"; - } - else - return a; - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav b/bin/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav deleted file mode 100755 index 508f0aaf..00000000 --- a/bin/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav +++ /dev/null @@ -1,12 +0,0 @@ -public class TestInferenceAcrossBlocks{ - - public m(a){ - if(a==true){ - return 3; - } - else { - x; - return x; - } - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestSimpleBlocks.jav b/bin/mycompiler/test/blocks/TestSimpleBlocks.jav deleted file mode 100755 index 25d97b97..00000000 --- a/bin/mycompiler/test/blocks/TestSimpleBlocks.jav +++ /dev/null @@ -1,18 +0,0 @@ -public class TestSimpleBlocks{ - - public m(a){ - { - d; - d = 'a'; - { - c; - c = d; - } - { - c; - c = d==a; - } - } - return a; - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestSimpleVariable.jav b/bin/mycompiler/test/blocks/TestSimpleVariable.jav deleted file mode 100755 index b3d3ba24..00000000 --- a/bin/mycompiler/test/blocks/TestSimpleVariable.jav +++ /dev/null @@ -1,7 +0,0 @@ -public class TestSimpleVariable { - - public m() { - c; - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestSwitchStmt.jav b/bin/mycompiler/test/blocks/TestSwitchStmt.jav deleted file mode 100755 index 1b9f689b..00000000 --- a/bin/mycompiler/test/blocks/TestSwitchStmt.jav +++ /dev/null @@ -1,11 +0,0 @@ -public class TestSwitchStmt { - - public m(a) { - switch (a) { - case 1: return a++; break; - case 2: return a--; break; - default: return a; - } - - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestTryCatchBlock.jav b/bin/mycompiler/test/blocks/TestTryCatchBlock.jav deleted file mode 100755 index 59951045..00000000 --- a/bin/mycompiler/test/blocks/TestTryCatchBlock.jav +++ /dev/null @@ -1,14 +0,0 @@ -public class TestTryCatchBlock { - - public m() { - - try { - return new TestTryCatchBlock(); - } - catch (e) { - return null; - } - - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav b/bin/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav deleted file mode 100755 index 166cd973..00000000 --- a/bin/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav +++ /dev/null @@ -1,12 +0,0 @@ - -public class TestUndeterminedReturnNegative { - - public m1(a) { - if (a) { - a=false; - } - else - return false; - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestUninitializedVariable.jav b/bin/mycompiler/test/blocks/TestUninitializedVariable.jav deleted file mode 100755 index 793bbbe8..00000000 --- a/bin/mycompiler/test/blocks/TestUninitializedVariable.jav +++ /dev/null @@ -1,11 +0,0 @@ -public class TestUninitializedVariable { - - public void m1() { - a; - a++; - } - - void m2(T a) { - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/blocks/TestWhileStmt.jav b/bin/mycompiler/test/blocks/TestWhileStmt.jav deleted file mode 100755 index 1debca80..00000000 --- a/bin/mycompiler/test/blocks/TestWhileStmt.jav +++ /dev/null @@ -1,9 +0,0 @@ -public class TestWhileStmt { - - public m1() { - i; - while (true) - i++; - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/complexTypes/TestOwnClassMember.jav b/bin/mycompiler/test/complexTypes/TestOwnClassMember.jav deleted file mode 100755 index fa73127e..00000000 --- a/bin/mycompiler/test/complexTypes/TestOwnClassMember.jav +++ /dev/null @@ -1,9 +0,0 @@ -public class TestOwnClassMember { - - Integer a; - - public void m1(b) { - b += a; - } - -} \ No newline at end of file diff --git a/bin/mycompiler/test/complexTypes/TestOwnClassMethod.jav b/bin/mycompiler/test/complexTypes/TestOwnClassMethod.jav deleted file mode 100755 index e3d2a925..00000000 --- a/bin/mycompiler/test/complexTypes/TestOwnClassMethod.jav +++ /dev/null @@ -1,12 +0,0 @@ -public class TestOwnClassMethod { - - Integer a; - - public void m1(b) { - a += b; - } - - public void m2(c, d) { - c.m1(d); - } - } \ No newline at end of file diff --git a/bin/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav b/bin/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav deleted file mode 100755 index deafc13a..00000000 --- a/bin/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav +++ /dev/null @@ -1,12 +0,0 @@ -import java.io.OutputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.BufferedOutputStream; -import java.sql.Connection; - - -class TestStandardLibInheritanceInference{ - foo(x){ - x.close(); - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/complexTypes/TestStandardLibMember.jav b/bin/mycompiler/test/complexTypes/TestStandardLibMember.jav deleted file mode 100755 index c54b0b14..00000000 --- a/bin/mycompiler/test/complexTypes/TestStandardLibMember.jav +++ /dev/null @@ -1,11 +0,0 @@ -import java.lang.System; -import java.io.PrintStream; - -public class TestStandardLibMember { - - public m1() { - a; - a=System.out; - a.println(); - } -} \ No newline at end of file diff --git a/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav b/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav deleted file mode 100755 index 3f01ac70..00000000 --- a/bin/mycompiler/test/complexTypes/TestStandardLibMethod.jav +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -public class TestStandardLibMethod { - - public m1() { - a; - a = new HashMap(); - a.put("2",-1); - } - - public m2(Menge> m){ - k; - k = 0; - ret; - ret = m.elementAt(k).elementAt(k).intValue(); - return ret; - } - -} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java b/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java index 61d6261b..6497d5db 100755 --- a/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java +++ b/src/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.java @@ -3,6 +3,8 @@ package de.dhbwstuttgart.JvmDisassembler; import java.util.*; import java.io.*; +import de.dhbwstuttgart.typeinference.Menge; + //GenricsTest.java Testfile fuer jvmDisassembler class jvmDisassembler { @@ -133,7 +135,7 @@ class jvmDisassembler { int constant_pool_count = makePosShort(d.readShort()); System.out.println("constant_pool_count = " + constant_pool_count); - Menge const_pool = new Menge(constant_pool_count); + Menge const_pool = new Menge(); const_pool.addElement(""); // Konstatenpool beginnt bei 1, Stelle 0 auffuellen System.out.println("constant_pool =\n{"); diff --git a/src/de/dhbwstuttgart/antlr/.classpath b/src/de/dhbwstuttgart/antlr/.classpath deleted file mode 100644 index 27af59ee..00000000 --- a/src/de/dhbwstuttgart/antlr/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.gitignore b/src/de/dhbwstuttgart/antlr/.gitignore deleted file mode 100644 index 2561ed57..00000000 --- a/src/de/dhbwstuttgart/antlr/.gitignore +++ /dev/null @@ -1,107 +0,0 @@ -/Java8Parser$AnnotationConstantRestContext.class -/Java8Parser$AnnotationContext.class -/Java8Parser$AnnotationMethodRestContext.class -/Java8Parser$CatchClauseContext.class -/Java8Parser$CatchTypeContext.class -/Java8Parser$ClassBodyContext.class -/Java8Parser$ClassCreatorRestContext.class -/Java8Parser$ClassDeclarationContext.class -/Java8Parser$CompilationUnitContext.class -/Java8Parser$ConstantDeclaratorContext.class -/Java8Parser$ConstantExpressionContext.class -/Java8Parser$ConstructorDeclarationContext.class -/Java8Parser$ElementValuePairsContext.class -/Java8Parser$EnumDeclarationContext.class -/Java8Parser$ExpressionContext.class -/Java8Parser$ExpressionListContext.class -/Java8Parser$FieldDeclarationContext.class -/Java8Parser$ForControlContext.class -/Java8Parser$ForUpdateContext.class -/Java8Parser$FormalParameterListContext.class -/Java8Parser$GenericConstructorDeclarationContext.class -/Java8Parser$InnerCreatorContext.class -/Java8Parser$InterfaceBodyContext.class -/Java8Parser$InterfaceMemberDeclarationContext.class -/Java8Parser$InterfaceMethodDeclarationContext.class -/Java8Parser$LastFormalParameterContext.class -/Java8Parser$LiteralContext.class -/Java8Parser$LocalVariableDeclarationStatementContext.class -/Java8Parser$MethodDeclarationContext.class -/Java8Parser$ModifierContext.class -/Java8Parser$NonWildcardTypeArgumentsContext.class -/Java8Parser$PrimitiveTypeContext.class -/Java8Parser$ResourceSpecificationContext.class -/Java8Parser$ResourcesContext.class -/Java8Parser$SwitchBlockStatementGroupContext.class -/Java8Parser$TypeArgumentsOrDiamondContext.class -/Java8Parser$TypeBoundContext.class -/Java8Parser$TypeDeclarationContext.class -/Java8Parser$TypeListContext.class -/Java8Parser$TypeParametersContext.class -/Java8Parser$VariableDeclaratorIdContext.class -/Java8Parser$VariableInitializerContext.class -/Java8Parser$VariableModifierContext.class -/SyntaxTreeBuilder.class -/Test.class -/Java8BaseListener.class -/Java8Lexer.class -/Java8Listener.class -/Java8Parser$AnnotationMethodOrConstantRestContext.class -/Java8Parser$AnnotationNameContext.class -/Java8Parser$AnnotationTypeBodyContext.class -/Java8Parser$AnnotationTypeDeclarationContext.class -/Java8Parser$AnnotationTypeElementDeclarationContext.class -/Java8Parser$AnnotationTypeElementRestContext.class -/Java8Parser$ArgumentsContext.class -/Java8Parser$ArrayCreatorRestContext.class -/Java8Parser$ArrayInitializerContext.class -/Java8Parser$BlockContext.class -/Java8Parser$BlockStatementContext.class -/Java8Parser$ClassBodyDeclarationContext.class -/Java8Parser$ClassOrInterfaceModifierContext.class -/Java8Parser$ClassOrInterfaceTypeContext.class -/Java8Parser$ConstDeclarationContext.class -/Java8Parser$ConstructorBodyContext.class -/Java8Parser$CreatedNameContext.class -/Java8Parser$CreatorContext.class -/Java8Parser$DefaultValueContext.class -/Java8Parser$ElementValueArrayInitializerContext.class -/Java8Parser$ElementValueContext.class -/Java8Parser$ElementValuePairContext.class -/Java8Parser$EnhancedForControlContext.class -/Java8Parser$EnumBodyDeclarationsContext.class -/Java8Parser$EnumConstantContext.class -/Java8Parser$EnumConstantNameContext.class -/Java8Parser$EnumConstantsContext.class -/Java8Parser$ExplicitGenericInvocationContext.class -/Java8Parser$ExplicitGenericInvocationSuffixContext.class -/Java8Parser$FinallyBlockContext.class -/Java8Parser$ForInitContext.class -/Java8Parser$FormalParameterContext.class -/Java8Parser$FormalParametersContext.class -/Java8Parser$GenericInterfaceMethodDeclarationContext.class -/Java8Parser$GenericMethodDeclarationContext.class -/Java8Parser$ImportDeclarationContext.class -/Java8Parser$InterfaceBodyDeclarationContext.class -/Java8Parser$InterfaceDeclarationContext.class -/Java8Parser$LocalVariableDeclarationContext.class -/Java8Parser$MemberDeclarationContext.class -/Java8Parser$MethodBodyContext.class -/Java8Parser$NonWildcardTypeArgumentsOrDiamondContext.class -/Java8Parser$PackageDeclarationContext.class -/Java8Parser$ParExpressionContext.class -/Java8Parser$PrimaryContext.class -/Java8Parser$QualifiedNameContext.class -/Java8Parser$QualifiedNameListContext.class -/Java8Parser$ResourceContext.class -/Java8Parser$StatementContext.class -/Java8Parser$StatementExpressionContext.class -/Java8Parser$SuperSuffixContext.class -/Java8Parser$SwitchLabelContext.class -/Java8Parser$TypeArgumentContext.class -/Java8Parser$TypeArgumentsContext.class -/Java8Parser$TypeContext.class -/Java8Parser$TypeParameterContext.class -/Java8Parser$VariableDeclaratorContext.class -/Java8Parser$VariableDeclaratorsContext.class -/Java8Parser.class diff --git a/src/de/dhbwstuttgart/antlr/.idea/.name b/src/de/dhbwstuttgart/antlr/.idea/.name deleted file mode 100644 index b1431328..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -antlr \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/.idea/antlr.iml b/src/de/dhbwstuttgart/antlr/.idea/antlr.iml deleted file mode 100644 index b3a364e2..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/antlr.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/compiler.xml b/src/de/dhbwstuttgart/antlr/.idea/compiler.xml deleted file mode 100644 index 217af471..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/compiler.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/copyright/profiles_settings.xml b/src/de/dhbwstuttgart/antlr/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf33..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/.idea/encodings.xml b/src/de/dhbwstuttgart/antlr/.idea/encodings.xml deleted file mode 100644 index e206d70d..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/libraries/antlr_4_4_complete.xml b/src/de/dhbwstuttgart/antlr/.idea/libraries/antlr_4_4_complete.xml deleted file mode 100644 index 698589c2..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/libraries/antlr_4_4_complete.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/.idea/misc.xml b/src/de/dhbwstuttgart/antlr/.idea/misc.xml deleted file mode 100644 index 308776f1..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/modules.xml b/src/de/dhbwstuttgart/antlr/.idea/modules.xml deleted file mode 100644 index 240806a4..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/scopes/scope_settings.xml b/src/de/dhbwstuttgart/antlr/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b8..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/.idea/vcs.xml b/src/de/dhbwstuttgart/antlr/.idea/vcs.xml deleted file mode 100644 index 275077f8..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.idea/workspace.xml b/src/de/dhbwstuttgart/antlr/.idea/workspace.xml deleted file mode 100644 index aa55e581..00000000 --- a/src/de/dhbwstuttgart/antlr/.idea/workspace.xml +++ /dev/null @@ -1,572 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - localhost - 5050 - - - - - - - - - - 1409770188585 - 1409770188585 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No facets are configured - - - - - - - - - - - - - - - 1.8 - - - - - - - - antlr - - - - - - - - 1.8 - - - - - - - - antlr-4.4-complete - - - - - - - - - diff --git a/src/de/dhbwstuttgart/antlr/.project b/src/de/dhbwstuttgart/antlr/.project deleted file mode 100644 index 44689db8..00000000 --- a/src/de/dhbwstuttgart/antlr/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - AntlrTest - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/src/de/dhbwstuttgart/antlr/Java8.g4 b/src/de/dhbwstuttgart/antlr/Java8.g4 deleted file mode 100644 index 2b1c778a..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8.g4 +++ /dev/null @@ -1,1028 +0,0 @@ -/* - [The "BSD licence"] - Copyright (c) 2014 Terence Parr, Sam Harwell - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* A Java 8 grammar for ANTLR v4 derived from ANTLR v3 Java grammar. - * Follows syntax from spec: - * http://docs.oracle.com/javase/specs/jls/se8/html/jls-19.html - * Uses ANTLR v4's left-recursive expression notation. - * - * You can test with - * - * $ antlr4 Java.g4 - * $ javac *.java - * $ grun Java compilationUnit *.java - * - * Or, -~/antlr/code/grammars-v4/java8 $ j Test . -/Users/parrt/antlr/code/grammars-v4/java8/./Java8BaseListener.java -/Users/parrt/antlr/code/grammars-v4/java8/./Java8Lexer.java -/Users/parrt/antlr/code/grammars-v4/java8/./Java8Listener.java -/Users/parrt/antlr/code/grammars-v4/java8/./Java8Parser.java -/Users/parrt/antlr/code/grammars-v4/java8/./Test.java -Total lexer+parser time 384ms. - */ -grammar Java8; - -// starting point for parsing a java file -compilationUnit - : packageDeclaration? importDeclaration* typeDeclaration* EOF - ; - -packageDeclaration - : annotation* 'package' qualifiedName ';' - ; - -importDeclaration - : 'import' 'static'? qualifiedName ('.' '*')? ';' - ; - -typeDeclaration - : classOrInterfaceModifier* classDeclaration - | classOrInterfaceModifier* enumDeclaration - | classOrInterfaceModifier* interfaceDeclaration - | classOrInterfaceModifier* annotationTypeDeclaration - | ';' - ; - -modifier - : classOrInterfaceModifier - | ( 'native' - | 'synchronized' - | 'transient' - | 'volatile' - ) - ; - -classOrInterfaceModifier - : annotation // class or interface - | ( 'public' // class or interface - | 'protected' // class or interface - | 'private' // class or interface - | 'static' // class or interface - | 'abstract' // class or interface - | 'final' // class only -- does not apply to interfaces - | 'strictfp' // class or interface - ) - ; - -variableModifier - : 'final' - | annotation - ; - -classDeclaration - : 'class' Identifier typeParameters? - ('extends' type)? - ('implements' typeList)? - classBody - ; - -typeParameters - : '<' typeParameter (',' typeParameter)* '>' - ; - -typeParameter - : Identifier ('extends' typeBound)? - ; - -typeBound - : type ('&' type)* - ; - -enumDeclaration - : ENUM Identifier ('implements' typeList)? - '{' enumConstants? ','? enumBodyDeclarations? '}' - ; - -enumConstants - : enumConstant (',' enumConstant)* - ; - -enumConstant - : annotation* Identifier arguments? classBody? - ; - -enumBodyDeclarations - : ';' classBodyDeclaration* - ; - -interfaceDeclaration - : 'interface' Identifier typeParameters? ('extends' typeList)? interfaceBody - ; - -typeList - : type (',' type)* - ; - -classBody - : '{' classBodyDeclaration* '}' - ; - -interfaceBody - : '{' interfaceBodyDeclaration* '}' - ; - -classBodyDeclaration - : ';' - | 'static'? block - | modifier* memberDeclaration - ; - -memberDeclaration - : methodDeclaration - | genericMethodDeclaration - | fieldDeclaration - | constructorDeclaration - | genericConstructorDeclaration - | interfaceDeclaration - | annotationTypeDeclaration - | classDeclaration - | enumDeclaration - ; - -/* We use rule this even for void methods which cannot have [] after parameters. - This simplifies grammar and we can consider void to be a type, which - renders the [] matching as a context-sensitive issue or a semantic check - for invalid return type after parsing. - */ -methodDeclaration - : (type|'void') Identifier formalParameters ('[' ']')* - ('throws' qualifiedNameList)? - ( methodBody - | ';' - ) - ; - -genericMethodDeclaration - : typeParameters methodDeclaration - ; - -constructorDeclaration - : Identifier formalParameters ('throws' qualifiedNameList)? - constructorBody - ; - -genericConstructorDeclaration - : typeParameters constructorDeclaration - ; - -fieldDeclaration - : type variableDeclarators ';' - ; - -interfaceBodyDeclaration - : modifier* interfaceMemberDeclaration - | ';' - ; - -interfaceMemberDeclaration - : constDeclaration - | interfaceMethodDeclaration - | genericInterfaceMethodDeclaration - | interfaceDeclaration - | annotationTypeDeclaration - | classDeclaration - | enumDeclaration - ; - -constDeclaration - : type constantDeclarator (',' constantDeclarator)* ';' - ; - -constantDeclarator - : Identifier ('[' ']')* '=' variableInitializer - ; - -// see matching of [] comment in methodDeclaratorRest -interfaceMethodDeclaration - : (type|'void') Identifier formalParameters ('[' ']')* - ('throws' qualifiedNameList)? - ';' - ; - -genericInterfaceMethodDeclaration - : typeParameters interfaceMethodDeclaration - ; - -variableDeclarators - : variableDeclarator (',' variableDeclarator)* - ; - -variableDeclarator - : variableDeclaratorId ('=' variableInitializer)? - ; - -variableDeclaratorId - : Identifier ('[' ']')* - ; - -variableInitializer - : arrayInitializer - | expression - ; - -arrayInitializer - : '{' (variableInitializer (',' variableInitializer)* (',')? )? '}' - ; - -enumConstantName - : Identifier - ; - -type - : classOrInterfaceType ('[' ']')* - | primitiveType ('[' ']')* - ; - -classOrInterfaceType - : Identifier typeArguments? ('.' Identifier typeArguments? )* - ; - -primitiveType - : 'boolean' - | 'char' - | 'byte' - | 'short' - | 'int' - | 'long' - | 'float' - | 'double' - ; - -typeArguments - : '<' typeArgument (',' typeArgument)* '>' - ; - -typeArgument - : type - | '?' (('extends' | 'super') type)? - ; - -qualifiedNameList - : qualifiedName (',' qualifiedName)* - ; - -formalParameters - : '(' formalParameterList? ')' - ; - -formalParameterList - : formalParameter (',' formalParameter)* (',' lastFormalParameter)? - | lastFormalParameter - ; - -formalParameter - : variableModifier* type variableDeclaratorId - ; - -lastFormalParameter - : variableModifier* type '...' variableDeclaratorId - ; - -methodBody - : block - ; - -constructorBody - : block - ; - -qualifiedName - : Identifier ('.' Identifier)* - ; - -literal - : IntegerLiteral - | FloatingPointLiteral - | CharacterLiteral - | StringLiteral - | BooleanLiteral - | 'null' - ; - -// ANNOTATIONS - -annotation - : '@' annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? - ; - -annotationName : qualifiedName ; - -elementValuePairs - : elementValuePair (',' elementValuePair)* - ; - -elementValuePair - : Identifier '=' elementValue - ; - -elementValue - : expression - | annotation - | elementValueArrayInitializer - ; - -elementValueArrayInitializer - : '{' (elementValue (',' elementValue)*)? (',')? '}' - ; - -annotationTypeDeclaration - : '@' 'interface' Identifier annotationTypeBody - ; - -annotationTypeBody - : '{' (annotationTypeElementDeclaration)* '}' - ; - -annotationTypeElementDeclaration - : modifier* annotationTypeElementRest - | ';' // this is not allowed by the grammar, but apparently allowed by the actual compiler - ; - -annotationTypeElementRest - : type annotationMethodOrConstantRest ';' - | classDeclaration ';'? - | interfaceDeclaration ';'? - | enumDeclaration ';'? - | annotationTypeDeclaration ';'? - ; - -annotationMethodOrConstantRest - : annotationMethodRest - | annotationConstantRest - ; - -annotationMethodRest - : Identifier '(' ')' defaultValue? - ; - -annotationConstantRest - : variableDeclarators - ; - -defaultValue - : 'default' elementValue - ; - -// STATEMENTS / BLOCKS - -block - : '{' blockStatement* '}' - ; - -blockStatement - : localVariableDeclarationStatement - | statement - | typeDeclaration - ; - -localVariableDeclarationStatement - : localVariableDeclaration ';' - ; - -localVariableDeclaration - : variableModifier* type variableDeclarators - ; - -statement - : block - | ASSERT expression (':' expression)? ';' - | 'if' parExpression statement ('else' statement)? - | 'for' '(' forControl ')' statement - | 'while' parExpression statement - | 'do' statement 'while' parExpression ';' - | 'try' block (catchClause+ finallyBlock? | finallyBlock) - | 'try' resourceSpecification block catchClause* finallyBlock? - | 'switch' parExpression '{' switchBlockStatementGroup* switchLabel* '}' - | 'synchronized' parExpression block - | 'return' expression? ';' - | 'throw' expression ';' - | 'break' Identifier? ';' - | 'continue' Identifier? ';' - | ';' - | statementExpression ';' - | Identifier ':' statement - ; - -catchClause - : 'catch' '(' variableModifier* catchType Identifier ')' block - ; - -catchType - : qualifiedName ('|' qualifiedName)* - ; - -finallyBlock - : 'finally' block - ; - -resourceSpecification - : '(' resources ';'? ')' - ; - -resources - : resource (';' resource)* - ; - -resource - : variableModifier* classOrInterfaceType variableDeclaratorId '=' expression - ; - -/** Matches cases then statements, both of which are mandatory. - * To handle empty cases at the end, we add switchLabel* to statement. - */ -switchBlockStatementGroup - : switchLabel+ blockStatement+ - ; - -switchLabel - : 'case' constantExpression ':' - | 'case' enumConstantName ':' - | 'default' ':' - ; - -forControl - : enhancedForControl - | forInit? ';' expression? ';' forUpdate? - ; - -forInit - : localVariableDeclaration - | expressionList - ; - -enhancedForControl - : variableModifier* type Identifier ':' expression - ; - -forUpdate - : expressionList - ; - -// EXPRESSIONS - -parExpression - : '(' expression ')' - ; - -expressionList - : expression (',' expression)* - ; - -statementExpression - : expression - ; - -constantExpression - : expression - ; - -expression - : primary - | expression '.' Identifier - | expression '.' 'this' - | expression '.' 'new' nonWildcardTypeArguments? innerCreator - | expression '.' 'super' superSuffix - | expression '.' explicitGenericInvocation - | expression '[' expression ']' - | expression '(' expressionList? ')' - | 'new' creator - | '(' type ')' expression - | expression ('++' | '--') - | ('+'|'-'|'++'|'--') expression - | ('~'|'!') expression - | expression ('*'|'/'|'%') expression - | expression ('+'|'-') expression - | expression ('<' '<' | '>' '>' '>' | '>' '>') expression - | expression ('<=' | '>=' | '>' | '<') expression - | expression 'instanceof' type - | expression ('==' | '!=') expression - | expression '&' expression - | expression '^' expression - | expression '|' expression - | expression '&&' expression - | expression '||' expression - | expression '?' expression ':' expression - | expression - ( '=' - | '+=' - | '-=' - | '*=' - | '/=' - | '&=' - | '|=' - | '^=' - | '>>=' - | '>>>=' - | '<<=' - | '%=' - ) - expression - ; - -primary - : '(' expression ')' - | 'this' - | 'super' - | literal - | Identifier - | type '.' 'class' - | 'void' '.' 'class' - | nonWildcardTypeArguments (explicitGenericInvocationSuffix | 'this' arguments) - ; - -creator - : nonWildcardTypeArguments createdName classCreatorRest - | createdName (arrayCreatorRest | classCreatorRest) - ; - -createdName - : Identifier typeArgumentsOrDiamond? ('.' Identifier typeArgumentsOrDiamond?)* - | primitiveType - ; - -innerCreator - : Identifier nonWildcardTypeArgumentsOrDiamond? classCreatorRest - ; - -arrayCreatorRest - : '[' - ( ']' ('[' ']')* arrayInitializer - | expression ']' ('[' expression ']')* ('[' ']')* - ) - ; - -classCreatorRest - : arguments classBody? - ; - -explicitGenericInvocation - : nonWildcardTypeArguments explicitGenericInvocationSuffix - ; - -nonWildcardTypeArguments - : '<' typeList '>' - ; - -typeArgumentsOrDiamond - : '<' '>' - | typeArguments - ; - -nonWildcardTypeArgumentsOrDiamond - : '<' '>' - | nonWildcardTypeArguments - ; - -superSuffix - : arguments - | '.' Identifier arguments? - ; - -explicitGenericInvocationSuffix - : 'super' superSuffix - | Identifier arguments - ; - -arguments - : '(' expressionList? ')' - ; - -// LEXER - -// §3.9 Keywords - -ABSTRACT : 'abstract'; -ASSERT : 'assert'; -BOOLEAN : 'boolean'; -BREAK : 'break'; -BYTE : 'byte'; -CASE : 'case'; -CATCH : 'catch'; -CHAR : 'char'; -CLASS : 'class'; -CONST : 'const'; -CONTINUE : 'continue'; -DEFAULT : 'default'; -DO : 'do'; -DOUBLE : 'double'; -ELSE : 'else'; -ENUM : 'enum'; -EXTENDS : 'extends'; -FINAL : 'final'; -FINALLY : 'finally'; -FLOAT : 'float'; -FOR : 'for'; -IF : 'if'; -GOTO : 'goto'; -IMPLEMENTS : 'implements'; -IMPORT : 'import'; -INSTANCEOF : 'instanceof'; -INT : 'int'; -INTERFACE : 'interface'; -LONG : 'long'; -NATIVE : 'native'; -NEW : 'new'; -PACKAGE : 'package'; -PRIVATE : 'private'; -PROTECTED : 'protected'; -PUBLIC : 'public'; -RETURN : 'return'; -SHORT : 'short'; -STATIC : 'static'; -STRICTFP : 'strictfp'; -SUPER : 'super'; -SWITCH : 'switch'; -SYNCHRONIZED : 'synchronized'; -THIS : 'this'; -THROW : 'throw'; -THROWS : 'throws'; -TRANSIENT : 'transient'; -TRY : 'try'; -VOID : 'void'; -VOLATILE : 'volatile'; -WHILE : 'while'; - -// §3.10.1 Integer Literals - -IntegerLiteral - : DecimalIntegerLiteral - | HexIntegerLiteral - | OctalIntegerLiteral - | BinaryIntegerLiteral - ; - -fragment -DecimalIntegerLiteral - : DecimalNumeral IntegerTypeSuffix? - ; - -fragment -HexIntegerLiteral - : HexNumeral IntegerTypeSuffix? - ; - -fragment -OctalIntegerLiteral - : OctalNumeral IntegerTypeSuffix? - ; - -fragment -BinaryIntegerLiteral - : BinaryNumeral IntegerTypeSuffix? - ; - -fragment -IntegerTypeSuffix - : [lL] - ; - -fragment -DecimalNumeral - : '0' - | NonZeroDigit (Digits? | Underscores Digits) - ; - -fragment -Digits - : Digit (DigitOrUnderscore* Digit)? - ; - -fragment -Digit - : '0' - | NonZeroDigit - ; - -fragment -NonZeroDigit - : [1-9] - ; - -fragment -DigitOrUnderscore - : Digit - | '_' - ; - -fragment -Underscores - : '_'+ - ; - -fragment -HexNumeral - : '0' [xX] HexDigits - ; - -fragment -HexDigits - : HexDigit (HexDigitOrUnderscore* HexDigit)? - ; - -fragment -HexDigit - : [0-9a-fA-F] - ; - -fragment -HexDigitOrUnderscore - : HexDigit - | '_' - ; - -fragment -OctalNumeral - : '0' Underscores? OctalDigits - ; - -fragment -OctalDigits - : OctalDigit (OctalDigitOrUnderscore* OctalDigit)? - ; - -fragment -OctalDigit - : [0-7] - ; - -fragment -OctalDigitOrUnderscore - : OctalDigit - | '_' - ; - -fragment -BinaryNumeral - : '0' [bB] BinaryDigits - ; - -fragment -BinaryDigits - : BinaryDigit (BinaryDigitOrUnderscore* BinaryDigit)? - ; - -fragment -BinaryDigit - : [01] - ; - -fragment -BinaryDigitOrUnderscore - : BinaryDigit - | '_' - ; - -// §3.10.2 Floating-Point Literals - -FloatingPointLiteral - : DecimalFloatingPointLiteral - | HexadecimalFloatingPointLiteral - ; - -fragment -DecimalFloatingPointLiteral - : Digits '.' Digits? ExponentPart? FloatTypeSuffix? - | '.' Digits ExponentPart? FloatTypeSuffix? - | Digits ExponentPart FloatTypeSuffix? - | Digits FloatTypeSuffix - ; - -fragment -ExponentPart - : ExponentIndicator SignedInteger - ; - -fragment -ExponentIndicator - : [eE] - ; - -fragment -SignedInteger - : Sign? Digits - ; - -fragment -Sign - : [+-] - ; - -fragment -FloatTypeSuffix - : [fFdD] - ; - -fragment -HexadecimalFloatingPointLiteral - : HexSignificand BinaryExponent FloatTypeSuffix? - ; - -fragment -HexSignificand - : HexNumeral '.'? - | '0' [xX] HexDigits? '.' HexDigits - ; - -fragment -BinaryExponent - : BinaryExponentIndicator SignedInteger - ; - -fragment -BinaryExponentIndicator - : [pP] - ; - -// §3.10.3 Boolean Literals - -BooleanLiteral - : 'true' - | 'false' - ; - -// §3.10.4 Character Literals - -CharacterLiteral - : '\'' SingleCharacter '\'' - | '\'' EscapeSequence '\'' - ; - -fragment -SingleCharacter - : ~['\\] - ; - -// §3.10.5 String Literals - -StringLiteral - : '"' StringCharacters? '"' - ; - -fragment -StringCharacters - : StringCharacter+ - ; - -fragment -StringCharacter - : ~["\\] - | EscapeSequence - ; - -// §3.10.6 Escape Sequences for Character and String Literals - -fragment -EscapeSequence - : '\\' [btnfr"'\\] - | OctalEscape - | UnicodeEscape - ; - -fragment -OctalEscape - : '\\' OctalDigit - | '\\' OctalDigit OctalDigit - | '\\' ZeroToThree OctalDigit OctalDigit - ; - -fragment -UnicodeEscape - : '\\' 'u' HexDigit HexDigit HexDigit HexDigit - ; - -fragment -ZeroToThree - : [0-3] - ; - -// §3.10.7 The Null Literal - -NullLiteral - : 'null' - ; - -// §3.11 Separators - -LPAREN : '('; -RPAREN : ')'; -LBRACE : '{'; -RBRACE : '}'; -LBRACK : '['; -RBRACK : ']'; -SEMI : ';'; -COMMA : ','; -DOT : '.'; - -// §3.12 Operators - -ASSIGN : '='; -GT : '>'; -LT : '<'; -BANG : '!'; -TILDE : '~'; -QUESTION : '?'; -COLON : ':'; -EQUAL : '=='; -LE : '<='; -GE : '>='; -NOTEQUAL : '!='; -AND : '&&'; -OR : '||'; -INC : '++'; -DEC : '--'; -ADD : '+'; -SUB : '-'; -MUL : '*'; -DIV : '/'; -BITAND : '&'; -BITOR : '|'; -CARET : '^'; -MOD : '%'; - -ADD_ASSIGN : '+='; -SUB_ASSIGN : '-='; -MUL_ASSIGN : '*='; -DIV_ASSIGN : '/='; -AND_ASSIGN : '&='; -OR_ASSIGN : '|='; -XOR_ASSIGN : '^='; -MOD_ASSIGN : '%='; -LSHIFT_ASSIGN : '<<='; -RSHIFT_ASSIGN : '>>='; -URSHIFT_ASSIGN : '>>>='; - -// §3.8 Identifiers (must appear after all keywords in the grammar) - -Identifier - : JavaLetter JavaLetterOrDigit* - ; - -fragment -JavaLetter - : [a-zA-Z$_] // these are the "java letters" below 0xFF - | // covers all characters above 0xFF which are not a surrogate - ~[\u0000-\u00FF\uD800-\uDBFF] - {Character.isJavaIdentifierStart(_input.LA(-1))}? - | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF - [\uD800-\uDBFF] [\uDC00-\uDFFF] - {Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}? - ; - -fragment -JavaLetterOrDigit - : [a-zA-Z0-9$_] // these are the "java letters or digits" below 0xFF - | // covers all characters above 0xFF which are not a surrogate - ~[\u0000-\u00FF\uD800-\uDBFF] - {Character.isJavaIdentifierPart(_input.LA(-1))}? - | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF - [\uD800-\uDBFF] [\uDC00-\uDFFF] - {Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}? - ; - -// -// Additional symbols not defined in the lexical specification -// - -AT : '@'; -ELLIPSIS : '...'; - -// -// Whitespace and comments -// - -WS : [ \t\r\n\u000C]+ -> skip - ; - -COMMENT - : '/*' .*? '*/' -> skip - ; - -LINE_COMMENT - : '//' ~[\r\n]* -> skip - ; diff --git a/src/de/dhbwstuttgart/antlr/Java8.tokens b/src/de/dhbwstuttgart/antlr/Java8.tokens deleted file mode 100644 index 3f62bddf..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8.tokens +++ /dev/null @@ -1,201 +0,0 @@ -THROW=44 -STATIC=38 -INTERFACE=28 -AND_ASSIGN=93 -BREAK=4 -BYTE=5 -ELSE=15 -IF=22 -ENUM=16 -SUB=82 -BANG=69 -LPAREN=57 -DOT=65 -CASE=6 -AT=101 -LINE_COMMENT=105 -StringLiteral=55 -ELLIPSIS=102 -LBRACK=61 -PUBLIC=35 -THROWS=45 -NullLiteral=56 -RSHIFT_ASSIGN=98 -LBRACE=59 -GOTO=23 -SUB_ASSIGN=90 -SEMI=63 -CHAR=8 -ASSIGN=66 -COMMENT=104 -IMPORT=25 -BITOR=86 -CATCH=7 -MUL_ASSIGN=91 -DOUBLE=14 -PROTECTED=34 -LONG=29 -COMMA=64 -BITAND=85 -PRIVATE=33 -CONTINUE=11 -DIV=84 -FloatingPointLiteral=52 -LE=74 -CharacterLiteral=54 -VOLATILE=49 -EXTENDS=17 -INSTANCEOF=26 -NEW=31 -ADD=81 -LT=68 -CLASS=9 -DO=13 -FINALLY=19 -Identifier=100 -CONST=10 -PACKAGE=32 -OR_ASSIGN=94 -TRY=47 -IntegerLiteral=51 -SYNCHRONIZED=42 -MUL=83 -FOR=21 -FINAL=18 -RPAREN=58 -CARET=87 -URSHIFT_ASSIGN=99 -BOOLEAN=3 -NOTEQUAL=76 -RBRACK=62 -RBRACE=60 -AND=77 -THIS=43 -SWITCH=41 -VOID=48 -TRANSIENT=46 -INC=79 -FLOAT=20 -NATIVE=30 -DIV_ASSIGN=92 -BooleanLiteral=53 -ABSTRACT=1 -STRICTFP=39 -INT=27 -QUESTION=71 -RETURN=36 -LSHIFT_ASSIGN=97 -ADD_ASSIGN=89 -WS=103 -GE=75 -SUPER=40 -OR=78 -DEC=80 -MOD=88 -XOR_ASSIGN=95 -ASSERT=2 -EQUAL=73 -IMPLEMENTS=24 -COLON=72 -GT=67 -SHORT=37 -MOD_ASSIGN=96 -WHILE=50 -TILDE=70 -DEFAULT=12 -'import'=25 -'-'=82 -')'=58 -'super'=40 -'else'=15 -'%'=88 -'!'=69 -'>'=67 -'public'=35 -'=='=73 -'--'=80 -'|'=86 -'['=61 -':'=72 -'...'=102 -'throw'=44 -'case'=6 -'.'=65 -'this'=43 -'*'=83 -'switch'=41 -'synchronized'=42 -'&'=85 -'double'=14 -'break'=4 -'short'=37 -'<='=74 -'enum'=16 -'try'=47 -'?'=71 -'if'=22 -'extends'=17 -'goto'=23 -'}'=60 -'instanceof'=26 -';'=63 -'||'=78 -'>>='=98 -'class'=9 -'return'=36 -'&='=93 -'catch'=7 -'native'=30 -'continue'=11 -'strictfp'=39 -'/'=84 -'*='=91 -'+'=81 -'final'=18 -'protected'=34 -'static'=38 -'@'=101 -'transient'=46 -'~'=70 -'assert'=2 -']'=62 -'<'=68 -'++'=79 -'>>>='=99 -'>='=75 -'long'=29 -'boolean'=3 -'const'=10 -'abstract'=1 -'implements'=24 -'volatile'=49 -'throws'=45 -'/='=92 -','=64 -'-='=90 -'do'=13 -'package'=32 -'('=57 -'null'=56 -'int'=27 -'|='=94 -'for'=21 -'^'=87 -'<<='=97 -'='=66 -'byte'=5 -'&&'=77 -'^='=95 -'void'=48 -'while'=50 -'{'=59 -'float'=20 -'!='=76 -'new'=31 -'char'=8 -'finally'=19 -'interface'=28 -'%='=96 -'private'=33 -'+='=89 -'default'=12 diff --git a/src/de/dhbwstuttgart/antlr/Java8BaseVisitor.java b/src/de/dhbwstuttgart/antlr/Java8BaseVisitor.java deleted file mode 100644 index 0050e6c7..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8BaseVisitor.java +++ /dev/null @@ -1,723 +0,0 @@ -package de.dhbwstuttgart.antlr; - -// Generated from Java8.g4 by ANTLR 4.4 -import org.antlr.v4.runtime.misc.NotNull; -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; - -/** - * This class provides an empty implementation of {@link Java8Visitor}, - * which can be extended to create a visitor which only needs to handle a subset - * of the available methods. - * - * @param The return type of the visit operation. Use {@link Void} for - * operations with no return type. - */ -public class Java8BaseVisitor extends AbstractParseTreeVisitor implements Java8Visitor { - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitMemberDeclaration(@NotNull Java8Parser.MemberDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitDefaultValue(@NotNull Java8Parser.DefaultValueContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationTypeElementDeclaration(@NotNull Java8Parser.AnnotationTypeElementDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitType(@NotNull Java8Parser.TypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationTypeBody(@NotNull Java8Parser.AnnotationTypeBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitGenericInterfaceMethodDeclaration(@NotNull Java8Parser.GenericInterfaceMethodDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassBodyDeclaration(@NotNull Java8Parser.ClassBodyDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitBlock(@NotNull Java8Parser.BlockContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnumBodyDeclarations(@NotNull Java8Parser.EnumBodyDeclarationsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitForUpdate(@NotNull Java8Parser.ForUpdateContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnhancedForControl(@NotNull Java8Parser.EnhancedForControlContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationConstantRest(@NotNull Java8Parser.AnnotationConstantRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitExplicitGenericInvocation(@NotNull Java8Parser.ExplicitGenericInvocationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitNonWildcardTypeArgumentsOrDiamond(@NotNull Java8Parser.NonWildcardTypeArgumentsOrDiamondContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitExpressionList(@NotNull Java8Parser.ExpressionListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationTypeElementRest(@NotNull Java8Parser.AnnotationTypeElementRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassOrInterfaceType(@NotNull Java8Parser.ClassOrInterfaceTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeBound(@NotNull Java8Parser.TypeBoundContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitVariableDeclaratorId(@NotNull Java8Parser.VariableDeclaratorIdContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitPrimary(@NotNull Java8Parser.PrimaryContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassCreatorRest(@NotNull Java8Parser.ClassCreatorRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInterfaceBodyDeclaration(@NotNull Java8Parser.InterfaceBodyDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeArguments(@NotNull Java8Parser.TypeArgumentsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationName(@NotNull Java8Parser.AnnotationNameContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitFinallyBlock(@NotNull Java8Parser.FinallyBlockContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeParameters(@NotNull Java8Parser.TypeParametersContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitLastFormalParameter(@NotNull Java8Parser.LastFormalParameterContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitConstructorBody(@NotNull Java8Parser.ConstructorBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitLiteral(@NotNull Java8Parser.LiteralContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationMethodOrConstantRest(@NotNull Java8Parser.AnnotationMethodOrConstantRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitCatchClause(@NotNull Java8Parser.CatchClauseContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitVariableDeclarator(@NotNull Java8Parser.VariableDeclaratorContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeList(@NotNull Java8Parser.TypeListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnumConstants(@NotNull Java8Parser.EnumConstantsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassBody(@NotNull Java8Parser.ClassBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitCreatedName(@NotNull Java8Parser.CreatedNameContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnumDeclaration(@NotNull Java8Parser.EnumDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitFormalParameter(@NotNull Java8Parser.FormalParameterContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitParExpression(@NotNull Java8Parser.ParExpressionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotation(@NotNull Java8Parser.AnnotationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitVariableInitializer(@NotNull Java8Parser.VariableInitializerContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitElementValueArrayInitializer(@NotNull Java8Parser.ElementValueArrayInitializerContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitCreator(@NotNull Java8Parser.CreatorContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitArrayCreatorRest(@NotNull Java8Parser.ArrayCreatorRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitExpression(@NotNull Java8Parser.ExpressionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitConstantExpression(@NotNull Java8Parser.ConstantExpressionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitQualifiedNameList(@NotNull Java8Parser.QualifiedNameListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitConstructorDeclaration(@NotNull Java8Parser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitForControl(@NotNull Java8Parser.ForControlContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitSuperSuffix(@NotNull Java8Parser.SuperSuffixContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitVariableDeclarators(@NotNull Java8Parser.VariableDeclaratorsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitCatchType(@NotNull Java8Parser.CatchTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassOrInterfaceModifier(@NotNull Java8Parser.ClassOrInterfaceModifierContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnumConstantName(@NotNull Java8Parser.EnumConstantNameContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitModifier(@NotNull Java8Parser.ModifierContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInnerCreator(@NotNull Java8Parser.InnerCreatorContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitExplicitGenericInvocationSuffix(@NotNull Java8Parser.ExplicitGenericInvocationSuffixContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitVariableModifier(@NotNull Java8Parser.VariableModifierContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitElementValuePair(@NotNull Java8Parser.ElementValuePairContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitArrayInitializer(@NotNull Java8Parser.ArrayInitializerContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitElementValue(@NotNull Java8Parser.ElementValueContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitConstDeclaration(@NotNull Java8Parser.ConstDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitResource(@NotNull Java8Parser.ResourceContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitQualifiedName(@NotNull Java8Parser.QualifiedNameContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitResourceSpecification(@NotNull Java8Parser.ResourceSpecificationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitFormalParameterList(@NotNull Java8Parser.FormalParameterListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationTypeDeclaration(@NotNull Java8Parser.AnnotationTypeDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitCompilationUnit(@NotNull Java8Parser.CompilationUnitContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitAnnotationMethodRest(@NotNull Java8Parser.AnnotationMethodRestContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitSwitchBlockStatementGroup(@NotNull Java8Parser.SwitchBlockStatementGroupContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeParameter(@NotNull Java8Parser.TypeParameterContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInterfaceBody(@NotNull Java8Parser.InterfaceBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitMethodDeclaration(@NotNull Java8Parser.MethodDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitMethodBody(@NotNull Java8Parser.MethodBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeArgument(@NotNull Java8Parser.TypeArgumentContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeDeclaration(@NotNull Java8Parser.TypeDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitGenericConstructorDeclaration(@NotNull Java8Parser.GenericConstructorDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitClassDeclaration(@NotNull Java8Parser.ClassDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitEnumConstant(@NotNull Java8Parser.EnumConstantContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitStatement(@NotNull Java8Parser.StatementContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitImportDeclaration(@NotNull Java8Parser.ImportDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitPrimitiveType(@NotNull Java8Parser.PrimitiveTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInterfaceDeclaration(@NotNull Java8Parser.InterfaceDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitLocalVariableDeclarationStatement(@NotNull Java8Parser.LocalVariableDeclarationStatementContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitBlockStatement(@NotNull Java8Parser.BlockStatementContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitFieldDeclaration(@NotNull Java8Parser.FieldDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitConstantDeclarator(@NotNull Java8Parser.ConstantDeclaratorContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitResources(@NotNull Java8Parser.ResourcesContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitStatementExpression(@NotNull Java8Parser.StatementExpressionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInterfaceMethodDeclaration(@NotNull Java8Parser.InterfaceMethodDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitPackageDeclaration(@NotNull Java8Parser.PackageDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitElementValuePairs(@NotNull Java8Parser.ElementValuePairsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitLocalVariableDeclaration(@NotNull Java8Parser.LocalVariableDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitNonWildcardTypeArguments(@NotNull Java8Parser.NonWildcardTypeArgumentsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitInterfaceMemberDeclaration(@NotNull Java8Parser.InterfaceMemberDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitSwitchLabel(@NotNull Java8Parser.SwitchLabelContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitForInit(@NotNull Java8Parser.ForInitContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitFormalParameters(@NotNull Java8Parser.FormalParametersContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitArguments(@NotNull Java8Parser.ArgumentsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitGenericMethodDeclaration(@NotNull Java8Parser.GenericMethodDeclarationContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

    The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

    - */ - @Override public T visitTypeArgumentsOrDiamond(@NotNull Java8Parser.TypeArgumentsOrDiamondContext ctx) { return visitChildren(ctx); } -} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/Java8Lexer.java b/src/de/dhbwstuttgart/antlr/Java8Lexer.java deleted file mode 100644 index 8af17245..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8Lexer.java +++ /dev/null @@ -1,517 +0,0 @@ -package de.dhbwstuttgart.antlr; - -// Generated from Java8.g4 by ANTLR 4.4 -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class Java8Lexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.4", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8, - CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15, - ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23, - IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29, - NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36, - SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42, - THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VOID=48, VOLATILE=49, - WHILE=50, IntegerLiteral=51, FloatingPointLiteral=52, BooleanLiteral=53, - CharacterLiteral=54, StringLiteral=55, NullLiteral=56, LPAREN=57, RPAREN=58, - LBRACE=59, RBRACE=60, LBRACK=61, RBRACK=62, SEMI=63, COMMA=64, DOT=65, - ASSIGN=66, GT=67, LT=68, BANG=69, TILDE=70, QUESTION=71, COLON=72, EQUAL=73, - LE=74, GE=75, NOTEQUAL=76, AND=77, OR=78, INC=79, DEC=80, ADD=81, SUB=82, - MUL=83, DIV=84, BITAND=85, BITOR=86, CARET=87, MOD=88, ADD_ASSIGN=89, - SUB_ASSIGN=90, MUL_ASSIGN=91, DIV_ASSIGN=92, AND_ASSIGN=93, OR_ASSIGN=94, - XOR_ASSIGN=95, MOD_ASSIGN=96, LSHIFT_ASSIGN=97, RSHIFT_ASSIGN=98, URSHIFT_ASSIGN=99, - Identifier=100, AT=101, ELLIPSIS=102, WS=103, COMMENT=104, LINE_COMMENT=105; - public static String[] modeNames = { - "DEFAULT_MODE" - }; - - public static final String[] tokenNames = { - "'\\u0000'", "'\\u0001'", "'\\u0002'", "'\\u0003'", "'\\u0004'", "'\\u0005'", - "'\\u0006'", "'\\u0007'", "'\b'", "'\t'", "'\n'", "'\\u000B'", "'\f'", - "'\r'", "'\\u000E'", "'\\u000F'", "'\\u0010'", "'\\u0011'", "'\\u0012'", - "'\\u0013'", "'\\u0014'", "'\\u0015'", "'\\u0016'", "'\\u0017'", "'\\u0018'", - "'\\u0019'", "'\\u001A'", "'\\u001B'", "'\\u001C'", "'\\u001D'", "'\\u001E'", - "'\\u001F'", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''", - "'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'", - "'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "':'", "';'", - "'<'", "'='", "'>'", "'?'", "'@'", "'A'", "'B'", "'C'", "'D'", "'E'", - "'F'", "'G'", "'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'", - "'P'", "'Q'", "'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'", - "'Z'", "'['", "'\\'", "']'", "'^'", "'_'", "'`'", "'a'", "'b'", "'c'", - "'d'", "'e'", "'f'", "'g'", "'h'", "'i'" - }; - public static final String[] ruleNames = { - "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR", - "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", - "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", - "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", - "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", - "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", - "TRY", "VOID", "VOLATILE", "WHILE", "IntegerLiteral", "DecimalIntegerLiteral", - "HexIntegerLiteral", "OctalIntegerLiteral", "BinaryIntegerLiteral", "IntegerTypeSuffix", - "DecimalNumeral", "Digits", "Digit", "NonZeroDigit", "DigitOrUnderscore", - "Underscores", "HexNumeral", "HexDigits", "HexDigit", "HexDigitOrUnderscore", - "OctalNumeral", "OctalDigits", "OctalDigit", "OctalDigitOrUnderscore", - "BinaryNumeral", "BinaryDigits", "BinaryDigit", "BinaryDigitOrUnderscore", - "FloatingPointLiteral", "DecimalFloatingPointLiteral", "ExponentPart", - "ExponentIndicator", "SignedInteger", "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", - "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", "BooleanLiteral", - "CharacterLiteral", "SingleCharacter", "StringLiteral", "StringCharacters", - "StringCharacter", "EscapeSequence", "OctalEscape", "UnicodeEscape", "ZeroToThree", - "NullLiteral", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", - "SEMI", "COMMA", "DOT", "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", - "COLON", "EQUAL", "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", - "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", - "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", - "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", - "JavaLetter", "JavaLetterOrDigit", "AT", "ELLIPSIS", "WS", "COMMENT", - "LINE_COMMENT" - }; - - - public Java8Lexer(CharStream input) { - super(input); - _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @Override - public String getGrammarFileName() { return "Java8.g4"; } - - @Override - public String[] getTokenNames() { return tokenNames; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public String[] getModeNames() { return modeNames; } - - @Override - public ATN getATN() { return _ATN; } - - @Override - public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { - switch (ruleIndex) { - case 140: return JavaLetter_sempred((RuleContext)_localctx, predIndex); - case 141: return JavaLetterOrDigit_sempred((RuleContext)_localctx, predIndex); - } - return true; - } - private boolean JavaLetterOrDigit_sempred(RuleContext _localctx, int predIndex) { - switch (predIndex) { - case 2: return Character.isJavaIdentifierPart(_input.LA(-1)); - case 3: return Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1))); - } - return true; - } - private boolean JavaLetter_sempred(RuleContext _localctx, int predIndex) { - switch (predIndex) { - case 0: return Character.isJavaIdentifierStart(_input.LA(-1)); - case 1: return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1))); - } - return true; - } - - public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2k\u042e\b\1\4\2\t"+ - "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ - "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ - "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ - "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ - "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ - "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ - "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+ - "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+ - "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+ - "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+ - "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+ - "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+ - "\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+ - "\4\u0093\t\u0093\4\u0094\t\u0094\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3"+ - "\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5"+ - "\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3"+ - "\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13"+ - "\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r"+ - "\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3"+ - "\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3"+ - "\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3"+ - "\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\27\3\27\3"+ - "\27\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3"+ - "\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3"+ - "\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3"+ - "\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3"+ - "\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3"+ - "\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3"+ - "$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3"+ - "\'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3*\3"+ - "+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3"+ - "-\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3"+ - "\60\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3"+ - "\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\5\64\u0281\n\64"+ - "\3\65\3\65\5\65\u0285\n\65\3\66\3\66\5\66\u0289\n\66\3\67\3\67\5\67\u028d"+ - "\n\67\38\38\58\u0291\n8\39\39\3:\3:\3:\5:\u0298\n:\3:\3:\3:\5:\u029d\n"+ - ":\5:\u029f\n:\3;\3;\7;\u02a3\n;\f;\16;\u02a6\13;\3;\5;\u02a9\n;\3<\3<"+ - "\5<\u02ad\n<\3=\3=\3>\3>\5>\u02b3\n>\3?\6?\u02b6\n?\r?\16?\u02b7\3@\3"+ - "@\3@\3@\3A\3A\7A\u02c0\nA\fA\16A\u02c3\13A\3A\5A\u02c6\nA\3B\3B\3C\3C"+ - "\5C\u02cc\nC\3D\3D\5D\u02d0\nD\3D\3D\3E\3E\7E\u02d6\nE\fE\16E\u02d9\13"+ - "E\3E\5E\u02dc\nE\3F\3F\3G\3G\5G\u02e2\nG\3H\3H\3H\3H\3I\3I\7I\u02ea\n"+ - "I\fI\16I\u02ed\13I\3I\5I\u02f0\nI\3J\3J\3K\3K\5K\u02f6\nK\3L\3L\5L\u02fa"+ - "\nL\3M\3M\3M\5M\u02ff\nM\3M\5M\u0302\nM\3M\5M\u0305\nM\3M\3M\3M\5M\u030a"+ - "\nM\3M\5M\u030d\nM\3M\3M\3M\5M\u0312\nM\3M\3M\3M\5M\u0317\nM\3N\3N\3N"+ - "\3O\3O\3P\5P\u031f\nP\3P\3P\3Q\3Q\3R\3R\3S\3S\3S\5S\u032a\nS\3T\3T\5T"+ - "\u032e\nT\3T\3T\3T\5T\u0333\nT\3T\3T\5T\u0337\nT\3U\3U\3U\3V\3V\3W\3W"+ - "\3W\3W\3W\3W\3W\3W\3W\5W\u0347\nW\3X\3X\3X\3X\3X\3X\3X\3X\5X\u0351\nX"+ - "\3Y\3Y\3Z\3Z\5Z\u0357\nZ\3Z\3Z\3[\6[\u035c\n[\r[\16[\u035d\3\\\3\\\5\\"+ - "\u0362\n\\\3]\3]\3]\3]\5]\u0368\n]\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\5"+ - "^\u0375\n^\3_\3_\3_\3_\3_\3_\3_\3`\3`\3a\3a\3a\3a\3a\3b\3b\3c\3c\3d\3"+ - "d\3e\3e\3f\3f\3g\3g\3h\3h\3i\3i\3j\3j\3k\3k\3l\3l\3m\3m\3n\3n\3o\3o\3"+ - "p\3p\3q\3q\3r\3r\3r\3s\3s\3s\3t\3t\3t\3u\3u\3u\3v\3v\3v\3w\3w\3w\3x\3"+ - "x\3x\3y\3y\3y\3z\3z\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080"+ - "\3\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+ - "\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0087"+ - "\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0089\3\u0089\3\u0089\3\u008a"+ - "\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c"+ - "\3\u008c\3\u008c\3\u008c\3\u008d\3\u008d\7\u008d\u03f4\n\u008d\f\u008d"+ - "\16\u008d\u03f7\13\u008d\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e"+ - "\5\u008e\u03ff\n\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f"+ - "\5\u008f\u0407\n\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+ - "\3\u0092\6\u0092\u0410\n\u0092\r\u0092\16\u0092\u0411\3\u0092\3\u0092"+ - "\3\u0093\3\u0093\3\u0093\3\u0093\7\u0093\u041a\n\u0093\f\u0093\16\u0093"+ - "\u041d\13\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0094\3\u0094"+ - "\3\u0094\3\u0094\7\u0094\u0428\n\u0094\f\u0094\16\u0094\u042b\13\u0094"+ - "\3\u0094\3\u0094\3\u041b\2\u0095\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23"+ - "\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31"+ - "\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60"+ - "_\61a\62c\63e\64g\65i\2k\2m\2o\2q\2s\2u\2w\2y\2{\2}\2\177\2\u0081\2\u0083"+ - "\2\u0085\2\u0087\2\u0089\2\u008b\2\u008d\2\u008f\2\u0091\2\u0093\2\u0095"+ - "\2\u0097\66\u0099\2\u009b\2\u009d\2\u009f\2\u00a1\2\u00a3\2\u00a5\2\u00a7"+ - "\2\u00a9\2\u00ab\2\u00ad\67\u00af8\u00b1\2\u00b39\u00b5\2\u00b7\2\u00b9"+ - "\2\u00bb\2\u00bd\2\u00bf\2\u00c1:\u00c3;\u00c5<\u00c7=\u00c9>\u00cb?\u00cd"+ - "@\u00cfA\u00d1B\u00d3C\u00d5D\u00d7E\u00d9F\u00dbG\u00ddH\u00dfI\u00e1"+ - "J\u00e3K\u00e5L\u00e7M\u00e9N\u00ebO\u00edP\u00efQ\u00f1R\u00f3S\u00f5"+ - "T\u00f7U\u00f9V\u00fbW\u00fdX\u00ffY\u0101Z\u0103[\u0105\\\u0107]\u0109"+ - "^\u010b_\u010d`\u010fa\u0111b\u0113c\u0115d\u0117e\u0119f\u011b\2\u011d"+ - "\2\u011fg\u0121h\u0123i\u0125j\u0127k\3\2\30\4\2NNnn\3\2\63;\4\2ZZzz\5"+ - "\2\62;CHch\3\2\629\4\2DDdd\3\2\62\63\4\2GGgg\4\2--//\6\2FFHHffhh\4\2R"+ - "Rrr\4\2))^^\4\2$$^^\n\2$$))^^ddhhppttvv\3\2\62\65\6\2&&C\\aac|\4\2\2\u0101"+ - "\ud802\udc01\3\2\ud802\udc01\3\2\udc02\ue001\7\2&&\62;C\\aac|\5\2\13\f"+ - "\16\17\"\"\4\2\f\f\17\17\u043c\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+ - "\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2"+ - "\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2"+ - "\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2"+ - "+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2"+ - "\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2"+ - "C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3"+ - "\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2"+ - "\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2"+ - "\u0097\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b3\3\2\2\2\2\u00c1"+ - "\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2"+ - "\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3"+ - "\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2"+ - "\2\2\u00dd\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5"+ - "\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2"+ - "\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7"+ - "\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2"+ - "\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109"+ - "\3\2\2\2\2\u010b\3\2\2\2\2\u010d\3\2\2\2\2\u010f\3\2\2\2\2\u0111\3\2\2"+ - "\2\2\u0113\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011f"+ - "\3\2\2\2\2\u0121\3\2\2\2\2\u0123\3\2\2\2\2\u0125\3\2\2\2\2\u0127\3\2\2"+ - "\2\3\u0129\3\2\2\2\5\u0132\3\2\2\2\7\u0139\3\2\2\2\t\u0141\3\2\2\2\13"+ - "\u0147\3\2\2\2\r\u014c\3\2\2\2\17\u0151\3\2\2\2\21\u0157\3\2\2\2\23\u015c"+ - "\3\2\2\2\25\u0162\3\2\2\2\27\u0168\3\2\2\2\31\u0171\3\2\2\2\33\u0179\3"+ - "\2\2\2\35\u017c\3\2\2\2\37\u0183\3\2\2\2!\u0188\3\2\2\2#\u018d\3\2\2\2"+ - "%\u0195\3\2\2\2\'\u019b\3\2\2\2)\u01a3\3\2\2\2+\u01a9\3\2\2\2-\u01ad\3"+ - "\2\2\2/\u01b0\3\2\2\2\61\u01b5\3\2\2\2\63\u01c0\3\2\2\2\65\u01c7\3\2\2"+ - "\2\67\u01d2\3\2\2\29\u01d6\3\2\2\2;\u01e0\3\2\2\2=\u01e5\3\2\2\2?\u01ec"+ - "\3\2\2\2A\u01f0\3\2\2\2C\u01f8\3\2\2\2E\u0200\3\2\2\2G\u020a\3\2\2\2I"+ - "\u0211\3\2\2\2K\u0218\3\2\2\2M\u021e\3\2\2\2O\u0225\3\2\2\2Q\u022e\3\2"+ - "\2\2S\u0234\3\2\2\2U\u023b\3\2\2\2W\u0248\3\2\2\2Y\u024d\3\2\2\2[\u0253"+ - "\3\2\2\2]\u025a\3\2\2\2_\u0264\3\2\2\2a\u0268\3\2\2\2c\u026d\3\2\2\2e"+ - "\u0276\3\2\2\2g\u0280\3\2\2\2i\u0282\3\2\2\2k\u0286\3\2\2\2m\u028a\3\2"+ - "\2\2o\u028e\3\2\2\2q\u0292\3\2\2\2s\u029e\3\2\2\2u\u02a0\3\2\2\2w\u02ac"+ - "\3\2\2\2y\u02ae\3\2\2\2{\u02b2\3\2\2\2}\u02b5\3\2\2\2\177\u02b9\3\2\2"+ - "\2\u0081\u02bd\3\2\2\2\u0083\u02c7\3\2\2\2\u0085\u02cb\3\2\2\2\u0087\u02cd"+ - "\3\2\2\2\u0089\u02d3\3\2\2\2\u008b\u02dd\3\2\2\2\u008d\u02e1\3\2\2\2\u008f"+ - "\u02e3\3\2\2\2\u0091\u02e7\3\2\2\2\u0093\u02f1\3\2\2\2\u0095\u02f5\3\2"+ - "\2\2\u0097\u02f9\3\2\2\2\u0099\u0316\3\2\2\2\u009b\u0318\3\2\2\2\u009d"+ - "\u031b\3\2\2\2\u009f\u031e\3\2\2\2\u00a1\u0322\3\2\2\2\u00a3\u0324\3\2"+ - "\2\2\u00a5\u0326\3\2\2\2\u00a7\u0336\3\2\2\2\u00a9\u0338\3\2\2\2\u00ab"+ - "\u033b\3\2\2\2\u00ad\u0346\3\2\2\2\u00af\u0350\3\2\2\2\u00b1\u0352\3\2"+ - "\2\2\u00b3\u0354\3\2\2\2\u00b5\u035b\3\2\2\2\u00b7\u0361\3\2\2\2\u00b9"+ - "\u0367\3\2\2\2\u00bb\u0374\3\2\2\2\u00bd\u0376\3\2\2\2\u00bf\u037d\3\2"+ - "\2\2\u00c1\u037f\3\2\2\2\u00c3\u0384\3\2\2\2\u00c5\u0386\3\2\2\2\u00c7"+ - "\u0388\3\2\2\2\u00c9\u038a\3\2\2\2\u00cb\u038c\3\2\2\2\u00cd\u038e\3\2"+ - "\2\2\u00cf\u0390\3\2\2\2\u00d1\u0392\3\2\2\2\u00d3\u0394\3\2\2\2\u00d5"+ - "\u0396\3\2\2\2\u00d7\u0398\3\2\2\2\u00d9\u039a\3\2\2\2\u00db\u039c\3\2"+ - "\2\2\u00dd\u039e\3\2\2\2\u00df\u03a0\3\2\2\2\u00e1\u03a2\3\2\2\2\u00e3"+ - "\u03a4\3\2\2\2\u00e5\u03a7\3\2\2\2\u00e7\u03aa\3\2\2\2\u00e9\u03ad\3\2"+ - "\2\2\u00eb\u03b0\3\2\2\2\u00ed\u03b3\3\2\2\2\u00ef\u03b6\3\2\2\2\u00f1"+ - "\u03b9\3\2\2\2\u00f3\u03bc\3\2\2\2\u00f5\u03be\3\2\2\2\u00f7\u03c0\3\2"+ - "\2\2\u00f9\u03c2\3\2\2\2\u00fb\u03c4\3\2\2\2\u00fd\u03c6\3\2\2\2\u00ff"+ - "\u03c8\3\2\2\2\u0101\u03ca\3\2\2\2\u0103\u03cc\3\2\2\2\u0105\u03cf\3\2"+ - "\2\2\u0107\u03d2\3\2\2\2\u0109\u03d5\3\2\2\2\u010b\u03d8\3\2\2\2\u010d"+ - "\u03db\3\2\2\2\u010f\u03de\3\2\2\2\u0111\u03e1\3\2\2\2\u0113\u03e4\3\2"+ - "\2\2\u0115\u03e8\3\2\2\2\u0117\u03ec\3\2\2\2\u0119\u03f1\3\2\2\2\u011b"+ - "\u03fe\3\2\2\2\u011d\u0406\3\2\2\2\u011f\u0408\3\2\2\2\u0121\u040a\3\2"+ - "\2\2\u0123\u040f\3\2\2\2\u0125\u0415\3\2\2\2\u0127\u0423\3\2\2\2\u0129"+ - "\u012a\7c\2\2\u012a\u012b\7d\2\2\u012b\u012c\7u\2\2\u012c\u012d\7v\2\2"+ - "\u012d\u012e\7t\2\2\u012e\u012f\7c\2\2\u012f\u0130\7e\2\2\u0130\u0131"+ - "\7v\2\2\u0131\4\3\2\2\2\u0132\u0133\7c\2\2\u0133\u0134\7u\2\2\u0134\u0135"+ - "\7u\2\2\u0135\u0136\7g\2\2\u0136\u0137\7t\2\2\u0137\u0138\7v\2\2\u0138"+ - "\6\3\2\2\2\u0139\u013a\7d\2\2\u013a\u013b\7q\2\2\u013b\u013c\7q\2\2\u013c"+ - "\u013d\7n\2\2\u013d\u013e\7g\2\2\u013e\u013f\7c\2\2\u013f\u0140\7p\2\2"+ - "\u0140\b\3\2\2\2\u0141\u0142\7d\2\2\u0142\u0143\7t\2\2\u0143\u0144\7g"+ - "\2\2\u0144\u0145\7c\2\2\u0145\u0146\7m\2\2\u0146\n\3\2\2\2\u0147\u0148"+ - "\7d\2\2\u0148\u0149\7{\2\2\u0149\u014a\7v\2\2\u014a\u014b\7g\2\2\u014b"+ - "\f\3\2\2\2\u014c\u014d\7e\2\2\u014d\u014e\7c\2\2\u014e\u014f\7u\2\2\u014f"+ - "\u0150\7g\2\2\u0150\16\3\2\2\2\u0151\u0152\7e\2\2\u0152\u0153\7c\2\2\u0153"+ - "\u0154\7v\2\2\u0154\u0155\7e\2\2\u0155\u0156\7j\2\2\u0156\20\3\2\2\2\u0157"+ - "\u0158\7e\2\2\u0158\u0159\7j\2\2\u0159\u015a\7c\2\2\u015a\u015b\7t\2\2"+ - "\u015b\22\3\2\2\2\u015c\u015d\7e\2\2\u015d\u015e\7n\2\2\u015e\u015f\7"+ - "c\2\2\u015f\u0160\7u\2\2\u0160\u0161\7u\2\2\u0161\24\3\2\2\2\u0162\u0163"+ - "\7e\2\2\u0163\u0164\7q\2\2\u0164\u0165\7p\2\2\u0165\u0166\7u\2\2\u0166"+ - "\u0167\7v\2\2\u0167\26\3\2\2\2\u0168\u0169\7e\2\2\u0169\u016a\7q\2\2\u016a"+ - "\u016b\7p\2\2\u016b\u016c\7v\2\2\u016c\u016d\7k\2\2\u016d\u016e\7p\2\2"+ - "\u016e\u016f\7w\2\2\u016f\u0170\7g\2\2\u0170\30\3\2\2\2\u0171\u0172\7"+ - "f\2\2\u0172\u0173\7g\2\2\u0173\u0174\7h\2\2\u0174\u0175\7c\2\2\u0175\u0176"+ - "\7w\2\2\u0176\u0177\7n\2\2\u0177\u0178\7v\2\2\u0178\32\3\2\2\2\u0179\u017a"+ - "\7f\2\2\u017a\u017b\7q\2\2\u017b\34\3\2\2\2\u017c\u017d\7f\2\2\u017d\u017e"+ - "\7q\2\2\u017e\u017f\7w\2\2\u017f\u0180\7d\2\2\u0180\u0181\7n\2\2\u0181"+ - "\u0182\7g\2\2\u0182\36\3\2\2\2\u0183\u0184\7g\2\2\u0184\u0185\7n\2\2\u0185"+ - "\u0186\7u\2\2\u0186\u0187\7g\2\2\u0187 \3\2\2\2\u0188\u0189\7g\2\2\u0189"+ - "\u018a\7p\2\2\u018a\u018b\7w\2\2\u018b\u018c\7o\2\2\u018c\"\3\2\2\2\u018d"+ - "\u018e\7g\2\2\u018e\u018f\7z\2\2\u018f\u0190\7v\2\2\u0190\u0191\7g\2\2"+ - "\u0191\u0192\7p\2\2\u0192\u0193\7f\2\2\u0193\u0194\7u\2\2\u0194$\3\2\2"+ - "\2\u0195\u0196\7h\2\2\u0196\u0197\7k\2\2\u0197\u0198\7p\2\2\u0198\u0199"+ - "\7c\2\2\u0199\u019a\7n\2\2\u019a&\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d"+ - "\7k\2\2\u019d\u019e\7p\2\2\u019e\u019f\7c\2\2\u019f\u01a0\7n\2\2\u01a0"+ - "\u01a1\7n\2\2\u01a1\u01a2\7{\2\2\u01a2(\3\2\2\2\u01a3\u01a4\7h\2\2\u01a4"+ - "\u01a5\7n\2\2\u01a5\u01a6\7q\2\2\u01a6\u01a7\7c\2\2\u01a7\u01a8\7v\2\2"+ - "\u01a8*\3\2\2\2\u01a9\u01aa\7h\2\2\u01aa\u01ab\7q\2\2\u01ab\u01ac\7t\2"+ - "\2\u01ac,\3\2\2\2\u01ad\u01ae\7k\2\2\u01ae\u01af\7h\2\2\u01af.\3\2\2\2"+ - "\u01b0\u01b1\7i\2\2\u01b1\u01b2\7q\2\2\u01b2\u01b3\7v\2\2\u01b3\u01b4"+ - "\7q\2\2\u01b4\60\3\2\2\2\u01b5\u01b6\7k\2\2\u01b6\u01b7\7o\2\2\u01b7\u01b8"+ - "\7r\2\2\u01b8\u01b9\7n\2\2\u01b9\u01ba\7g\2\2\u01ba\u01bb\7o\2\2\u01bb"+ - "\u01bc\7g\2\2\u01bc\u01bd\7p\2\2\u01bd\u01be\7v\2\2\u01be\u01bf\7u\2\2"+ - "\u01bf\62\3\2\2\2\u01c0\u01c1\7k\2\2\u01c1\u01c2\7o\2\2\u01c2\u01c3\7"+ - "r\2\2\u01c3\u01c4\7q\2\2\u01c4\u01c5\7t\2\2\u01c5\u01c6\7v\2\2\u01c6\64"+ - "\3\2\2\2\u01c7\u01c8\7k\2\2\u01c8\u01c9\7p\2\2\u01c9\u01ca\7u\2\2\u01ca"+ - "\u01cb\7v\2\2\u01cb\u01cc\7c\2\2\u01cc\u01cd\7p\2\2\u01cd\u01ce\7e\2\2"+ - "\u01ce\u01cf\7g\2\2\u01cf\u01d0\7q\2\2\u01d0\u01d1\7h\2\2\u01d1\66\3\2"+ - "\2\2\u01d2\u01d3\7k\2\2\u01d3\u01d4\7p\2\2\u01d4\u01d5\7v\2\2\u01d58\3"+ - "\2\2\2\u01d6\u01d7\7k\2\2\u01d7\u01d8\7p\2\2\u01d8\u01d9\7v\2\2\u01d9"+ - "\u01da\7g\2\2\u01da\u01db\7t\2\2\u01db\u01dc\7h\2\2\u01dc\u01dd\7c\2\2"+ - "\u01dd\u01de\7e\2\2\u01de\u01df\7g\2\2\u01df:\3\2\2\2\u01e0\u01e1\7n\2"+ - "\2\u01e1\u01e2\7q\2\2\u01e2\u01e3\7p\2\2\u01e3\u01e4\7i\2\2\u01e4<\3\2"+ - "\2\2\u01e5\u01e6\7p\2\2\u01e6\u01e7\7c\2\2\u01e7\u01e8\7v\2\2\u01e8\u01e9"+ - "\7k\2\2\u01e9\u01ea\7x\2\2\u01ea\u01eb\7g\2\2\u01eb>\3\2\2\2\u01ec\u01ed"+ - "\7p\2\2\u01ed\u01ee\7g\2\2\u01ee\u01ef\7y\2\2\u01ef@\3\2\2\2\u01f0\u01f1"+ - "\7r\2\2\u01f1\u01f2\7c\2\2\u01f2\u01f3\7e\2\2\u01f3\u01f4\7m\2\2\u01f4"+ - "\u01f5\7c\2\2\u01f5\u01f6\7i\2\2\u01f6\u01f7\7g\2\2\u01f7B\3\2\2\2\u01f8"+ - "\u01f9\7r\2\2\u01f9\u01fa\7t\2\2\u01fa\u01fb\7k\2\2\u01fb\u01fc\7x\2\2"+ - "\u01fc\u01fd\7c\2\2\u01fd\u01fe\7v\2\2\u01fe\u01ff\7g\2\2\u01ffD\3\2\2"+ - "\2\u0200\u0201\7r\2\2\u0201\u0202\7t\2\2\u0202\u0203\7q\2\2\u0203\u0204"+ - "\7v\2\2\u0204\u0205\7g\2\2\u0205\u0206\7e\2\2\u0206\u0207\7v\2\2\u0207"+ - "\u0208\7g\2\2\u0208\u0209\7f\2\2\u0209F\3\2\2\2\u020a\u020b\7r\2\2\u020b"+ - "\u020c\7w\2\2\u020c\u020d\7d\2\2\u020d\u020e\7n\2\2\u020e\u020f\7k\2\2"+ - "\u020f\u0210\7e\2\2\u0210H\3\2\2\2\u0211\u0212\7t\2\2\u0212\u0213\7g\2"+ - "\2\u0213\u0214\7v\2\2\u0214\u0215\7w\2\2\u0215\u0216\7t\2\2\u0216\u0217"+ - "\7p\2\2\u0217J\3\2\2\2\u0218\u0219\7u\2\2\u0219\u021a\7j\2\2\u021a\u021b"+ - "\7q\2\2\u021b\u021c\7t\2\2\u021c\u021d\7v\2\2\u021dL\3\2\2\2\u021e\u021f"+ - "\7u\2\2\u021f\u0220\7v\2\2\u0220\u0221\7c\2\2\u0221\u0222\7v\2\2\u0222"+ - "\u0223\7k\2\2\u0223\u0224\7e\2\2\u0224N\3\2\2\2\u0225\u0226\7u\2\2\u0226"+ - "\u0227\7v\2\2\u0227\u0228\7t\2\2\u0228\u0229\7k\2\2\u0229\u022a\7e\2\2"+ - "\u022a\u022b\7v\2\2\u022b\u022c\7h\2\2\u022c\u022d\7r\2\2\u022dP\3\2\2"+ - "\2\u022e\u022f\7u\2\2\u022f\u0230\7w\2\2\u0230\u0231\7r\2\2\u0231\u0232"+ - "\7g\2\2\u0232\u0233\7t\2\2\u0233R\3\2\2\2\u0234\u0235\7u\2\2\u0235\u0236"+ - "\7y\2\2\u0236\u0237\7k\2\2\u0237\u0238\7v\2\2\u0238\u0239\7e\2\2\u0239"+ - "\u023a\7j\2\2\u023aT\3\2\2\2\u023b\u023c\7u\2\2\u023c\u023d\7{\2\2\u023d"+ - "\u023e\7p\2\2\u023e\u023f\7e\2\2\u023f\u0240\7j\2\2\u0240\u0241\7t\2\2"+ - "\u0241\u0242\7q\2\2\u0242\u0243\7p\2\2\u0243\u0244\7k\2\2\u0244\u0245"+ - "\7|\2\2\u0245\u0246\7g\2\2\u0246\u0247\7f\2\2\u0247V\3\2\2\2\u0248\u0249"+ - "\7v\2\2\u0249\u024a\7j\2\2\u024a\u024b\7k\2\2\u024b\u024c\7u\2\2\u024c"+ - "X\3\2\2\2\u024d\u024e\7v\2\2\u024e\u024f\7j\2\2\u024f\u0250\7t\2\2\u0250"+ - "\u0251\7q\2\2\u0251\u0252\7y\2\2\u0252Z\3\2\2\2\u0253\u0254\7v\2\2\u0254"+ - "\u0255\7j\2\2\u0255\u0256\7t\2\2\u0256\u0257\7q\2\2\u0257\u0258\7y\2\2"+ - "\u0258\u0259\7u\2\2\u0259\\\3\2\2\2\u025a\u025b\7v\2\2\u025b\u025c\7t"+ - "\2\2\u025c\u025d\7c\2\2\u025d\u025e\7p\2\2\u025e\u025f\7u\2\2\u025f\u0260"+ - "\7k\2\2\u0260\u0261\7g\2\2\u0261\u0262\7p\2\2\u0262\u0263\7v\2\2\u0263"+ - "^\3\2\2\2\u0264\u0265\7v\2\2\u0265\u0266\7t\2\2\u0266\u0267\7{\2\2\u0267"+ - "`\3\2\2\2\u0268\u0269\7x\2\2\u0269\u026a\7q\2\2\u026a\u026b\7k\2\2\u026b"+ - "\u026c\7f\2\2\u026cb\3\2\2\2\u026d\u026e\7x\2\2\u026e\u026f\7q\2\2\u026f"+ - "\u0270\7n\2\2\u0270\u0271\7c\2\2\u0271\u0272\7v\2\2\u0272\u0273\7k\2\2"+ - "\u0273\u0274\7n\2\2\u0274\u0275\7g\2\2\u0275d\3\2\2\2\u0276\u0277\7y\2"+ - "\2\u0277\u0278\7j\2\2\u0278\u0279\7k\2\2\u0279\u027a\7n\2\2\u027a\u027b"+ - "\7g\2\2\u027bf\3\2\2\2\u027c\u0281\5i\65\2\u027d\u0281\5k\66\2\u027e\u0281"+ - "\5m\67\2\u027f\u0281\5o8\2\u0280\u027c\3\2\2\2\u0280\u027d\3\2\2\2\u0280"+ - "\u027e\3\2\2\2\u0280\u027f\3\2\2\2\u0281h\3\2\2\2\u0282\u0284\5s:\2\u0283"+ - "\u0285\5q9\2\u0284\u0283\3\2\2\2\u0284\u0285\3\2\2\2\u0285j\3\2\2\2\u0286"+ - "\u0288\5\177@\2\u0287\u0289\5q9\2\u0288\u0287\3\2\2\2\u0288\u0289\3\2"+ - "\2\2\u0289l\3\2\2\2\u028a\u028c\5\u0087D\2\u028b\u028d\5q9\2\u028c\u028b"+ - "\3\2\2\2\u028c\u028d\3\2\2\2\u028dn\3\2\2\2\u028e\u0290\5\u008fH\2\u028f"+ - "\u0291\5q9\2\u0290\u028f\3\2\2\2\u0290\u0291\3\2\2\2\u0291p\3\2\2\2\u0292"+ - "\u0293\t\2\2\2\u0293r\3\2\2\2\u0294\u029f\7\62\2\2\u0295\u029c\5y=\2\u0296"+ - "\u0298\5u;\2\u0297\u0296\3\2\2\2\u0297\u0298\3\2\2\2\u0298\u029d\3\2\2"+ - "\2\u0299\u029a\5}?\2\u029a\u029b\5u;\2\u029b\u029d\3\2\2\2\u029c\u0297"+ - "\3\2\2\2\u029c\u0299\3\2\2\2\u029d\u029f\3\2\2\2\u029e\u0294\3\2\2\2\u029e"+ - "\u0295\3\2\2\2\u029ft\3\2\2\2\u02a0\u02a8\5w<\2\u02a1\u02a3\5{>\2\u02a2"+ - "\u02a1\3\2\2\2\u02a3\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2"+ - "\2\2\u02a5\u02a7\3\2\2\2\u02a6\u02a4\3\2\2\2\u02a7\u02a9\5w<\2\u02a8\u02a4"+ - "\3\2\2\2\u02a8\u02a9\3\2\2\2\u02a9v\3\2\2\2\u02aa\u02ad\7\62\2\2\u02ab"+ - "\u02ad\5y=\2\u02ac\u02aa\3\2\2\2\u02ac\u02ab\3\2\2\2\u02adx\3\2\2\2\u02ae"+ - "\u02af\t\3\2\2\u02afz\3\2\2\2\u02b0\u02b3\5w<\2\u02b1\u02b3\7a\2\2\u02b2"+ - "\u02b0\3\2\2\2\u02b2\u02b1\3\2\2\2\u02b3|\3\2\2\2\u02b4\u02b6\7a\2\2\u02b5"+ - "\u02b4\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7\u02b5\3\2\2\2\u02b7\u02b8\3\2"+ - "\2\2\u02b8~\3\2\2\2\u02b9\u02ba\7\62\2\2\u02ba\u02bb\t\4\2\2\u02bb\u02bc"+ - "\5\u0081A\2\u02bc\u0080\3\2\2\2\u02bd\u02c5\5\u0083B\2\u02be\u02c0\5\u0085"+ - "C\2\u02bf\u02be\3\2\2\2\u02c0\u02c3\3\2\2\2\u02c1\u02bf\3\2\2\2\u02c1"+ - "\u02c2\3\2\2\2\u02c2\u02c4\3\2\2\2\u02c3\u02c1\3\2\2\2\u02c4\u02c6\5\u0083"+ - "B\2\u02c5\u02c1\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u0082\3\2\2\2\u02c7"+ - "\u02c8\t\5\2\2\u02c8\u0084\3\2\2\2\u02c9\u02cc\5\u0083B\2\u02ca\u02cc"+ - "\7a\2\2\u02cb\u02c9\3\2\2\2\u02cb\u02ca\3\2\2\2\u02cc\u0086\3\2\2\2\u02cd"+ - "\u02cf\7\62\2\2\u02ce\u02d0\5}?\2\u02cf\u02ce\3\2\2\2\u02cf\u02d0\3\2"+ - "\2\2\u02d0\u02d1\3\2\2\2\u02d1\u02d2\5\u0089E\2\u02d2\u0088\3\2\2\2\u02d3"+ - "\u02db\5\u008bF\2\u02d4\u02d6\5\u008dG\2\u02d5\u02d4\3\2\2\2\u02d6\u02d9"+ - "\3\2\2\2\u02d7\u02d5\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8\u02da\3\2\2\2\u02d9"+ - "\u02d7\3\2\2\2\u02da\u02dc\5\u008bF\2\u02db\u02d7\3\2\2\2\u02db\u02dc"+ - "\3\2\2\2\u02dc\u008a\3\2\2\2\u02dd\u02de\t\6\2\2\u02de\u008c\3\2\2\2\u02df"+ - "\u02e2\5\u008bF\2\u02e0\u02e2\7a\2\2\u02e1\u02df\3\2\2\2\u02e1\u02e0\3"+ - "\2\2\2\u02e2\u008e\3\2\2\2\u02e3\u02e4\7\62\2\2\u02e4\u02e5\t\7\2\2\u02e5"+ - "\u02e6\5\u0091I\2\u02e6\u0090\3\2\2\2\u02e7\u02ef\5\u0093J\2\u02e8\u02ea"+ - "\5\u0095K\2\u02e9\u02e8\3\2\2\2\u02ea\u02ed\3\2\2\2\u02eb\u02e9\3\2\2"+ - "\2\u02eb\u02ec\3\2\2\2\u02ec\u02ee\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ee\u02f0"+ - "\5\u0093J\2\u02ef\u02eb\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0\u0092\3\2\2"+ - "\2\u02f1\u02f2\t\b\2\2\u02f2\u0094\3\2\2\2\u02f3\u02f6\5\u0093J\2\u02f4"+ - "\u02f6\7a\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f4\3\2\2\2\u02f6\u0096\3\2"+ - "\2\2\u02f7\u02fa\5\u0099M\2\u02f8\u02fa\5\u00a5S\2\u02f9\u02f7\3\2\2\2"+ - "\u02f9\u02f8\3\2\2\2\u02fa\u0098\3\2\2\2\u02fb\u02fc\5u;\2\u02fc\u02fe"+ - "\7\60\2\2\u02fd\u02ff\5u;\2\u02fe\u02fd\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff"+ - "\u0301\3\2\2\2\u0300\u0302\5\u009bN\2\u0301\u0300\3\2\2\2\u0301\u0302"+ - "\3\2\2\2\u0302\u0304\3\2\2\2\u0303\u0305\5\u00a3R\2\u0304\u0303\3\2\2"+ - "\2\u0304\u0305\3\2\2\2\u0305\u0317\3\2\2\2\u0306\u0307\7\60\2\2\u0307"+ - "\u0309\5u;\2\u0308\u030a\5\u009bN\2\u0309\u0308\3\2\2\2\u0309\u030a\3"+ - "\2\2\2\u030a\u030c\3\2\2\2\u030b\u030d\5\u00a3R\2\u030c\u030b\3\2\2\2"+ - "\u030c\u030d\3\2\2\2\u030d\u0317\3\2\2\2\u030e\u030f\5u;\2\u030f\u0311"+ - "\5\u009bN\2\u0310\u0312\5\u00a3R\2\u0311\u0310\3\2\2\2\u0311\u0312\3\2"+ - "\2\2\u0312\u0317\3\2\2\2\u0313\u0314\5u;\2\u0314\u0315\5\u00a3R\2\u0315"+ - "\u0317\3\2\2\2\u0316\u02fb\3\2\2\2\u0316\u0306\3\2\2\2\u0316\u030e\3\2"+ - "\2\2\u0316\u0313\3\2\2\2\u0317\u009a\3\2\2\2\u0318\u0319\5\u009dO\2\u0319"+ - "\u031a\5\u009fP\2\u031a\u009c\3\2\2\2\u031b\u031c\t\t\2\2\u031c\u009e"+ - "\3\2\2\2\u031d\u031f\5\u00a1Q\2\u031e\u031d\3\2\2\2\u031e\u031f\3\2\2"+ - "\2\u031f\u0320\3\2\2\2\u0320\u0321\5u;\2\u0321\u00a0\3\2\2\2\u0322\u0323"+ - "\t\n\2\2\u0323\u00a2\3\2\2\2\u0324\u0325\t\13\2\2\u0325\u00a4\3\2\2\2"+ - "\u0326\u0327\5\u00a7T\2\u0327\u0329\5\u00a9U\2\u0328\u032a\5\u00a3R\2"+ - "\u0329\u0328\3\2\2\2\u0329\u032a\3\2\2\2\u032a\u00a6\3\2\2\2\u032b\u032d"+ - "\5\177@\2\u032c\u032e\7\60\2\2\u032d\u032c\3\2\2\2\u032d\u032e\3\2\2\2"+ - "\u032e\u0337\3\2\2\2\u032f\u0330\7\62\2\2\u0330\u0332\t\4\2\2\u0331\u0333"+ - "\5\u0081A\2\u0332\u0331\3\2\2\2\u0332\u0333\3\2\2\2\u0333\u0334\3\2\2"+ - "\2\u0334\u0335\7\60\2\2\u0335\u0337\5\u0081A\2\u0336\u032b\3\2\2\2\u0336"+ - "\u032f\3\2\2\2\u0337\u00a8\3\2\2\2\u0338\u0339\5\u00abV\2\u0339\u033a"+ - "\5\u009fP\2\u033a\u00aa\3\2\2\2\u033b\u033c\t\f\2\2\u033c\u00ac\3\2\2"+ - "\2\u033d\u033e\7v\2\2\u033e\u033f\7t\2\2\u033f\u0340\7w\2\2\u0340\u0347"+ - "\7g\2\2\u0341\u0342\7h\2\2\u0342\u0343\7c\2\2\u0343\u0344\7n\2\2\u0344"+ - "\u0345\7u\2\2\u0345\u0347\7g\2\2\u0346\u033d\3\2\2\2\u0346\u0341\3\2\2"+ - "\2\u0347\u00ae\3\2\2\2\u0348\u0349\7)\2\2\u0349\u034a\5\u00b1Y\2\u034a"+ - "\u034b\7)\2\2\u034b\u0351\3\2\2\2\u034c\u034d\7)\2\2\u034d\u034e\5\u00b9"+ - "]\2\u034e\u034f\7)\2\2\u034f\u0351\3\2\2\2\u0350\u0348\3\2\2\2\u0350\u034c"+ - "\3\2\2\2\u0351\u00b0\3\2\2\2\u0352\u0353\n\r\2\2\u0353\u00b2\3\2\2\2\u0354"+ - "\u0356\7$\2\2\u0355\u0357\5\u00b5[\2\u0356\u0355\3\2\2\2\u0356\u0357\3"+ - "\2\2\2\u0357\u0358\3\2\2\2\u0358\u0359\7$\2\2\u0359\u00b4\3\2\2\2\u035a"+ - "\u035c\5\u00b7\\\2\u035b\u035a\3\2\2\2\u035c\u035d\3\2\2\2\u035d\u035b"+ - "\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u00b6\3\2\2\2\u035f\u0362\n\16\2\2"+ - "\u0360\u0362\5\u00b9]\2\u0361\u035f\3\2\2\2\u0361\u0360\3\2\2\2\u0362"+ - "\u00b8\3\2\2\2\u0363\u0364\7^\2\2\u0364\u0368\t\17\2\2\u0365\u0368\5\u00bb"+ - "^\2\u0366\u0368\5\u00bd_\2\u0367\u0363\3\2\2\2\u0367\u0365\3\2\2\2\u0367"+ - "\u0366\3\2\2\2\u0368\u00ba\3\2\2\2\u0369\u036a\7^\2\2\u036a\u0375\5\u008b"+ - "F\2\u036b\u036c\7^\2\2\u036c\u036d\5\u008bF\2\u036d\u036e\5\u008bF\2\u036e"+ - "\u0375\3\2\2\2\u036f\u0370\7^\2\2\u0370\u0371\5\u00bf`\2\u0371\u0372\5"+ - "\u008bF\2\u0372\u0373\5\u008bF\2\u0373\u0375\3\2\2\2\u0374\u0369\3\2\2"+ - "\2\u0374\u036b\3\2\2\2\u0374\u036f\3\2\2\2\u0375\u00bc\3\2\2\2\u0376\u0377"+ - "\7^\2\2\u0377\u0378\7w\2\2\u0378\u0379\5\u0083B\2\u0379\u037a\5\u0083"+ - "B\2\u037a\u037b\5\u0083B\2\u037b\u037c\5\u0083B\2\u037c\u00be\3\2\2\2"+ - "\u037d\u037e\t\20\2\2\u037e\u00c0\3\2\2\2\u037f\u0380\7p\2\2\u0380\u0381"+ - "\7w\2\2\u0381\u0382\7n\2\2\u0382\u0383\7n\2\2\u0383\u00c2\3\2\2\2\u0384"+ - "\u0385\7*\2\2\u0385\u00c4\3\2\2\2\u0386\u0387\7+\2\2\u0387\u00c6\3\2\2"+ - "\2\u0388\u0389\7}\2\2\u0389\u00c8\3\2\2\2\u038a\u038b\7\177\2\2\u038b"+ - "\u00ca\3\2\2\2\u038c\u038d\7]\2\2\u038d\u00cc\3\2\2\2\u038e\u038f\7_\2"+ - "\2\u038f\u00ce\3\2\2\2\u0390\u0391\7=\2\2\u0391\u00d0\3\2\2\2\u0392\u0393"+ - "\7.\2\2\u0393\u00d2\3\2\2\2\u0394\u0395\7\60\2\2\u0395\u00d4\3\2\2\2\u0396"+ - "\u0397\7?\2\2\u0397\u00d6\3\2\2\2\u0398\u0399\7@\2\2\u0399\u00d8\3\2\2"+ - "\2\u039a\u039b\7>\2\2\u039b\u00da\3\2\2\2\u039c\u039d\7#\2\2\u039d\u00dc"+ - "\3\2\2\2\u039e\u039f\7\u0080\2\2\u039f\u00de\3\2\2\2\u03a0\u03a1\7A\2"+ - "\2\u03a1\u00e0\3\2\2\2\u03a2\u03a3\7<\2\2\u03a3\u00e2\3\2\2\2\u03a4\u03a5"+ - "\7?\2\2\u03a5\u03a6\7?\2\2\u03a6\u00e4\3\2\2\2\u03a7\u03a8\7>\2\2\u03a8"+ - "\u03a9\7?\2\2\u03a9\u00e6\3\2\2\2\u03aa\u03ab\7@\2\2\u03ab\u03ac\7?\2"+ - "\2\u03ac\u00e8\3\2\2\2\u03ad\u03ae\7#\2\2\u03ae\u03af\7?\2\2\u03af\u00ea"+ - "\3\2\2\2\u03b0\u03b1\7(\2\2\u03b1\u03b2\7(\2\2\u03b2\u00ec\3\2\2\2\u03b3"+ - "\u03b4\7~\2\2\u03b4\u03b5\7~\2\2\u03b5\u00ee\3\2\2\2\u03b6\u03b7\7-\2"+ - "\2\u03b7\u03b8\7-\2\2\u03b8\u00f0\3\2\2\2\u03b9\u03ba\7/\2\2\u03ba\u03bb"+ - "\7/\2\2\u03bb\u00f2\3\2\2\2\u03bc\u03bd\7-\2\2\u03bd\u00f4\3\2\2\2\u03be"+ - "\u03bf\7/\2\2\u03bf\u00f6\3\2\2\2\u03c0\u03c1\7,\2\2\u03c1\u00f8\3\2\2"+ - "\2\u03c2\u03c3\7\61\2\2\u03c3\u00fa\3\2\2\2\u03c4\u03c5\7(\2\2\u03c5\u00fc"+ - "\3\2\2\2\u03c6\u03c7\7~\2\2\u03c7\u00fe\3\2\2\2\u03c8\u03c9\7`\2\2\u03c9"+ - "\u0100\3\2\2\2\u03ca\u03cb\7\'\2\2\u03cb\u0102\3\2\2\2\u03cc\u03cd\7-"+ - "\2\2\u03cd\u03ce\7?\2\2\u03ce\u0104\3\2\2\2\u03cf\u03d0\7/\2\2\u03d0\u03d1"+ - "\7?\2\2\u03d1\u0106\3\2\2\2\u03d2\u03d3\7,\2\2\u03d3\u03d4\7?\2\2\u03d4"+ - "\u0108\3\2\2\2\u03d5\u03d6\7\61\2\2\u03d6\u03d7\7?\2\2\u03d7\u010a\3\2"+ - "\2\2\u03d8\u03d9\7(\2\2\u03d9\u03da\7?\2\2\u03da\u010c\3\2\2\2\u03db\u03dc"+ - "\7~\2\2\u03dc\u03dd\7?\2\2\u03dd\u010e\3\2\2\2\u03de\u03df\7`\2\2\u03df"+ - "\u03e0\7?\2\2\u03e0\u0110\3\2\2\2\u03e1\u03e2\7\'\2\2\u03e2\u03e3\7?\2"+ - "\2\u03e3\u0112\3\2\2\2\u03e4\u03e5\7>\2\2\u03e5\u03e6\7>\2\2\u03e6\u03e7"+ - "\7?\2\2\u03e7\u0114\3\2\2\2\u03e8\u03e9\7@\2\2\u03e9\u03ea\7@\2\2\u03ea"+ - "\u03eb\7?\2\2\u03eb\u0116\3\2\2\2\u03ec\u03ed\7@\2\2\u03ed\u03ee\7@\2"+ - "\2\u03ee\u03ef\7@\2\2\u03ef\u03f0\7?\2\2\u03f0\u0118\3\2\2\2\u03f1\u03f5"+ - "\5\u011b\u008e\2\u03f2\u03f4\5\u011d\u008f\2\u03f3\u03f2\3\2\2\2\u03f4"+ - "\u03f7\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f5\u03f6\3\2\2\2\u03f6\u011a\3\2"+ - "\2\2\u03f7\u03f5\3\2\2\2\u03f8\u03ff\t\21\2\2\u03f9\u03fa\n\22\2\2\u03fa"+ - "\u03ff\6\u008e\2\2\u03fb\u03fc\t\23\2\2\u03fc\u03fd\t\24\2\2\u03fd\u03ff"+ - "\6\u008e\3\2\u03fe\u03f8\3\2\2\2\u03fe\u03f9\3\2\2\2\u03fe\u03fb\3\2\2"+ - "\2\u03ff\u011c\3\2\2\2\u0400\u0407\t\25\2\2\u0401\u0402\n\22\2\2\u0402"+ - "\u0407\6\u008f\4\2\u0403\u0404\t\23\2\2\u0404\u0405\t\24\2\2\u0405\u0407"+ - "\6\u008f\5\2\u0406\u0400\3\2\2\2\u0406\u0401\3\2\2\2\u0406\u0403\3\2\2"+ - "\2\u0407\u011e\3\2\2\2\u0408\u0409\7B\2\2\u0409\u0120\3\2\2\2\u040a\u040b"+ - "\7\60\2\2\u040b\u040c\7\60\2\2\u040c\u040d\7\60\2\2\u040d\u0122\3\2\2"+ - "\2\u040e\u0410\t\26\2\2\u040f\u040e\3\2\2\2\u0410\u0411\3\2\2\2\u0411"+ - "\u040f\3\2\2\2\u0411\u0412\3\2\2\2\u0412\u0413\3\2\2\2\u0413\u0414\b\u0092"+ - "\2\2\u0414\u0124\3\2\2\2\u0415\u0416\7\61\2\2\u0416\u0417\7,\2\2\u0417"+ - "\u041b\3\2\2\2\u0418\u041a\13\2\2\2\u0419\u0418\3\2\2\2\u041a\u041d\3"+ - "\2\2\2\u041b\u041c\3\2\2\2\u041b\u0419\3\2\2\2\u041c\u041e\3\2\2\2\u041d"+ - "\u041b\3\2\2\2\u041e\u041f\7,\2\2\u041f\u0420\7\61\2\2\u0420\u0421\3\2"+ - "\2\2\u0421\u0422\b\u0093\2\2\u0422\u0126\3\2\2\2\u0423\u0424\7\61\2\2"+ - "\u0424\u0425\7\61\2\2\u0425\u0429\3\2\2\2\u0426\u0428\n\27\2\2\u0427\u0426"+ - "\3\2\2\2\u0428\u042b\3\2\2\2\u0429\u0427\3\2\2\2\u0429\u042a\3\2\2\2\u042a"+ - "\u042c\3\2\2\2\u042b\u0429\3\2\2\2\u042c\u042d\b\u0094\2\2\u042d\u0128"+ - "\3\2\2\2\64\2\u0280\u0284\u0288\u028c\u0290\u0297\u029c\u029e\u02a4\u02a8"+ - "\u02ac\u02b2\u02b7\u02c1\u02c5\u02cb\u02cf\u02d7\u02db\u02e1\u02eb\u02ef"+ - "\u02f5\u02f9\u02fe\u0301\u0304\u0309\u030c\u0311\u0316\u031e\u0329\u032d"+ - "\u0332\u0336\u0346\u0350\u0356\u035d\u0361\u0367\u0374\u03f5\u03fe\u0406"+ - "\u0411\u041b\u0429\3\b\2\2"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/Java8Lexer.tokens b/src/de/dhbwstuttgart/antlr/Java8Lexer.tokens deleted file mode 100644 index 3f62bddf..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8Lexer.tokens +++ /dev/null @@ -1,201 +0,0 @@ -THROW=44 -STATIC=38 -INTERFACE=28 -AND_ASSIGN=93 -BREAK=4 -BYTE=5 -ELSE=15 -IF=22 -ENUM=16 -SUB=82 -BANG=69 -LPAREN=57 -DOT=65 -CASE=6 -AT=101 -LINE_COMMENT=105 -StringLiteral=55 -ELLIPSIS=102 -LBRACK=61 -PUBLIC=35 -THROWS=45 -NullLiteral=56 -RSHIFT_ASSIGN=98 -LBRACE=59 -GOTO=23 -SUB_ASSIGN=90 -SEMI=63 -CHAR=8 -ASSIGN=66 -COMMENT=104 -IMPORT=25 -BITOR=86 -CATCH=7 -MUL_ASSIGN=91 -DOUBLE=14 -PROTECTED=34 -LONG=29 -COMMA=64 -BITAND=85 -PRIVATE=33 -CONTINUE=11 -DIV=84 -FloatingPointLiteral=52 -LE=74 -CharacterLiteral=54 -VOLATILE=49 -EXTENDS=17 -INSTANCEOF=26 -NEW=31 -ADD=81 -LT=68 -CLASS=9 -DO=13 -FINALLY=19 -Identifier=100 -CONST=10 -PACKAGE=32 -OR_ASSIGN=94 -TRY=47 -IntegerLiteral=51 -SYNCHRONIZED=42 -MUL=83 -FOR=21 -FINAL=18 -RPAREN=58 -CARET=87 -URSHIFT_ASSIGN=99 -BOOLEAN=3 -NOTEQUAL=76 -RBRACK=62 -RBRACE=60 -AND=77 -THIS=43 -SWITCH=41 -VOID=48 -TRANSIENT=46 -INC=79 -FLOAT=20 -NATIVE=30 -DIV_ASSIGN=92 -BooleanLiteral=53 -ABSTRACT=1 -STRICTFP=39 -INT=27 -QUESTION=71 -RETURN=36 -LSHIFT_ASSIGN=97 -ADD_ASSIGN=89 -WS=103 -GE=75 -SUPER=40 -OR=78 -DEC=80 -MOD=88 -XOR_ASSIGN=95 -ASSERT=2 -EQUAL=73 -IMPLEMENTS=24 -COLON=72 -GT=67 -SHORT=37 -MOD_ASSIGN=96 -WHILE=50 -TILDE=70 -DEFAULT=12 -'import'=25 -'-'=82 -')'=58 -'super'=40 -'else'=15 -'%'=88 -'!'=69 -'>'=67 -'public'=35 -'=='=73 -'--'=80 -'|'=86 -'['=61 -':'=72 -'...'=102 -'throw'=44 -'case'=6 -'.'=65 -'this'=43 -'*'=83 -'switch'=41 -'synchronized'=42 -'&'=85 -'double'=14 -'break'=4 -'short'=37 -'<='=74 -'enum'=16 -'try'=47 -'?'=71 -'if'=22 -'extends'=17 -'goto'=23 -'}'=60 -'instanceof'=26 -';'=63 -'||'=78 -'>>='=98 -'class'=9 -'return'=36 -'&='=93 -'catch'=7 -'native'=30 -'continue'=11 -'strictfp'=39 -'/'=84 -'*='=91 -'+'=81 -'final'=18 -'protected'=34 -'static'=38 -'@'=101 -'transient'=46 -'~'=70 -'assert'=2 -']'=62 -'<'=68 -'++'=79 -'>>>='=99 -'>='=75 -'long'=29 -'boolean'=3 -'const'=10 -'abstract'=1 -'implements'=24 -'volatile'=49 -'throws'=45 -'/='=92 -','=64 -'-='=90 -'do'=13 -'package'=32 -'('=57 -'null'=56 -'int'=27 -'|='=94 -'for'=21 -'^'=87 -'<<='=97 -'='=66 -'byte'=5 -'&&'=77 -'^='=95 -'void'=48 -'while'=50 -'{'=59 -'float'=20 -'!='=76 -'new'=31 -'char'=8 -'finally'=19 -'interface'=28 -'%='=96 -'private'=33 -'+='=89 -'default'=12 diff --git a/src/de/dhbwstuttgart/antlr/Java8Parser.java b/src/de/dhbwstuttgart/antlr/Java8Parser.java deleted file mode 100644 index 96aee9a3..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8Parser.java +++ /dev/null @@ -1,7394 +0,0 @@ -package de.dhbwstuttgart.antlr; - -// Generated from Java8.g4 by ANTLR 4.4 -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; -import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class Java8Parser extends Parser { - static { RuntimeMetaData.checkVersion("4.4", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8, - CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15, - ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23, - IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29, - NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36, - SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42, - THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VOID=48, VOLATILE=49, - WHILE=50, IntegerLiteral=51, FloatingPointLiteral=52, BooleanLiteral=53, - CharacterLiteral=54, StringLiteral=55, NullLiteral=56, LPAREN=57, RPAREN=58, - LBRACE=59, RBRACE=60, LBRACK=61, RBRACK=62, SEMI=63, COMMA=64, DOT=65, - ASSIGN=66, GT=67, LT=68, BANG=69, TILDE=70, QUESTION=71, COLON=72, EQUAL=73, - LE=74, GE=75, NOTEQUAL=76, AND=77, OR=78, INC=79, DEC=80, ADD=81, SUB=82, - MUL=83, DIV=84, BITAND=85, BITOR=86, CARET=87, MOD=88, ADD_ASSIGN=89, - SUB_ASSIGN=90, MUL_ASSIGN=91, DIV_ASSIGN=92, AND_ASSIGN=93, OR_ASSIGN=94, - XOR_ASSIGN=95, MOD_ASSIGN=96, LSHIFT_ASSIGN=97, RSHIFT_ASSIGN=98, URSHIFT_ASSIGN=99, - Identifier=100, AT=101, ELLIPSIS=102, WS=103, COMMENT=104, LINE_COMMENT=105; - public static final String[] tokenNames = { - "", "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", - "'case'", "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'", - "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", "'finally'", - "'float'", "'for'", "'if'", "'goto'", "'implements'", "'import'", "'instanceof'", - "'int'", "'interface'", "'long'", "'native'", "'new'", "'package'", "'private'", - "'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'", - "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'", - "'transient'", "'try'", "'void'", "'volatile'", "'while'", "IntegerLiteral", - "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "StringLiteral", - "'null'", "'('", "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", - "'='", "'>'", "'<'", "'!'", "'~'", "'?'", "':'", "'=='", "'<='", "'>='", - "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", "'*'", "'/'", "'&'", - "'|'", "'^'", "'%'", "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", - "'%='", "'<<='", "'>>='", "'>>>='", "Identifier", "'@'", "'...'", "WS", - "COMMENT", "LINE_COMMENT" - }; - public static final int - RULE_compilationUnit = 0, RULE_packageDeclaration = 1, RULE_importDeclaration = 2, - RULE_typeDeclaration = 3, RULE_modifier = 4, RULE_classOrInterfaceModifier = 5, - RULE_variableModifier = 6, RULE_classDeclaration = 7, RULE_typeParameters = 8, - RULE_typeParameter = 9, RULE_typeBound = 10, RULE_enumDeclaration = 11, - RULE_enumConstants = 12, RULE_enumConstant = 13, RULE_enumBodyDeclarations = 14, - RULE_interfaceDeclaration = 15, RULE_typeList = 16, RULE_classBody = 17, - RULE_interfaceBody = 18, RULE_classBodyDeclaration = 19, RULE_memberDeclaration = 20, - RULE_methodDeclaration = 21, RULE_genericMethodDeclaration = 22, RULE_constructorDeclaration = 23, - RULE_genericConstructorDeclaration = 24, RULE_fieldDeclaration = 25, RULE_interfaceBodyDeclaration = 26, - RULE_interfaceMemberDeclaration = 27, RULE_constDeclaration = 28, RULE_constantDeclarator = 29, - RULE_interfaceMethodDeclaration = 30, RULE_genericInterfaceMethodDeclaration = 31, - RULE_variableDeclarators = 32, RULE_variableDeclarator = 33, RULE_variableDeclaratorId = 34, - RULE_variableInitializer = 35, RULE_arrayInitializer = 36, RULE_enumConstantName = 37, - RULE_type = 38, RULE_classOrInterfaceType = 39, RULE_primitiveType = 40, - RULE_typeArguments = 41, RULE_typeArgument = 42, RULE_qualifiedNameList = 43, - RULE_formalParameters = 44, RULE_formalParameterList = 45, RULE_formalParameter = 46, - RULE_lastFormalParameter = 47, RULE_methodBody = 48, RULE_constructorBody = 49, - RULE_qualifiedName = 50, RULE_literal = 51, RULE_annotation = 52, RULE_annotationName = 53, - RULE_elementValuePairs = 54, RULE_elementValuePair = 55, RULE_elementValue = 56, - RULE_elementValueArrayInitializer = 57, RULE_annotationTypeDeclaration = 58, - RULE_annotationTypeBody = 59, RULE_annotationTypeElementDeclaration = 60, - RULE_annotationTypeElementRest = 61, RULE_annotationMethodOrConstantRest = 62, - RULE_annotationMethodRest = 63, RULE_annotationConstantRest = 64, RULE_defaultValue = 65, - RULE_block = 66, RULE_blockStatement = 67, RULE_localVariableDeclarationStatement = 68, - RULE_localVariableDeclaration = 69, RULE_statement = 70, RULE_catchClause = 71, - RULE_catchType = 72, RULE_finallyBlock = 73, RULE_resourceSpecification = 74, - RULE_resources = 75, RULE_resource = 76, RULE_switchBlockStatementGroup = 77, - RULE_switchLabel = 78, RULE_forControl = 79, RULE_forInit = 80, RULE_enhancedForControl = 81, - RULE_forUpdate = 82, RULE_parExpression = 83, RULE_expressionList = 84, - RULE_statementExpression = 85, RULE_constantExpression = 86, RULE_expression = 87, - RULE_primary = 88, RULE_creator = 89, RULE_createdName = 90, RULE_innerCreator = 91, - RULE_arrayCreatorRest = 92, RULE_classCreatorRest = 93, RULE_explicitGenericInvocation = 94, - RULE_nonWildcardTypeArguments = 95, RULE_typeArgumentsOrDiamond = 96, - RULE_nonWildcardTypeArgumentsOrDiamond = 97, RULE_superSuffix = 98, RULE_explicitGenericInvocationSuffix = 99, - RULE_arguments = 100; - public static final String[] ruleNames = { - "compilationUnit", "packageDeclaration", "importDeclaration", "typeDeclaration", - "modifier", "classOrInterfaceModifier", "variableModifier", "classDeclaration", - "typeParameters", "typeParameter", "typeBound", "enumDeclaration", "enumConstants", - "enumConstant", "enumBodyDeclarations", "interfaceDeclaration", "typeList", - "classBody", "interfaceBody", "classBodyDeclaration", "memberDeclaration", - "methodDeclaration", "genericMethodDeclaration", "constructorDeclaration", - "genericConstructorDeclaration", "fieldDeclaration", "interfaceBodyDeclaration", - "interfaceMemberDeclaration", "constDeclaration", "constantDeclarator", - "interfaceMethodDeclaration", "genericInterfaceMethodDeclaration", "variableDeclarators", - "variableDeclarator", "variableDeclaratorId", "variableInitializer", "arrayInitializer", - "enumConstantName", "type", "classOrInterfaceType", "primitiveType", "typeArguments", - "typeArgument", "qualifiedNameList", "formalParameters", "formalParameterList", - "formalParameter", "lastFormalParameter", "methodBody", "constructorBody", - "qualifiedName", "literal", "annotation", "annotationName", "elementValuePairs", - "elementValuePair", "elementValue", "elementValueArrayInitializer", "annotationTypeDeclaration", - "annotationTypeBody", "annotationTypeElementDeclaration", "annotationTypeElementRest", - "annotationMethodOrConstantRest", "annotationMethodRest", "annotationConstantRest", - "defaultValue", "block", "blockStatement", "localVariableDeclarationStatement", - "localVariableDeclaration", "statement", "catchClause", "catchType", "finallyBlock", - "resourceSpecification", "resources", "resource", "switchBlockStatementGroup", - "switchLabel", "forControl", "forInit", "enhancedForControl", "forUpdate", - "parExpression", "expressionList", "statementExpression", "constantExpression", - "expression", "primary", "creator", "createdName", "innerCreator", "arrayCreatorRest", - "classCreatorRest", "explicitGenericInvocation", "nonWildcardTypeArguments", - "typeArgumentsOrDiamond", "nonWildcardTypeArgumentsOrDiamond", "superSuffix", - "explicitGenericInvocationSuffix", "arguments" - }; - - @Override - public String getGrammarFileName() { return "Java8.g4"; } - - @Override - public String[] getTokenNames() { return tokenNames; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public ATN getATN() { return _ATN; } - - public Java8Parser(TokenStream input) { - super(input); - _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - public static class CompilationUnitContext extends ParserRuleContext { - public TypeDeclarationContext typeDeclaration(int i) { - return getRuleContext(TypeDeclarationContext.class,i); - } - public ImportDeclarationContext importDeclaration(int i) { - return getRuleContext(ImportDeclarationContext.class,i); - } - public List importDeclaration() { - return getRuleContexts(ImportDeclarationContext.class); - } - public TerminalNode EOF() { return getToken(Java8Parser.EOF, 0); } - public PackageDeclarationContext packageDeclaration() { - return getRuleContext(PackageDeclarationContext.class,0); - } - public List typeDeclaration() { - return getRuleContexts(TypeDeclarationContext.class); - } - public CompilationUnitContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_compilationUnit; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitCompilationUnit(this); - else return visitor.visitChildren(this); - } - } - - public final CompilationUnitContext compilationUnit() throws RecognitionException { - CompilationUnitContext _localctx = new CompilationUnitContext(_ctx, getState()); - enterRule(_localctx, 0, RULE_compilationUnit); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(203); - switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) { - case 1: - { - setState(202); packageDeclaration(); - } - break; - } - setState(208); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==IMPORT) { - { - { - setState(205); importDeclaration(); - } - } - setState(210); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(214); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << CLASS) | (1L << ENUM) | (1L << FINAL) | (1L << INTERFACE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP) | (1L << SEMI))) != 0) || _la==AT) { - { - { - setState(211); typeDeclaration(); - } - } - setState(216); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(217); match(EOF); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class PackageDeclarationContext extends ParserRuleContext { - public List annotation() { - return getRuleContexts(AnnotationContext.class); - } - public QualifiedNameContext qualifiedName() { - return getRuleContext(QualifiedNameContext.class,0); - } - public AnnotationContext annotation(int i) { - return getRuleContext(AnnotationContext.class,i); - } - public PackageDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_packageDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitPackageDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final PackageDeclarationContext packageDeclaration() throws RecognitionException { - PackageDeclarationContext _localctx = new PackageDeclarationContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_packageDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(222); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==AT) { - { - { - setState(219); annotation(); - } - } - setState(224); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(225); match(PACKAGE); - setState(226); qualifiedName(); - setState(227); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ImportDeclarationContext extends ParserRuleContext { - public QualifiedNameContext qualifiedName() { - return getRuleContext(QualifiedNameContext.class,0); - } - public ImportDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_importDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitImportDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final ImportDeclarationContext importDeclaration() throws RecognitionException { - ImportDeclarationContext _localctx = new ImportDeclarationContext(_ctx, getState()); - enterRule(_localctx, 4, RULE_importDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(229); match(IMPORT); - setState(231); - _la = _input.LA(1); - if (_la==STATIC) { - { - setState(230); match(STATIC); - } - } - - setState(233); qualifiedName(); - setState(236); - _la = _input.LA(1); - if (_la==DOT) { - { - setState(234); match(DOT); - setState(235); match(MUL); - } - } - - setState(238); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeDeclarationContext extends ParserRuleContext { - public ClassOrInterfaceModifierContext classOrInterfaceModifier(int i) { - return getRuleContext(ClassOrInterfaceModifierContext.class,i); - } - public EnumDeclarationContext enumDeclaration() { - return getRuleContext(EnumDeclarationContext.class,0); - } - public ClassDeclarationContext classDeclaration() { - return getRuleContext(ClassDeclarationContext.class,0); - } - public AnnotationTypeDeclarationContext annotationTypeDeclaration() { - return getRuleContext(AnnotationTypeDeclarationContext.class,0); - } - public List classOrInterfaceModifier() { - return getRuleContexts(ClassOrInterfaceModifierContext.class); - } - public InterfaceDeclarationContext interfaceDeclaration() { - return getRuleContext(InterfaceDeclarationContext.class,0); - } - public TypeDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final TypeDeclarationContext typeDeclaration() throws RecognitionException { - TypeDeclarationContext _localctx = new TypeDeclarationContext(_ctx, getState()); - enterRule(_localctx, 6, RULE_typeDeclaration); - int _la; - try { - int _alt; - setState(269); - switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(243); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << FINAL) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0) || _la==AT) { - { - { - setState(240); classOrInterfaceModifier(); - } - } - setState(245); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(246); classDeclaration(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(250); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << FINAL) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0) || _la==AT) { - { - { - setState(247); classOrInterfaceModifier(); - } - } - setState(252); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(253); enumDeclaration(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(257); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << FINAL) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0) || _la==AT) { - { - { - setState(254); classOrInterfaceModifier(); - } - } - setState(259); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(260); interfaceDeclaration(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(264); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,9,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(261); classOrInterfaceModifier(); - } - } - } - setState(266); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,9,_ctx); - } - setState(267); annotationTypeDeclaration(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(268); match(SEMI); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ModifierContext extends ParserRuleContext { - public ClassOrInterfaceModifierContext classOrInterfaceModifier() { - return getRuleContext(ClassOrInterfaceModifierContext.class,0); - } - public ModifierContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_modifier; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitModifier(this); - else return visitor.visitChildren(this); - } - } - - public final ModifierContext modifier() throws RecognitionException { - ModifierContext _localctx = new ModifierContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_modifier); - int _la; - try { - setState(273); - switch (_input.LA(1)) { - case ABSTRACT: - case FINAL: - case PRIVATE: - case PROTECTED: - case PUBLIC: - case STATIC: - case STRICTFP: - case AT: - enterOuterAlt(_localctx, 1); - { - setState(271); classOrInterfaceModifier(); - } - break; - case NATIVE: - case SYNCHRONIZED: - case TRANSIENT: - case VOLATILE: - enterOuterAlt(_localctx, 2); - { - setState(272); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NATIVE) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOLATILE))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassOrInterfaceModifierContext extends ParserRuleContext { - public AnnotationContext annotation() { - return getRuleContext(AnnotationContext.class,0); - } - public ClassOrInterfaceModifierContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classOrInterfaceModifier; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassOrInterfaceModifier(this); - else return visitor.visitChildren(this); - } - } - - public final ClassOrInterfaceModifierContext classOrInterfaceModifier() throws RecognitionException { - ClassOrInterfaceModifierContext _localctx = new ClassOrInterfaceModifierContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_classOrInterfaceModifier); - int _la; - try { - setState(277); - switch (_input.LA(1)) { - case AT: - enterOuterAlt(_localctx, 1); - { - setState(275); annotation(); - } - break; - case ABSTRACT: - case FINAL: - case PRIVATE: - case PROTECTED: - case PUBLIC: - case STATIC: - case STRICTFP: - enterOuterAlt(_localctx, 2); - { - setState(276); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << FINAL) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableModifierContext extends ParserRuleContext { - public AnnotationContext annotation() { - return getRuleContext(AnnotationContext.class,0); - } - public VariableModifierContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableModifier; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitVariableModifier(this); - else return visitor.visitChildren(this); - } - } - - public final VariableModifierContext variableModifier() throws RecognitionException { - VariableModifierContext _localctx = new VariableModifierContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_variableModifier); - try { - setState(281); - switch (_input.LA(1)) { - case FINAL: - enterOuterAlt(_localctx, 1); - { - setState(279); match(FINAL); - } - break; - case AT: - enterOuterAlt(_localctx, 2); - { - setState(280); annotation(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public ClassBodyContext classBody() { - return getRuleContext(ClassBodyContext.class,0); - } - public TypeListContext typeList() { - return getRuleContext(TypeListContext.class,0); - } - public TypeParametersContext typeParameters() { - return getRuleContext(TypeParametersContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public ClassDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final ClassDeclarationContext classDeclaration() throws RecognitionException { - ClassDeclarationContext _localctx = new ClassDeclarationContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_classDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(283); match(CLASS); - setState(284); match(Identifier); - setState(286); - _la = _input.LA(1); - if (_la==LT) { - { - setState(285); typeParameters(); - } - } - - setState(290); - _la = _input.LA(1); - if (_la==EXTENDS) { - { - setState(288); match(EXTENDS); - setState(289); type(); - } - } - - setState(294); - _la = _input.LA(1); - if (_la==IMPLEMENTS) { - { - setState(292); match(IMPLEMENTS); - setState(293); typeList(); - } - } - - setState(296); classBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeParametersContext extends ParserRuleContext { - public List typeParameter() { - return getRuleContexts(TypeParameterContext.class); - } - public TypeParameterContext typeParameter(int i) { - return getRuleContext(TypeParameterContext.class,i); - } - public TypeParametersContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeParameters; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeParameters(this); - else return visitor.visitChildren(this); - } - } - - public final TypeParametersContext typeParameters() throws RecognitionException { - TypeParametersContext _localctx = new TypeParametersContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_typeParameters); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(298); match(LT); - setState(299); typeParameter(); - setState(304); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(300); match(COMMA); - setState(301); typeParameter(); - } - } - setState(306); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(307); match(GT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeParameterContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public TypeBoundContext typeBound() { - return getRuleContext(TypeBoundContext.class,0); - } - public TypeParameterContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeParameter; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeParameter(this); - else return visitor.visitChildren(this); - } - } - - public final TypeParameterContext typeParameter() throws RecognitionException { - TypeParameterContext _localctx = new TypeParameterContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_typeParameter); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(309); match(Identifier); - setState(312); - _la = _input.LA(1); - if (_la==EXTENDS) { - { - setState(310); match(EXTENDS); - setState(311); typeBound(); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeBoundContext extends ParserRuleContext { - public TypeContext type(int i) { - return getRuleContext(TypeContext.class,i); - } - public List type() { - return getRuleContexts(TypeContext.class); - } - public TypeBoundContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeBound; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeBound(this); - else return visitor.visitChildren(this); - } - } - - public final TypeBoundContext typeBound() throws RecognitionException { - TypeBoundContext _localctx = new TypeBoundContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_typeBound); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(314); type(); - setState(319); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==BITAND) { - { - { - setState(315); match(BITAND); - setState(316); type(); - } - } - setState(321); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnumDeclarationContext extends ParserRuleContext { - public EnumBodyDeclarationsContext enumBodyDeclarations() { - return getRuleContext(EnumBodyDeclarationsContext.class,0); - } - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public TypeListContext typeList() { - return getRuleContext(TypeListContext.class,0); - } - public TerminalNode ENUM() { return getToken(Java8Parser.ENUM, 0); } - public EnumConstantsContext enumConstants() { - return getRuleContext(EnumConstantsContext.class,0); - } - public EnumDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enumDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnumDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final EnumDeclarationContext enumDeclaration() throws RecognitionException { - EnumDeclarationContext _localctx = new EnumDeclarationContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_enumDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(322); match(ENUM); - setState(323); match(Identifier); - setState(326); - _la = _input.LA(1); - if (_la==IMPLEMENTS) { - { - setState(324); match(IMPLEMENTS); - setState(325); typeList(); - } - } - - setState(328); match(LBRACE); - setState(330); - _la = _input.LA(1); - if (_la==Identifier || _la==AT) { - { - setState(329); enumConstants(); - } - } - - setState(333); - _la = _input.LA(1); - if (_la==COMMA) { - { - setState(332); match(COMMA); - } - } - - setState(336); - _la = _input.LA(1); - if (_la==SEMI) { - { - setState(335); enumBodyDeclarations(); - } - } - - setState(338); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnumConstantsContext extends ParserRuleContext { - public List enumConstant() { - return getRuleContexts(EnumConstantContext.class); - } - public EnumConstantContext enumConstant(int i) { - return getRuleContext(EnumConstantContext.class,i); - } - public EnumConstantsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enumConstants; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnumConstants(this); - else return visitor.visitChildren(this); - } - } - - public final EnumConstantsContext enumConstants() throws RecognitionException { - EnumConstantsContext _localctx = new EnumConstantsContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_enumConstants); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(340); enumConstant(); - setState(345); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,24,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(341); match(COMMA); - setState(342); enumConstant(); - } - } - } - setState(347); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,24,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnumConstantContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public List annotation() { - return getRuleContexts(AnnotationContext.class); - } - public ClassBodyContext classBody() { - return getRuleContext(ClassBodyContext.class,0); - } - public AnnotationContext annotation(int i) { - return getRuleContext(AnnotationContext.class,i); - } - public ArgumentsContext arguments() { - return getRuleContext(ArgumentsContext.class,0); - } - public EnumConstantContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enumConstant; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnumConstant(this); - else return visitor.visitChildren(this); - } - } - - public final EnumConstantContext enumConstant() throws RecognitionException { - EnumConstantContext _localctx = new EnumConstantContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_enumConstant); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(351); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==AT) { - { - { - setState(348); annotation(); - } - } - setState(353); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(354); match(Identifier); - setState(356); - _la = _input.LA(1); - if (_la==LPAREN) { - { - setState(355); arguments(); - } - } - - setState(359); - _la = _input.LA(1); - if (_la==LBRACE) { - { - setState(358); classBody(); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnumBodyDeclarationsContext extends ParserRuleContext { - public List classBodyDeclaration() { - return getRuleContexts(ClassBodyDeclarationContext.class); - } - public ClassBodyDeclarationContext classBodyDeclaration(int i) { - return getRuleContext(ClassBodyDeclarationContext.class,i); - } - public EnumBodyDeclarationsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enumBodyDeclarations; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnumBodyDeclarations(this); - else return visitor.visitChildren(this); - } - } - - public final EnumBodyDeclarationsContext enumBodyDeclarations() throws RecognitionException { - EnumBodyDeclarationsContext _localctx = new EnumBodyDeclarationsContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_enumBodyDeclarations); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(361); match(SEMI); - setState(365); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE) | (1L << LBRACE) | (1L << SEMI))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - { - setState(362); classBodyDeclaration(); - } - } - setState(367); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InterfaceDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public InterfaceBodyContext interfaceBody() { - return getRuleContext(InterfaceBodyContext.class,0); - } - public TypeListContext typeList() { - return getRuleContext(TypeListContext.class,0); - } - public TypeParametersContext typeParameters() { - return getRuleContext(TypeParametersContext.class,0); - } - public InterfaceDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_interfaceDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInterfaceDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final InterfaceDeclarationContext interfaceDeclaration() throws RecognitionException { - InterfaceDeclarationContext _localctx = new InterfaceDeclarationContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_interfaceDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(368); match(INTERFACE); - setState(369); match(Identifier); - setState(371); - _la = _input.LA(1); - if (_la==LT) { - { - setState(370); typeParameters(); - } - } - - setState(375); - _la = _input.LA(1); - if (_la==EXTENDS) { - { - setState(373); match(EXTENDS); - setState(374); typeList(); - } - } - - setState(377); interfaceBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeListContext extends ParserRuleContext { - public TypeContext type(int i) { - return getRuleContext(TypeContext.class,i); - } - public List type() { - return getRuleContexts(TypeContext.class); - } - public TypeListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeList; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeList(this); - else return visitor.visitChildren(this); - } - } - - public final TypeListContext typeList() throws RecognitionException { - TypeListContext _localctx = new TypeListContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_typeList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(379); type(); - setState(384); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(380); match(COMMA); - setState(381); type(); - } - } - setState(386); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassBodyContext extends ParserRuleContext { - public List classBodyDeclaration() { - return getRuleContexts(ClassBodyDeclarationContext.class); - } - public ClassBodyDeclarationContext classBodyDeclaration(int i) { - return getRuleContext(ClassBodyDeclarationContext.class,i); - } - public ClassBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classBody; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassBody(this); - else return visitor.visitChildren(this); - } - } - - public final ClassBodyContext classBody() throws RecognitionException { - ClassBodyContext _localctx = new ClassBodyContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_classBody); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(387); match(LBRACE); - setState(391); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE) | (1L << LBRACE) | (1L << SEMI))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - { - setState(388); classBodyDeclaration(); - } - } - setState(393); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(394); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InterfaceBodyContext extends ParserRuleContext { - public List interfaceBodyDeclaration() { - return getRuleContexts(InterfaceBodyDeclarationContext.class); - } - public InterfaceBodyDeclarationContext interfaceBodyDeclaration(int i) { - return getRuleContext(InterfaceBodyDeclarationContext.class,i); - } - public InterfaceBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_interfaceBody; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInterfaceBody(this); - else return visitor.visitChildren(this); - } - } - - public final InterfaceBodyContext interfaceBody() throws RecognitionException { - InterfaceBodyContext _localctx = new InterfaceBodyContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_interfaceBody); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(396); match(LBRACE); - setState(400); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE) | (1L << SEMI))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - { - setState(397); interfaceBodyDeclaration(); - } - } - setState(402); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(403); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassBodyDeclarationContext extends ParserRuleContext { - public List modifier() { - return getRuleContexts(ModifierContext.class); - } - public MemberDeclarationContext memberDeclaration() { - return getRuleContext(MemberDeclarationContext.class,0); - } - public ModifierContext modifier(int i) { - return getRuleContext(ModifierContext.class,i); - } - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public ClassBodyDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classBodyDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassBodyDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final ClassBodyDeclarationContext classBodyDeclaration() throws RecognitionException { - ClassBodyDeclarationContext _localctx = new ClassBodyDeclarationContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_classBodyDeclaration); - int _la; - try { - int _alt; - setState(417); - switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(405); match(SEMI); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(407); - _la = _input.LA(1); - if (_la==STATIC) { - { - setState(406); match(STATIC); - } - } - - setState(409); block(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(413); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,35,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(410); modifier(); - } - } - } - setState(415); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,35,_ctx); - } - setState(416); memberDeclaration(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MemberDeclarationContext extends ParserRuleContext { - public GenericMethodDeclarationContext genericMethodDeclaration() { - return getRuleContext(GenericMethodDeclarationContext.class,0); - } - public MethodDeclarationContext methodDeclaration() { - return getRuleContext(MethodDeclarationContext.class,0); - } - public EnumDeclarationContext enumDeclaration() { - return getRuleContext(EnumDeclarationContext.class,0); - } - public ClassDeclarationContext classDeclaration() { - return getRuleContext(ClassDeclarationContext.class,0); - } - public AnnotationTypeDeclarationContext annotationTypeDeclaration() { - return getRuleContext(AnnotationTypeDeclarationContext.class,0); - } - public GenericConstructorDeclarationContext genericConstructorDeclaration() { - return getRuleContext(GenericConstructorDeclarationContext.class,0); - } - public InterfaceDeclarationContext interfaceDeclaration() { - return getRuleContext(InterfaceDeclarationContext.class,0); - } - public ConstructorDeclarationContext constructorDeclaration() { - return getRuleContext(ConstructorDeclarationContext.class,0); - } - public FieldDeclarationContext fieldDeclaration() { - return getRuleContext(FieldDeclarationContext.class,0); - } - public MemberDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_memberDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitMemberDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final MemberDeclarationContext memberDeclaration() throws RecognitionException { - MemberDeclarationContext _localctx = new MemberDeclarationContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_memberDeclaration); - try { - setState(428); - switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(419); methodDeclaration(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(420); genericMethodDeclaration(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(421); fieldDeclaration(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(422); constructorDeclaration(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(423); genericConstructorDeclaration(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(424); interfaceDeclaration(); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(425); annotationTypeDeclaration(); - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(426); classDeclaration(); - } - break; - case 9: - enterOuterAlt(_localctx, 9); - { - setState(427); enumDeclaration(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MethodDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public MethodBodyContext methodBody() { - return getRuleContext(MethodBodyContext.class,0); - } - public QualifiedNameListContext qualifiedNameList() { - return getRuleContext(QualifiedNameListContext.class,0); - } - public FormalParametersContext formalParameters() { - return getRuleContext(FormalParametersContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public MethodDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_methodDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitMethodDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final MethodDeclarationContext methodDeclaration() throws RecognitionException { - MethodDeclarationContext _localctx = new MethodDeclarationContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_methodDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(432); - switch (_input.LA(1)) { - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - case Identifier: - { - setState(430); type(); - } - break; - case VOID: - { - setState(431); match(VOID); - } - break; - default: - throw new NoViableAltException(this); - } - setState(434); match(Identifier); - setState(435); formalParameters(); - setState(440); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LBRACK) { - { - { - setState(436); match(LBRACK); - setState(437); match(RBRACK); - } - } - setState(442); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(445); - _la = _input.LA(1); - if (_la==THROWS) { - { - setState(443); match(THROWS); - setState(444); qualifiedNameList(); - } - } - - setState(449); - switch (_input.LA(1)) { - case LBRACE: - { - setState(447); methodBody(); - } - break; - case SEMI: - { - setState(448); match(SEMI); - } - break; - default: - throw new NoViableAltException(this); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class GenericMethodDeclarationContext extends ParserRuleContext { - public MethodDeclarationContext methodDeclaration() { - return getRuleContext(MethodDeclarationContext.class,0); - } - public TypeParametersContext typeParameters() { - return getRuleContext(TypeParametersContext.class,0); - } - public GenericMethodDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_genericMethodDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitGenericMethodDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final GenericMethodDeclarationContext genericMethodDeclaration() throws RecognitionException { - GenericMethodDeclarationContext _localctx = new GenericMethodDeclarationContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_genericMethodDeclaration); - try { - enterOuterAlt(_localctx, 1); - { - setState(451); typeParameters(); - setState(452); methodDeclaration(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ConstructorDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public ConstructorBodyContext constructorBody() { - return getRuleContext(ConstructorBodyContext.class,0); - } - public QualifiedNameListContext qualifiedNameList() { - return getRuleContext(QualifiedNameListContext.class,0); - } - public FormalParametersContext formalParameters() { - return getRuleContext(FormalParametersContext.class,0); - } - public ConstructorDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constructorDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitConstructorDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final ConstructorDeclarationContext constructorDeclaration() throws RecognitionException { - ConstructorDeclarationContext _localctx = new ConstructorDeclarationContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_constructorDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(454); match(Identifier); - setState(455); formalParameters(); - setState(458); - _la = _input.LA(1); - if (_la==THROWS) { - { - setState(456); match(THROWS); - setState(457); qualifiedNameList(); - } - } - - setState(460); constructorBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class GenericConstructorDeclarationContext extends ParserRuleContext { - public TypeParametersContext typeParameters() { - return getRuleContext(TypeParametersContext.class,0); - } - public ConstructorDeclarationContext constructorDeclaration() { - return getRuleContext(ConstructorDeclarationContext.class,0); - } - public GenericConstructorDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_genericConstructorDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitGenericConstructorDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final GenericConstructorDeclarationContext genericConstructorDeclaration() throws RecognitionException { - GenericConstructorDeclarationContext _localctx = new GenericConstructorDeclarationContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_genericConstructorDeclaration); - try { - enterOuterAlt(_localctx, 1); - { - setState(462); typeParameters(); - setState(463); constructorDeclaration(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FieldDeclarationContext extends ParserRuleContext { - public VariableDeclaratorsContext variableDeclarators() { - return getRuleContext(VariableDeclaratorsContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public FieldDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_fieldDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitFieldDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final FieldDeclarationContext fieldDeclaration() throws RecognitionException { - FieldDeclarationContext _localctx = new FieldDeclarationContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_fieldDeclaration); - try { - enterOuterAlt(_localctx, 1); - { - setState(465); type(); - setState(466); variableDeclarators(); - setState(467); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InterfaceBodyDeclarationContext extends ParserRuleContext { - public List modifier() { - return getRuleContexts(ModifierContext.class); - } - public ModifierContext modifier(int i) { - return getRuleContext(ModifierContext.class,i); - } - public InterfaceMemberDeclarationContext interfaceMemberDeclaration() { - return getRuleContext(InterfaceMemberDeclarationContext.class,0); - } - public InterfaceBodyDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_interfaceBodyDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInterfaceBodyDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final InterfaceBodyDeclarationContext interfaceBodyDeclaration() throws RecognitionException { - InterfaceBodyDeclarationContext _localctx = new InterfaceBodyDeclarationContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_interfaceBodyDeclaration); - try { - int _alt; - setState(477); - switch (_input.LA(1)) { - case ABSTRACT: - case BOOLEAN: - case BYTE: - case CHAR: - case CLASS: - case DOUBLE: - case ENUM: - case FINAL: - case FLOAT: - case INT: - case INTERFACE: - case LONG: - case NATIVE: - case PRIVATE: - case PROTECTED: - case PUBLIC: - case SHORT: - case STATIC: - case STRICTFP: - case SYNCHRONIZED: - case TRANSIENT: - case VOID: - case VOLATILE: - case LT: - case Identifier: - case AT: - enterOuterAlt(_localctx, 1); - { - setState(472); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,43,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(469); modifier(); - } - } - } - setState(474); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,43,_ctx); - } - setState(475); interfaceMemberDeclaration(); - } - break; - case SEMI: - enterOuterAlt(_localctx, 2); - { - setState(476); match(SEMI); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InterfaceMemberDeclarationContext extends ParserRuleContext { - public EnumDeclarationContext enumDeclaration() { - return getRuleContext(EnumDeclarationContext.class,0); - } - public ClassDeclarationContext classDeclaration() { - return getRuleContext(ClassDeclarationContext.class,0); - } - public GenericInterfaceMethodDeclarationContext genericInterfaceMethodDeclaration() { - return getRuleContext(GenericInterfaceMethodDeclarationContext.class,0); - } - public AnnotationTypeDeclarationContext annotationTypeDeclaration() { - return getRuleContext(AnnotationTypeDeclarationContext.class,0); - } - public InterfaceDeclarationContext interfaceDeclaration() { - return getRuleContext(InterfaceDeclarationContext.class,0); - } - public ConstDeclarationContext constDeclaration() { - return getRuleContext(ConstDeclarationContext.class,0); - } - public InterfaceMethodDeclarationContext interfaceMethodDeclaration() { - return getRuleContext(InterfaceMethodDeclarationContext.class,0); - } - public InterfaceMemberDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_interfaceMemberDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInterfaceMemberDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final InterfaceMemberDeclarationContext interfaceMemberDeclaration() throws RecognitionException { - InterfaceMemberDeclarationContext _localctx = new InterfaceMemberDeclarationContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_interfaceMemberDeclaration); - try { - setState(486); - switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(479); constDeclaration(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(480); interfaceMethodDeclaration(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(481); genericInterfaceMethodDeclaration(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(482); interfaceDeclaration(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(483); annotationTypeDeclaration(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(484); classDeclaration(); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(485); enumDeclaration(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ConstDeclarationContext extends ParserRuleContext { - public ConstantDeclaratorContext constantDeclarator(int i) { - return getRuleContext(ConstantDeclaratorContext.class,i); - } - public List constantDeclarator() { - return getRuleContexts(ConstantDeclaratorContext.class); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public ConstDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitConstDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final ConstDeclarationContext constDeclaration() throws RecognitionException { - ConstDeclarationContext _localctx = new ConstDeclarationContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_constDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(488); type(); - setState(489); constantDeclarator(); - setState(494); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(490); match(COMMA); - setState(491); constantDeclarator(); - } - } - setState(496); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(497); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ConstantDeclaratorContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public VariableInitializerContext variableInitializer() { - return getRuleContext(VariableInitializerContext.class,0); - } - public ConstantDeclaratorContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constantDeclarator; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitConstantDeclarator(this); - else return visitor.visitChildren(this); - } - } - - public final ConstantDeclaratorContext constantDeclarator() throws RecognitionException { - ConstantDeclaratorContext _localctx = new ConstantDeclaratorContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_constantDeclarator); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(499); match(Identifier); - setState(504); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LBRACK) { - { - { - setState(500); match(LBRACK); - setState(501); match(RBRACK); - } - } - setState(506); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(507); match(ASSIGN); - setState(508); variableInitializer(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InterfaceMethodDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public QualifiedNameListContext qualifiedNameList() { - return getRuleContext(QualifiedNameListContext.class,0); - } - public FormalParametersContext formalParameters() { - return getRuleContext(FormalParametersContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public InterfaceMethodDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_interfaceMethodDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInterfaceMethodDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final InterfaceMethodDeclarationContext interfaceMethodDeclaration() throws RecognitionException { - InterfaceMethodDeclarationContext _localctx = new InterfaceMethodDeclarationContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_interfaceMethodDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(512); - switch (_input.LA(1)) { - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - case Identifier: - { - setState(510); type(); - } - break; - case VOID: - { - setState(511); match(VOID); - } - break; - default: - throw new NoViableAltException(this); - } - setState(514); match(Identifier); - setState(515); formalParameters(); - setState(520); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LBRACK) { - { - { - setState(516); match(LBRACK); - setState(517); match(RBRACK); - } - } - setState(522); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(525); - _la = _input.LA(1); - if (_la==THROWS) { - { - setState(523); match(THROWS); - setState(524); qualifiedNameList(); - } - } - - setState(527); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class GenericInterfaceMethodDeclarationContext extends ParserRuleContext { - public TypeParametersContext typeParameters() { - return getRuleContext(TypeParametersContext.class,0); - } - public InterfaceMethodDeclarationContext interfaceMethodDeclaration() { - return getRuleContext(InterfaceMethodDeclarationContext.class,0); - } - public GenericInterfaceMethodDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_genericInterfaceMethodDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitGenericInterfaceMethodDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final GenericInterfaceMethodDeclarationContext genericInterfaceMethodDeclaration() throws RecognitionException { - GenericInterfaceMethodDeclarationContext _localctx = new GenericInterfaceMethodDeclarationContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_genericInterfaceMethodDeclaration); - try { - enterOuterAlt(_localctx, 1); - { - setState(529); typeParameters(); - setState(530); interfaceMethodDeclaration(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableDeclaratorsContext extends ParserRuleContext { - public List variableDeclarator() { - return getRuleContexts(VariableDeclaratorContext.class); - } - public VariableDeclaratorContext variableDeclarator(int i) { - return getRuleContext(VariableDeclaratorContext.class,i); - } - public VariableDeclaratorsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableDeclarators; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitVariableDeclarators(this); - else return visitor.visitChildren(this); - } - } - - public final VariableDeclaratorsContext variableDeclarators() throws RecognitionException { - VariableDeclaratorsContext _localctx = new VariableDeclaratorsContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_variableDeclarators); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(532); variableDeclarator(); - setState(537); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(533); match(COMMA); - setState(534); variableDeclarator(); - } - } - setState(539); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableDeclaratorContext extends ParserRuleContext { - public VariableInitializerContext variableInitializer() { - return getRuleContext(VariableInitializerContext.class,0); - } - public VariableDeclaratorIdContext variableDeclaratorId() { - return getRuleContext(VariableDeclaratorIdContext.class,0); - } - public VariableDeclaratorContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableDeclarator; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitVariableDeclarator(this); - else return visitor.visitChildren(this); - } - } - - public final VariableDeclaratorContext variableDeclarator() throws RecognitionException { - VariableDeclaratorContext _localctx = new VariableDeclaratorContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_variableDeclarator); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(540); variableDeclaratorId(); - setState(543); - _la = _input.LA(1); - if (_la==ASSIGN) { - { - setState(541); match(ASSIGN); - setState(542); variableInitializer(); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableDeclaratorIdContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public VariableDeclaratorIdContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableDeclaratorId; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitVariableDeclaratorId(this); - else return visitor.visitChildren(this); - } - } - - public final VariableDeclaratorIdContext variableDeclaratorId() throws RecognitionException { - VariableDeclaratorIdContext _localctx = new VariableDeclaratorIdContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_variableDeclaratorId); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(545); match(Identifier); - setState(550); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LBRACK) { - { - { - setState(546); match(LBRACK); - setState(547); match(RBRACK); - } - } - setState(552); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableInitializerContext extends ParserRuleContext { - public ArrayInitializerContext arrayInitializer() { - return getRuleContext(ArrayInitializerContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public VariableInitializerContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableInitializer; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitVariableInitializer(this); - else return visitor.visitChildren(this); - } - } - - public final VariableInitializerContext variableInitializer() throws RecognitionException { - VariableInitializerContext _localctx = new VariableInitializerContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_variableInitializer); - try { - setState(555); - switch (_input.LA(1)) { - case LBRACE: - enterOuterAlt(_localctx, 1); - { - setState(553); arrayInitializer(); - } - break; - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case NEW: - case SHORT: - case SUPER: - case THIS: - case VOID: - case IntegerLiteral: - case FloatingPointLiteral: - case BooleanLiteral: - case CharacterLiteral: - case StringLiteral: - case NullLiteral: - case LPAREN: - case LT: - case BANG: - case TILDE: - case INC: - case DEC: - case ADD: - case SUB: - case Identifier: - enterOuterAlt(_localctx, 2); - { - setState(554); expression(0); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ArrayInitializerContext extends ParserRuleContext { - public List variableInitializer() { - return getRuleContexts(VariableInitializerContext.class); - } - public VariableInitializerContext variableInitializer(int i) { - return getRuleContext(VariableInitializerContext.class,i); - } - public ArrayInitializerContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_arrayInitializer; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitArrayInitializer(this); - else return visitor.visitChildren(this); - } - } - - public final ArrayInitializerContext arrayInitializer() throws RecognitionException { - ArrayInitializerContext _localctx = new ArrayInitializerContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_arrayInitializer); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(557); match(LBRACE); - setState(569); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN) | (1L << LBRACE))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(558); variableInitializer(); - setState(563); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,55,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(559); match(COMMA); - setState(560); variableInitializer(); - } - } - } - setState(565); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,55,_ctx); - } - setState(567); - _la = _input.LA(1); - if (_la==COMMA) { - { - setState(566); match(COMMA); - } - } - - } - } - - setState(571); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnumConstantNameContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public EnumConstantNameContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enumConstantName; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnumConstantName(this); - else return visitor.visitChildren(this); - } - } - - public final EnumConstantNameContext enumConstantName() throws RecognitionException { - EnumConstantNameContext _localctx = new EnumConstantNameContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_enumConstantName); - try { - enterOuterAlt(_localctx, 1); - { - setState(573); match(Identifier); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeContext extends ParserRuleContext { - public PrimitiveTypeContext primitiveType() { - return getRuleContext(PrimitiveTypeContext.class,0); - } - public ClassOrInterfaceTypeContext classOrInterfaceType() { - return getRuleContext(ClassOrInterfaceTypeContext.class,0); - } - public TypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_type; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitType(this); - else return visitor.visitChildren(this); - } - } - - public final TypeContext type() throws RecognitionException { - TypeContext _localctx = new TypeContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_type); - try { - int _alt; - setState(591); - switch (_input.LA(1)) { - case Identifier: - enterOuterAlt(_localctx, 1); - { - setState(575); classOrInterfaceType(); - setState(580); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,58,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(576); match(LBRACK); - setState(577); match(RBRACK); - } - } - } - setState(582); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,58,_ctx); - } - } - break; - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - enterOuterAlt(_localctx, 2); - { - setState(583); primitiveType(); - setState(588); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,59,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(584); match(LBRACK); - setState(585); match(RBRACK); - } - } - } - setState(590); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,59,_ctx); - } - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassOrInterfaceTypeContext extends ParserRuleContext { - public List typeArguments() { - return getRuleContexts(TypeArgumentsContext.class); - } - public List Identifier() { return getTokens(Java8Parser.Identifier); } - public TerminalNode Identifier(int i) { - return getToken(Java8Parser.Identifier, i); - } - public TypeArgumentsContext typeArguments(int i) { - return getRuleContext(TypeArgumentsContext.class,i); - } - public ClassOrInterfaceTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classOrInterfaceType; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassOrInterfaceType(this); - else return visitor.visitChildren(this); - } - } - - public final ClassOrInterfaceTypeContext classOrInterfaceType() throws RecognitionException { - ClassOrInterfaceTypeContext _localctx = new ClassOrInterfaceTypeContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_classOrInterfaceType); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(593); match(Identifier); - setState(595); - switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { - case 1: - { - setState(594); typeArguments(); - } - break; - } - setState(604); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,63,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(597); match(DOT); - setState(598); match(Identifier); - setState(600); - switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) { - case 1: - { - setState(599); typeArguments(); - } - break; - } - } - } - } - setState(606); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,63,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class PrimitiveTypeContext extends ParserRuleContext { - public PrimitiveTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_primitiveType; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitPrimitiveType(this); - else return visitor.visitChildren(this); - } - } - - public final PrimitiveTypeContext primitiveType() throws RecognitionException { - PrimitiveTypeContext _localctx = new PrimitiveTypeContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_primitiveType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(607); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << SHORT))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeArgumentsContext extends ParserRuleContext { - public List typeArgument() { - return getRuleContexts(TypeArgumentContext.class); - } - public TypeArgumentContext typeArgument(int i) { - return getRuleContext(TypeArgumentContext.class,i); - } - public TypeArgumentsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeArguments; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeArguments(this); - else return visitor.visitChildren(this); - } - } - - public final TypeArgumentsContext typeArguments() throws RecognitionException { - TypeArgumentsContext _localctx = new TypeArgumentsContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_typeArguments); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(609); match(LT); - setState(610); typeArgument(); - setState(615); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(611); match(COMMA); - setState(612); typeArgument(); - } - } - setState(617); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(618); match(GT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeArgumentContext extends ParserRuleContext { - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public TypeArgumentContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeArgument; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeArgument(this); - else return visitor.visitChildren(this); - } - } - - public final TypeArgumentContext typeArgument() throws RecognitionException { - TypeArgumentContext _localctx = new TypeArgumentContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_typeArgument); - int _la; - try { - setState(626); - switch (_input.LA(1)) { - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - case Identifier: - enterOuterAlt(_localctx, 1); - { - setState(620); type(); - } - break; - case QUESTION: - enterOuterAlt(_localctx, 2); - { - setState(621); match(QUESTION); - setState(624); - _la = _input.LA(1); - if (_la==EXTENDS || _la==SUPER) { - { - setState(622); - _la = _input.LA(1); - if ( !(_la==EXTENDS || _la==SUPER) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(623); type(); - } - } - - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class QualifiedNameListContext extends ParserRuleContext { - public List qualifiedName() { - return getRuleContexts(QualifiedNameContext.class); - } - public QualifiedNameContext qualifiedName(int i) { - return getRuleContext(QualifiedNameContext.class,i); - } - public QualifiedNameListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_qualifiedNameList; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitQualifiedNameList(this); - else return visitor.visitChildren(this); - } - } - - public final QualifiedNameListContext qualifiedNameList() throws RecognitionException { - QualifiedNameListContext _localctx = new QualifiedNameListContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_qualifiedNameList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(628); qualifiedName(); - setState(633); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(629); match(COMMA); - setState(630); qualifiedName(); - } - } - setState(635); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalParametersContext extends ParserRuleContext { - public FormalParameterListContext formalParameterList() { - return getRuleContext(FormalParameterListContext.class,0); - } - public FormalParametersContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalParameters; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitFormalParameters(this); - else return visitor.visitChildren(this); - } - } - - public final FormalParametersContext formalParameters() throws RecognitionException { - FormalParametersContext _localctx = new FormalParametersContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_formalParameters); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(636); match(LPAREN); - setState(638); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << SHORT))) != 0) || _la==Identifier || _la==AT) { - { - setState(637); formalParameterList(); - } - } - - setState(640); match(RPAREN); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalParameterListContext extends ParserRuleContext { - public List formalParameter() { - return getRuleContexts(FormalParameterContext.class); - } - public LastFormalParameterContext lastFormalParameter() { - return getRuleContext(LastFormalParameterContext.class,0); - } - public FormalParameterContext formalParameter(int i) { - return getRuleContext(FormalParameterContext.class,i); - } - public FormalParameterListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalParameterList; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitFormalParameterList(this); - else return visitor.visitChildren(this); - } - } - - public final FormalParameterListContext formalParameterList() throws RecognitionException { - FormalParameterListContext _localctx = new FormalParameterListContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_formalParameterList); - int _la; - try { - int _alt; - setState(655); - switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(642); formalParameter(); - setState(647); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,69,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(643); match(COMMA); - setState(644); formalParameter(); - } - } - } - setState(649); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,69,_ctx); - } - setState(652); - _la = _input.LA(1); - if (_la==COMMA) { - { - setState(650); match(COMMA); - setState(651); lastFormalParameter(); - } - } - - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(654); lastFormalParameter(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalParameterContext extends ParserRuleContext { - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public VariableDeclaratorIdContext variableDeclaratorId() { - return getRuleContext(VariableDeclaratorIdContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public FormalParameterContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalParameter; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitFormalParameter(this); - else return visitor.visitChildren(this); - } - } - - public final FormalParameterContext formalParameter() throws RecognitionException { - FormalParameterContext _localctx = new FormalParameterContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_formalParameter); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(660); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(657); variableModifier(); - } - } - setState(662); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(663); type(); - setState(664); variableDeclaratorId(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class LastFormalParameterContext extends ParserRuleContext { - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public VariableDeclaratorIdContext variableDeclaratorId() { - return getRuleContext(VariableDeclaratorIdContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public LastFormalParameterContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_lastFormalParameter; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitLastFormalParameter(this); - else return visitor.visitChildren(this); - } - } - - public final LastFormalParameterContext lastFormalParameter() throws RecognitionException { - LastFormalParameterContext _localctx = new LastFormalParameterContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_lastFormalParameter); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(669); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(666); variableModifier(); - } - } - setState(671); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(672); type(); - setState(673); match(ELLIPSIS); - setState(674); variableDeclaratorId(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MethodBodyContext extends ParserRuleContext { - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public MethodBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_methodBody; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitMethodBody(this); - else return visitor.visitChildren(this); - } - } - - public final MethodBodyContext methodBody() throws RecognitionException { - MethodBodyContext _localctx = new MethodBodyContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_methodBody); - try { - enterOuterAlt(_localctx, 1); - { - setState(676); block(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ConstructorBodyContext extends ParserRuleContext { - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public ConstructorBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constructorBody; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitConstructorBody(this); - else return visitor.visitChildren(this); - } - } - - public final ConstructorBodyContext constructorBody() throws RecognitionException { - ConstructorBodyContext _localctx = new ConstructorBodyContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_constructorBody); - try { - enterOuterAlt(_localctx, 1); - { - setState(678); block(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class QualifiedNameContext extends ParserRuleContext { - public List Identifier() { return getTokens(Java8Parser.Identifier); } - public TerminalNode Identifier(int i) { - return getToken(Java8Parser.Identifier, i); - } - public QualifiedNameContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_qualifiedName; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitQualifiedName(this); - else return visitor.visitChildren(this); - } - } - - public final QualifiedNameContext qualifiedName() throws RecognitionException { - QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_qualifiedName); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(680); match(Identifier); - setState(685); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,74,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(681); match(DOT); - setState(682); match(Identifier); - } - } - } - setState(687); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,74,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class LiteralContext extends ParserRuleContext { - public TerminalNode StringLiteral() { return getToken(Java8Parser.StringLiteral, 0); } - public TerminalNode IntegerLiteral() { return getToken(Java8Parser.IntegerLiteral, 0); } - public TerminalNode FloatingPointLiteral() { return getToken(Java8Parser.FloatingPointLiteral, 0); } - public TerminalNode BooleanLiteral() { return getToken(Java8Parser.BooleanLiteral, 0); } - public TerminalNode CharacterLiteral() { return getToken(Java8Parser.CharacterLiteral, 0); } - public LiteralContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_literal; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitLiteral(this); - else return visitor.visitChildren(this); - } - } - - public final LiteralContext literal() throws RecognitionException { - LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_literal); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(688); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationContext extends ParserRuleContext { - public ElementValuePairsContext elementValuePairs() { - return getRuleContext(ElementValuePairsContext.class,0); - } - public AnnotationNameContext annotationName() { - return getRuleContext(AnnotationNameContext.class,0); - } - public ElementValueContext elementValue() { - return getRuleContext(ElementValueContext.class,0); - } - public AnnotationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotation; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotation(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationContext annotation() throws RecognitionException { - AnnotationContext _localctx = new AnnotationContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_annotation); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(690); match(AT); - setState(691); annotationName(); - setState(698); - _la = _input.LA(1); - if (_la==LPAREN) { - { - setState(692); match(LPAREN); - setState(695); - switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { - case 1: - { - setState(693); elementValuePairs(); - } - break; - case 2: - { - setState(694); elementValue(); - } - break; - } - setState(697); match(RPAREN); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationNameContext extends ParserRuleContext { - public QualifiedNameContext qualifiedName() { - return getRuleContext(QualifiedNameContext.class,0); - } - public AnnotationNameContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationName; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationName(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationNameContext annotationName() throws RecognitionException { - AnnotationNameContext _localctx = new AnnotationNameContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_annotationName); - try { - enterOuterAlt(_localctx, 1); - { - setState(700); qualifiedName(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElementValuePairsContext extends ParserRuleContext { - public ElementValuePairContext elementValuePair(int i) { - return getRuleContext(ElementValuePairContext.class,i); - } - public List elementValuePair() { - return getRuleContexts(ElementValuePairContext.class); - } - public ElementValuePairsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elementValuePairs; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitElementValuePairs(this); - else return visitor.visitChildren(this); - } - } - - public final ElementValuePairsContext elementValuePairs() throws RecognitionException { - ElementValuePairsContext _localctx = new ElementValuePairsContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_elementValuePairs); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(702); elementValuePair(); - setState(707); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(703); match(COMMA); - setState(704); elementValuePair(); - } - } - setState(709); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElementValuePairContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public ElementValueContext elementValue() { - return getRuleContext(ElementValueContext.class,0); - } - public ElementValuePairContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elementValuePair; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitElementValuePair(this); - else return visitor.visitChildren(this); - } - } - - public final ElementValuePairContext elementValuePair() throws RecognitionException { - ElementValuePairContext _localctx = new ElementValuePairContext(_ctx, getState()); - enterRule(_localctx, 110, RULE_elementValuePair); - try { - enterOuterAlt(_localctx, 1); - { - setState(710); match(Identifier); - setState(711); match(ASSIGN); - setState(712); elementValue(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElementValueContext extends ParserRuleContext { - public ElementValueArrayInitializerContext elementValueArrayInitializer() { - return getRuleContext(ElementValueArrayInitializerContext.class,0); - } - public AnnotationContext annotation() { - return getRuleContext(AnnotationContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ElementValueContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elementValue; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitElementValue(this); - else return visitor.visitChildren(this); - } - } - - public final ElementValueContext elementValue() throws RecognitionException { - ElementValueContext _localctx = new ElementValueContext(_ctx, getState()); - enterRule(_localctx, 112, RULE_elementValue); - try { - setState(717); - switch (_input.LA(1)) { - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case NEW: - case SHORT: - case SUPER: - case THIS: - case VOID: - case IntegerLiteral: - case FloatingPointLiteral: - case BooleanLiteral: - case CharacterLiteral: - case StringLiteral: - case NullLiteral: - case LPAREN: - case LT: - case BANG: - case TILDE: - case INC: - case DEC: - case ADD: - case SUB: - case Identifier: - enterOuterAlt(_localctx, 1); - { - setState(714); expression(0); - } - break; - case AT: - enterOuterAlt(_localctx, 2); - { - setState(715); annotation(); - } - break; - case LBRACE: - enterOuterAlt(_localctx, 3); - { - setState(716); elementValueArrayInitializer(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElementValueArrayInitializerContext extends ParserRuleContext { - public ElementValueContext elementValue(int i) { - return getRuleContext(ElementValueContext.class,i); - } - public List elementValue() { - return getRuleContexts(ElementValueContext.class); - } - public ElementValueArrayInitializerContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elementValueArrayInitializer; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitElementValueArrayInitializer(this); - else return visitor.visitChildren(this); - } - } - - public final ElementValueArrayInitializerContext elementValueArrayInitializer() throws RecognitionException { - ElementValueArrayInitializerContext _localctx = new ElementValueArrayInitializerContext(_ctx, getState()); - enterRule(_localctx, 114, RULE_elementValueArrayInitializer); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(719); match(LBRACE); - setState(728); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN) | (1L << LBRACE))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - setState(720); elementValue(); - setState(725); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,79,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(721); match(COMMA); - setState(722); elementValue(); - } - } - } - setState(727); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,79,_ctx); - } - } - } - - setState(731); - _la = _input.LA(1); - if (_la==COMMA) { - { - setState(730); match(COMMA); - } - } - - setState(733); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationTypeDeclarationContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public AnnotationTypeBodyContext annotationTypeBody() { - return getRuleContext(AnnotationTypeBodyContext.class,0); - } - public AnnotationTypeDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationTypeDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationTypeDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationTypeDeclarationContext annotationTypeDeclaration() throws RecognitionException { - AnnotationTypeDeclarationContext _localctx = new AnnotationTypeDeclarationContext(_ctx, getState()); - enterRule(_localctx, 116, RULE_annotationTypeDeclaration); - try { - enterOuterAlt(_localctx, 1); - { - setState(735); match(AT); - setState(736); match(INTERFACE); - setState(737); match(Identifier); - setState(738); annotationTypeBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationTypeBodyContext extends ParserRuleContext { - public List annotationTypeElementDeclaration() { - return getRuleContexts(AnnotationTypeElementDeclarationContext.class); - } - public AnnotationTypeElementDeclarationContext annotationTypeElementDeclaration(int i) { - return getRuleContext(AnnotationTypeElementDeclarationContext.class,i); - } - public AnnotationTypeBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationTypeBody; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationTypeBody(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationTypeBodyContext annotationTypeBody() throws RecognitionException { - AnnotationTypeBodyContext _localctx = new AnnotationTypeBodyContext(_ctx, getState()); - enterRule(_localctx, 118, RULE_annotationTypeBody); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(740); match(LBRACE); - setState(744); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOLATILE) | (1L << SEMI))) != 0) || _la==Identifier || _la==AT) { - { - { - setState(741); annotationTypeElementDeclaration(); - } - } - setState(746); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(747); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationTypeElementDeclarationContext extends ParserRuleContext { - public List modifier() { - return getRuleContexts(ModifierContext.class); - } - public AnnotationTypeElementRestContext annotationTypeElementRest() { - return getRuleContext(AnnotationTypeElementRestContext.class,0); - } - public ModifierContext modifier(int i) { - return getRuleContext(ModifierContext.class,i); - } - public AnnotationTypeElementDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationTypeElementDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationTypeElementDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationTypeElementDeclarationContext annotationTypeElementDeclaration() throws RecognitionException { - AnnotationTypeElementDeclarationContext _localctx = new AnnotationTypeElementDeclarationContext(_ctx, getState()); - enterRule(_localctx, 120, RULE_annotationTypeElementDeclaration); - try { - int _alt; - setState(757); - switch (_input.LA(1)) { - case ABSTRACT: - case BOOLEAN: - case BYTE: - case CHAR: - case CLASS: - case DOUBLE: - case ENUM: - case FINAL: - case FLOAT: - case INT: - case INTERFACE: - case LONG: - case NATIVE: - case PRIVATE: - case PROTECTED: - case PUBLIC: - case SHORT: - case STATIC: - case STRICTFP: - case SYNCHRONIZED: - case TRANSIENT: - case VOLATILE: - case Identifier: - case AT: - enterOuterAlt(_localctx, 1); - { - setState(752); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,83,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(749); modifier(); - } - } - } - setState(754); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,83,_ctx); - } - setState(755); annotationTypeElementRest(); - } - break; - case SEMI: - enterOuterAlt(_localctx, 2); - { - setState(756); match(SEMI); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationTypeElementRestContext extends ParserRuleContext { - public EnumDeclarationContext enumDeclaration() { - return getRuleContext(EnumDeclarationContext.class,0); - } - public ClassDeclarationContext classDeclaration() { - return getRuleContext(ClassDeclarationContext.class,0); - } - public AnnotationMethodOrConstantRestContext annotationMethodOrConstantRest() { - return getRuleContext(AnnotationMethodOrConstantRestContext.class,0); - } - public AnnotationTypeDeclarationContext annotationTypeDeclaration() { - return getRuleContext(AnnotationTypeDeclarationContext.class,0); - } - public InterfaceDeclarationContext interfaceDeclaration() { - return getRuleContext(InterfaceDeclarationContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public AnnotationTypeElementRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationTypeElementRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationTypeElementRest(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationTypeElementRestContext annotationTypeElementRest() throws RecognitionException { - AnnotationTypeElementRestContext _localctx = new AnnotationTypeElementRestContext(_ctx, getState()); - enterRule(_localctx, 122, RULE_annotationTypeElementRest); - try { - setState(779); - switch (_input.LA(1)) { - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - case Identifier: - enterOuterAlt(_localctx, 1); - { - setState(759); type(); - setState(760); annotationMethodOrConstantRest(); - setState(761); match(SEMI); - } - break; - case CLASS: - enterOuterAlt(_localctx, 2); - { - setState(763); classDeclaration(); - setState(765); - switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) { - case 1: - { - setState(764); match(SEMI); - } - break; - } - } - break; - case INTERFACE: - enterOuterAlt(_localctx, 3); - { - setState(767); interfaceDeclaration(); - setState(769); - switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { - case 1: - { - setState(768); match(SEMI); - } - break; - } - } - break; - case ENUM: - enterOuterAlt(_localctx, 4); - { - setState(771); enumDeclaration(); - setState(773); - switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { - case 1: - { - setState(772); match(SEMI); - } - break; - } - } - break; - case AT: - enterOuterAlt(_localctx, 5); - { - setState(775); annotationTypeDeclaration(); - setState(777); - switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) { - case 1: - { - setState(776); match(SEMI); - } - break; - } - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationMethodOrConstantRestContext extends ParserRuleContext { - public AnnotationMethodRestContext annotationMethodRest() { - return getRuleContext(AnnotationMethodRestContext.class,0); - } - public AnnotationConstantRestContext annotationConstantRest() { - return getRuleContext(AnnotationConstantRestContext.class,0); - } - public AnnotationMethodOrConstantRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationMethodOrConstantRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationMethodOrConstantRest(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationMethodOrConstantRestContext annotationMethodOrConstantRest() throws RecognitionException { - AnnotationMethodOrConstantRestContext _localctx = new AnnotationMethodOrConstantRestContext(_ctx, getState()); - enterRule(_localctx, 124, RULE_annotationMethodOrConstantRest); - try { - setState(783); - switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(781); annotationMethodRest(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(782); annotationConstantRest(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationMethodRestContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public DefaultValueContext defaultValue() { - return getRuleContext(DefaultValueContext.class,0); - } - public AnnotationMethodRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationMethodRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationMethodRest(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationMethodRestContext annotationMethodRest() throws RecognitionException { - AnnotationMethodRestContext _localctx = new AnnotationMethodRestContext(_ctx, getState()); - enterRule(_localctx, 126, RULE_annotationMethodRest); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(785); match(Identifier); - setState(786); match(LPAREN); - setState(787); match(RPAREN); - setState(789); - _la = _input.LA(1); - if (_la==DEFAULT) { - { - setState(788); defaultValue(); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnnotationConstantRestContext extends ParserRuleContext { - public VariableDeclaratorsContext variableDeclarators() { - return getRuleContext(VariableDeclaratorsContext.class,0); - } - public AnnotationConstantRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_annotationConstantRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitAnnotationConstantRest(this); - else return visitor.visitChildren(this); - } - } - - public final AnnotationConstantRestContext annotationConstantRest() throws RecognitionException { - AnnotationConstantRestContext _localctx = new AnnotationConstantRestContext(_ctx, getState()); - enterRule(_localctx, 128, RULE_annotationConstantRest); - try { - enterOuterAlt(_localctx, 1); - { - setState(791); variableDeclarators(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DefaultValueContext extends ParserRuleContext { - public ElementValueContext elementValue() { - return getRuleContext(ElementValueContext.class,0); - } - public DefaultValueContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_defaultValue; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitDefaultValue(this); - else return visitor.visitChildren(this); - } - } - - public final DefaultValueContext defaultValue() throws RecognitionException { - DefaultValueContext _localctx = new DefaultValueContext(_ctx, getState()); - enterRule(_localctx, 130, RULE_defaultValue); - try { - enterOuterAlt(_localctx, 1); - { - setState(793); match(DEFAULT); - setState(794); elementValue(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class BlockContext extends ParserRuleContext { - public List blockStatement() { - return getRuleContexts(BlockStatementContext.class); - } - public BlockStatementContext blockStatement(int i) { - return getRuleContext(BlockStatementContext.class,i); - } - public BlockContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_block; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitBlock(this); - else return visitor.visitChildren(this); - } - } - - public final BlockContext block() throws RecognitionException { - BlockContext _localctx = new BlockContext(_ctx, getState()); - enterRule(_localctx, 132, RULE_block); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(796); match(LBRACE); - setState(800); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << ASSERT) | (1L << BOOLEAN) | (1L << BREAK) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << CONTINUE) | (1L << DO) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << FOR) | (1L << IF) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NEW) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << RETURN) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SUPER) | (1L << SWITCH) | (1L << SYNCHRONIZED) | (1L << THIS) | (1L << THROW) | (1L << TRY) | (1L << VOID) | (1L << WHILE) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN) | (1L << LBRACE) | (1L << SEMI))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - { - setState(797); blockStatement(); - } - } - setState(802); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(803); match(RBRACE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class BlockStatementContext extends ParserRuleContext { - public TypeDeclarationContext typeDeclaration() { - return getRuleContext(TypeDeclarationContext.class,0); - } - public StatementContext statement() { - return getRuleContext(StatementContext.class,0); - } - public LocalVariableDeclarationStatementContext localVariableDeclarationStatement() { - return getRuleContext(LocalVariableDeclarationStatementContext.class,0); - } - public BlockStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_blockStatement; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitBlockStatement(this); - else return visitor.visitChildren(this); - } - } - - public final BlockStatementContext blockStatement() throws RecognitionException { - BlockStatementContext _localctx = new BlockStatementContext(_ctx, getState()); - enterRule(_localctx, 134, RULE_blockStatement); - try { - setState(808); - switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(805); localVariableDeclarationStatement(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(806); statement(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(807); typeDeclaration(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class LocalVariableDeclarationStatementContext extends ParserRuleContext { - public LocalVariableDeclarationContext localVariableDeclaration() { - return getRuleContext(LocalVariableDeclarationContext.class,0); - } - public LocalVariableDeclarationStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_localVariableDeclarationStatement; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitLocalVariableDeclarationStatement(this); - else return visitor.visitChildren(this); - } - } - - public final LocalVariableDeclarationStatementContext localVariableDeclarationStatement() throws RecognitionException { - LocalVariableDeclarationStatementContext _localctx = new LocalVariableDeclarationStatementContext(_ctx, getState()); - enterRule(_localctx, 136, RULE_localVariableDeclarationStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(810); localVariableDeclaration(); - setState(811); match(SEMI); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class LocalVariableDeclarationContext extends ParserRuleContext { - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public VariableDeclaratorsContext variableDeclarators() { - return getRuleContext(VariableDeclaratorsContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public LocalVariableDeclarationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_localVariableDeclaration; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitLocalVariableDeclaration(this); - else return visitor.visitChildren(this); - } - } - - public final LocalVariableDeclarationContext localVariableDeclaration() throws RecognitionException { - LocalVariableDeclarationContext _localctx = new LocalVariableDeclarationContext(_ctx, getState()); - enterRule(_localctx, 138, RULE_localVariableDeclaration); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(816); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(813); variableModifier(); - } - } - setState(818); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(819); type(); - setState(820); variableDeclarators(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class StatementContext extends ParserRuleContext { - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public StatementExpressionContext statementExpression() { - return getRuleContext(StatementExpressionContext.class,0); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } - public List switchLabel() { - return getRuleContexts(SwitchLabelContext.class); - } - public List switchBlockStatementGroup() { - return getRuleContexts(SwitchBlockStatementGroupContext.class); - } - public ParExpressionContext parExpression() { - return getRuleContext(ParExpressionContext.class,0); - } - public List catchClause() { - return getRuleContexts(CatchClauseContext.class); - } - public CatchClauseContext catchClause(int i) { - return getRuleContext(CatchClauseContext.class,i); - } - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public FinallyBlockContext finallyBlock() { - return getRuleContext(FinallyBlockContext.class,0); - } - public SwitchBlockStatementGroupContext switchBlockStatementGroup(int i) { - return getRuleContext(SwitchBlockStatementGroupContext.class,i); - } - public ForControlContext forControl() { - return getRuleContext(ForControlContext.class,0); - } - public TerminalNode ASSERT() { return getToken(Java8Parser.ASSERT, 0); } - public ResourceSpecificationContext resourceSpecification() { - return getRuleContext(ResourceSpecificationContext.class,0); - } - public List statement() { - return getRuleContexts(StatementContext.class); - } - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public SwitchLabelContext switchLabel(int i) { - return getRuleContext(SwitchLabelContext.class,i); - } - public StatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_statement; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitStatement(this); - else return visitor.visitChildren(this); - } - } - - public final StatementContext statement() throws RecognitionException { - StatementContext _localctx = new StatementContext(_ctx, getState()); - enterRule(_localctx, 140, RULE_statement); - int _la; - try { - int _alt; - setState(926); - switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(822); block(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(823); match(ASSERT); - setState(824); expression(0); - setState(827); - _la = _input.LA(1); - if (_la==COLON) { - { - setState(825); match(COLON); - setState(826); expression(0); - } - } - - setState(829); match(SEMI); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(831); match(IF); - setState(832); parExpression(); - setState(833); statement(); - setState(836); - switch ( getInterpreter().adaptivePredict(_input,96,_ctx) ) { - case 1: - { - setState(834); match(ELSE); - setState(835); statement(); - } - break; - } - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(838); match(FOR); - setState(839); match(LPAREN); - setState(840); forControl(); - setState(841); match(RPAREN); - setState(842); statement(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(844); match(WHILE); - setState(845); parExpression(); - setState(846); statement(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(848); match(DO); - setState(849); statement(); - setState(850); match(WHILE); - setState(851); parExpression(); - setState(852); match(SEMI); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(854); match(TRY); - setState(855); block(); - setState(865); - switch (_input.LA(1)) { - case CATCH: - { - setState(857); - _errHandler.sync(this); - _la = _input.LA(1); - do { - { - { - setState(856); catchClause(); - } - } - setState(859); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( _la==CATCH ); - setState(862); - _la = _input.LA(1); - if (_la==FINALLY) { - { - setState(861); finallyBlock(); - } - } - - } - break; - case FINALLY: - { - setState(864); finallyBlock(); - } - break; - default: - throw new NoViableAltException(this); - } - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(867); match(TRY); - setState(868); resourceSpecification(); - setState(869); block(); - setState(873); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==CATCH) { - { - { - setState(870); catchClause(); - } - } - setState(875); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(877); - _la = _input.LA(1); - if (_la==FINALLY) { - { - setState(876); finallyBlock(); - } - } - - } - break; - case 9: - enterOuterAlt(_localctx, 9); - { - setState(879); match(SWITCH); - setState(880); parExpression(); - setState(881); match(LBRACE); - setState(885); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,102,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(882); switchBlockStatementGroup(); - } - } - } - setState(887); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,102,_ctx); - } - setState(891); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==CASE || _la==DEFAULT) { - { - { - setState(888); switchLabel(); - } - } - setState(893); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(894); match(RBRACE); - } - break; - case 10: - enterOuterAlt(_localctx, 10); - { - setState(896); match(SYNCHRONIZED); - setState(897); parExpression(); - setState(898); block(); - } - break; - case 11: - enterOuterAlt(_localctx, 11); - { - setState(900); match(RETURN); - setState(902); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(901); expression(0); - } - } - - setState(904); match(SEMI); - } - break; - case 12: - enterOuterAlt(_localctx, 12); - { - setState(905); match(THROW); - setState(906); expression(0); - setState(907); match(SEMI); - } - break; - case 13: - enterOuterAlt(_localctx, 13); - { - setState(909); match(BREAK); - setState(911); - _la = _input.LA(1); - if (_la==Identifier) { - { - setState(910); match(Identifier); - } - } - - setState(913); match(SEMI); - } - break; - case 14: - enterOuterAlt(_localctx, 14); - { - setState(914); match(CONTINUE); - setState(916); - _la = _input.LA(1); - if (_la==Identifier) { - { - setState(915); match(Identifier); - } - } - - setState(918); match(SEMI); - } - break; - case 15: - enterOuterAlt(_localctx, 15); - { - setState(919); match(SEMI); - } - break; - case 16: - enterOuterAlt(_localctx, 16); - { - setState(920); statementExpression(); - setState(921); match(SEMI); - } - break; - case 17: - enterOuterAlt(_localctx, 17); - { - setState(923); match(Identifier); - setState(924); match(COLON); - setState(925); statement(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CatchClauseContext extends ParserRuleContext { - public CatchTypeContext catchType() { - return getRuleContext(CatchTypeContext.class,0); - } - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public CatchClauseContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_catchClause; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitCatchClause(this); - else return visitor.visitChildren(this); - } - } - - public final CatchClauseContext catchClause() throws RecognitionException { - CatchClauseContext _localctx = new CatchClauseContext(_ctx, getState()); - enterRule(_localctx, 142, RULE_catchClause); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(928); match(CATCH); - setState(929); match(LPAREN); - setState(933); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(930); variableModifier(); - } - } - setState(935); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(936); catchType(); - setState(937); match(Identifier); - setState(938); match(RPAREN); - setState(939); block(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CatchTypeContext extends ParserRuleContext { - public List qualifiedName() { - return getRuleContexts(QualifiedNameContext.class); - } - public QualifiedNameContext qualifiedName(int i) { - return getRuleContext(QualifiedNameContext.class,i); - } - public CatchTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_catchType; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitCatchType(this); - else return visitor.visitChildren(this); - } - } - - public final CatchTypeContext catchType() throws RecognitionException { - CatchTypeContext _localctx = new CatchTypeContext(_ctx, getState()); - enterRule(_localctx, 144, RULE_catchType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(941); qualifiedName(); - setState(946); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==BITOR) { - { - { - setState(942); match(BITOR); - setState(943); qualifiedName(); - } - } - setState(948); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FinallyBlockContext extends ParserRuleContext { - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public FinallyBlockContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_finallyBlock; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitFinallyBlock(this); - else return visitor.visitChildren(this); - } - } - - public final FinallyBlockContext finallyBlock() throws RecognitionException { - FinallyBlockContext _localctx = new FinallyBlockContext(_ctx, getState()); - enterRule(_localctx, 146, RULE_finallyBlock); - try { - enterOuterAlt(_localctx, 1); - { - setState(949); match(FINALLY); - setState(950); block(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResourceSpecificationContext extends ParserRuleContext { - public ResourcesContext resources() { - return getRuleContext(ResourcesContext.class,0); - } - public ResourceSpecificationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_resourceSpecification; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitResourceSpecification(this); - else return visitor.visitChildren(this); - } - } - - public final ResourceSpecificationContext resourceSpecification() throws RecognitionException { - ResourceSpecificationContext _localctx = new ResourceSpecificationContext(_ctx, getState()); - enterRule(_localctx, 148, RULE_resourceSpecification); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(952); match(LPAREN); - setState(953); resources(); - setState(955); - _la = _input.LA(1); - if (_la==SEMI) { - { - setState(954); match(SEMI); - } - } - - setState(957); match(RPAREN); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResourcesContext extends ParserRuleContext { - public ResourceContext resource(int i) { - return getRuleContext(ResourceContext.class,i); - } - public List resource() { - return getRuleContexts(ResourceContext.class); - } - public ResourcesContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_resources; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitResources(this); - else return visitor.visitChildren(this); - } - } - - public final ResourcesContext resources() throws RecognitionException { - ResourcesContext _localctx = new ResourcesContext(_ctx, getState()); - enterRule(_localctx, 150, RULE_resources); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(959); resource(); - setState(964); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,111,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(960); match(SEMI); - setState(961); resource(); - } - } - } - setState(966); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,111,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResourceContext extends ParserRuleContext { - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public ClassOrInterfaceTypeContext classOrInterfaceType() { - return getRuleContext(ClassOrInterfaceTypeContext.class,0); - } - public VariableDeclaratorIdContext variableDeclaratorId() { - return getRuleContext(VariableDeclaratorIdContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ResourceContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_resource; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitResource(this); - else return visitor.visitChildren(this); - } - } - - public final ResourceContext resource() throws RecognitionException { - ResourceContext _localctx = new ResourceContext(_ctx, getState()); - enterRule(_localctx, 152, RULE_resource); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(970); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(967); variableModifier(); - } - } - setState(972); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(973); classOrInterfaceType(); - setState(974); variableDeclaratorId(); - setState(975); match(ASSIGN); - setState(976); expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SwitchBlockStatementGroupContext extends ParserRuleContext { - public List blockStatement() { - return getRuleContexts(BlockStatementContext.class); - } - public List switchLabel() { - return getRuleContexts(SwitchLabelContext.class); - } - public BlockStatementContext blockStatement(int i) { - return getRuleContext(BlockStatementContext.class,i); - } - public SwitchLabelContext switchLabel(int i) { - return getRuleContext(SwitchLabelContext.class,i); - } - public SwitchBlockStatementGroupContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_switchBlockStatementGroup; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitSwitchBlockStatementGroup(this); - else return visitor.visitChildren(this); - } - } - - public final SwitchBlockStatementGroupContext switchBlockStatementGroup() throws RecognitionException { - SwitchBlockStatementGroupContext _localctx = new SwitchBlockStatementGroupContext(_ctx, getState()); - enterRule(_localctx, 154, RULE_switchBlockStatementGroup); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(979); - _errHandler.sync(this); - _la = _input.LA(1); - do { - { - { - setState(978); switchLabel(); - } - } - setState(981); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( _la==CASE || _la==DEFAULT ); - setState(984); - _errHandler.sync(this); - _la = _input.LA(1); - do { - { - { - setState(983); blockStatement(); - } - } - setState(986); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << ASSERT) | (1L << BOOLEAN) | (1L << BREAK) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << CONTINUE) | (1L << DO) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << FOR) | (1L << IF) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NEW) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << RETURN) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SUPER) | (1L << SWITCH) | (1L << SYNCHRONIZED) | (1L << THIS) | (1L << THROW) | (1L << TRY) | (1L << VOID) | (1L << WHILE) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN) | (1L << LBRACE) | (1L << SEMI))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0) ); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SwitchLabelContext extends ParserRuleContext { - public ConstantExpressionContext constantExpression() { - return getRuleContext(ConstantExpressionContext.class,0); - } - public EnumConstantNameContext enumConstantName() { - return getRuleContext(EnumConstantNameContext.class,0); - } - public SwitchLabelContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_switchLabel; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitSwitchLabel(this); - else return visitor.visitChildren(this); - } - } - - public final SwitchLabelContext switchLabel() throws RecognitionException { - SwitchLabelContext _localctx = new SwitchLabelContext(_ctx, getState()); - enterRule(_localctx, 156, RULE_switchLabel); - try { - setState(998); - switch ( getInterpreter().adaptivePredict(_input,115,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(988); match(CASE); - setState(989); constantExpression(); - setState(990); match(COLON); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(992); match(CASE); - setState(993); enumConstantName(); - setState(994); match(COLON); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(996); match(DEFAULT); - setState(997); match(COLON); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ForControlContext extends ParserRuleContext { - public ForUpdateContext forUpdate() { - return getRuleContext(ForUpdateContext.class,0); - } - public ForInitContext forInit() { - return getRuleContext(ForInitContext.class,0); - } - public EnhancedForControlContext enhancedForControl() { - return getRuleContext(EnhancedForControlContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ForControlContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_forControl; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitForControl(this); - else return visitor.visitChildren(this); - } - } - - public final ForControlContext forControl() throws RecognitionException { - ForControlContext _localctx = new ForControlContext(_ctx, getState()); - enterRule(_localctx, 158, RULE_forControl); - int _la; - try { - setState(1012); - switch ( getInterpreter().adaptivePredict(_input,119,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1000); enhancedForControl(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1002); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)) | (1L << (AT - 68)))) != 0)) { - { - setState(1001); forInit(); - } - } - - setState(1004); match(SEMI); - setState(1006); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(1005); expression(0); - } - } - - setState(1008); match(SEMI); - setState(1010); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(1009); forUpdate(); - } - } - - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ForInitContext extends ParserRuleContext { - public LocalVariableDeclarationContext localVariableDeclaration() { - return getRuleContext(LocalVariableDeclarationContext.class,0); - } - public ExpressionListContext expressionList() { - return getRuleContext(ExpressionListContext.class,0); - } - public ForInitContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_forInit; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitForInit(this); - else return visitor.visitChildren(this); - } - } - - public final ForInitContext forInit() throws RecognitionException { - ForInitContext _localctx = new ForInitContext(_ctx, getState()); - enterRule(_localctx, 160, RULE_forInit); - try { - setState(1016); - switch ( getInterpreter().adaptivePredict(_input,120,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1014); localVariableDeclaration(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1015); expressionList(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EnhancedForControlContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public VariableModifierContext variableModifier(int i) { - return getRuleContext(VariableModifierContext.class,i); - } - public List variableModifier() { - return getRuleContexts(VariableModifierContext.class); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public EnhancedForControlContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_enhancedForControl; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitEnhancedForControl(this); - else return visitor.visitChildren(this); - } - } - - public final EnhancedForControlContext enhancedForControl() throws RecognitionException { - EnhancedForControlContext _localctx = new EnhancedForControlContext(_ctx, getState()); - enterRule(_localctx, 162, RULE_enhancedForControl); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(1021); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==FINAL || _la==AT) { - { - { - setState(1018); variableModifier(); - } - } - setState(1023); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1024); type(); - setState(1025); match(Identifier); - setState(1026); match(COLON); - setState(1027); expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ForUpdateContext extends ParserRuleContext { - public ExpressionListContext expressionList() { - return getRuleContext(ExpressionListContext.class,0); - } - public ForUpdateContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_forUpdate; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitForUpdate(this); - else return visitor.visitChildren(this); - } - } - - public final ForUpdateContext forUpdate() throws RecognitionException { - ForUpdateContext _localctx = new ForUpdateContext(_ctx, getState()); - enterRule(_localctx, 164, RULE_forUpdate); - try { - enterOuterAlt(_localctx, 1); - { - setState(1029); expressionList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ParExpressionContext extends ParserRuleContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ParExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_parExpression; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitParExpression(this); - else return visitor.visitChildren(this); - } - } - - public final ParExpressionContext parExpression() throws RecognitionException { - ParExpressionContext _localctx = new ParExpressionContext(_ctx, getState()); - enterRule(_localctx, 166, RULE_parExpression); - try { - enterOuterAlt(_localctx, 1); - { - setState(1031); match(LPAREN); - setState(1032); expression(0); - setState(1033); match(RPAREN); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ExpressionListContext extends ParserRuleContext { - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_expressionList; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitExpressionList(this); - else return visitor.visitChildren(this); - } - } - - public final ExpressionListContext expressionList() throws RecognitionException { - ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState()); - enterRule(_localctx, 168, RULE_expressionList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(1035); expression(0); - setState(1040); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(1036); match(COMMA); - setState(1037); expression(0); - } - } - setState(1042); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class StatementExpressionContext extends ParserRuleContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public StatementExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_statementExpression; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitStatementExpression(this); - else return visitor.visitChildren(this); - } - } - - public final StatementExpressionContext statementExpression() throws RecognitionException { - StatementExpressionContext _localctx = new StatementExpressionContext(_ctx, getState()); - enterRule(_localctx, 170, RULE_statementExpression); - try { - enterOuterAlt(_localctx, 1); - { - setState(1043); expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ConstantExpressionContext extends ParserRuleContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ConstantExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constantExpression; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitConstantExpression(this); - else return visitor.visitChildren(this); - } - } - - public final ConstantExpressionContext constantExpression() throws RecognitionException { - ConstantExpressionContext _localctx = new ConstantExpressionContext(_ctx, getState()); - enterRule(_localctx, 172, RULE_constantExpression); - try { - enterOuterAlt(_localctx, 1); - { - setState(1045); expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ExpressionContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() { - return getRuleContext(NonWildcardTypeArgumentsContext.class,0); - } - public ExplicitGenericInvocationContext explicitGenericInvocation() { - return getRuleContext(ExplicitGenericInvocationContext.class,0); - } - public ExpressionListContext expressionList() { - return getRuleContext(ExpressionListContext.class,0); - } - public InnerCreatorContext innerCreator() { - return getRuleContext(InnerCreatorContext.class,0); - } - public SuperSuffixContext superSuffix() { - return getRuleContext(SuperSuffixContext.class,0); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public PrimaryContext primary() { - return getRuleContext(PrimaryContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public CreatorContext creator() { - return getRuleContext(CreatorContext.class,0); - } - public ExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_expression; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitExpression(this); - else return visitor.visitChildren(this); - } - } - - public final ExpressionContext expression() throws RecognitionException { - return expression(0); - } - - private ExpressionContext expression(int _p) throws RecognitionException { - ParserRuleContext _parentctx = _ctx; - int _parentState = getState(); - ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); - ExpressionContext _prevctx = _localctx; - int _startState = 174; - enterRecursionRule(_localctx, 174, RULE_expression, _p); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(1060); - switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) { - case 1: - { - setState(1048); match(LPAREN); - setState(1049); type(); - setState(1050); match(RPAREN); - setState(1051); expression(17); - } - break; - case 2: - { - setState(1053); - _la = _input.LA(1); - if ( !(((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (INC - 79)) | (1L << (DEC - 79)) | (1L << (ADD - 79)) | (1L << (SUB - 79)))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1054); expression(15); - } - break; - case 3: - { - setState(1055); - _la = _input.LA(1); - if ( !(_la==BANG || _la==TILDE) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1056); expression(14); - } - break; - case 4: - { - setState(1057); primary(); - } - break; - case 5: - { - setState(1058); match(NEW); - setState(1059); creator(); - } - break; - } - _ctx.stop = _input.LT(-1); - setState(1147); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,128,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - if ( _parseListeners!=null ) triggerExitRuleEvent(); - _prevctx = _localctx; - { - setState(1145); - switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { - case 1: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1062); - if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(1063); - _la = _input.LA(1); - if ( !(((((_la - 83)) & ~0x3f) == 0 && ((1L << (_la - 83)) & ((1L << (MUL - 83)) | (1L << (DIV - 83)) | (1L << (MOD - 83)))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1064); expression(14); - } - break; - case 2: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1065); - if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(1066); - _la = _input.LA(1); - if ( !(_la==ADD || _la==SUB) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1067); expression(13); - } - break; - case 3: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1068); - if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(1076); - switch ( getInterpreter().adaptivePredict(_input,124,_ctx) ) { - case 1: - { - setState(1069); match(LT); - setState(1070); match(LT); - } - break; - case 2: - { - setState(1071); match(GT); - setState(1072); match(GT); - setState(1073); match(GT); - } - break; - case 3: - { - setState(1074); match(GT); - setState(1075); match(GT); - } - break; - } - setState(1078); expression(12); - } - break; - case 4: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1079); - if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(1080); - _la = _input.LA(1); - if ( !(((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (GT - 67)) | (1L << (LT - 67)) | (1L << (LE - 67)) | (1L << (GE - 67)))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1081); expression(11); - } - break; - case 5: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1082); - if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(1083); - _la = _input.LA(1); - if ( !(_la==EQUAL || _la==NOTEQUAL) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1084); expression(9); - } - break; - case 6: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1085); - if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(1086); match(BITAND); - setState(1087); expression(8); - } - break; - case 7: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1088); - if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(1089); match(CARET); - setState(1090); expression(7); - } - break; - case 8: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1091); - if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(1092); match(BITOR); - setState(1093); expression(6); - } - break; - case 9: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1094); - if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(1095); match(AND); - setState(1096); expression(5); - } - break; - case 10: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1097); - if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(1098); match(OR); - setState(1099); expression(4); - } - break; - case 11: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1100); - if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(1101); match(QUESTION); - setState(1102); expression(0); - setState(1103); match(COLON); - setState(1104); expression(3); - } - break; - case 12: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1106); - if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(1107); - _la = _input.LA(1); - if ( !(((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (ASSIGN - 66)) | (1L << (ADD_ASSIGN - 66)) | (1L << (SUB_ASSIGN - 66)) | (1L << (MUL_ASSIGN - 66)) | (1L << (DIV_ASSIGN - 66)) | (1L << (AND_ASSIGN - 66)) | (1L << (OR_ASSIGN - 66)) | (1L << (XOR_ASSIGN - 66)) | (1L << (MOD_ASSIGN - 66)) | (1L << (LSHIFT_ASSIGN - 66)) | (1L << (RSHIFT_ASSIGN - 66)) | (1L << (URSHIFT_ASSIGN - 66)))) != 0)) ) { - _errHandler.recoverInline(this); - } - consume(); - setState(1108); expression(2); - } - break; - case 13: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1109); - if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(1110); match(DOT); - setState(1111); match(Identifier); - } - break; - case 14: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1112); - if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)"); - setState(1113); match(DOT); - setState(1114); match(THIS); - } - break; - case 15: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1115); - if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)"); - setState(1116); match(DOT); - setState(1117); match(NEW); - setState(1119); - _la = _input.LA(1); - if (_la==LT) { - { - setState(1118); nonWildcardTypeArguments(); - } - } - - setState(1121); innerCreator(); - } - break; - case 16: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1122); - if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(1123); match(DOT); - setState(1124); match(SUPER); - setState(1125); superSuffix(); - } - break; - case 17: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1126); - if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(1127); match(DOT); - setState(1128); explicitGenericInvocation(); - } - break; - case 18: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1129); - if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(1130); match(LBRACK); - setState(1131); expression(0); - setState(1132); match(RBRACK); - } - break; - case 19: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1134); - if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(1135); match(LPAREN); - setState(1137); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(1136); expressionList(); - } - } - - setState(1139); match(RPAREN); - } - break; - case 20: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1140); - if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(1141); - _la = _input.LA(1); - if ( !(_la==INC || _la==DEC) ) { - _errHandler.recoverInline(this); - } - consume(); - } - break; - case 21: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(1142); - if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(1143); match(INSTANCEOF); - setState(1144); type(); - } - break; - } - } - } - setState(1149); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,128,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - unrollRecursionContexts(_parentctx); - } - return _localctx; - } - - public static class PrimaryContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() { - return getRuleContext(NonWildcardTypeArgumentsContext.class,0); - } - public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() { - return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0); - } - public LiteralContext literal() { - return getRuleContext(LiteralContext.class,0); - } - public TypeContext type() { - return getRuleContext(TypeContext.class,0); - } - public ArgumentsContext arguments() { - return getRuleContext(ArgumentsContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public PrimaryContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_primary; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitPrimary(this); - else return visitor.visitChildren(this); - } - } - - public final PrimaryContext primary() throws RecognitionException { - PrimaryContext _localctx = new PrimaryContext(_ctx, getState()); - enterRule(_localctx, 176, RULE_primary); - try { - setState(1171); - switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1150); match(LPAREN); - setState(1151); expression(0); - setState(1152); match(RPAREN); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1154); match(THIS); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(1155); match(SUPER); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(1156); literal(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(1157); match(Identifier); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(1158); type(); - setState(1159); match(DOT); - setState(1160); match(CLASS); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(1162); match(VOID); - setState(1163); match(DOT); - setState(1164); match(CLASS); - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(1165); nonWildcardTypeArguments(); - setState(1169); - switch (_input.LA(1)) { - case SUPER: - case Identifier: - { - setState(1166); explicitGenericInvocationSuffix(); - } - break; - case THIS: - { - setState(1167); match(THIS); - setState(1168); arguments(); - } - break; - default: - throw new NoViableAltException(this); - } - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreatorContext extends ParserRuleContext { - public ArrayCreatorRestContext arrayCreatorRest() { - return getRuleContext(ArrayCreatorRestContext.class,0); - } - public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() { - return getRuleContext(NonWildcardTypeArgumentsContext.class,0); - } - public ClassCreatorRestContext classCreatorRest() { - return getRuleContext(ClassCreatorRestContext.class,0); - } - public CreatedNameContext createdName() { - return getRuleContext(CreatedNameContext.class,0); - } - public CreatorContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_creator; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitCreator(this); - else return visitor.visitChildren(this); - } - } - - public final CreatorContext creator() throws RecognitionException { - CreatorContext _localctx = new CreatorContext(_ctx, getState()); - enterRule(_localctx, 178, RULE_creator); - try { - setState(1182); - switch (_input.LA(1)) { - case LT: - enterOuterAlt(_localctx, 1); - { - setState(1173); nonWildcardTypeArguments(); - setState(1174); createdName(); - setState(1175); classCreatorRest(); - } - break; - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - case Identifier: - enterOuterAlt(_localctx, 2); - { - setState(1177); createdName(); - setState(1180); - switch (_input.LA(1)) { - case LBRACK: - { - setState(1178); arrayCreatorRest(); - } - break; - case LPAREN: - { - setState(1179); classCreatorRest(); - } - break; - default: - throw new NoViableAltException(this); - } - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreatedNameContext extends ParserRuleContext { - public List Identifier() { return getTokens(Java8Parser.Identifier); } - public TerminalNode Identifier(int i) { - return getToken(Java8Parser.Identifier, i); - } - public List typeArgumentsOrDiamond() { - return getRuleContexts(TypeArgumentsOrDiamondContext.class); - } - public PrimitiveTypeContext primitiveType() { - return getRuleContext(PrimitiveTypeContext.class,0); - } - public TypeArgumentsOrDiamondContext typeArgumentsOrDiamond(int i) { - return getRuleContext(TypeArgumentsOrDiamondContext.class,i); - } - public CreatedNameContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createdName; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitCreatedName(this); - else return visitor.visitChildren(this); - } - } - - public final CreatedNameContext createdName() throws RecognitionException { - CreatedNameContext _localctx = new CreatedNameContext(_ctx, getState()); - enterRule(_localctx, 180, RULE_createdName); - int _la; - try { - setState(1199); - switch (_input.LA(1)) { - case Identifier: - enterOuterAlt(_localctx, 1); - { - setState(1184); match(Identifier); - setState(1186); - _la = _input.LA(1); - if (_la==LT) { - { - setState(1185); typeArgumentsOrDiamond(); - } - } - - setState(1195); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==DOT) { - { - { - setState(1188); match(DOT); - setState(1189); match(Identifier); - setState(1191); - _la = _input.LA(1); - if (_la==LT) { - { - setState(1190); typeArgumentsOrDiamond(); - } - } - - } - } - setState(1197); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - break; - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case SHORT: - enterOuterAlt(_localctx, 2); - { - setState(1198); primitiveType(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class InnerCreatorContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public ClassCreatorRestContext classCreatorRest() { - return getRuleContext(ClassCreatorRestContext.class,0); - } - public NonWildcardTypeArgumentsOrDiamondContext nonWildcardTypeArgumentsOrDiamond() { - return getRuleContext(NonWildcardTypeArgumentsOrDiamondContext.class,0); - } - public InnerCreatorContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_innerCreator; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitInnerCreator(this); - else return visitor.visitChildren(this); - } - } - - public final InnerCreatorContext innerCreator() throws RecognitionException { - InnerCreatorContext _localctx = new InnerCreatorContext(_ctx, getState()); - enterRule(_localctx, 182, RULE_innerCreator); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(1201); match(Identifier); - setState(1203); - _la = _input.LA(1); - if (_la==LT) { - { - setState(1202); nonWildcardTypeArgumentsOrDiamond(); - } - } - - setState(1205); classCreatorRest(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ArrayCreatorRestContext extends ParserRuleContext { - public ArrayInitializerContext arrayInitializer() { - return getRuleContext(ArrayInitializerContext.class,0); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ArrayCreatorRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_arrayCreatorRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitArrayCreatorRest(this); - else return visitor.visitChildren(this); - } - } - - public final ArrayCreatorRestContext arrayCreatorRest() throws RecognitionException { - ArrayCreatorRestContext _localctx = new ArrayCreatorRestContext(_ctx, getState()); - enterRule(_localctx, 184, RULE_arrayCreatorRest); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(1207); match(LBRACK); - setState(1235); - switch (_input.LA(1)) { - case RBRACK: - { - setState(1208); match(RBRACK); - setState(1213); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LBRACK) { - { - { - setState(1209); match(LBRACK); - setState(1210); match(RBRACK); - } - } - setState(1215); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1216); arrayInitializer(); - } - break; - case BOOLEAN: - case BYTE: - case CHAR: - case DOUBLE: - case FLOAT: - case INT: - case LONG: - case NEW: - case SHORT: - case SUPER: - case THIS: - case VOID: - case IntegerLiteral: - case FloatingPointLiteral: - case BooleanLiteral: - case CharacterLiteral: - case StringLiteral: - case NullLiteral: - case LPAREN: - case LT: - case BANG: - case TILDE: - case INC: - case DEC: - case ADD: - case SUB: - case Identifier: - { - setState(1217); expression(0); - setState(1218); match(RBRACK); - setState(1225); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,139,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(1219); match(LBRACK); - setState(1220); expression(0); - setState(1221); match(RBRACK); - } - } - } - setState(1227); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,139,_ctx); - } - setState(1232); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,140,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(1228); match(LBRACK); - setState(1229); match(RBRACK); - } - } - } - setState(1234); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,140,_ctx); - } - } - break; - default: - throw new NoViableAltException(this); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ClassCreatorRestContext extends ParserRuleContext { - public ClassBodyContext classBody() { - return getRuleContext(ClassBodyContext.class,0); - } - public ArgumentsContext arguments() { - return getRuleContext(ArgumentsContext.class,0); - } - public ClassCreatorRestContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_classCreatorRest; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitClassCreatorRest(this); - else return visitor.visitChildren(this); - } - } - - public final ClassCreatorRestContext classCreatorRest() throws RecognitionException { - ClassCreatorRestContext _localctx = new ClassCreatorRestContext(_ctx, getState()); - enterRule(_localctx, 186, RULE_classCreatorRest); - try { - enterOuterAlt(_localctx, 1); - { - setState(1237); arguments(); - setState(1239); - switch ( getInterpreter().adaptivePredict(_input,142,_ctx) ) { - case 1: - { - setState(1238); classBody(); - } - break; - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ExplicitGenericInvocationContext extends ParserRuleContext { - public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() { - return getRuleContext(NonWildcardTypeArgumentsContext.class,0); - } - public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() { - return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0); - } - public ExplicitGenericInvocationContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_explicitGenericInvocation; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitExplicitGenericInvocation(this); - else return visitor.visitChildren(this); - } - } - - public final ExplicitGenericInvocationContext explicitGenericInvocation() throws RecognitionException { - ExplicitGenericInvocationContext _localctx = new ExplicitGenericInvocationContext(_ctx, getState()); - enterRule(_localctx, 188, RULE_explicitGenericInvocation); - try { - enterOuterAlt(_localctx, 1); - { - setState(1241); nonWildcardTypeArguments(); - setState(1242); explicitGenericInvocationSuffix(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class NonWildcardTypeArgumentsContext extends ParserRuleContext { - public TypeListContext typeList() { - return getRuleContext(TypeListContext.class,0); - } - public NonWildcardTypeArgumentsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_nonWildcardTypeArguments; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitNonWildcardTypeArguments(this); - else return visitor.visitChildren(this); - } - } - - public final NonWildcardTypeArgumentsContext nonWildcardTypeArguments() throws RecognitionException { - NonWildcardTypeArgumentsContext _localctx = new NonWildcardTypeArgumentsContext(_ctx, getState()); - enterRule(_localctx, 190, RULE_nonWildcardTypeArguments); - try { - enterOuterAlt(_localctx, 1); - { - setState(1244); match(LT); - setState(1245); typeList(); - setState(1246); match(GT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class TypeArgumentsOrDiamondContext extends ParserRuleContext { - public TypeArgumentsContext typeArguments() { - return getRuleContext(TypeArgumentsContext.class,0); - } - public TypeArgumentsOrDiamondContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeArgumentsOrDiamond; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitTypeArgumentsOrDiamond(this); - else return visitor.visitChildren(this); - } - } - - public final TypeArgumentsOrDiamondContext typeArgumentsOrDiamond() throws RecognitionException { - TypeArgumentsOrDiamondContext _localctx = new TypeArgumentsOrDiamondContext(_ctx, getState()); - enterRule(_localctx, 192, RULE_typeArgumentsOrDiamond); - try { - setState(1251); - switch ( getInterpreter().adaptivePredict(_input,143,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1248); match(LT); - setState(1249); match(GT); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1250); typeArguments(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class NonWildcardTypeArgumentsOrDiamondContext extends ParserRuleContext { - public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() { - return getRuleContext(NonWildcardTypeArgumentsContext.class,0); - } - public NonWildcardTypeArgumentsOrDiamondContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_nonWildcardTypeArgumentsOrDiamond; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitNonWildcardTypeArgumentsOrDiamond(this); - else return visitor.visitChildren(this); - } - } - - public final NonWildcardTypeArgumentsOrDiamondContext nonWildcardTypeArgumentsOrDiamond() throws RecognitionException { - NonWildcardTypeArgumentsOrDiamondContext _localctx = new NonWildcardTypeArgumentsOrDiamondContext(_ctx, getState()); - enterRule(_localctx, 194, RULE_nonWildcardTypeArgumentsOrDiamond); - try { - setState(1256); - switch ( getInterpreter().adaptivePredict(_input,144,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1253); match(LT); - setState(1254); match(GT); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1255); nonWildcardTypeArguments(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SuperSuffixContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public ArgumentsContext arguments() { - return getRuleContext(ArgumentsContext.class,0); - } - public SuperSuffixContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_superSuffix; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitSuperSuffix(this); - else return visitor.visitChildren(this); - } - } - - public final SuperSuffixContext superSuffix() throws RecognitionException { - SuperSuffixContext _localctx = new SuperSuffixContext(_ctx, getState()); - enterRule(_localctx, 196, RULE_superSuffix); - try { - setState(1264); - switch (_input.LA(1)) { - case LPAREN: - enterOuterAlt(_localctx, 1); - { - setState(1258); arguments(); - } - break; - case DOT: - enterOuterAlt(_localctx, 2); - { - setState(1259); match(DOT); - setState(1260); match(Identifier); - setState(1262); - switch ( getInterpreter().adaptivePredict(_input,145,_ctx) ) { - case 1: - { - setState(1261); arguments(); - } - break; - } - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ExplicitGenericInvocationSuffixContext extends ParserRuleContext { - public TerminalNode Identifier() { return getToken(Java8Parser.Identifier, 0); } - public SuperSuffixContext superSuffix() { - return getRuleContext(SuperSuffixContext.class,0); - } - public ArgumentsContext arguments() { - return getRuleContext(ArgumentsContext.class,0); - } - public ExplicitGenericInvocationSuffixContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_explicitGenericInvocationSuffix; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitExplicitGenericInvocationSuffix(this); - else return visitor.visitChildren(this); - } - } - - public final ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() throws RecognitionException { - ExplicitGenericInvocationSuffixContext _localctx = new ExplicitGenericInvocationSuffixContext(_ctx, getState()); - enterRule(_localctx, 198, RULE_explicitGenericInvocationSuffix); - try { - setState(1270); - switch (_input.LA(1)) { - case SUPER: - enterOuterAlt(_localctx, 1); - { - setState(1266); match(SUPER); - setState(1267); superSuffix(); - } - break; - case Identifier: - enterOuterAlt(_localctx, 2); - { - setState(1268); match(Identifier); - setState(1269); arguments(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ArgumentsContext extends ParserRuleContext { - public ExpressionListContext expressionList() { - return getRuleContext(ExpressionListContext.class,0); - } - public ArgumentsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_arguments; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Java8Visitor ) return ((Java8Visitor)visitor).visitArguments(this); - else return visitor.visitChildren(this); - } - } - - public final ArgumentsContext arguments() throws RecognitionException { - ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState()); - enterRule(_localctx, 200, RULE_arguments); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(1272); match(LPAREN); - setState(1274); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << StringLiteral) | (1L << NullLiteral) | (1L << LPAREN))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (LT - 68)) | (1L << (BANG - 68)) | (1L << (TILDE - 68)) | (1L << (INC - 68)) | (1L << (DEC - 68)) | (1L << (ADD - 68)) | (1L << (SUB - 68)) | (1L << (Identifier - 68)))) != 0)) { - { - setState(1273); expressionList(); - } - } - - setState(1276); match(RPAREN); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { - switch (ruleIndex) { - case 87: return expression_sempred((ExpressionContext)_localctx, predIndex); - } - return true; - } - private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { - switch (predIndex) { - case 0: return precpred(_ctx, 13); - case 1: return precpred(_ctx, 12); - case 2: return precpred(_ctx, 11); - case 3: return precpred(_ctx, 10); - case 4: return precpred(_ctx, 8); - case 5: return precpred(_ctx, 7); - case 6: return precpred(_ctx, 6); - case 7: return precpred(_ctx, 5); - case 8: return precpred(_ctx, 4); - case 9: return precpred(_ctx, 3); - case 10: return precpred(_ctx, 2); - case 11: return precpred(_ctx, 1); - case 12: return precpred(_ctx, 25); - case 13: return precpred(_ctx, 24); - case 14: return precpred(_ctx, 23); - case 15: return precpred(_ctx, 22); - case 16: return precpred(_ctx, 21); - case 17: return precpred(_ctx, 20); - case 18: return precpred(_ctx, 19); - case 19: return precpred(_ctx, 16); - case 20: return precpred(_ctx, 9); - } - return true; - } - - public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3k\u0501\4\2\t\2\4"+ - "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ - "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ - "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ - "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ - "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ - "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ - "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\3\2\5\2\u00ce\n\2\3\2\7\2\u00d1"+ - "\n\2\f\2\16\2\u00d4\13\2\3\2\7\2\u00d7\n\2\f\2\16\2\u00da\13\2\3\2\3\2"+ - "\3\3\7\3\u00df\n\3\f\3\16\3\u00e2\13\3\3\3\3\3\3\3\3\3\3\4\3\4\5\4\u00ea"+ - "\n\4\3\4\3\4\3\4\5\4\u00ef\n\4\3\4\3\4\3\5\7\5\u00f4\n\5\f\5\16\5\u00f7"+ - "\13\5\3\5\3\5\7\5\u00fb\n\5\f\5\16\5\u00fe\13\5\3\5\3\5\7\5\u0102\n\5"+ - "\f\5\16\5\u0105\13\5\3\5\3\5\7\5\u0109\n\5\f\5\16\5\u010c\13\5\3\5\3\5"+ - "\5\5\u0110\n\5\3\6\3\6\5\6\u0114\n\6\3\7\3\7\5\7\u0118\n\7\3\b\3\b\5\b"+ - "\u011c\n\b\3\t\3\t\3\t\5\t\u0121\n\t\3\t\3\t\5\t\u0125\n\t\3\t\3\t\5\t"+ - "\u0129\n\t\3\t\3\t\3\n\3\n\3\n\3\n\7\n\u0131\n\n\f\n\16\n\u0134\13\n\3"+ - "\n\3\n\3\13\3\13\3\13\5\13\u013b\n\13\3\f\3\f\3\f\7\f\u0140\n\f\f\f\16"+ - "\f\u0143\13\f\3\r\3\r\3\r\3\r\5\r\u0149\n\r\3\r\3\r\5\r\u014d\n\r\3\r"+ - "\5\r\u0150\n\r\3\r\5\r\u0153\n\r\3\r\3\r\3\16\3\16\3\16\7\16\u015a\n\16"+ - "\f\16\16\16\u015d\13\16\3\17\7\17\u0160\n\17\f\17\16\17\u0163\13\17\3"+ - "\17\3\17\5\17\u0167\n\17\3\17\5\17\u016a\n\17\3\20\3\20\7\20\u016e\n\20"+ - "\f\20\16\20\u0171\13\20\3\21\3\21\3\21\5\21\u0176\n\21\3\21\3\21\5\21"+ - "\u017a\n\21\3\21\3\21\3\22\3\22\3\22\7\22\u0181\n\22\f\22\16\22\u0184"+ - "\13\22\3\23\3\23\7\23\u0188\n\23\f\23\16\23\u018b\13\23\3\23\3\23\3\24"+ - "\3\24\7\24\u0191\n\24\f\24\16\24\u0194\13\24\3\24\3\24\3\25\3\25\5\25"+ - "\u019a\n\25\3\25\3\25\7\25\u019e\n\25\f\25\16\25\u01a1\13\25\3\25\5\25"+ - "\u01a4\n\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u01af\n"+ - "\26\3\27\3\27\5\27\u01b3\n\27\3\27\3\27\3\27\3\27\7\27\u01b9\n\27\f\27"+ - "\16\27\u01bc\13\27\3\27\3\27\5\27\u01c0\n\27\3\27\3\27\5\27\u01c4\n\27"+ - "\3\30\3\30\3\30\3\31\3\31\3\31\3\31\5\31\u01cd\n\31\3\31\3\31\3\32\3\32"+ - "\3\32\3\33\3\33\3\33\3\33\3\34\7\34\u01d9\n\34\f\34\16\34\u01dc\13\34"+ - "\3\34\3\34\5\34\u01e0\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u01e9"+ - "\n\35\3\36\3\36\3\36\3\36\7\36\u01ef\n\36\f\36\16\36\u01f2\13\36\3\36"+ - "\3\36\3\37\3\37\3\37\7\37\u01f9\n\37\f\37\16\37\u01fc\13\37\3\37\3\37"+ - "\3\37\3 \3 \5 \u0203\n \3 \3 \3 \3 \7 \u0209\n \f \16 \u020c\13 \3 \3"+ - " \5 \u0210\n \3 \3 \3!\3!\3!\3\"\3\"\3\"\7\"\u021a\n\"\f\"\16\"\u021d"+ - "\13\"\3#\3#\3#\5#\u0222\n#\3$\3$\3$\7$\u0227\n$\f$\16$\u022a\13$\3%\3"+ - "%\5%\u022e\n%\3&\3&\3&\3&\7&\u0234\n&\f&\16&\u0237\13&\3&\5&\u023a\n&"+ - "\5&\u023c\n&\3&\3&\3\'\3\'\3(\3(\3(\7(\u0245\n(\f(\16(\u0248\13(\3(\3"+ - "(\3(\7(\u024d\n(\f(\16(\u0250\13(\5(\u0252\n(\3)\3)\5)\u0256\n)\3)\3)"+ - "\3)\5)\u025b\n)\7)\u025d\n)\f)\16)\u0260\13)\3*\3*\3+\3+\3+\3+\7+\u0268"+ - "\n+\f+\16+\u026b\13+\3+\3+\3,\3,\3,\3,\5,\u0273\n,\5,\u0275\n,\3-\3-\3"+ - "-\7-\u027a\n-\f-\16-\u027d\13-\3.\3.\5.\u0281\n.\3.\3.\3/\3/\3/\7/\u0288"+ - "\n/\f/\16/\u028b\13/\3/\3/\5/\u028f\n/\3/\5/\u0292\n/\3\60\7\60\u0295"+ - "\n\60\f\60\16\60\u0298\13\60\3\60\3\60\3\60\3\61\7\61\u029e\n\61\f\61"+ - "\16\61\u02a1\13\61\3\61\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3"+ - "\64\7\64\u02ae\n\64\f\64\16\64\u02b1\13\64\3\65\3\65\3\66\3\66\3\66\3"+ - "\66\3\66\5\66\u02ba\n\66\3\66\5\66\u02bd\n\66\3\67\3\67\38\38\38\78\u02c4"+ - "\n8\f8\168\u02c7\138\39\39\39\39\3:\3:\3:\5:\u02d0\n:\3;\3;\3;\3;\7;\u02d6"+ - "\n;\f;\16;\u02d9\13;\5;\u02db\n;\3;\5;\u02de\n;\3;\3;\3<\3<\3<\3<\3<\3"+ - "=\3=\7=\u02e9\n=\f=\16=\u02ec\13=\3=\3=\3>\7>\u02f1\n>\f>\16>\u02f4\13"+ - ">\3>\3>\5>\u02f8\n>\3?\3?\3?\3?\3?\3?\5?\u0300\n?\3?\3?\5?\u0304\n?\3"+ - "?\3?\5?\u0308\n?\3?\3?\5?\u030c\n?\5?\u030e\n?\3@\3@\5@\u0312\n@\3A\3"+ - "A\3A\3A\5A\u0318\nA\3B\3B\3C\3C\3C\3D\3D\7D\u0321\nD\fD\16D\u0324\13D"+ - "\3D\3D\3E\3E\3E\5E\u032b\nE\3F\3F\3F\3G\7G\u0331\nG\fG\16G\u0334\13G\3"+ - "G\3G\3G\3H\3H\3H\3H\3H\5H\u033e\nH\3H\3H\3H\3H\3H\3H\3H\5H\u0347\nH\3"+ - "H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\6H\u035c\nH\r"+ - "H\16H\u035d\3H\5H\u0361\nH\3H\5H\u0364\nH\3H\3H\3H\3H\7H\u036a\nH\fH\16"+ - "H\u036d\13H\3H\5H\u0370\nH\3H\3H\3H\3H\7H\u0376\nH\fH\16H\u0379\13H\3"+ - "H\7H\u037c\nH\fH\16H\u037f\13H\3H\3H\3H\3H\3H\3H\3H\3H\5H\u0389\nH\3H"+ - "\3H\3H\3H\3H\3H\3H\5H\u0392\nH\3H\3H\3H\5H\u0397\nH\3H\3H\3H\3H\3H\3H"+ - "\3H\3H\5H\u03a1\nH\3I\3I\3I\7I\u03a6\nI\fI\16I\u03a9\13I\3I\3I\3I\3I\3"+ - "I\3J\3J\3J\7J\u03b3\nJ\fJ\16J\u03b6\13J\3K\3K\3K\3L\3L\3L\5L\u03be\nL"+ - "\3L\3L\3M\3M\3M\7M\u03c5\nM\fM\16M\u03c8\13M\3N\7N\u03cb\nN\fN\16N\u03ce"+ - "\13N\3N\3N\3N\3N\3N\3O\6O\u03d6\nO\rO\16O\u03d7\3O\6O\u03db\nO\rO\16O"+ - "\u03dc\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\5P\u03e9\nP\3Q\3Q\5Q\u03ed\nQ\3Q"+ - "\3Q\5Q\u03f1\nQ\3Q\3Q\5Q\u03f5\nQ\5Q\u03f7\nQ\3R\3R\5R\u03fb\nR\3S\7S"+ - "\u03fe\nS\fS\16S\u0401\13S\3S\3S\3S\3S\3S\3T\3T\3U\3U\3U\3U\3V\3V\3V\7"+ - "V\u0411\nV\fV\16V\u0414\13V\3W\3W\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y"+ - "\3Y\3Y\3Y\5Y\u0427\nY\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0437"+ - "\nY\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y"+ - "\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0462\nY"+ - "\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0474\nY\3Y\3Y\3Y"+ - "\3Y\3Y\3Y\7Y\u047c\nY\fY\16Y\u047f\13Y\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3"+ - "Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u0494\nZ\5Z\u0496\nZ\3[\3[\3[\3[\3[\3[\3"+ - "[\5[\u049f\n[\5[\u04a1\n[\3\\\3\\\5\\\u04a5\n\\\3\\\3\\\3\\\5\\\u04aa"+ - "\n\\\7\\\u04ac\n\\\f\\\16\\\u04af\13\\\3\\\5\\\u04b2\n\\\3]\3]\5]\u04b6"+ - "\n]\3]\3]\3^\3^\3^\3^\7^\u04be\n^\f^\16^\u04c1\13^\3^\3^\3^\3^\3^\3^\3"+ - "^\7^\u04ca\n^\f^\16^\u04cd\13^\3^\3^\7^\u04d1\n^\f^\16^\u04d4\13^\5^\u04d6"+ - "\n^\3_\3_\5_\u04da\n_\3`\3`\3`\3a\3a\3a\3a\3b\3b\3b\5b\u04e6\nb\3c\3c"+ - "\3c\5c\u04eb\nc\3d\3d\3d\3d\5d\u04f1\nd\5d\u04f3\nd\3e\3e\3e\3e\5e\u04f9"+ - "\ne\3f\3f\5f\u04fd\nf\3f\3f\3f\2\3\u00b0g\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080"+ - "\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098"+ - "\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0"+ - "\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8"+ - "\u00ca\2\17\6\2 ,,\60\60\63\63\6\2\3\3\24\24#%()\n\2\5\5\7\7\n\n\20\20"+ - "\26\26\35\35\37\37\'\'\4\2\23\23**\3\2\65:\3\2QT\3\2GH\4\2UVZZ\3\2ST\4"+ - "\2EFLM\4\2KKNN\4\2DD[e\3\2QR\u0573\2\u00cd\3\2\2\2\4\u00e0\3\2\2\2\6\u00e7"+ - "\3\2\2\2\b\u010f\3\2\2\2\n\u0113\3\2\2\2\f\u0117\3\2\2\2\16\u011b\3\2"+ - "\2\2\20\u011d\3\2\2\2\22\u012c\3\2\2\2\24\u0137\3\2\2\2\26\u013c\3\2\2"+ - "\2\30\u0144\3\2\2\2\32\u0156\3\2\2\2\34\u0161\3\2\2\2\36\u016b\3\2\2\2"+ - " \u0172\3\2\2\2\"\u017d\3\2\2\2$\u0185\3\2\2\2&\u018e\3\2\2\2(\u01a3\3"+ - "\2\2\2*\u01ae\3\2\2\2,\u01b2\3\2\2\2.\u01c5\3\2\2\2\60\u01c8\3\2\2\2\62"+ - "\u01d0\3\2\2\2\64\u01d3\3\2\2\2\66\u01df\3\2\2\28\u01e8\3\2\2\2:\u01ea"+ - "\3\2\2\2<\u01f5\3\2\2\2>\u0202\3\2\2\2@\u0213\3\2\2\2B\u0216\3\2\2\2D"+ - "\u021e\3\2\2\2F\u0223\3\2\2\2H\u022d\3\2\2\2J\u022f\3\2\2\2L\u023f\3\2"+ - "\2\2N\u0251\3\2\2\2P\u0253\3\2\2\2R\u0261\3\2\2\2T\u0263\3\2\2\2V\u0274"+ - "\3\2\2\2X\u0276\3\2\2\2Z\u027e\3\2\2\2\\\u0291\3\2\2\2^\u0296\3\2\2\2"+ - "`\u029f\3\2\2\2b\u02a6\3\2\2\2d\u02a8\3\2\2\2f\u02aa\3\2\2\2h\u02b2\3"+ - "\2\2\2j\u02b4\3\2\2\2l\u02be\3\2\2\2n\u02c0\3\2\2\2p\u02c8\3\2\2\2r\u02cf"+ - "\3\2\2\2t\u02d1\3\2\2\2v\u02e1\3\2\2\2x\u02e6\3\2\2\2z\u02f7\3\2\2\2|"+ - "\u030d\3\2\2\2~\u0311\3\2\2\2\u0080\u0313\3\2\2\2\u0082\u0319\3\2\2\2"+ - "\u0084\u031b\3\2\2\2\u0086\u031e\3\2\2\2\u0088\u032a\3\2\2\2\u008a\u032c"+ - "\3\2\2\2\u008c\u0332\3\2\2\2\u008e\u03a0\3\2\2\2\u0090\u03a2\3\2\2\2\u0092"+ - "\u03af\3\2\2\2\u0094\u03b7\3\2\2\2\u0096\u03ba\3\2\2\2\u0098\u03c1\3\2"+ - "\2\2\u009a\u03cc\3\2\2\2\u009c\u03d5\3\2\2\2\u009e\u03e8\3\2\2\2\u00a0"+ - "\u03f6\3\2\2\2\u00a2\u03fa\3\2\2\2\u00a4\u03ff\3\2\2\2\u00a6\u0407\3\2"+ - "\2\2\u00a8\u0409\3\2\2\2\u00aa\u040d\3\2\2\2\u00ac\u0415\3\2\2\2\u00ae"+ - "\u0417\3\2\2\2\u00b0\u0426\3\2\2\2\u00b2\u0495\3\2\2\2\u00b4\u04a0\3\2"+ - "\2\2\u00b6\u04b1\3\2\2\2\u00b8\u04b3\3\2\2\2\u00ba\u04b9\3\2\2\2\u00bc"+ - "\u04d7\3\2\2\2\u00be\u04db\3\2\2\2\u00c0\u04de\3\2\2\2\u00c2\u04e5\3\2"+ - "\2\2\u00c4\u04ea\3\2\2\2\u00c6\u04f2\3\2\2\2\u00c8\u04f8\3\2\2\2\u00ca"+ - "\u04fa\3\2\2\2\u00cc\u00ce\5\4\3\2\u00cd\u00cc\3\2\2\2\u00cd\u00ce\3\2"+ - "\2\2\u00ce\u00d2\3\2\2\2\u00cf\u00d1\5\6\4\2\u00d0\u00cf\3\2\2\2\u00d1"+ - "\u00d4\3\2\2\2\u00d2\u00d0\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d8\3\2"+ - "\2\2\u00d4\u00d2\3\2\2\2\u00d5\u00d7\5\b\5\2\u00d6\u00d5\3\2\2\2\u00d7"+ - "\u00da\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00db\3\2"+ - "\2\2\u00da\u00d8\3\2\2\2\u00db\u00dc\7\2\2\3\u00dc\3\3\2\2\2\u00dd\u00df"+ - "\5j\66\2\u00de\u00dd\3\2\2\2\u00df\u00e2\3\2\2\2\u00e0\u00de\3\2\2\2\u00e0"+ - "\u00e1\3\2\2\2\u00e1\u00e3\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e3\u00e4\7\""+ - "\2\2\u00e4\u00e5\5f\64\2\u00e5\u00e6\7A\2\2\u00e6\5\3\2\2\2\u00e7\u00e9"+ - "\7\33\2\2\u00e8\u00ea\7(\2\2\u00e9\u00e8\3\2\2\2\u00e9\u00ea\3\2\2\2\u00ea"+ - "\u00eb\3\2\2\2\u00eb\u00ee\5f\64\2\u00ec\u00ed\7C\2\2\u00ed\u00ef\7U\2"+ - "\2\u00ee\u00ec\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1"+ - "\7A\2\2\u00f1\7\3\2\2\2\u00f2\u00f4\5\f\7\2\u00f3\u00f2\3\2\2\2\u00f4"+ - "\u00f7\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2"+ - "\2\2\u00f7\u00f5\3\2\2\2\u00f8\u0110\5\20\t\2\u00f9\u00fb\5\f\7\2\u00fa"+ - "\u00f9\3\2\2\2\u00fb\u00fe\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2"+ - "\2\2\u00fd\u00ff\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0110\5\30\r\2\u0100"+ - "\u0102\5\f\7\2\u0101\u0100\3\2\2\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2"+ - "\2\2\u0103\u0104\3\2\2\2\u0104\u0106\3\2\2\2\u0105\u0103\3\2\2\2\u0106"+ - "\u0110\5 \21\2\u0107\u0109\5\f\7\2\u0108\u0107\3\2\2\2\u0109\u010c\3\2"+ - "\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u010d\3\2\2\2\u010c"+ - "\u010a\3\2\2\2\u010d\u0110\5v<\2\u010e\u0110\7A\2\2\u010f\u00f5\3\2\2"+ - "\2\u010f\u00fc\3\2\2\2\u010f\u0103\3\2\2\2\u010f\u010a\3\2\2\2\u010f\u010e"+ - "\3\2\2\2\u0110\t\3\2\2\2\u0111\u0114\5\f\7\2\u0112\u0114\t\2\2\2\u0113"+ - "\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114\13\3\2\2\2\u0115\u0118\5j\66"+ - "\2\u0116\u0118\t\3\2\2\u0117\u0115\3\2\2\2\u0117\u0116\3\2\2\2\u0118\r"+ - "\3\2\2\2\u0119\u011c\7\24\2\2\u011a\u011c\5j\66\2\u011b\u0119\3\2\2\2"+ - "\u011b\u011a\3\2\2\2\u011c\17\3\2\2\2\u011d\u011e\7\13\2\2\u011e\u0120"+ - "\7f\2\2\u011f\u0121\5\22\n\2\u0120\u011f\3\2\2\2\u0120\u0121\3\2\2\2\u0121"+ - "\u0124\3\2\2\2\u0122\u0123\7\23\2\2\u0123\u0125\5N(\2\u0124\u0122\3\2"+ - "\2\2\u0124\u0125\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0127\7\32\2\2\u0127"+ - "\u0129\5\"\22\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012a\3"+ - "\2\2\2\u012a\u012b\5$\23\2\u012b\21\3\2\2\2\u012c\u012d\7F\2\2\u012d\u0132"+ - "\5\24\13\2\u012e\u012f\7B\2\2\u012f\u0131\5\24\13\2\u0130\u012e\3\2\2"+ - "\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133\3\2\2\2\u0133\u0135"+ - "\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0136\7E\2\2\u0136\23\3\2\2\2\u0137"+ - "\u013a\7f\2\2\u0138\u0139\7\23\2\2\u0139\u013b\5\26\f\2\u013a\u0138\3"+ - "\2\2\2\u013a\u013b\3\2\2\2\u013b\25\3\2\2\2\u013c\u0141\5N(\2\u013d\u013e"+ - "\7W\2\2\u013e\u0140\5N(\2\u013f\u013d\3\2\2\2\u0140\u0143\3\2\2\2\u0141"+ - "\u013f\3\2\2\2\u0141\u0142\3\2\2\2\u0142\27\3\2\2\2\u0143\u0141\3\2\2"+ - "\2\u0144\u0145\7\22\2\2\u0145\u0148\7f\2\2\u0146\u0147\7\32\2\2\u0147"+ - "\u0149\5\"\22\2\u0148\u0146\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3"+ - "\2\2\2\u014a\u014c\7=\2\2\u014b\u014d\5\32\16\2\u014c\u014b\3\2\2\2\u014c"+ - "\u014d\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u0150\7B\2\2\u014f\u014e\3\2"+ - "\2\2\u014f\u0150\3\2\2\2\u0150\u0152\3\2\2\2\u0151\u0153\5\36\20\2\u0152"+ - "\u0151\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0155\7>"+ - "\2\2\u0155\31\3\2\2\2\u0156\u015b\5\34\17\2\u0157\u0158\7B\2\2\u0158\u015a"+ - "\5\34\17\2\u0159\u0157\3\2\2\2\u015a\u015d\3\2\2\2\u015b\u0159\3\2\2\2"+ - "\u015b\u015c\3\2\2\2\u015c\33\3\2\2\2\u015d\u015b\3\2\2\2\u015e\u0160"+ - "\5j\66\2\u015f\u015e\3\2\2\2\u0160\u0163\3\2\2\2\u0161\u015f\3\2\2\2\u0161"+ - "\u0162\3\2\2\2\u0162\u0164\3\2\2\2\u0163\u0161\3\2\2\2\u0164\u0166\7f"+ - "\2\2\u0165\u0167\5\u00caf\2\u0166\u0165\3\2\2\2\u0166\u0167\3\2\2\2\u0167"+ - "\u0169\3\2\2\2\u0168\u016a\5$\23\2\u0169\u0168\3\2\2\2\u0169\u016a\3\2"+ - "\2\2\u016a\35\3\2\2\2\u016b\u016f\7A\2\2\u016c\u016e\5(\25\2\u016d\u016c"+ - "\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170"+ - "\37\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0173\7\36\2\2\u0173\u0175\7f\2"+ - "\2\u0174\u0176\5\22\n\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176"+ - "\u0179\3\2\2\2\u0177\u0178\7\23\2\2\u0178\u017a\5\"\22\2\u0179\u0177\3"+ - "\2\2\2\u0179\u017a\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u017c\5&\24\2\u017c"+ - "!\3\2\2\2\u017d\u0182\5N(\2\u017e\u017f\7B\2\2\u017f\u0181\5N(\2\u0180"+ - "\u017e\3\2\2\2\u0181\u0184\3\2\2\2\u0182\u0180\3\2\2\2\u0182\u0183\3\2"+ - "\2\2\u0183#\3\2\2\2\u0184\u0182\3\2\2\2\u0185\u0189\7=\2\2\u0186\u0188"+ - "\5(\25\2\u0187\u0186\3\2\2\2\u0188\u018b\3\2\2\2\u0189\u0187\3\2\2\2\u0189"+ - "\u018a\3\2\2\2\u018a\u018c\3\2\2\2\u018b\u0189\3\2\2\2\u018c\u018d\7>"+ - "\2\2\u018d%\3\2\2\2\u018e\u0192\7=\2\2\u018f\u0191\5\66\34\2\u0190\u018f"+ - "\3\2\2\2\u0191\u0194\3\2\2\2\u0192\u0190\3\2\2\2\u0192\u0193\3\2\2\2\u0193"+ - "\u0195\3\2\2\2\u0194\u0192\3\2\2\2\u0195\u0196\7>\2\2\u0196\'\3\2\2\2"+ - "\u0197\u01a4\7A\2\2\u0198\u019a\7(\2\2\u0199\u0198\3\2\2\2\u0199\u019a"+ - "\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u01a4\5\u0086D\2\u019c\u019e\5\n\6"+ - "\2\u019d\u019c\3\2\2\2\u019e\u01a1\3\2\2\2\u019f\u019d\3\2\2\2\u019f\u01a0"+ - "\3\2\2\2\u01a0\u01a2\3\2\2\2\u01a1\u019f\3\2\2\2\u01a2\u01a4\5*\26\2\u01a3"+ - "\u0197\3\2\2\2\u01a3\u0199\3\2\2\2\u01a3\u019f\3\2\2\2\u01a4)\3\2\2\2"+ - "\u01a5\u01af\5,\27\2\u01a6\u01af\5.\30\2\u01a7\u01af\5\64\33\2\u01a8\u01af"+ - "\5\60\31\2\u01a9\u01af\5\62\32\2\u01aa\u01af\5 \21\2\u01ab\u01af\5v<\2"+ - "\u01ac\u01af\5\20\t\2\u01ad\u01af\5\30\r\2\u01ae\u01a5\3\2\2\2\u01ae\u01a6"+ - "\3\2\2\2\u01ae\u01a7\3\2\2\2\u01ae\u01a8\3\2\2\2\u01ae\u01a9\3\2\2\2\u01ae"+ - "\u01aa\3\2\2\2\u01ae\u01ab\3\2\2\2\u01ae\u01ac\3\2\2\2\u01ae\u01ad\3\2"+ - "\2\2\u01af+\3\2\2\2\u01b0\u01b3\5N(\2\u01b1\u01b3\7\62\2\2\u01b2\u01b0"+ - "\3\2\2\2\u01b2\u01b1\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4\u01b5\7f\2\2\u01b5"+ - "\u01ba\5Z.\2\u01b6\u01b7\7?\2\2\u01b7\u01b9\7@\2\2\u01b8\u01b6\3\2\2\2"+ - "\u01b9\u01bc\3\2\2\2\u01ba\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01bf"+ - "\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bd\u01be\7/\2\2\u01be\u01c0\5X-\2\u01bf"+ - "\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0\u01c3\3\2\2\2\u01c1\u01c4\5b"+ - "\62\2\u01c2\u01c4\7A\2\2\u01c3\u01c1\3\2\2\2\u01c3\u01c2\3\2\2\2\u01c4"+ - "-\3\2\2\2\u01c5\u01c6\5\22\n\2\u01c6\u01c7\5,\27\2\u01c7/\3\2\2\2\u01c8"+ - "\u01c9\7f\2\2\u01c9\u01cc\5Z.\2\u01ca\u01cb\7/\2\2\u01cb\u01cd\5X-\2\u01cc"+ - "\u01ca\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01cf\5d"+ - "\63\2\u01cf\61\3\2\2\2\u01d0\u01d1\5\22\n\2\u01d1\u01d2\5\60\31\2\u01d2"+ - "\63\3\2\2\2\u01d3\u01d4\5N(\2\u01d4\u01d5\5B\"\2\u01d5\u01d6\7A\2\2\u01d6"+ - "\65\3\2\2\2\u01d7\u01d9\5\n\6\2\u01d8\u01d7\3\2\2\2\u01d9\u01dc\3\2\2"+ - "\2\u01da\u01d8\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01dd\3\2\2\2\u01dc\u01da"+ - "\3\2\2\2\u01dd\u01e0\58\35\2\u01de\u01e0\7A\2\2\u01df\u01da\3\2\2\2\u01df"+ - "\u01de\3\2\2\2\u01e0\67\3\2\2\2\u01e1\u01e9\5:\36\2\u01e2\u01e9\5> \2"+ - "\u01e3\u01e9\5@!\2\u01e4\u01e9\5 \21\2\u01e5\u01e9\5v<\2\u01e6\u01e9\5"+ - "\20\t\2\u01e7\u01e9\5\30\r\2\u01e8\u01e1\3\2\2\2\u01e8\u01e2\3\2\2\2\u01e8"+ - "\u01e3\3\2\2\2\u01e8\u01e4\3\2\2\2\u01e8\u01e5\3\2\2\2\u01e8\u01e6\3\2"+ - "\2\2\u01e8\u01e7\3\2\2\2\u01e99\3\2\2\2\u01ea\u01eb\5N(\2\u01eb\u01f0"+ - "\5<\37\2\u01ec\u01ed\7B\2\2\u01ed\u01ef\5<\37\2\u01ee\u01ec\3\2\2\2\u01ef"+ - "\u01f2\3\2\2\2\u01f0\u01ee\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f3\3\2"+ - "\2\2\u01f2\u01f0\3\2\2\2\u01f3\u01f4\7A\2\2\u01f4;\3\2\2\2\u01f5\u01fa"+ - "\7f\2\2\u01f6\u01f7\7?\2\2\u01f7\u01f9\7@\2\2\u01f8\u01f6\3\2\2\2\u01f9"+ - "\u01fc\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fd\3\2"+ - "\2\2\u01fc\u01fa\3\2\2\2\u01fd\u01fe\7D\2\2\u01fe\u01ff\5H%\2\u01ff=\3"+ - "\2\2\2\u0200\u0203\5N(\2\u0201\u0203\7\62\2\2\u0202\u0200\3\2\2\2\u0202"+ - "\u0201\3\2\2\2\u0203\u0204\3\2\2\2\u0204\u0205\7f\2\2\u0205\u020a\5Z."+ - "\2\u0206\u0207\7?\2\2\u0207\u0209\7@\2\2\u0208\u0206\3\2\2\2\u0209\u020c"+ - "\3\2\2\2\u020a\u0208\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020f\3\2\2\2\u020c"+ - "\u020a\3\2\2\2\u020d\u020e\7/\2\2\u020e\u0210\5X-\2\u020f\u020d\3\2\2"+ - "\2\u020f\u0210\3\2\2\2\u0210\u0211\3\2\2\2\u0211\u0212\7A\2\2\u0212?\3"+ - "\2\2\2\u0213\u0214\5\22\n\2\u0214\u0215\5> \2\u0215A\3\2\2\2\u0216\u021b"+ - "\5D#\2\u0217\u0218\7B\2\2\u0218\u021a\5D#\2\u0219\u0217\3\2\2\2\u021a"+ - "\u021d\3\2\2\2\u021b\u0219\3\2\2\2\u021b\u021c\3\2\2\2\u021cC\3\2\2\2"+ - "\u021d\u021b\3\2\2\2\u021e\u0221\5F$\2\u021f\u0220\7D\2\2\u0220\u0222"+ - "\5H%\2\u0221\u021f\3\2\2\2\u0221\u0222\3\2\2\2\u0222E\3\2\2\2\u0223\u0228"+ - "\7f\2\2\u0224\u0225\7?\2\2\u0225\u0227\7@\2\2\u0226\u0224\3\2\2\2\u0227"+ - "\u022a\3\2\2\2\u0228\u0226\3\2\2\2\u0228\u0229\3\2\2\2\u0229G\3\2\2\2"+ - "\u022a\u0228\3\2\2\2\u022b\u022e\5J&\2\u022c\u022e\5\u00b0Y\2\u022d\u022b"+ - "\3\2\2\2\u022d\u022c\3\2\2\2\u022eI\3\2\2\2\u022f\u023b\7=\2\2\u0230\u0235"+ - "\5H%\2\u0231\u0232\7B\2\2\u0232\u0234\5H%\2\u0233\u0231\3\2\2\2\u0234"+ - "\u0237\3\2\2\2\u0235\u0233\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0239\3\2"+ - "\2\2\u0237\u0235\3\2\2\2\u0238\u023a\7B\2\2\u0239\u0238\3\2\2\2\u0239"+ - "\u023a\3\2\2\2\u023a\u023c\3\2\2\2\u023b\u0230\3\2\2\2\u023b\u023c\3\2"+ - "\2\2\u023c\u023d\3\2\2\2\u023d\u023e\7>\2\2\u023eK\3\2\2\2\u023f\u0240"+ - "\7f\2\2\u0240M\3\2\2\2\u0241\u0246\5P)\2\u0242\u0243\7?\2\2\u0243\u0245"+ - "\7@\2\2\u0244\u0242\3\2\2\2\u0245\u0248\3\2\2\2\u0246\u0244\3\2\2\2\u0246"+ - "\u0247\3\2\2\2\u0247\u0252\3\2\2\2\u0248\u0246\3\2\2\2\u0249\u024e\5R"+ - "*\2\u024a\u024b\7?\2\2\u024b\u024d\7@\2\2\u024c\u024a\3\2\2\2\u024d\u0250"+ - "\3\2\2\2\u024e\u024c\3\2\2\2\u024e\u024f\3\2\2\2\u024f\u0252\3\2\2\2\u0250"+ - "\u024e\3\2\2\2\u0251\u0241\3\2\2\2\u0251\u0249\3\2\2\2\u0252O\3\2\2\2"+ - "\u0253\u0255\7f\2\2\u0254\u0256\5T+\2\u0255\u0254\3\2\2\2\u0255\u0256"+ - "\3\2\2\2\u0256\u025e\3\2\2\2\u0257\u0258\7C\2\2\u0258\u025a\7f\2\2\u0259"+ - "\u025b\5T+\2\u025a\u0259\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u025d\3\2\2"+ - "\2\u025c\u0257\3\2\2\2\u025d\u0260\3\2\2\2\u025e\u025c\3\2\2\2\u025e\u025f"+ - "\3\2\2\2\u025fQ\3\2\2\2\u0260\u025e\3\2\2\2\u0261\u0262\t\4\2\2\u0262"+ - "S\3\2\2\2\u0263\u0264\7F\2\2\u0264\u0269\5V,\2\u0265\u0266\7B\2\2\u0266"+ - "\u0268\5V,\2\u0267\u0265\3\2\2\2\u0268\u026b\3\2\2\2\u0269\u0267\3\2\2"+ - "\2\u0269\u026a\3\2\2\2\u026a\u026c\3\2\2\2\u026b\u0269\3\2\2\2\u026c\u026d"+ - "\7E\2\2\u026dU\3\2\2\2\u026e\u0275\5N(\2\u026f\u0272\7I\2\2\u0270\u0271"+ - "\t\5\2\2\u0271\u0273\5N(\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2\2\2\u0273"+ - "\u0275\3\2\2\2\u0274\u026e\3\2\2\2\u0274\u026f\3\2\2\2\u0275W\3\2\2\2"+ - "\u0276\u027b\5f\64\2\u0277\u0278\7B\2\2\u0278\u027a\5f\64\2\u0279\u0277"+ - "\3\2\2\2\u027a\u027d\3\2\2\2\u027b\u0279\3\2\2\2\u027b\u027c\3\2\2\2\u027c"+ - "Y\3\2\2\2\u027d\u027b\3\2\2\2\u027e\u0280\7;\2\2\u027f\u0281\5\\/\2\u0280"+ - "\u027f\3\2\2\2\u0280\u0281\3\2\2\2\u0281\u0282\3\2\2\2\u0282\u0283\7<"+ - "\2\2\u0283[\3\2\2\2\u0284\u0289\5^\60\2\u0285\u0286\7B\2\2\u0286\u0288"+ - "\5^\60\2\u0287\u0285\3\2\2\2\u0288\u028b\3\2\2\2\u0289\u0287\3\2\2\2\u0289"+ - "\u028a\3\2\2\2\u028a\u028e\3\2\2\2\u028b\u0289\3\2\2\2\u028c\u028d\7B"+ - "\2\2\u028d\u028f\5`\61\2\u028e\u028c\3\2\2\2\u028e\u028f\3\2\2\2\u028f"+ - "\u0292\3\2\2\2\u0290\u0292\5`\61\2\u0291\u0284\3\2\2\2\u0291\u0290\3\2"+ - "\2\2\u0292]\3\2\2\2\u0293\u0295\5\16\b\2\u0294\u0293\3\2\2\2\u0295\u0298"+ - "\3\2\2\2\u0296\u0294\3\2\2\2\u0296\u0297\3\2\2\2\u0297\u0299\3\2\2\2\u0298"+ - "\u0296\3\2\2\2\u0299\u029a\5N(\2\u029a\u029b\5F$\2\u029b_\3\2\2\2\u029c"+ - "\u029e\5\16\b\2\u029d\u029c\3\2\2\2\u029e\u02a1\3\2\2\2\u029f\u029d\3"+ - "\2\2\2\u029f\u02a0\3\2\2\2\u02a0\u02a2\3\2\2\2\u02a1\u029f\3\2\2\2\u02a2"+ - "\u02a3\5N(\2\u02a3\u02a4\7h\2\2\u02a4\u02a5\5F$\2\u02a5a\3\2\2\2\u02a6"+ - "\u02a7\5\u0086D\2\u02a7c\3\2\2\2\u02a8\u02a9\5\u0086D\2\u02a9e\3\2\2\2"+ - "\u02aa\u02af\7f\2\2\u02ab\u02ac\7C\2\2\u02ac\u02ae\7f\2\2\u02ad\u02ab"+ - "\3\2\2\2\u02ae\u02b1\3\2\2\2\u02af\u02ad\3\2\2\2\u02af\u02b0\3\2\2\2\u02b0"+ - "g\3\2\2\2\u02b1\u02af\3\2\2\2\u02b2\u02b3\t\6\2\2\u02b3i\3\2\2\2\u02b4"+ - "\u02b5\7g\2\2\u02b5\u02bc\5l\67\2\u02b6\u02b9\7;\2\2\u02b7\u02ba\5n8\2"+ - "\u02b8\u02ba\5r:\2\u02b9\u02b7\3\2\2\2\u02b9\u02b8\3\2\2\2\u02b9\u02ba"+ - "\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02bd\7<\2\2\u02bc\u02b6\3\2\2\2\u02bc"+ - "\u02bd\3\2\2\2\u02bdk\3\2\2\2\u02be\u02bf\5f\64\2\u02bfm\3\2\2\2\u02c0"+ - "\u02c5\5p9\2\u02c1\u02c2\7B\2\2\u02c2\u02c4\5p9\2\u02c3\u02c1\3\2\2\2"+ - "\u02c4\u02c7\3\2\2\2\u02c5\u02c3\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6o\3"+ - "\2\2\2\u02c7\u02c5\3\2\2\2\u02c8\u02c9\7f\2\2\u02c9\u02ca\7D\2\2\u02ca"+ - "\u02cb\5r:\2\u02cbq\3\2\2\2\u02cc\u02d0\5\u00b0Y\2\u02cd\u02d0\5j\66\2"+ - "\u02ce\u02d0\5t;\2\u02cf\u02cc\3\2\2\2\u02cf\u02cd\3\2\2\2\u02cf\u02ce"+ - "\3\2\2\2\u02d0s\3\2\2\2\u02d1\u02da\7=\2\2\u02d2\u02d7\5r:\2\u02d3\u02d4"+ - "\7B\2\2\u02d4\u02d6\5r:\2\u02d5\u02d3\3\2\2\2\u02d6\u02d9\3\2\2\2\u02d7"+ - "\u02d5\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8\u02db\3\2\2\2\u02d9\u02d7\3\2"+ - "\2\2\u02da\u02d2\3\2\2\2\u02da\u02db\3\2\2\2\u02db\u02dd\3\2\2\2\u02dc"+ - "\u02de\7B\2\2\u02dd\u02dc\3\2\2\2\u02dd\u02de\3\2\2\2\u02de\u02df\3\2"+ - "\2\2\u02df\u02e0\7>\2\2\u02e0u\3\2\2\2\u02e1\u02e2\7g\2\2\u02e2\u02e3"+ - "\7\36\2\2\u02e3\u02e4\7f\2\2\u02e4\u02e5\5x=\2\u02e5w\3\2\2\2\u02e6\u02ea"+ - "\7=\2\2\u02e7\u02e9\5z>\2\u02e8\u02e7\3\2\2\2\u02e9\u02ec\3\2\2\2\u02ea"+ - "\u02e8\3\2\2\2\u02ea\u02eb\3\2\2\2\u02eb\u02ed\3\2\2\2\u02ec\u02ea\3\2"+ - "\2\2\u02ed\u02ee\7>\2\2\u02eey\3\2\2\2\u02ef\u02f1\5\n\6\2\u02f0\u02ef"+ - "\3\2\2\2\u02f1\u02f4\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f2\u02f3\3\2\2\2\u02f3"+ - "\u02f5\3\2\2\2\u02f4\u02f2\3\2\2\2\u02f5\u02f8\5|?\2\u02f6\u02f8\7A\2"+ - "\2\u02f7\u02f2\3\2\2\2\u02f7\u02f6\3\2\2\2\u02f8{\3\2\2\2\u02f9\u02fa"+ - "\5N(\2\u02fa\u02fb\5~@\2\u02fb\u02fc\7A\2\2\u02fc\u030e\3\2\2\2\u02fd"+ - "\u02ff\5\20\t\2\u02fe\u0300\7A\2\2\u02ff\u02fe\3\2\2\2\u02ff\u0300\3\2"+ - "\2\2\u0300\u030e\3\2\2\2\u0301\u0303\5 \21\2\u0302\u0304\7A\2\2\u0303"+ - "\u0302\3\2\2\2\u0303\u0304\3\2\2\2\u0304\u030e\3\2\2\2\u0305\u0307\5\30"+ - "\r\2\u0306\u0308\7A\2\2\u0307\u0306\3\2\2\2\u0307\u0308\3\2\2\2\u0308"+ - "\u030e\3\2\2\2\u0309\u030b\5v<\2\u030a\u030c\7A\2\2\u030b\u030a\3\2\2"+ - "\2\u030b\u030c\3\2\2\2\u030c\u030e\3\2\2\2\u030d\u02f9\3\2\2\2\u030d\u02fd"+ - "\3\2\2\2\u030d\u0301\3\2\2\2\u030d\u0305\3\2\2\2\u030d\u0309\3\2\2\2\u030e"+ - "}\3\2\2\2\u030f\u0312\5\u0080A\2\u0310\u0312\5\u0082B\2\u0311\u030f\3"+ - "\2\2\2\u0311\u0310\3\2\2\2\u0312\177\3\2\2\2\u0313\u0314\7f\2\2\u0314"+ - "\u0315\7;\2\2\u0315\u0317\7<\2\2\u0316\u0318\5\u0084C\2\u0317\u0316\3"+ - "\2\2\2\u0317\u0318\3\2\2\2\u0318\u0081\3\2\2\2\u0319\u031a\5B\"\2\u031a"+ - "\u0083\3\2\2\2\u031b\u031c\7\16\2\2\u031c\u031d\5r:\2\u031d\u0085\3\2"+ - "\2\2\u031e\u0322\7=\2\2\u031f\u0321\5\u0088E\2\u0320\u031f\3\2\2\2\u0321"+ - "\u0324\3\2\2\2\u0322\u0320\3\2\2\2\u0322\u0323\3\2\2\2\u0323\u0325\3\2"+ - "\2\2\u0324\u0322\3\2\2\2\u0325\u0326\7>\2\2\u0326\u0087\3\2\2\2\u0327"+ - "\u032b\5\u008aF\2\u0328\u032b\5\u008eH\2\u0329\u032b\5\b\5\2\u032a\u0327"+ - "\3\2\2\2\u032a\u0328\3\2\2\2\u032a\u0329\3\2\2\2\u032b\u0089\3\2\2\2\u032c"+ - "\u032d\5\u008cG\2\u032d\u032e\7A\2\2\u032e\u008b\3\2\2\2\u032f\u0331\5"+ - "\16\b\2\u0330\u032f\3\2\2\2\u0331\u0334\3\2\2\2\u0332\u0330\3\2\2\2\u0332"+ - "\u0333\3\2\2\2\u0333\u0335\3\2\2\2\u0334\u0332\3\2\2\2\u0335\u0336\5N"+ - "(\2\u0336\u0337\5B\"\2\u0337\u008d\3\2\2\2\u0338\u03a1\5\u0086D\2\u0339"+ - "\u033a\7\4\2\2\u033a\u033d\5\u00b0Y\2\u033b\u033c\7J\2\2\u033c\u033e\5"+ - "\u00b0Y\2\u033d\u033b\3\2\2\2\u033d\u033e\3\2\2\2\u033e\u033f\3\2\2\2"+ - "\u033f\u0340\7A\2\2\u0340\u03a1\3\2\2\2\u0341\u0342\7\30\2\2\u0342\u0343"+ - "\5\u00a8U\2\u0343\u0346\5\u008eH\2\u0344\u0345\7\21\2\2\u0345\u0347\5"+ - "\u008eH\2\u0346\u0344\3\2\2\2\u0346\u0347\3\2\2\2\u0347\u03a1\3\2\2\2"+ - "\u0348\u0349\7\27\2\2\u0349\u034a\7;\2\2\u034a\u034b\5\u00a0Q\2\u034b"+ - "\u034c\7<\2\2\u034c\u034d\5\u008eH\2\u034d\u03a1\3\2\2\2\u034e\u034f\7"+ - "\64\2\2\u034f\u0350\5\u00a8U\2\u0350\u0351\5\u008eH\2\u0351\u03a1\3\2"+ - "\2\2\u0352\u0353\7\17\2\2\u0353\u0354\5\u008eH\2\u0354\u0355\7\64\2\2"+ - "\u0355\u0356\5\u00a8U\2\u0356\u0357\7A\2\2\u0357\u03a1\3\2\2\2\u0358\u0359"+ - "\7\61\2\2\u0359\u0363\5\u0086D\2\u035a\u035c\5\u0090I\2\u035b\u035a\3"+ - "\2\2\2\u035c\u035d\3\2\2\2\u035d\u035b\3\2\2\2\u035d\u035e\3\2\2\2\u035e"+ - "\u0360\3\2\2\2\u035f\u0361\5\u0094K\2\u0360\u035f\3\2\2\2\u0360\u0361"+ - "\3\2\2\2\u0361\u0364\3\2\2\2\u0362\u0364\5\u0094K\2\u0363\u035b\3\2\2"+ - "\2\u0363\u0362\3\2\2\2\u0364\u03a1\3\2\2\2\u0365\u0366\7\61\2\2\u0366"+ - "\u0367\5\u0096L\2\u0367\u036b\5\u0086D\2\u0368\u036a\5\u0090I\2\u0369"+ - "\u0368\3\2\2\2\u036a\u036d\3\2\2\2\u036b\u0369\3\2\2\2\u036b\u036c\3\2"+ - "\2\2\u036c\u036f\3\2\2\2\u036d\u036b\3\2\2\2\u036e\u0370\5\u0094K\2\u036f"+ - "\u036e\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u03a1\3\2\2\2\u0371\u0372\7+"+ - "\2\2\u0372\u0373\5\u00a8U\2\u0373\u0377\7=\2\2\u0374\u0376\5\u009cO\2"+ - "\u0375\u0374\3\2\2\2\u0376\u0379\3\2\2\2\u0377\u0375\3\2\2\2\u0377\u0378"+ - "\3\2\2\2\u0378\u037d\3\2\2\2\u0379\u0377\3\2\2\2\u037a\u037c\5\u009eP"+ - "\2\u037b\u037a\3\2\2\2\u037c\u037f\3\2\2\2\u037d\u037b\3\2\2\2\u037d\u037e"+ - "\3\2\2\2\u037e\u0380\3\2\2\2\u037f\u037d\3\2\2\2\u0380\u0381\7>\2\2\u0381"+ - "\u03a1\3\2\2\2\u0382\u0383\7,\2\2\u0383\u0384\5\u00a8U\2\u0384\u0385\5"+ - "\u0086D\2\u0385\u03a1\3\2\2\2\u0386\u0388\7&\2\2\u0387\u0389\5\u00b0Y"+ - "\2\u0388\u0387\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038a\3\2\2\2\u038a\u03a1"+ - "\7A\2\2\u038b\u038c\7.\2\2\u038c\u038d\5\u00b0Y\2\u038d\u038e\7A\2\2\u038e"+ - "\u03a1\3\2\2\2\u038f\u0391\7\6\2\2\u0390\u0392\7f\2\2\u0391\u0390\3\2"+ - "\2\2\u0391\u0392\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u03a1\7A\2\2\u0394"+ - "\u0396\7\r\2\2\u0395\u0397\7f\2\2\u0396\u0395\3\2\2\2\u0396\u0397\3\2"+ - "\2\2\u0397\u0398\3\2\2\2\u0398\u03a1\7A\2\2\u0399\u03a1\7A\2\2\u039a\u039b"+ - "\5\u00acW\2\u039b\u039c\7A\2\2\u039c\u03a1\3\2\2\2\u039d\u039e\7f\2\2"+ - "\u039e\u039f\7J\2\2\u039f\u03a1\5\u008eH\2\u03a0\u0338\3\2\2\2\u03a0\u0339"+ - "\3\2\2\2\u03a0\u0341\3\2\2\2\u03a0\u0348\3\2\2\2\u03a0\u034e\3\2\2\2\u03a0"+ - "\u0352\3\2\2\2\u03a0\u0358\3\2\2\2\u03a0\u0365\3\2\2\2\u03a0\u0371\3\2"+ - "\2\2\u03a0\u0382\3\2\2\2\u03a0\u0386\3\2\2\2\u03a0\u038b\3\2\2\2\u03a0"+ - "\u038f\3\2\2\2\u03a0\u0394\3\2\2\2\u03a0\u0399\3\2\2\2\u03a0\u039a\3\2"+ - "\2\2\u03a0\u039d\3\2\2\2\u03a1\u008f\3\2\2\2\u03a2\u03a3\7\t\2\2\u03a3"+ - "\u03a7\7;\2\2\u03a4\u03a6\5\16\b\2\u03a5\u03a4\3\2\2\2\u03a6\u03a9\3\2"+ - "\2\2\u03a7\u03a5\3\2\2\2\u03a7\u03a8\3\2\2\2\u03a8\u03aa\3\2\2\2\u03a9"+ - "\u03a7\3\2\2\2\u03aa\u03ab\5\u0092J\2\u03ab\u03ac\7f\2\2\u03ac\u03ad\7"+ - "<\2\2\u03ad\u03ae\5\u0086D\2\u03ae\u0091\3\2\2\2\u03af\u03b4\5f\64\2\u03b0"+ - "\u03b1\7X\2\2\u03b1\u03b3\5f\64\2\u03b2\u03b0\3\2\2\2\u03b3\u03b6\3\2"+ - "\2\2\u03b4\u03b2\3\2\2\2\u03b4\u03b5\3\2\2\2\u03b5\u0093\3\2\2\2\u03b6"+ - "\u03b4\3\2\2\2\u03b7\u03b8\7\25\2\2\u03b8\u03b9\5\u0086D\2\u03b9\u0095"+ - "\3\2\2\2\u03ba\u03bb\7;\2\2\u03bb\u03bd\5\u0098M\2\u03bc\u03be\7A\2\2"+ - "\u03bd\u03bc\3\2\2\2\u03bd\u03be\3\2\2\2\u03be\u03bf\3\2\2\2\u03bf\u03c0"+ - "\7<\2\2\u03c0\u0097\3\2\2\2\u03c1\u03c6\5\u009aN\2\u03c2\u03c3\7A\2\2"+ - "\u03c3\u03c5\5\u009aN\2\u03c4\u03c2\3\2\2\2\u03c5\u03c8\3\2\2\2\u03c6"+ - "\u03c4\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7\u0099\3\2\2\2\u03c8\u03c6\3\2"+ - "\2\2\u03c9\u03cb\5\16\b\2\u03ca\u03c9\3\2\2\2\u03cb\u03ce\3\2\2\2\u03cc"+ - "\u03ca\3\2\2\2\u03cc\u03cd\3\2\2\2\u03cd\u03cf\3\2\2\2\u03ce\u03cc\3\2"+ - "\2\2\u03cf\u03d0\5P)\2\u03d0\u03d1\5F$\2\u03d1\u03d2\7D\2\2\u03d2\u03d3"+ - "\5\u00b0Y\2\u03d3\u009b\3\2\2\2\u03d4\u03d6\5\u009eP\2\u03d5\u03d4\3\2"+ - "\2\2\u03d6\u03d7\3\2\2\2\u03d7\u03d5\3\2\2\2\u03d7\u03d8\3\2\2\2\u03d8"+ - "\u03da\3\2\2\2\u03d9\u03db\5\u0088E\2\u03da\u03d9\3\2\2\2\u03db\u03dc"+ - "\3\2\2\2\u03dc\u03da\3\2\2\2\u03dc\u03dd\3\2\2\2\u03dd\u009d\3\2\2\2\u03de"+ - "\u03df\7\b\2\2\u03df\u03e0\5\u00aeX\2\u03e0\u03e1\7J\2\2\u03e1\u03e9\3"+ - "\2\2\2\u03e2\u03e3\7\b\2\2\u03e3\u03e4\5L\'\2\u03e4\u03e5\7J\2\2\u03e5"+ - "\u03e9\3\2\2\2\u03e6\u03e7\7\16\2\2\u03e7\u03e9\7J\2\2\u03e8\u03de\3\2"+ - "\2\2\u03e8\u03e2\3\2\2\2\u03e8\u03e6\3\2\2\2\u03e9\u009f\3\2\2\2\u03ea"+ - "\u03f7\5\u00a4S\2\u03eb\u03ed\5\u00a2R\2\u03ec\u03eb\3\2\2\2\u03ec\u03ed"+ - "\3\2\2\2\u03ed\u03ee\3\2\2\2\u03ee\u03f0\7A\2\2\u03ef\u03f1\5\u00b0Y\2"+ - "\u03f0\u03ef\3\2\2\2\u03f0\u03f1\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f4"+ - "\7A\2\2\u03f3\u03f5\5\u00a6T\2\u03f4\u03f3\3\2\2\2\u03f4\u03f5\3\2\2\2"+ - "\u03f5\u03f7\3\2\2\2\u03f6\u03ea\3\2\2\2\u03f6\u03ec\3\2\2\2\u03f7\u00a1"+ - "\3\2\2\2\u03f8\u03fb\5\u008cG\2\u03f9\u03fb\5\u00aaV\2\u03fa\u03f8\3\2"+ - "\2\2\u03fa\u03f9\3\2\2\2\u03fb\u00a3\3\2\2\2\u03fc\u03fe\5\16\b\2\u03fd"+ - "\u03fc\3\2\2\2\u03fe\u0401\3\2\2\2\u03ff\u03fd\3\2\2\2\u03ff\u0400\3\2"+ - "\2\2\u0400\u0402\3\2\2\2\u0401\u03ff\3\2\2\2\u0402\u0403\5N(\2\u0403\u0404"+ - "\7f\2\2\u0404\u0405\7J\2\2\u0405\u0406\5\u00b0Y\2\u0406\u00a5\3\2\2\2"+ - "\u0407\u0408\5\u00aaV\2\u0408\u00a7\3\2\2\2\u0409\u040a\7;\2\2\u040a\u040b"+ - "\5\u00b0Y\2\u040b\u040c\7<\2\2\u040c\u00a9\3\2\2\2\u040d\u0412\5\u00b0"+ - "Y\2\u040e\u040f\7B\2\2\u040f\u0411\5\u00b0Y\2\u0410\u040e\3\2\2\2\u0411"+ - "\u0414\3\2\2\2\u0412\u0410\3\2\2\2\u0412\u0413\3\2\2\2\u0413\u00ab\3\2"+ - "\2\2\u0414\u0412\3\2\2\2\u0415\u0416\5\u00b0Y\2\u0416\u00ad\3\2\2\2\u0417"+ - "\u0418\5\u00b0Y\2\u0418\u00af\3\2\2\2\u0419\u041a\bY\1\2\u041a\u041b\7"+ - ";\2\2\u041b\u041c\5N(\2\u041c\u041d\7<\2\2\u041d\u041e\5\u00b0Y\23\u041e"+ - "\u0427\3\2\2\2\u041f\u0420\t\7\2\2\u0420\u0427\5\u00b0Y\21\u0421\u0422"+ - "\t\b\2\2\u0422\u0427\5\u00b0Y\20\u0423\u0427\5\u00b2Z\2\u0424\u0425\7"+ - "!\2\2\u0425\u0427\5\u00b4[\2\u0426\u0419\3\2\2\2\u0426\u041f\3\2\2\2\u0426"+ - "\u0421\3\2\2\2\u0426\u0423\3\2\2\2\u0426\u0424\3\2\2\2\u0427\u047d\3\2"+ - "\2\2\u0428\u0429\f\17\2\2\u0429\u042a\t\t\2\2\u042a\u047c\5\u00b0Y\20"+ - "\u042b\u042c\f\16\2\2\u042c\u042d\t\n\2\2\u042d\u047c\5\u00b0Y\17\u042e"+ - "\u0436\f\r\2\2\u042f\u0430\7F\2\2\u0430\u0437\7F\2\2\u0431\u0432\7E\2"+ - "\2\u0432\u0433\7E\2\2\u0433\u0437\7E\2\2\u0434\u0435\7E\2\2\u0435\u0437"+ - "\7E\2\2\u0436\u042f\3\2\2\2\u0436\u0431\3\2\2\2\u0436\u0434\3\2\2\2\u0437"+ - "\u0438\3\2\2\2\u0438\u047c\5\u00b0Y\16\u0439\u043a\f\f\2\2\u043a\u043b"+ - "\t\13\2\2\u043b\u047c\5\u00b0Y\r\u043c\u043d\f\n\2\2\u043d\u043e\t\f\2"+ - "\2\u043e\u047c\5\u00b0Y\13\u043f\u0440\f\t\2\2\u0440\u0441\7W\2\2\u0441"+ - "\u047c\5\u00b0Y\n\u0442\u0443\f\b\2\2\u0443\u0444\7Y\2\2\u0444\u047c\5"+ - "\u00b0Y\t\u0445\u0446\f\7\2\2\u0446\u0447\7X\2\2\u0447\u047c\5\u00b0Y"+ - "\b\u0448\u0449\f\6\2\2\u0449\u044a\7O\2\2\u044a\u047c\5\u00b0Y\7\u044b"+ - "\u044c\f\5\2\2\u044c\u044d\7P\2\2\u044d\u047c\5\u00b0Y\6\u044e\u044f\f"+ - "\4\2\2\u044f\u0450\7I\2\2\u0450\u0451\5\u00b0Y\2\u0451\u0452\7J\2\2\u0452"+ - "\u0453\5\u00b0Y\5\u0453\u047c\3\2\2\2\u0454\u0455\f\3\2\2\u0455\u0456"+ - "\t\r\2\2\u0456\u047c\5\u00b0Y\4\u0457\u0458\f\33\2\2\u0458\u0459\7C\2"+ - "\2\u0459\u047c\7f\2\2\u045a\u045b\f\32\2\2\u045b\u045c\7C\2\2\u045c\u047c"+ - "\7-\2\2\u045d\u045e\f\31\2\2\u045e\u045f\7C\2\2\u045f\u0461\7!\2\2\u0460"+ - "\u0462\5\u00c0a\2\u0461\u0460\3\2\2\2\u0461\u0462\3\2\2\2\u0462\u0463"+ - "\3\2\2\2\u0463\u047c\5\u00b8]\2\u0464\u0465\f\30\2\2\u0465\u0466\7C\2"+ - "\2\u0466\u0467\7*\2\2\u0467\u047c\5\u00c6d\2\u0468\u0469\f\27\2\2\u0469"+ - "\u046a\7C\2\2\u046a\u047c\5\u00be`\2\u046b\u046c\f\26\2\2\u046c\u046d"+ - "\7?\2\2\u046d\u046e\5\u00b0Y\2\u046e\u046f\7@\2\2\u046f\u047c\3\2\2\2"+ - "\u0470\u0471\f\25\2\2\u0471\u0473\7;\2\2\u0472\u0474\5\u00aaV\2\u0473"+ - "\u0472\3\2\2\2\u0473\u0474\3\2\2\2\u0474\u0475\3\2\2\2\u0475\u047c\7<"+ - "\2\2\u0476\u0477\f\22\2\2\u0477\u047c\t\16\2\2\u0478\u0479\f\13\2\2\u0479"+ - "\u047a\7\34\2\2\u047a\u047c\5N(\2\u047b\u0428\3\2\2\2\u047b\u042b\3\2"+ - "\2\2\u047b\u042e\3\2\2\2\u047b\u0439\3\2\2\2\u047b\u043c\3\2\2\2\u047b"+ - "\u043f\3\2\2\2\u047b\u0442\3\2\2\2\u047b\u0445\3\2\2\2\u047b\u0448\3\2"+ - "\2\2\u047b\u044b\3\2\2\2\u047b\u044e\3\2\2\2\u047b\u0454\3\2\2\2\u047b"+ - "\u0457\3\2\2\2\u047b\u045a\3\2\2\2\u047b\u045d\3\2\2\2\u047b\u0464\3\2"+ - "\2\2\u047b\u0468\3\2\2\2\u047b\u046b\3\2\2\2\u047b\u0470\3\2\2\2\u047b"+ - "\u0476\3\2\2\2\u047b\u0478\3\2\2\2\u047c\u047f\3\2\2\2\u047d\u047b\3\2"+ - "\2\2\u047d\u047e\3\2\2\2\u047e\u00b1\3\2\2\2\u047f\u047d\3\2\2\2\u0480"+ - "\u0481\7;\2\2\u0481\u0482\5\u00b0Y\2\u0482\u0483\7<\2\2\u0483\u0496\3"+ - "\2\2\2\u0484\u0496\7-\2\2\u0485\u0496\7*\2\2\u0486\u0496\5h\65\2\u0487"+ - "\u0496\7f\2\2\u0488\u0489\5N(\2\u0489\u048a\7C\2\2\u048a\u048b\7\13\2"+ - "\2\u048b\u0496\3\2\2\2\u048c\u048d\7\62\2\2\u048d\u048e\7C\2\2\u048e\u0496"+ - "\7\13\2\2\u048f\u0493\5\u00c0a\2\u0490\u0494\5\u00c8e\2\u0491\u0492\7"+ - "-\2\2\u0492\u0494\5\u00caf\2\u0493\u0490\3\2\2\2\u0493\u0491\3\2\2\2\u0494"+ - "\u0496\3\2\2\2\u0495\u0480\3\2\2\2\u0495\u0484\3\2\2\2\u0495\u0485\3\2"+ - "\2\2\u0495\u0486\3\2\2\2\u0495\u0487\3\2\2\2\u0495\u0488\3\2\2\2\u0495"+ - "\u048c\3\2\2\2\u0495\u048f\3\2\2\2\u0496\u00b3\3\2\2\2\u0497\u0498\5\u00c0"+ - "a\2\u0498\u0499\5\u00b6\\\2\u0499\u049a\5\u00bc_\2\u049a\u04a1\3\2\2\2"+ - "\u049b\u049e\5\u00b6\\\2\u049c\u049f\5\u00ba^\2\u049d\u049f\5\u00bc_\2"+ - "\u049e\u049c\3\2\2\2\u049e\u049d\3\2\2\2\u049f\u04a1\3\2\2\2\u04a0\u0497"+ - "\3\2\2\2\u04a0\u049b\3\2\2\2\u04a1\u00b5\3\2\2\2\u04a2\u04a4\7f\2\2\u04a3"+ - "\u04a5\5\u00c2b\2\u04a4\u04a3\3\2\2\2\u04a4\u04a5\3\2\2\2\u04a5\u04ad"+ - "\3\2\2\2\u04a6\u04a7\7C\2\2\u04a7\u04a9\7f\2\2\u04a8\u04aa\5\u00c2b\2"+ - "\u04a9\u04a8\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u04ac\3\2\2\2\u04ab\u04a6"+ - "\3\2\2\2\u04ac\u04af\3\2\2\2\u04ad\u04ab\3\2\2\2\u04ad\u04ae\3\2\2\2\u04ae"+ - "\u04b2\3\2\2\2\u04af\u04ad\3\2\2\2\u04b0\u04b2\5R*\2\u04b1\u04a2\3\2\2"+ - "\2\u04b1\u04b0\3\2\2\2\u04b2\u00b7\3\2\2\2\u04b3\u04b5\7f\2\2\u04b4\u04b6"+ - "\5\u00c4c\2\u04b5\u04b4\3\2\2\2\u04b5\u04b6\3\2\2\2\u04b6\u04b7\3\2\2"+ - "\2\u04b7\u04b8\5\u00bc_\2\u04b8\u00b9\3\2\2\2\u04b9\u04d5\7?\2\2\u04ba"+ - "\u04bf\7@\2\2\u04bb\u04bc\7?\2\2\u04bc\u04be\7@\2\2\u04bd\u04bb\3\2\2"+ - "\2\u04be\u04c1\3\2\2\2\u04bf\u04bd\3\2\2\2\u04bf\u04c0\3\2\2\2\u04c0\u04c2"+ - "\3\2\2\2\u04c1\u04bf\3\2\2\2\u04c2\u04d6\5J&\2\u04c3\u04c4\5\u00b0Y\2"+ - "\u04c4\u04cb\7@\2\2\u04c5\u04c6\7?\2\2\u04c6\u04c7\5\u00b0Y\2\u04c7\u04c8"+ - "\7@\2\2\u04c8\u04ca\3\2\2\2\u04c9\u04c5\3\2\2\2\u04ca\u04cd\3\2\2\2\u04cb"+ - "\u04c9\3\2\2\2\u04cb\u04cc\3\2\2\2\u04cc\u04d2\3\2\2\2\u04cd\u04cb\3\2"+ - "\2\2\u04ce\u04cf\7?\2\2\u04cf\u04d1\7@\2\2\u04d0\u04ce\3\2\2\2\u04d1\u04d4"+ - "\3\2\2\2\u04d2\u04d0\3\2\2\2\u04d2\u04d3\3\2\2\2\u04d3\u04d6\3\2\2\2\u04d4"+ - "\u04d2\3\2\2\2\u04d5\u04ba\3\2\2\2\u04d5\u04c3\3\2\2\2\u04d6\u00bb\3\2"+ - "\2\2\u04d7\u04d9\5\u00caf\2\u04d8\u04da\5$\23\2\u04d9\u04d8\3\2\2\2\u04d9"+ - "\u04da\3\2\2\2\u04da\u00bd\3\2\2\2\u04db\u04dc\5\u00c0a\2\u04dc\u04dd"+ - "\5\u00c8e\2\u04dd\u00bf\3\2\2\2\u04de\u04df\7F\2\2\u04df\u04e0\5\"\22"+ - "\2\u04e0\u04e1\7E\2\2\u04e1\u00c1\3\2\2\2\u04e2\u04e3\7F\2\2\u04e3\u04e6"+ - "\7E\2\2\u04e4\u04e6\5T+\2\u04e5\u04e2\3\2\2\2\u04e5\u04e4\3\2\2\2\u04e6"+ - "\u00c3\3\2\2\2\u04e7\u04e8\7F\2\2\u04e8\u04eb\7E\2\2\u04e9\u04eb\5\u00c0"+ - "a\2\u04ea\u04e7\3\2\2\2\u04ea\u04e9\3\2\2\2\u04eb\u00c5\3\2\2\2\u04ec"+ - "\u04f3\5\u00caf\2\u04ed\u04ee\7C\2\2\u04ee\u04f0\7f\2\2\u04ef\u04f1\5"+ - "\u00caf\2\u04f0\u04ef\3\2\2\2\u04f0\u04f1\3\2\2\2\u04f1\u04f3\3\2\2\2"+ - "\u04f2\u04ec\3\2\2\2\u04f2\u04ed\3\2\2\2\u04f3\u00c7\3\2\2\2\u04f4\u04f5"+ - "\7*\2\2\u04f5\u04f9\5\u00c6d\2\u04f6\u04f7\7f\2\2\u04f7\u04f9\5\u00ca"+ - "f\2\u04f8\u04f4\3\2\2\2\u04f8\u04f6\3\2\2\2\u04f9\u00c9\3\2\2\2\u04fa"+ - "\u04fc\7;\2\2\u04fb\u04fd\5\u00aaV\2\u04fc\u04fb\3\2\2\2\u04fc\u04fd\3"+ - "\2\2\2\u04fd\u04fe\3\2\2\2\u04fe\u04ff\7<\2\2\u04ff\u00cb\3\2\2\2\u0097"+ - "\u00cd\u00d2\u00d8\u00e0\u00e9\u00ee\u00f5\u00fc\u0103\u010a\u010f\u0113"+ - "\u0117\u011b\u0120\u0124\u0128\u0132\u013a\u0141\u0148\u014c\u014f\u0152"+ - "\u015b\u0161\u0166\u0169\u016f\u0175\u0179\u0182\u0189\u0192\u0199\u019f"+ - "\u01a3\u01ae\u01b2\u01ba\u01bf\u01c3\u01cc\u01da\u01df\u01e8\u01f0\u01fa"+ - "\u0202\u020a\u020f\u021b\u0221\u0228\u022d\u0235\u0239\u023b\u0246\u024e"+ - "\u0251\u0255\u025a\u025e\u0269\u0272\u0274\u027b\u0280\u0289\u028e\u0291"+ - "\u0296\u029f\u02af\u02b9\u02bc\u02c5\u02cf\u02d7\u02da\u02dd\u02ea\u02f2"+ - "\u02f7\u02ff\u0303\u0307\u030b\u030d\u0311\u0317\u0322\u032a\u0332\u033d"+ - "\u0346\u035d\u0360\u0363\u036b\u036f\u0377\u037d\u0388\u0391\u0396\u03a0"+ - "\u03a7\u03b4\u03bd\u03c6\u03cc\u03d7\u03dc\u03e8\u03ec\u03f0\u03f4\u03f6"+ - "\u03fa\u03ff\u0412\u0426\u0436\u0461\u0473\u047b\u047d\u0493\u0495\u049e"+ - "\u04a0\u04a4\u04a9\u04ad\u04b1\u04b5\u04bf\u04cb\u04d2\u04d5\u04d9\u04e5"+ - "\u04ea\u04f0\u04f2\u04f8\u04fc"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/Java8Visitor.java b/src/de/dhbwstuttgart/antlr/Java8Visitor.java deleted file mode 100644 index c5453625..00000000 --- a/src/de/dhbwstuttgart/antlr/Java8Visitor.java +++ /dev/null @@ -1,621 +0,0 @@ -package de.dhbwstuttgart.antlr; - -// Generated from Java8.g4 by ANTLR 4.4 -import org.antlr.v4.runtime.misc.NotNull; -import org.antlr.v4.runtime.tree.ParseTreeVisitor; - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by {@link Java8Parser}. - * - * @param The return type of the visit operation. Use {@link Void} for - * operations with no return type. - */ -public interface Java8Visitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by {@link Java8Parser#memberDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMemberDeclaration(@NotNull Java8Parser.MemberDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#defaultValue}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitDefaultValue(@NotNull Java8Parser.DefaultValueContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationTypeElementDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationTypeElementDeclaration(@NotNull Java8Parser.AnnotationTypeElementDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#type}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitType(@NotNull Java8Parser.TypeContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationTypeBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationTypeBody(@NotNull Java8Parser.AnnotationTypeBodyContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#genericInterfaceMethodDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGenericInterfaceMethodDeclaration(@NotNull Java8Parser.GenericInterfaceMethodDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classBodyDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassBodyDeclaration(@NotNull Java8Parser.ClassBodyDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#block}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBlock(@NotNull Java8Parser.BlockContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enumBodyDeclarations}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnumBodyDeclarations(@NotNull Java8Parser.EnumBodyDeclarationsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#forUpdate}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitForUpdate(@NotNull Java8Parser.ForUpdateContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enhancedForControl}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnhancedForControl(@NotNull Java8Parser.EnhancedForControlContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationConstantRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationConstantRest(@NotNull Java8Parser.AnnotationConstantRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#explicitGenericInvocation}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExplicitGenericInvocation(@NotNull Java8Parser.ExplicitGenericInvocationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#nonWildcardTypeArgumentsOrDiamond}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitNonWildcardTypeArgumentsOrDiamond(@NotNull Java8Parser.NonWildcardTypeArgumentsOrDiamondContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#expressionList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExpressionList(@NotNull Java8Parser.ExpressionListContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationTypeElementRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationTypeElementRest(@NotNull Java8Parser.AnnotationTypeElementRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classOrInterfaceType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassOrInterfaceType(@NotNull Java8Parser.ClassOrInterfaceTypeContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeBound}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeBound(@NotNull Java8Parser.TypeBoundContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#variableDeclaratorId}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVariableDeclaratorId(@NotNull Java8Parser.VariableDeclaratorIdContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#primary}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitPrimary(@NotNull Java8Parser.PrimaryContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classCreatorRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassCreatorRest(@NotNull Java8Parser.ClassCreatorRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#interfaceBodyDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInterfaceBodyDeclaration(@NotNull Java8Parser.InterfaceBodyDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeArguments}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeArguments(@NotNull Java8Parser.TypeArgumentsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationName}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationName(@NotNull Java8Parser.AnnotationNameContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#finallyBlock}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFinallyBlock(@NotNull Java8Parser.FinallyBlockContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeParameters}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeParameters(@NotNull Java8Parser.TypeParametersContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#lastFormalParameter}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLastFormalParameter(@NotNull Java8Parser.LastFormalParameterContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#constructorBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstructorBody(@NotNull Java8Parser.ConstructorBodyContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#literal}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLiteral(@NotNull Java8Parser.LiteralContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationMethodOrConstantRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationMethodOrConstantRest(@NotNull Java8Parser.AnnotationMethodOrConstantRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#catchClause}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCatchClause(@NotNull Java8Parser.CatchClauseContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#variableDeclarator}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVariableDeclarator(@NotNull Java8Parser.VariableDeclaratorContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeList(@NotNull Java8Parser.TypeListContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enumConstants}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnumConstants(@NotNull Java8Parser.EnumConstantsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassBody(@NotNull Java8Parser.ClassBodyContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#createdName}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCreatedName(@NotNull Java8Parser.CreatedNameContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enumDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnumDeclaration(@NotNull Java8Parser.EnumDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#formalParameter}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFormalParameter(@NotNull Java8Parser.FormalParameterContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#parExpression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitParExpression(@NotNull Java8Parser.ParExpressionContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotation}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotation(@NotNull Java8Parser.AnnotationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#variableInitializer}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVariableInitializer(@NotNull Java8Parser.VariableInitializerContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#elementValueArrayInitializer}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitElementValueArrayInitializer(@NotNull Java8Parser.ElementValueArrayInitializerContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#creator}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCreator(@NotNull Java8Parser.CreatorContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#arrayCreatorRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitArrayCreatorRest(@NotNull Java8Parser.ArrayCreatorRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#expression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExpression(@NotNull Java8Parser.ExpressionContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#constantExpression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstantExpression(@NotNull Java8Parser.ConstantExpressionContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#qualifiedNameList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitQualifiedNameList(@NotNull Java8Parser.QualifiedNameListContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#constructorDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstructorDeclaration(@NotNull Java8Parser.ConstructorDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#forControl}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitForControl(@NotNull Java8Parser.ForControlContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#superSuffix}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitSuperSuffix(@NotNull Java8Parser.SuperSuffixContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#variableDeclarators}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVariableDeclarators(@NotNull Java8Parser.VariableDeclaratorsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#catchType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCatchType(@NotNull Java8Parser.CatchTypeContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classOrInterfaceModifier}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassOrInterfaceModifier(@NotNull Java8Parser.ClassOrInterfaceModifierContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enumConstantName}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnumConstantName(@NotNull Java8Parser.EnumConstantNameContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#modifier}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitModifier(@NotNull Java8Parser.ModifierContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#innerCreator}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInnerCreator(@NotNull Java8Parser.InnerCreatorContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#explicitGenericInvocationSuffix}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExplicitGenericInvocationSuffix(@NotNull Java8Parser.ExplicitGenericInvocationSuffixContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#variableModifier}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVariableModifier(@NotNull Java8Parser.VariableModifierContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#elementValuePair}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitElementValuePair(@NotNull Java8Parser.ElementValuePairContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#arrayInitializer}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitArrayInitializer(@NotNull Java8Parser.ArrayInitializerContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#elementValue}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitElementValue(@NotNull Java8Parser.ElementValueContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#constDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstDeclaration(@NotNull Java8Parser.ConstDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#resource}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitResource(@NotNull Java8Parser.ResourceContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#qualifiedName}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitQualifiedName(@NotNull Java8Parser.QualifiedNameContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#resourceSpecification}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitResourceSpecification(@NotNull Java8Parser.ResourceSpecificationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#formalParameterList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFormalParameterList(@NotNull Java8Parser.FormalParameterListContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationTypeDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationTypeDeclaration(@NotNull Java8Parser.AnnotationTypeDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#compilationUnit}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCompilationUnit(@NotNull Java8Parser.CompilationUnitContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#annotationMethodRest}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAnnotationMethodRest(@NotNull Java8Parser.AnnotationMethodRestContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#switchBlockStatementGroup}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitSwitchBlockStatementGroup(@NotNull Java8Parser.SwitchBlockStatementGroupContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeParameter}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeParameter(@NotNull Java8Parser.TypeParameterContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#interfaceBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInterfaceBody(@NotNull Java8Parser.InterfaceBodyContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#methodDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMethodDeclaration(@NotNull Java8Parser.MethodDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#methodBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMethodBody(@NotNull Java8Parser.MethodBodyContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeArgument}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeArgument(@NotNull Java8Parser.TypeArgumentContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeDeclaration(@NotNull Java8Parser.TypeDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#genericConstructorDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGenericConstructorDeclaration(@NotNull Java8Parser.GenericConstructorDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#classDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitClassDeclaration(@NotNull Java8Parser.ClassDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#enumConstant}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitEnumConstant(@NotNull Java8Parser.EnumConstantContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#statement}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStatement(@NotNull Java8Parser.StatementContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#importDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitImportDeclaration(@NotNull Java8Parser.ImportDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#primitiveType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitPrimitiveType(@NotNull Java8Parser.PrimitiveTypeContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#interfaceDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInterfaceDeclaration(@NotNull Java8Parser.InterfaceDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#localVariableDeclarationStatement}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLocalVariableDeclarationStatement(@NotNull Java8Parser.LocalVariableDeclarationStatementContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#blockStatement}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBlockStatement(@NotNull Java8Parser.BlockStatementContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#fieldDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFieldDeclaration(@NotNull Java8Parser.FieldDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#constantDeclarator}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstantDeclarator(@NotNull Java8Parser.ConstantDeclaratorContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#resources}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitResources(@NotNull Java8Parser.ResourcesContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#statementExpression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStatementExpression(@NotNull Java8Parser.StatementExpressionContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#interfaceMethodDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInterfaceMethodDeclaration(@NotNull Java8Parser.InterfaceMethodDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#packageDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitPackageDeclaration(@NotNull Java8Parser.PackageDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#elementValuePairs}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitElementValuePairs(@NotNull Java8Parser.ElementValuePairsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#localVariableDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLocalVariableDeclaration(@NotNull Java8Parser.LocalVariableDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#nonWildcardTypeArguments}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitNonWildcardTypeArguments(@NotNull Java8Parser.NonWildcardTypeArgumentsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#interfaceMemberDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInterfaceMemberDeclaration(@NotNull Java8Parser.InterfaceMemberDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#switchLabel}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitSwitchLabel(@NotNull Java8Parser.SwitchLabelContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#forInit}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitForInit(@NotNull Java8Parser.ForInitContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#formalParameters}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFormalParameters(@NotNull Java8Parser.FormalParametersContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#arguments}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitArguments(@NotNull Java8Parser.ArgumentsContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#genericMethodDeclaration}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGenericMethodDeclaration(@NotNull Java8Parser.GenericMethodDeclarationContext ctx); - /** - * Visit a parse tree produced by {@link Java8Parser#typeArgumentsOrDiamond}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeArgumentsOrDiamond(@NotNull Java8Parser.TypeArgumentsOrDiamondContext ctx); -} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/antlr/VisitorTest.java b/src/de/dhbwstuttgart/antlr/VisitorTest.java deleted file mode 100644 index 99dcd0e3..00000000 --- a/src/de/dhbwstuttgart/antlr/VisitorTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.dhbwstuttgart.antlr; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; - -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.tree.*; -import org.junit.Test; - -import de.dhbwstuttgart.antlr.Java8Parser.ClassDeclarationContext; -import de.dhbwstuttgart.antlr.Java8Parser.CompilationUnitContext; -import de.dhbwstuttgart.antlr.Java8Parser.TypeDeclarationContext; -import de.dhbwstuttgart.antlr.Java8Parser.TypeParameterContext; -import de.dhbwstuttgart.antlr.Java8Parser.TypeParametersContext; -import de.dhbwstuttgart.syntaxtree.GenericDeclarationList; -import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; - - -public class VisitorTest { - - private final static String testFile = System.getProperty("user.dir")+"/test/parser/AntlrTest.jav"; - - @Test - public void test() throws IOException{ - - ANTLRInputStream input = new ANTLRInputStream(new FileInputStream(testFile)); - Java8Lexer lexer = new Java8Lexer(input); - CommonTokenStream tokens = new CommonTokenStream(lexer); - Java8Parser parser = new Java8Parser(tokens); - ParseTree tree = parser.compilationUnit(); // begin parsing at init rule - System.out.println(tree.toStringTree(parser)); // print LISP-style tree - //VISITOR: - EvalVisitor visitor = new EvalVisitor(); - SyntaxTreeNode sourceFile = visitor.visit(tree); - System.out.println(sourceFile); - // Create a generic parse tree walker that can trigger callbacks - // ParseTreeWalker walker = new ParseTreeWalker(); - } -} - -class EvalVisitor extends Java8BaseVisitor { - - @Override - public SyntaxTreeNode visitCompilationUnit(CompilationUnitContext ctx) { - Menge classDefinitions = new Menge<>(); - for(TypeDeclarationContext tDecl : ctx.typeDeclaration()){ - Class cl = (Class) visit(tDecl); - classDefinitions.add(cl); - } - - return new SourceFile(classDefinitions); - } - - @Override - public Class visitTypeDeclaration(TypeDeclarationContext ctx) { - Class ret = (Class) visit(ctx.classDeclaration()); - return ret; - } - - @Override - public Class visitClassDeclaration(ClassDeclarationContext ctx) { - String name = ctx.Identifier().getText(); - int offset = ctx.Identifier().getSymbol().getStartIndex(); - TypeParametersContext tpctx = ctx.typeParameters(); - GenericDeclarationList gtvList = (GenericDeclarationList) visit(tpctx); - - return new Class(name, offset); - } - - @Override - public GenericDeclarationList visitTypeParameters(TypeParametersContext ctx) { - Menge list = new Menge<>(); - int endOffset = 0; - for(TypeParameterContext tpctx : ctx.typeParameter()){ - tpctx.Identifier(); - } - GenericDeclarationList ret = new GenericDeclarationList(list, endOffset); - return ret; - } - - @Override - public GenericTypeVar visitTypeParameter(TypeParameterContext ctx) { - GenericTypeVar ret = null;//new GenericTypeVar(name, parent, offset); - return ret; - } - - -} diff --git a/src/de/dhbwstuttgart/antlr/makefile b/src/de/dhbwstuttgart/antlr/makefile deleted file mode 100644 index 0adefcb8..00000000 --- a/src/de/dhbwstuttgart/antlr/makefile +++ /dev/null @@ -1,3 +0,0 @@ -all: - java -jar ./antlr-4.4-complete.jar -no-listener -visitor Java8.g4 - diff --git a/src/de/dhbwstuttgart/bytecode/Attribute.java b/src/de/dhbwstuttgart/bytecode/Attribute.java deleted file mode 100755 index a7e33972..00000000 --- a/src/de/dhbwstuttgart/bytecode/Attribute.java +++ /dev/null @@ -1,61 +0,0 @@ -// ino.module.Attribute.8529.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.Attribute.8529.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -// ino.end - - -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.JVMCodeException; - -// ino.class.Attribute.21446.declaration -public abstract class Attribute implements ClassFileMember -// ino.end -// ino.class.Attribute.21446.body -{ - // ino.attribute.codegenlog.21449.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.21449.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.attribute.attribute_name_index.21452.declaration - private short attribute_name_index; - // ino.end - - // ino.method.get_attribute_name_index.21455.definition - public short get_attribute_name_index() - // ino.end - // ino.method.get_attribute_name_index.21455.body - { - return this.attribute_name_index; - } - // ino.end - - // ino.method.set_attribute_name_index.21458.definition - public void set_attribute_name_index(short t) - // ino.end - // ino.method.set_attribute_name_index.21458.body - { - this.attribute_name_index = t; - } - // ino.end - - // ino.method.codegen.21461.declaration - @Override - public abstract void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException; - // ino.end - - // ino.method.get_attributes_length.21464.declaration - public abstract int get_attributes_length(); - // ino.end - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/AttributeInfo.java b/src/de/dhbwstuttgart/bytecode/AttributeInfo.java deleted file mode 100755 index 01b700c0..00000000 --- a/src/de/dhbwstuttgart/bytecode/AttributeInfo.java +++ /dev/null @@ -1,91 +0,0 @@ -// ino.module.AttributeInfo.8530.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.AttributeInfo.8530.import -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.lang.reflect.Array; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.myexception.JVMCodeException; - -// ino.class.AttributeInfo.21467.declaration -public class AttributeInfo extends Attribute -// ino.end -// ino.class.AttributeInfo.21467.body -{ - // ino.attribute.info.21471.declaration - private byte[] info = {}; - // ino.end - - // ino.method.get_info.21474.definition - public byte[] get_info() - // ino.end - // ino.method.get_info.21474.body - { - return this.info; - } - // ino.end - - // ino.method.get_info_Menge.21477.definition - public Menge get_info_Menge() - // ino.end - // ino.method.get_info_Menge.21477.body - { - Menge ret = new Menge(); - for (int i = 0; i < Array.getLength(info); i++) - ret.addElement(new Byte(info[i])); - return ret; - } - // ino.end - - // ino.method.get_attributes_length.21480.definition - public int get_attributes_length() - // ino.end - // ino.method.get_attributes_length.21480.body - { - return Array.getLength(info); - } - // ino.end - - // ino.method.set_info.21483.definition - public void set_info(byte[] t) - // ino.end - // ino.method.set_info.21483.body - { - this.info = t; - } - // ino.end - - // ino.method.set_info.21486.definition - public void set_info(Menge t) - // ino.end - // ino.method.set_info.21486.body - { - byte[] set = new byte[t.size()]; - for (int i = 0; i < t.size(); i++) - Array.setByte(set, i, ((Byte) t.elementAt(i)).byteValue()); - this.info = set; - } - // ino.end - - // ino.method.codegen.21489.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, java.io.IOException - // ino.end -// ino.method.codegen.21489.body -{ - - classfile.writeShort(f, get_attribute_name_index()); - classfile.writeInt(f, Array.getLength(info)); - if (info != null) classfile.writeByteArray(f, info); - - codegenlog.debug("Attribute_Name_Index= " + get_attribute_name_index() - + ", Length= " + Array.getLength(info) + " "); - } -// ino.end - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Class_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Class_info.java deleted file mode 100755 index 046fbe93..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Class_info.java +++ /dev/null @@ -1,60 +0,0 @@ -// ino.module.CONSTANT_Class_info.8533.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Class_info.8533.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -// ino.end - -// ino.class.CONSTANT_Class_info.21763.declaration -public class CONSTANT_Class_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Class_info.21763.body -{ - // ino.attribute.name_index.21767.declaration - private short name_index; - // ino.end - - // ino.method.get_name_index.21770.definition - public short get_name_index() - // ino.end - // ino.method.get_name_index.21770.body - { - return this.name_index; - } - // ino.end - - // ino.method.set_name_index.21773.definition - public void set_name_index(short i) - // ino.end - // ino.method.set_name_index.21773.body - { - this.name_index = i; - } - // ino.end - - // ino.method.codegen.21776.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21776.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, name_index); - } - // ino.end - - // ino.method.toString.21779.definition - public String toString() - // ino.end - // ino.method.toString.21779.body - { - return "ClassInfo: name_index=" + name_index; - } - // ino.end - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Double_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Double_info.java deleted file mode 100755 index af632c3a..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Double_info.java +++ /dev/null @@ -1,71 +0,0 @@ -// ino.module.CONSTANT_Double_info.8534.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Double_info.8534.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_Double_info.21782.declaration -public class CONSTANT_Double_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Double_info.21782.body -{ - // ino.attribute.high_bytes.21786.declaration - private int high_bytes; - // ino.end - // ino.attribute.low_bytes.21789.declaration - private int low_bytes; - // ino.end - - // ino.method.get_high_bytes.21792.definition - public int get_high_bytes() - // ino.end - // ino.method.get_high_bytes.21792.body - { return this.high_bytes; } - // ino.end - // ino.method.get_low_bytes.21795.definition - public int get_low_bytes() - // ino.end - // ino.method.get_low_bytes.21795.body - { return this.low_bytes; } - // ino.end - - // ino.method.set_high_bytes.21798.definition - public void set_high_bytes(int t) - // ino.end - // ino.method.set_high_bytes.21798.body - { this.high_bytes = t; } - // ino.end - // ino.method.set_low_bytes.21801.definition - public void set_low_bytes(int t) - // ino.end - // ino.method.set_low_bytes.21801.body - { this.low_bytes = t; } - // ino.end - - // ino.method.codegen.21804.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21804.body - { - classfile.writeByte(f, get_tag()); - classfile.writeInt(f, high_bytes); - classfile.writeInt(f, low_bytes); - } - // ino.end - - // ino.method.toString.21807.definition - public String toString() - // ino.end - // ino.method.toString.21807.body - { - return "Double_Info: high_bytes=" + high_bytes + ", low_bytes=" + low_bytes; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Fieldref_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Fieldref_info.java deleted file mode 100755 index 0f82f3a3..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Fieldref_info.java +++ /dev/null @@ -1,83 +0,0 @@ -// ino.module.CONSTANT_Fieldref_info.8535.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Fieldref_info.8535.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_Fieldref_info.21810.declaration -public class CONSTANT_Fieldref_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Fieldref_info.21810.body -{ - // ino.attribute.class_index.21814.declaration - private short class_index; - // ino.end - - // ino.attribute.name_and_type_index.21817.declaration - private short name_and_type_index; - // ino.end - - // ino.method.get_class_index.21820.definition - public short get_class_index() - // ino.end - // ino.method.get_class_index.21820.body - { - return this.class_index; - } - // ino.end - - // ino.method.get_name_and_type_index.21823.definition - public short get_name_and_type_index() - // ino.end - // ino.method.get_name_and_type_index.21823.body - { - return this.name_and_type_index; - } - // ino.end - - // ino.method.set_class_index.21826.definition - public void set_class_index(short i) - // ino.end - // ino.method.set_class_index.21826.body - { - this.class_index = i; - } - // ino.end - - // ino.method.set_name_and_type_index.21829.definition - public void set_name_and_type_index(short i) - // ino.end - // ino.method.set_name_and_type_index.21829.body - { - this.name_and_type_index = i; - } - // ino.end - - // ino.method.codegen.21832.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21832.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, class_index); - classfile.writeShort(f, name_and_type_index); - } - // ino.end - - // ino.method.toString.21835.definition - public String toString() - // ino.end - // ino.method.toString.21835.body - { - return "Fieldref_info: Class_index="+ class_index - + ", Name_and_type_index=" + name_and_type_index; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Float_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Float_info.java deleted file mode 100755 index 4a7e8582..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Float_info.java +++ /dev/null @@ -1,52 +0,0 @@ -// ino.module.CONSTANT_Float_info.8536.package -package de.dhbwstuttgart.bytecode; -// ino.end -// ino.module.CONSTANT_Float_info.8536.import -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_Float_info.21838.declaration -public class CONSTANT_Float_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Float_info.21838.body -{ - // ino.attribute.bytes.21842.declaration - private int bytes; - // ino.end - - // ino.method.get_bytes.21845.definition - public int get_bytes() - // ino.end - // ino.method.get_bytes.21845.body - { return this.bytes; } - // ino.end - // ino.method.set_bytes.21848.definition - public void set_bytes(int t) - // ino.end - // ino.method.set_bytes.21848.body - { this.bytes = t; } - // ino.end - - // ino.method.codegen.21851.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21851.body - { - classfile.writeByte(f, get_tag()); - classfile.writeInt(f, bytes); - } - // ino.end - - // ino.method.toString.21854.definition - public String toString() - // ino.end - // ino.method.toString.21854.body - { - return "Float_Info: size=" + bytes; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Integer_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Integer_info.java deleted file mode 100755 index 1747ab73..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Integer_info.java +++ /dev/null @@ -1,56 +0,0 @@ -// ino.module.CONSTANT_Integer_info.8537.package -package de.dhbwstuttgart.bytecode; -// ino.end -// ino.module.CONSTANT_Integer_info.8537.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -// ino.end - - - - -// ino.class.CONSTANT_Integer_info.21857.declaration -public class CONSTANT_Integer_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Integer_info.21857.body -{ - // ino.attribute.bytes.21861.declaration - private int bytes; - // ino.end - - // ino.method.get_bytes.21864.definition - public int get_bytes() - // ino.end - // ino.method.get_bytes.21864.body - { return this.bytes; } - // ino.end - // ino.method.set_bytes.21867.definition - public void set_bytes(int t) - // ino.end - // ino.method.set_bytes.21867.body - { this.bytes = t; } - // ino.end - - // ino.method.codegen.21870.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21870.body - { - classfile.writeByte(f, get_tag()); - classfile.writeInt(f, bytes); - } - // ino.end - - // ino.method.toString.21873.definition - public String toString() - // ino.end - // ino.method.toString.21873.body - { - return "Integer_Info: bytes=" + bytes; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_InterfaceMethodref_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_InterfaceMethodref_info.java deleted file mode 100755 index 70555a58..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_InterfaceMethodref_info.java +++ /dev/null @@ -1,84 +0,0 @@ -// ino.module.CONSTANT_InterfaceMethodref_info.8538.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_InterfaceMethodref_info.8538.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_InterfaceMethodref_info.21876.declaration -public class CONSTANT_InterfaceMethodref_info extends CPInfo -// ino.end -// ino.class.CONSTANT_InterfaceMethodref_info.21876.body -{ - // ino.attribute.class_index.21880.declaration - private short class_index; - // ino.end - - // ino.attribute.name_and_type_index.21883.declaration - private short name_and_type_index; - // ino.end - - // ino.method.get_class_index.21886.definition - public short get_class_index() - // ino.end - // ino.method.get_class_index.21886.body - { - return this.class_index; - } - // ino.end - - // ino.method.get_name_and_type_index.21889.definition - public short get_name_and_type_index() - // ino.end - // ino.method.get_name_and_type_index.21889.body - { - return this.name_and_type_index; - } - // ino.end - - // ino.method.set_class_index.21892.definition - public void set_class_index(short t) - // ino.end - // ino.method.set_class_index.21892.body - { - this.class_index = t; - } - // ino.end - - // ino.method.set_name_and_type_index.21895.definition - public void set_name_and_type_index(short t) - // ino.end - // ino.method.set_name_and_type_index.21895.body - { - this.name_and_type_index = t; - } - // ino.end - - // ino.method.codegen.21898.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21898.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, class_index); - classfile.writeShort(f, name_and_type_index); - } - // ino.end - - @Override - // ino.method.toString.21901.definition - public String toString() - // ino.end - // ino.method.toString.21901.body - { - return "InterfaceMethodRef_info: class_index=" + class_index - + ", name_and_type_index=" + name_and_type_index; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Long_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Long_info.java deleted file mode 100755 index 49352928..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Long_info.java +++ /dev/null @@ -1,83 +0,0 @@ -// ino.module.CONSTANT_Long_info.8539.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Long_info.8539.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -// ino.end - -// ino.class.CONSTANT_Long_info.21904.declaration -public class CONSTANT_Long_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Long_info.21904.body -{ - // ino.attribute.high_bytes.21908.declaration - private int high_bytes; - // ino.end - - // ino.attribute.low_bytes.21911.declaration - private int low_bytes; - // ino.end - - // ino.method.get_high_bytes.21914.definition - public int get_high_bytes() - // ino.end - // ino.method.get_high_bytes.21914.body - { - return this.high_bytes; - } - // ino.end - - // ino.method.get_low_bytes.21917.definition - public int get_low_bytes() - // ino.end - // ino.method.get_low_bytes.21917.body - { - return this.low_bytes; - } - // ino.end - - // ino.method.set_high_bytes.21920.definition - public void set_high_bytes(int t) - // ino.end - // ino.method.set_high_bytes.21920.body - { - this.high_bytes = t; - } - // ino.end - - // ino.method.set_low_bytes.21923.definition - public void set_low_bytes(int t) - // ino.end - // ino.method.set_low_bytes.21923.body - { - this.low_bytes = t; - } - // ino.end - - // ino.method.codegen.21926.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21926.body - { - classfile.writeByte(f, get_tag()); - classfile.writeInt(f, high_bytes); - classfile.writeInt(f, low_bytes); - } - // ino.end - - // ino.method.toString.21929.definition - public String toString() - // ino.end - // ino.method.toString.21929.body - { - return "Long_Info: high_bytes=" + high_bytes - + ", low_bytes=" + low_bytes; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Methodref_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Methodref_info.java deleted file mode 100755 index b1b26164..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Methodref_info.java +++ /dev/null @@ -1,83 +0,0 @@ -// ino.module.CONSTANT_Methodref_info.8540.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Methodref_info.8540.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_Methodref_info.21932.declaration -public class CONSTANT_Methodref_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Methodref_info.21932.body -{ - // ino.attribute.class_index.21936.declaration - private short class_index; - // ino.end - - // ino.attribute.name_and_type_index.21939.declaration - private short name_and_type_index; - // ino.end - - // ino.method.get_class_index.21942.definition - public short get_class_index() - // ino.end - // ino.method.get_class_index.21942.body - { - return this.class_index; - } - // ino.end - - // ino.method.get_name_and_type_index.21945.definition - public short get_name_and_type_index() - // ino.end - // ino.method.get_name_and_type_index.21945.body - { - return this.name_and_type_index; - } - // ino.end - - // ino.method.set_class_index.21948.definition - public void set_class_index(short t) - // ino.end - // ino.method.set_class_index.21948.body - { - this.class_index = t; - } - // ino.end - - // ino.method.set_name_and_type_index.21951.definition - public void set_name_and_type_index(short t) - // ino.end - // ino.method.set_name_and_type_index.21951.body - { - this.name_and_type_index = t; - } - // ino.end - - // ino.method.codegen.21954.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21954.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, class_index); - classfile.writeShort(f, name_and_type_index); - } - // ino.end - - // ino.method.toString.21957.definition - public String toString() - // ino.end - // ino.method.toString.21957.body - { - return "MethodRef_Info: class_index=" + class_index - + ", name_and_type_index=" + name_and_type_index; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_NameAndType_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_NameAndType_info.java deleted file mode 100755 index d9115167..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_NameAndType_info.java +++ /dev/null @@ -1,83 +0,0 @@ -// ino.module.CONSTANT_NameAndType_info.8541.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_NameAndType_info.8541.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_NameAndType_info.21960.declaration -public class CONSTANT_NameAndType_info extends CPInfo -// ino.end -// ino.class.CONSTANT_NameAndType_info.21960.body -{ - // ino.attribute.name_index.21964.declaration - private short name_index; - // ino.end - - // ino.attribute.descriptor_index.21967.declaration - private short descriptor_index; - // ino.end - - // ino.method.get_name_index.21970.definition - public short get_name_index() - // ino.end - // ino.method.get_name_index.21970.body - { - return this.name_index; - } - // ino.end - - // ino.method.get_descriptor_index.21973.definition - public short get_descriptor_index() - // ino.end - // ino.method.get_descriptor_index.21973.body - { - return this.descriptor_index; - } - // ino.end - - // ino.method.set_name_index.21976.definition - public void set_name_index(short t) - // ino.end - // ino.method.set_name_index.21976.body - { - this.name_index = t; - } - // ino.end - - // ino.method.set_descriptor_index.21979.definition - public void set_descriptor_index(short t) - // ino.end - // ino.method.set_descriptor_index.21979.body - { - this.descriptor_index = t; - } - // ino.end - - // ino.method.codegen.21982.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.21982.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, name_index); - classfile.writeShort(f, descriptor_index); - } - // ino.end - - // ino.method.toString.21985.definition - public String toString() - // ino.end - // ino.method.toString.21985.body - { - return "NameAndType_Info: name_index=" + name_index - + ", descriptor_index=" + descriptor_index; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_String_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_String_info.java deleted file mode 100755 index 4d1c7046..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_String_info.java +++ /dev/null @@ -1,59 +0,0 @@ -// ino.module.CONSTANT_String_info.8542.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_String_info.8542.import -import java.io.FileOutputStream; -import java.io.IOException; -// ino.end -import java.io.OutputStream; - -// ino.class.CONSTANT_String_info.21988.declaration -public class CONSTANT_String_info extends CPInfo -// ino.end -// ino.class.CONSTANT_String_info.21988.body -{ - // ino.attribute.string_index.21992.declaration - private short string_index; - // ino.end - - // ino.method.get_string_index.21995.definition - public short get_string_index() - // ino.end - // ino.method.get_string_index.21995.body - { - return this.string_index; - } - // ino.end - - // ino.method.set_string_index.21998.definition - public void set_string_index(short t) - // ino.end - // ino.method.set_string_index.21998.body - { - this.string_index = t; - } - // ino.end - - // ino.method.codegen.22001.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.22001.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, string_index); - } - // ino.end - - // ino.method.toString.22004.definition - public String toString() - // ino.end - // ino.method.toString.22004.body - { - return "StringInfo: string_index="+ string_index; - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CONSTANT_Utf8_info.java b/src/de/dhbwstuttgart/bytecode/CONSTANT_Utf8_info.java deleted file mode 100755 index df9d2ef2..00000000 --- a/src/de/dhbwstuttgart/bytecode/CONSTANT_Utf8_info.java +++ /dev/null @@ -1,65 +0,0 @@ -// ino.module.CONSTANT_Utf8_info.8543.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CONSTANT_Utf8_info.8543.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.reflect.Array; -// ino.end - -// ino.class.CONSTANT_Utf8_info.22007.declaration -public class CONSTANT_Utf8_info extends CPInfo -// ino.end -// ino.class.CONSTANT_Utf8_info.22007.body -{ - // ino.attribute.bytes.22011.declaration - private byte[] bytes; - // ino.end - - // ino.method.get_bytes.22014.definition - public byte[] get_bytes() - // ino.end - // ino.method.get_bytes.22014.body - { - return this.bytes; - } - // ino.end - - // ino.method.set_bytes.22017.definition - public void set_bytes(byte[] t) - // ino.end - // ino.method.set_bytes.22017.body - { - this.bytes = t; - } - // ino.end - - // ino.method.codegen.22020.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.22020.body - { - classfile.writeByte(f, get_tag()); - classfile.writeShort(f, (short) Array.getLength(bytes)); - if (bytes != null) classfile.writeByteArray(f, bytes); - - } - // ino.end - - // ino.method.toString.22023.definition - public String toString() - // ino.end - // ino.method.toString.22023.body - { - if (bytes == null) - return "UTF-8 Konstante: size="+ Array.getLength(bytes) ; - else - return "UTF-8 Konstante: " + new String(bytes); - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/CPInfo.java b/src/de/dhbwstuttgart/bytecode/CPInfo.java deleted file mode 100755 index 425011a2..00000000 --- a/src/de/dhbwstuttgart/bytecode/CPInfo.java +++ /dev/null @@ -1,58 +0,0 @@ -// ino.module.CPInfo.8544.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CPInfo.8544.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import de.dhbwstuttgart.logger.Logger; - -// ino.end - -// ino.class.CPInfo.22026.declaration -public abstract class CPInfo implements ClassFileMember -// ino.end -// ino.class.CPInfo.22026.body -{ - // ino.attribute.codegenlog.22029.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22029.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.attribute.tag.22032.declaration - private byte tag; - // ino.end - - // ino.method.get_tag.22035.definition - public byte get_tag() - // ino.end - // ino.method.get_tag.22035.body - { - return this.tag; - } - // ino.end - - // ino.method.set_tag.22038.definition - public void set_tag(byte t) - // ino.end - // ino.method.set_tag.22038.body - { - this.tag = t; - } - // ino.end - - // ino.method.codegen.22041.declaration - @Override - public abstract void codegen(ClassFile classfile, OutputStream f) - throws IOException; - // ino.end - - // ino.method.toString.22044.declaration - public abstract String toString(); - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/ClassFile.java b/src/de/dhbwstuttgart/bytecode/ClassFile.java deleted file mode 100755 index 2ace9462..00000000 --- a/src/de/dhbwstuttgart/bytecode/ClassFile.java +++ /dev/null @@ -1,862 +0,0 @@ -//key_Menge funktioniert nicht PL 14-03-21 -//muss angeschaut werden - - -// ino.module.ClassFile.8531.package -package de.dhbwstuttgart.bytecode; -// ino.end -// ino.module.ClassFile.8531.import -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.reflect.Array; -import de.dhbwstuttgart.typeinference.Menge; -// ino.end - - - - - - - - - -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.Interface; -import de.dhbwstuttgart.syntaxtree.ParameterList; -import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.syntaxtree.statement.Assign; -import de.dhbwstuttgart.syntaxtree.statement.Block; -import de.dhbwstuttgart.syntaxtree.type.Type; - - -// ino.class.ClassFile.21492.description type=javadoc -/** - * Darstellung einer Klassendatei aus Sicht fuer die JVM. - * Generiert bei der Bytegenerierung Header, Constantenpool, usw. - * - * @author hama, scju - * - */ -// ino.end -// ino.class.ClassFile.21492.declaration -public class ClassFile -// ino.end -// ino.class.ClassFile.21492.body -{ - public boolean hamaAload0 = false; //hama: f�gt in Konstruktor und set Methode ein aload_0 ein wird f�r StoreSomethingParmCon ben�tigt - - // ino.attribute.codegenlog.21495.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.21495.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.attribute.magic.21498.decldescription type=line - // Header fuer Java Version 1.5.0_05 - // ino.end - // ino.attribute.magic.21498.declaration - private static int magic = 0xcafebabe; - // ino.end - // ino.attribute.minor_version.21501.declaration - public static short minor_version = 0; - // ino.end - // ino.attribute.major_version.21504.declaration - public static short major_version = 0x31; - // ino.end - - // ino.attribute.constant_pool.21507.declaration - private Menge constant_pool = new Menge(); - // ino.end - // ino.attribute.access_flags.21510.declaration - private short access_flags; - // ino.end - // ino.attribute.this_class.21513.declaration - private short this_class; - // ino.end - // ino.attribute.super_class.21516.declaration - private short super_class; - // ino.end - // ino.attribute.fields.21519.declaration - private Menge fields = new Menge(); - // ino.end - // ino.attribute.methods.21522.declaration - private Menge methods = new Menge(); - // ino.end - // ino.attribute.attributes.21525.declaration - private Menge attributes = new Menge(); - // ino.end - // ino.attribute.interfaces.21528.declaration - private Menge interfaces = new Menge(); - // ino.end - // ino.attribute.key_Menge.21531.declaration - private Menge key_Menge = new Menge(); - // ino.end - // ino.attribute.class_block.21534.declaration - private Menge class_block = new Menge(); - // ino.end - // ino.attribute.class_name.21537.declaration - private String class_name = new String("OUTPUT");//DEFAULTWERT PL 14-03-21 eingefuegt - // ino.end - // ino.attribute.super_class_name.21540.declaration - private String super_class_name = new String(); - // ino.end - // ino.attribute.constructor_founded.21543.declaration - private boolean constructor_founded = false; - // ino.end - - // ino.attribute.ConstantValueID.21546.decldescription type=line - // Wird fuer Konstante benoetigt (UTF-8 Eintrag mit - // "ConstantValue"), lediglich ein Mal pro Klasse - // ino.end - // ino.attribute.ConstantValueID.21546.declaration - private short ConstantValueID = 0; - // ino.end - - // ino.attribute.SignatureID.21549.decldescription type=line - // Wird fuer Signaturen (Generics) benoetigt - // Wiederrum nur ein UTF-8 Eintrag in der - // Konstantentabelle ("Signature") - // ino.end - // ino.attribute.SignatureID.21549.declaration - private short SignatureID = 0; - // ino.end - - - // ino.method.ClassFile.21552.defdescription type=javadoc - /** - * Default Konstruktor - */ - // ino.end - // ino.method.ClassFile.21552.definition - public ClassFile() - // ino.end - // ino.method.ClassFile.21552.body - { - - } - // ino.end - - // ino.method.ClassFile.21555.defdescription type=javadoc - /** - * Konstruktor, um Klasseninfos direkt aus dem Interface zu laden - */ - // ino.end - // ino.method.ClassFile.21555.definition - public ClassFile(Interface ic, SourceFile sf) - // ino.end - // ino.method.ClassFile.21555.body - { - // Modifier wird auf den Wert 0x601 festgelegt (INTERFACE+ABSTRACT+PUBLIC) - // Andere Werte machen hier keinen Sinn! - String pkgName = ""; - - if (sf.getPackageName() != null) { - pkgName = sf.getPackageName().get_codegen_UsedId() + "/"; - } - - this.add_interface(ic.getName(), pkgName, "java/lang/Object", (short) 0x601); - } - // ino.end - - // ino.method.add_CONSTANT_Utf8_info.21558.definition - public int add_CONSTANT_Utf8_info(String name) - // ino.end - // ino.method.add_CONSTANT_Utf8_info.21558.body - { - Key utf8_key = new Key(JVMCode.CONSTANT_Utf8, name); - if(!this.key_Menge.contains(utf8_key)) { - CONSTANT_Utf8_info utf8_info = new CONSTANT_Utf8_info(); - utf8_info.set_tag(JVMCode.CONSTANT_Utf8); - utf8_info.set_bytes(name.getBytes()); - this.key_Menge.addElement(utf8_key); - this.constant_pool.addElement(utf8_info); - } - return (this.key_Menge.indexOf(utf8_key)+1); - } - // ino.end - - // ino.method.add_CONSTANT_Class_info.21561.definition - public int add_CONSTANT_Class_info(String name) - // ino.end - // ino.method.add_CONSTANT_Class_info.21561.body - { - Key class_key = new Key(JVMCode.CONSTANT_Class, name); - if(!this.key_Menge.contains(class_key)) { - CONSTANT_Class_info class_info = new CONSTANT_Class_info(); - class_info.set_tag(JVMCode.CONSTANT_Class); - class_info.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); - this.key_Menge.addElement(class_key); - this.constant_pool.addElement(class_info); - } - return (this.key_Menge.indexOf(class_key)+1); - } - // ino.end - - // ino.method.add_CONSTANT_NameAndType_info.21564.definition - public int add_CONSTANT_NameAndType_info(String name, String param_type) - // ino.end - // ino.method.add_CONSTANT_NameAndType_info.21564.body - { - Key name_type_key = new Key(JVMCode.CONSTANT_NameAndType, name + param_type); - if(!this.key_Menge.contains(name_type_key)) - { - CONSTANT_NameAndType_info name_type = new CONSTANT_NameAndType_info(); - name_type.set_tag(JVMCode.CONSTANT_NameAndType); - name_type.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); - name_type.set_descriptor_index((short)this.add_CONSTANT_Utf8_info(param_type)); - this.key_Menge.addElement(name_type_key); - this.constant_pool.addElement(name_type); - } - return this.key_Menge.indexOf(name_type_key) + 1; - } - // ino.end - - // ino.method.add_CONSTANT_Integer_info.21567.definition - public int add_CONSTANT_Integer_info(int i) - // ino.end - // ino.method.add_CONSTANT_Integer_info.21567.body - { - Key key = new Key(JVMCode.CONSTANT_Integer, "" + i); - if(!this.key_Menge.contains(key)) { - CONSTANT_Integer_info info = new CONSTANT_Integer_info(); - info.set_tag(JVMCode.CONSTANT_Integer); - info.set_bytes(i); - this.key_Menge.addElement(key); - this.constant_pool.addElement(info); - } - return (this.key_Menge.indexOf(key)+1); - } - // ino.end - - // ino.method.add_CONSTANT_String_info.21570.definition - public int add_CONSTANT_String_info(String s) - // ino.end - // ino.method.add_CONSTANT_String_info.21570.body - { - Key key = new Key(JVMCode.CONSTANT_String, s); - if(!this.key_Menge.contains(key)) { - CONSTANT_String_info info = new CONSTANT_String_info(); - info.set_tag(JVMCode.CONSTANT_String); - info.set_string_index((short)this.add_CONSTANT_Utf8_info(s)); - this.key_Menge.addElement(key); - this.constant_pool.addElement(info); - } - return (this.key_Menge.indexOf(key)+1); - } - // ino.end - - // ino.method.add_class.21573.defdescription type=javadoc - /** - * Fuegt Informationen ueber eine neue Klasse ein. Gleichzeitig - * wird ein Default-Konstruktor angelegt. - */ - // ino.end - // ino.method.add_class.21573.definition - public void add_class(String name, String pkgName, String super_name, short acc_flag) - // ino.end - // ino.method.add_class.21573.body - { - codegenlog.debug("Klasse hinzugefuegt: " + name + ", Package: " + pkgName - + ", Superklasse: " + super_name + ", Accessflags: " + acc_flag); - addClassInfo(name, pkgName, super_name, acc_flag); - this.add_method_ref(super_name, "", "()V"); - } - // ino.end - - // ino.method.add_interface.21576.defdescription type=javadoc - /** - * Fuegt Informationen ueber ein neues Interface ein. - */ - // ino.end - // ino.method.add_interface.21576.definition - public void add_interface(String name, String pkgName, String super_name, short acc_flag) - // ino.end - // ino.method.add_interface.21576.body - { - codegenlog.debug("Interface hinzugefuegt: " + name + ", Package: " + pkgName - + ", Superklasse: " + super_name + ", Accessflags: " + acc_flag); - addClassInfo(name, pkgName, super_name, acc_flag); - } - // ino.end - - // ino.method.addClassInfo.21579.defdescription type=javadoc - /** - * Fuegt Informationen ueber Access-Flags, Superklasse usw. ein - */ - // ino.end - // ino.method.addClassInfo.21579.definition - private void addClassInfo(String name, String pkgName, String super_name, short acc_flag) - // ino.end - // ino.method.addClassInfo.21579.body - { - //feda 15.05.2007 - //Eine Klasse hat immer den Access Modifier Super 0x0020 - short tempAcc_super = 32; - acc_flag +=tempAcc_super; - - access_flags = acc_flag; - class_name = name; - super_class_name = super_name; - this.this_class = (short)add_CONSTANT_Class_info(pkgName+name); - this.super_class = (short)add_CONSTANT_Class_info(super_name); - } - // ino.end - - // ino.method.addSuperInterfaces.21582.defdescription type=javadoc - /** - * Fuegt die erweiterten (bei Interfaces) implementierten (bei Klassen) - * Interfaces ein. - */ - // ino.end - // ino.method.addSuperInterfaces.21582.definition - public void addSuperInterfaces(Menge superif) - // ino.end - // ino.method.addSuperInterfaces.21582.body - { - if (superif == null) return; - - for (int i=0; i< superif.size(); i++) { - UsedId uid = superif.elementAt(i); - - interfaces.addElement((short) add_CONSTANT_Class_info(uid.get_codegen_UsedId())); - } - } - // ino.end - - // ino.method.addGenerics.21585.defdescription type=javadoc - /** - * Fuegt ggf. Generics in den Klassendefintion selbst - * hinzu. - */ - // ino.end - // ino.method.addGenerics.21585.definition - public void addGenerics(Menge para, UsedId superClass, Menge superIf) - // ino.end - // ino.method.addGenerics.21585.body - { - if (para == null || para.size() == 0) return; - - SignatureInfo si = new SignatureInfo(para, superClass, superIf, this); - - attributes.addElement(si); - - } - // ino.end - - - // ino.method.add_method.21588.definition - public void add_method(String name, String param_type, ParameterList param, - Type type, Block block, short acc_flag, Menge paralist, boolean isAbstract) - throws JVMCodeException - // ino.end - // ino.method.add_method.21588.body - { - Menge method_attributes = new Menge(); - - - - // Sofern eine Signatur (Generic) in der Beschreibung der Methode vorkommt, - // Signatur generieren. - if(SignatureInfo.needsSignature( param, type)) - method_attributes.addElement(new SignatureInfo(param, type, this)); - - - codegenlog.debug("Methode hinzugefuegt: " + name + ", Parameter-Typ: " + param_type - + ", Accessflags: " + acc_flag); - - - CodeAttribute code = new CodeAttribute(class_name, acc_flag); - code.set_attribute_name_index((short)this.add_CONSTANT_Utf8_info("Code")); - if(name.equals("")) - { - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.invokespecial); - //hama: habe die obere original Zeile auskommentiert. - //Ich bekomme mit der obigen Zeile ein Fehler in der Verlinkung des - //ConstantPool (mit der unteren Zeile nicht) - //code.add_code_short(this.add_method_ref(super_class_name, name, param_type)); - code.add_code_short(this.add_method_ref(super_class_name, name, "()V")); - for(int i = 0; i < class_block.size(); i++) - { - class_block.elementAt(i).codegen(this, code, paralist); - } - if(param != null) param.codegen(this, code); - //hama: in dem Use Case StoreSomething wird vom Compiler ein - //aload_0 zuwening im Konstruktor erzeugt. Deshalb schreibe ich - //es hier hard rein. - //Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist - //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case - //in allen anderen F�llen wird f�lschlicher Weise das aload_0 einef�gt. - if(this.hamaAload0 == true) - { - byte b2 = 42; - Byte b1 = new Byte(b2); - code.add_code(b1); - - codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in Konstrukor eingef�gt!!!"); - } - //hama: bis hier experimentell - if(block != null) - { - block.codegen(this, code, paralist); - } - code.add_code(JVMCode.return_); - } - else - { - if(param != null) - { - param.codegen(this, code); - } - //hama: in dem Use Case StoreSomething wird vom Compiler ein - //aload_0 zuwening in der set Methode erzeugt. Deshalb schreibe ich - //es hier hard rein. - //Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist - //noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case - //in allen anderen F�llen einer Set Methode wird f�lschlicher Weise das - //aload_0 einef�gt. - if(this.hamaAload0 == true) - { - if(name.equals("set")) - { - byte b2 = 42; - Byte b1 = new Byte(b2); - code.add_code(b1); - - codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in die set Methode eingef�gt!!!"); - } - } - //hama: bis hier experimentell. - if(block != null) - { - block.codegen(this, code, paralist); - } - if(type != null && type.getName().equals("void")) - { - code.add_code(JVMCode.return_); - } - } - - // Code nur hinzufuegen, wenn nicht abstract (Interface!) - if (!isAbstract) method_attributes.addElement(code); - - // Methodeninformationen zusammenstellen - MethodInfo method = new MethodInfo(); - - //feda Accessflag muss beim 1 = Public sein. - if(name.equals("")) - { - acc_flag = 1; - } - method.set_access_flags(acc_flag); - method.set_name_index((short)add_CONSTANT_Utf8_info(name)); - method.set_descriptor_index((short)add_CONSTANT_Utf8_info(param_type)); - method.set_attributes(method_attributes); - - if(!this.methods.contains(method)) - { - methods.addElement(method); - } - } - // ino.end - - - - // ino.method.add_method_ref.21591.definition - public int add_method_ref(String cl_name, String name, String param_type) - // ino.end - // ino.method.add_method_ref.21591.body - { - - // Bei fully qualified names wichtig! - if (cl_name.contains(".")) cl_name = cl_name.replace(".", "/"); - - - codegenlog.debug("Methodenreferenz hinzugefuegt: " + name + ", Klasse: " + cl_name - + ", Paramter-Typ: " + param_type); - Key methodref_key = new Key(JVMCode.CONSTANT_Methodref, cl_name + name + param_type); - if(!this.key_Menge.contains(methodref_key)) - { - CONSTANT_Methodref_info methodref = new CONSTANT_Methodref_info(); - methodref.set_tag(JVMCode.CONSTANT_Methodref); - methodref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); - methodref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, param_type)); - this.key_Menge.addElement(methodref_key); - this.constant_pool.addElement(methodref); - } - return this.key_Menge.indexOf(methodref_key)+1; - } - // ino.end - - // ino.method.getConstantValueID.21594.defdescription type=javadoc - /** - * Gibt den NameIndex auf die UTF-8 Konstante "ConstantValue" zurueck, - * der fuer die Definition von Konstanten benoetigt wird. - */ - // ino.end - // ino.method.getConstantValueID.21594.definition - public short getConstantValueID() - // ino.end - // ino.method.getConstantValueID.21594.body - { - if (ConstantValueID == 0) { - ConstantValueID = (short) add_CONSTANT_Utf8_info("ConstantValue"); - } - - return ConstantValueID; - } - // ino.end - - // ino.method.getSignatureID.21597.defdescription type=javadoc - /** - * Gibt den NameIndex auf die UTF-8 Konstante "Signature" zurueck, - * der fuer die Definition von Konstanten benoetigt wird. - */ - // ino.end - // ino.method.getSignatureID.21597.definition - public short getSignatureID() - // ino.end - // ino.method.getSignatureID.21597.body - { - if (SignatureID == 0) { - SignatureID = (short) add_CONSTANT_Utf8_info("Signature"); - } - - return SignatureID; - } - // ino.end - - - - // ino.method.add_field.21600.definition - public void add_field(String name, String type, short acc_flag, Attribute attr) - // ino.end - // ino.method.add_field.21600.body - { - codegenlog.debug("Field hinzugefuegt: " + name + ", Typ: " + type + " ," + - "Accessflags: " + acc_flag); - FieldInfo field = new FieldInfo(); - field.set_Name(name); - field.set_Type(type); - field.set_Class_Name(class_name); - field.set_access_flags(acc_flag); - field.set_name_index((short)this.add_CONSTANT_Utf8_info(name)); - field.set_descriptor_index((short)this.add_CONSTANT_Utf8_info(type)); - if (attr != null) { - Menge vec = new Menge(); - vec.addElement(attr); - field.set_attributes(vec); - } - fields.addElement(field); - } - // ino.end - - // ino.method.add_field_ref.21603.definition - public int add_field_ref(String name, String cl_name, String type) - throws JVMCodeException - // ino.end - // ino.method.add_field_ref.21603.body - { - if(cl_name==null) cl_name = class_name; - if(type==null) { - int index = -1; - for(int i=0; i < fields.size();i++) - if(name.equals(fields.elementAt(i).get_Name())) { index = i; break; } - - if(index == -1) throw new JVMCodeException("JVMCodeException: ClassFile: int add_field_ref(String name, String cla_name, String atype)"); - - FieldInfo field = fields.elementAt(index); - type = field.get_Type(); - cl_name = field.get_Class_Name(); - - codegenlog.debug("Fieldref hinzugefuegt: " + name + ", Klassenname: " + cl_name - + ", Accessflags: " + field.get_access_flags()); - Key fieldref_key = new Key(JVMCode.CONSTANT_Fieldref, cl_name + name + type); - if(!this.key_Menge.contains(fieldref_key)) { - CONSTANT_Fieldref_info fieldref = new CONSTANT_Fieldref_info(); - fieldref.set_tag(JVMCode.CONSTANT_Fieldref); - fieldref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); - fieldref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, type)); - this.key_Menge.addElement(fieldref_key); - this.constant_pool.addElement(fieldref); - } - return (this.key_Menge.indexOf(fieldref_key)+1); - } - else { - codegenlog.debug("Fieldref hinzugefuegt: " + name + ", Klassenname: " + cl_name - + ", Typ: " + type); - Key fieldref_key = new Key(JVMCode.CONSTANT_Fieldref, cl_name + name + type); - if(!this.key_Menge.contains(fieldref_key)) { - CONSTANT_Fieldref_info fieldref = new CONSTANT_Fieldref_info(); - fieldref.set_tag(JVMCode.CONSTANT_Fieldref); - fieldref.set_class_index((short)this.add_CONSTANT_Class_info(cl_name)); - fieldref.set_name_and_type_index((short)this.add_CONSTANT_NameAndType_info(name, type)); - this.key_Menge.addElement(fieldref_key); - this.constant_pool.addElement(fieldref); - } - return (this.key_Menge.indexOf(fieldref_key)+1); - } - } - // ino.end - - // ino.method.set_constant_pool.21606.definition - public void set_constant_pool(Menge t) - // ino.end - // ino.method.set_constant_pool.21606.body - { this.constant_pool = t; } - // ino.end - // ino.method.set_access_flags.21609.definition - public void set_access_flags(short t) - // ino.end - // ino.method.set_access_flags.21609.body - { this.access_flags = t; } - // ino.end - // ino.method.set_this_class.21612.definition - public void set_this_class(short t) - // ino.end - // ino.method.set_this_class.21612.body - { this.this_class = t; } - // ino.end - // ino.method.set_super_class.21615.definition - public void set_super_class(short t) - // ino.end - // ino.method.set_super_class.21615.body - { this.super_class = t; } - // ino.end - // ino.method.set_fields.21618.definition - public void set_fields(Menge t) - // ino.end - // ino.method.set_fields.21618.body - { this.fields = t; } - // ino.end - // ino.method.set_methods.21621.definition - public void set_methods(Menge t) - // ino.end - // ino.method.set_methods.21621.body - { this.methods = t; } - // ino.end - // ino.method.set_attributes.21624.definition - public void set_attributes(Menge t) - // ino.end - // ino.method.set_attributes.21624.body - { this.attributes = t; } - // ino.end - - public void set_class_name(String cn) { - this.class_name = cn; - } - - // ino.method.set_constructor_founded.21627.definition - public void set_constructor_founded(boolean t) - // ino.end - // ino.method.set_constructor_founded.21627.body - { this.constructor_founded = t; } - // ino.end - // ino.method.add_classblock_Element.21630.definition - public void add_classblock_Element(Assign a) - // ino.end - // ino.method.add_classblock_Element.21630.body - { class_block.addElement(a); } - // ino.end - - // ino.method.get_constant_pool.21633.definition - public Menge get_constant_pool() - // ino.end - // ino.method.get_constant_pool.21633.body - { return this.constant_pool; } - // ino.end - // ino.method.get_access_flags.21636.definition - public short get_access_flags() - // ino.end - // ino.method.get_access_flags.21636.body - { return this.access_flags; } - // ino.end - // ino.method.get_this_class.21639.definition - public short get_this_class() - // ino.end - // ino.method.get_this_class.21639.body - { return this.this_class; } - // ino.end - // ino.method.get_super_class.21642.definition - public short get_super_class() - // ino.end - // ino.method.get_super_class.21642.body - { return this.super_class; } - // ino.end - // ino.method.get_fields.21645.definition - public Menge get_fields() - // ino.end - // ino.method.get_fields.21645.body - { return this.fields; } - // ino.end - // ino.method.get_methods.21648.definition - public Menge get_methods() - // ino.end - // ino.method.get_methods.21648.body - { return this.methods; } - // ino.end - // ino.method.get_attributes.21651.definition - public Menge get_attributes() - // ino.end - // ino.method.get_attributes.21651.body - { return this.attributes; } - // ino.end - // ino.method.get_key_Menge.21654.definition - public Menge get_key_Menge() - // ino.end - // ino.method.get_key_Menge.21654.body - { return this.key_Menge; } - // ino.end - // ino.method.get_constructor_founded.21657.definition - public boolean get_constructor_founded() - // ino.end - // ino.method.get_constructor_founded.21657.body - { return this.constructor_founded; } - // ino.end - // ino.method.get_constant_pool_element.21660.definition - public short get_constant_pool_element(byte b, String id) - // ino.end - // ino.method.get_constant_pool_element.21660.body - { return (short)this.key_Menge.indexOf(new Key(b, id)); } - // ino.end - // ino.method.get_class_block.21663.definition - public Menge get_class_block() - // ino.end - // ino.method.get_class_block.21663.body - { return this.class_block; } - // ino.end - - // ino.method.codegen.21666.definition - public void codegen() - throws JVMCodeException - // ino.end - // ino.method.codegen.21666.body - { - try - { - codegenlog.info("Generieren der Klasse: " + class_name); - - // Datei vorbereiten - //File file = new File(MyCompiler.getAPI().getOutputDir() - File file = new File ("/Users/pl/ResearchPapers/PIZZA+/Intersection_Types/" - //File file = new File ("/Users/pl/ResearchPapers/PIZZA+/JVM_Generics/Testfiles/" - + class_name + ".class"); - FileOutputStream f = new FileOutputStream(file); - - // Schreiben der Header-Infos - writeInt(f, magic); - writeShort(f, minor_version); - writeShort(f, major_version); - codegenlog.debug("Header: magic=" + Integer.toHexString(magic)); - codegenlog.debug("Header: minor_version=" + minor_version); - codegenlog.debug("Header: major_version=" + major_version); - codegenlog.info("Verarbeite Konstanten-Pool: " + (constant_pool.size()+1)); - - // Constant-Pool verarbeiten - writeShort(f, (short)(constant_pool.size() + 1)); - for(int i = 0; i < constant_pool.size(); i++) - { - codegenlog.debug((i+1) +". " + - constant_pool.elementAt(i).toString()); - constant_pool.elementAt(i).codegen(this, f); - } - - // Informationen ueber die Klasse selbst verarbeiten - writeShort(f, access_flags); - writeShort(f, this_class); - writeShort(f, super_class); - codegenlog.debug("Klasseninfos: access_flags=" + access_flags); - codegenlog.debug("Klasseninfos: this_class=" + this_class); - codegenlog.debug("Klasseninfos: super_class=" + super_class); - - // Interfaces verarbeiten - codegenlog.info("Verarbeite Interfaces: " + interfaces.size()); - writeShort(f, (short)interfaces.size()); - for (int i=0; i>> 24) & 255)); - f.write(((i >>> 16) & 255)); - f.write(((i >>> 8) & 255)); - f.write((i & 255)); - } - // ino.end - - // ino.method.writeShort.21672.definition - public void writeShort(OutputStream f, short i) - throws IOException - // ino.end - // ino.method.writeShort.21672.body - { - f.write((i >>> 8) & 255); - f.write(i & 255); - } - // ino.end - - // ino.method.writeByte.21675.definition - public void writeByte(OutputStream f, byte i) - throws IOException - // ino.end - // ino.method.writeByte.21675.body - { - f.write(i); - } - // ino.end - - // ino.method.writeByteArray.21678.definition - public void writeByteArray(OutputStream f, byte[] b) - throws IOException - // ino.end - // ino.method.writeByteArray.21678.body - { - for(int i = 0; i < Array.getLength(b); i++) f.write(b[i]); - } - // ino.end - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/ClassFileMember.java b/src/de/dhbwstuttgart/bytecode/ClassFileMember.java deleted file mode 100644 index 85d628b7..00000000 --- a/src/de/dhbwstuttgart/bytecode/ClassFileMember.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.dhbwstuttgart.bytecode; - -import java.io.IOException; -import java.io.OutputStream; - -import de.dhbwstuttgart.myexception.JVMCodeException; - -public interface ClassFileMember { - public void codegen(ClassFile cf, OutputStream out) throws JVMCodeException, IOException; -} diff --git a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java deleted file mode 100755 index 8cff67c4..00000000 --- a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java +++ /dev/null @@ -1,1098 +0,0 @@ -//PL 14-03-21: calculate_max_stack() duerfte nicht stimmen -//vorübergehend max_stack und set_max_stack eingeführt -//in codegen "short max_stack = calculate_max_stack();" auskommentiert -//muss wieder einkommentiert werden - -// ino.module.CodeAttribute.8532.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.CodeAttribute.8532.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.reflect.Array; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.type.Type; - -// ino.class.CodeAttribute.21681.declaration -public class CodeAttribute extends Attribute -// ino.end -// ino.class.CodeAttribute.21681.body -{ - // ino.attribute.code_Menge.21685.declaration - private Menge code_Menge = new Menge(); - // ino.end - // ino.attribute.exception_tables.21688.declaration - private Menge exception_tables = new Menge(); - // ino.end - // ino.attribute.attributes.21691.declaration - private Menge attributes = new Menge(); - // ino.end - // ino.attribute.local_name_Menge.21694.declaration - private Menge local_name_Menge = new Menge(); - // ino.end - // ino.attribute.local_type_Menge.21697.declaration - private Menge local_type_Menge = new Menge(); - // ino.end - - short max_stack; - - public CodeAttribute() { - super(); - } - - // ino.method.CodeAttribute.21700.definition - public CodeAttribute(String class_name, short acc_flags) - // ino.end - // ino.method.CodeAttribute.21700.body - { - if ((acc_flags & 8) == 0) - add_local(class_name, new Type("void",-1)); - } - // ino.end - - // ino.method.get_code_Menge.21703.definition - public Menge get_code_Menge() - // ino.end - // ino.method.get_code_Menge.21703.body - { - return this.code_Menge; - } - // ino.end - - // ino.method.get_exception_table_Menge.21706.definition - public Menge get_exception_table_Menge() - // ino.end - // ino.method.get_exception_table_Menge.21706.body - { - return this.exception_tables; - } - // ino.end - - // ino.method.get_attributes_Menge.21709.definition - public Menge get_attributes_Menge() - // ino.end - // ino.method.get_attributes_Menge.21709.body - { - return this.attributes; - } - // ino.end - - // ino.method.get_local_Menge.21712.definition - public Menge get_local_Menge() - // ino.end - // ino.method.get_local_Menge.21712.body - { - return this.local_name_Menge; - } - // ino.end - - // ino.method.get_code_length.21715.definition - public int get_code_length() - // ino.end - // ino.method.get_code_length.21715.body - { - return this.code_Menge.size(); - } - // ino.end - - // ino.method.add_local.21718.definition - public void add_local(String s, Type t) - // ino.end - // ino.method.add_local.21718.body - { - local_name_Menge.addElement(s); - local_type_Menge.addElement(t); - String type = t.getName(); - if (type.equals("double") || type.equals("long")) { - local_name_Menge.addElement(s); - local_type_Menge.addElement(t); - } - } - // ino.end - - // ino.method.add_code.21721.definition - public void add_code(Byte b) - // ino.end - // ino.method.add_code.21721.body - { - code_Menge.addElement(b); - } - // ino.end - - // ino.method.set_code.21724.definition - public void set_code(Byte b, int i) - // ino.end - // ino.method.set_code.21724.body - { - code_Menge.setElementAt(b, i); - } - // ino.end - - // ino.method.add_code_int.21727.definition - public void add_code_int(int i) - // ino.end - // ino.method.add_code_int.21727.body - { - code_Menge.addElement(new Byte((byte) ((i >> 24) & 255))); - code_Menge.addElement(new Byte((byte) ((i >> 16) & 255))); - code_Menge.addElement(new Byte((byte) ((i >> 8) & 255))); - code_Menge.addElement(new Byte((byte) (i & 255))); - } - // ino.end - - // ino.method.add_code_short.21730.definition - public void add_code_short(int s) - // ino.end - // ino.method.add_code_short.21730.body - { - code_Menge.addElement(new Byte((byte) ((s >> 8) & 255))); - code_Menge.addElement(new Byte((byte) (s & 255))); - } - // ino.end - - // ino.method.set_code_short.21733.definition - public void set_code_short(int s, int i) - // ino.end - // ino.method.set_code_short.21733.body - { - code_Menge.setElementAt(new Byte((byte) ((s >> 8) & 255)), i); - code_Menge.setElementAt(new Byte((byte) (s & 255)), i + 1); - } - // ino.end - - // ino.method.add_code_byte.21736.definition - public void add_code_byte(int b) - // ino.end - // ino.method.add_code_byte.21736.body - { - code_Menge.addElement(new Byte((byte) (b & 255))); - } - // ino.end - - // ino.method.add_code_byte_array.21739.definition - public void add_code_byte_array(byte[] b) - // ino.end - // ino.method.add_code_byte_array.21739.body - { - for (int i = 0; i < Array.getLength(b); i++) - code_Menge.addElement(new Byte(b[i])); - } - // ino.end - - // ino.method.get_indexOf_Var.21742.definition - public int get_indexOf_Var(String name) - // ino.end - // ino.method.get_indexOf_Var.21742.body - { - for (int i = 0; i < local_name_Menge.size(); i++) - if (name.equals((String) local_name_Menge.elementAt(i))) - return i; - return -1; - } - // ino.end - - // ino.method.get_TypeOf_Var.21745.definition - public Type get_TypeOf_Var(String name) - throws JVMCodeException - // ino.end - // ino.method.get_TypeOf_Var.21745.body - { - int index = get_indexOf_Var(name); - if (index != -1) - return (Type) local_type_Menge.elementAt(index); - throw new JVMCodeException( - "JVMCodeException: Code_attribute: Type get_TypeOf_Var(String name)"); - } - // ino.end - - // ino.method.get_attributes_length.21748.definition - public int get_attributes_length() - // ino.end - // ino.method.get_attributes_length.21748.body - { - int ret = 8;//2(max_stack)+2(max_locals)+4(code_length) - ret += code_Menge.size(); - ret += 2; //exception table length - ret += (exception_tables.size() * 8); - ret += 2; //Attribute_count - for (int i = 0; i < attributes.size(); i++) - ret += attributes.elementAt(i) - .get_attributes_length(); - return ret; - } - // ino.end - - // ino.method.set_exception_table_Menge.21751.definition - public void set_exception_table_Menge(Menge t) - // ino.end - // ino.method.set_exception_table_Menge.21751.body - { - this.exception_tables = t; - } - // ino.end - - // ino.method.set_attributes_Menge.21754.definition - public void set_attributes_Menge(Menge t) - // ino.end - // ino.method.set_attributes_Menge.21754.body - { - this.attributes = t; - } - // ino.end - - public void set_max_stack(short ms) { - max_stack = ms; - } - - - // ino.method.codegen.21757.definition - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException - // ino.end - // ino.method.codegen.21757.body - { - int attributes_length = this.get_attributes_length(); - //PL 14-03-21: muss wieder einkommentiert werden - //short max_stack = calculate_max_stack(); - classfile.writeShort(f, get_attribute_name_index()); - classfile.writeInt(f, attributes_length); - classfile.writeShort(f, max_stack); - classfile.writeShort(f, (short) local_name_Menge.size()); - classfile.writeInt(f, code_Menge.size()); - - codegenlog.debug("Code_attribute_name_index=" + get_attribute_name_index() - + ", Length=" + attributes_length + ", Max_Stack=" + max_stack - + ", Max_Locals=" + (short) local_name_Menge.size() - + ", Code_Length=" + code_Menge.size()); - - for (int i = 0; i < code_Menge.size(); i++) { // code_Menge - classfile.writeByte(f, (code_Menge.elementAt(i)).byteValue()); - } - - // Verarbeitung der Exception-Table - JVMCode.get_Command(code_Menge); - codegenlog.debug("Groesse der Exception-Table: " + exception_tables.size()); - classfile.writeShort(f, (short) exception_tables.size()); - for (int i = 0; i < exception_tables.size(); i++) { - exception_tables.elementAt(i).codegen(classfile,f); - } - - // Verarbeitung der Attribute - codegenlog.debug("Anzahl der Attribute: " + attributes.size()); - classfile.writeShort(f, (short) attributes.size()); - for (int i = 0; i < attributes.size(); i++) { // attributes - attributes.elementAt(i).codegen(classfile, f); - } - /* - * if(classfile.get_system_out()) { System.out.println(" locals:"); - * for(int i = 0; i < local_name_Menge.size(); i++) // locals - * System.out.println(" " + i +" " + - * (String)local_name_Menge.elementAt(i) + - * ((Type)local_type_Menge.elementAt(i)).get_Type()); } - */ - } - // ino.end - - // ino.method.calculate_max_stack.21760.definition - //PL 14-03-21: Diese Methode duerfte nicht stimmen - private short calculate_max_stack() - throws JVMCodeException - // ino.end - // ino.method.calculate_max_stack.21760.body - { - short max_stack = 0; - short stack = 0; - for (int y = 0; y < code_Menge.size(); y++) { - int x = JVMCode.bytes_to_int(code_Menge.elementAt(y)); - switch (x) { - case 0: { - break; - } - case 1: { - stack++; - break; - } - case 2: { - stack++; - break; - } - case 3: { - stack++; - break; - } - case 4: { - stack++; - break; - } - case 5: { - stack++; - break; - } - case 6: { - stack++; - break; - } - case 7: { - stack++; - break; - } - case 8: { - stack++; - break; - } - case 9: { - stack++; - break; - } - case 10: { - stack++; - break; - } - case 11: { - stack++; - break; - } - case 12: { - stack++; - break; - } - case 13: { - stack++; - break; - } - case 14: { - stack++; - break; - } - case 15: { - stack++; - break; - } - case 16: { - stack++; - y++; - break; - } - case 17: { - stack++; - y += 2; - break; - } - case 18: { - stack++; - y++; - break; - } - case 19: { - stack++; - y += 2; - break; - } - case 20: { - stack++; - y += 2; - break; - } - case 21: { - stack++; - y++; - break; - } - case 22: { - stack++; - y++; - break; - } - case 23: { - stack++; - y++; - break; - } - case 24: { - stack++; - y++; - break; - } - case 25: { - stack++; - y++; - break; - } - case 26: { - stack++; - break; - } - case 27: { - stack++; - break; - } - case 28: { - stack++; - break; - } - case 29: { - stack++; - break; - } - case 30: { - stack++; - break; - } - case 31: { - stack++; - break; - } - case 32: { - stack++; - break; - } - case 33: { - stack++; - break; - } - case 34: { - stack++; - break; - } - case 35: { - stack++; - break; - } - case 36: { - stack++; - break; - } - case 37: { - stack++; - break; - } - case 38: { - stack++; - break; - } - case 39: { - stack++; - break; - } - case 40: { - stack++; - break; - } - case 41: { - stack++; - break; - } - case 42: { - stack++; - break; - } - case 43: { - stack++; - break; - } - case 44: { - stack++; - break; - } - case 45: { - stack++; - break; - } - /* - * case 46: { System.out.print("iaload"); break; } case 47: { - * System.out.print("laload"); break; } case 48: { - * System.out.print("faload"); break; } case 49: { - * System.out.print("daload"); break; } case 50: { - * System.out.print("aaload"); break; } case 51: { - * System.out.print("baload"); break; } case 52: { - * System.out.print("caload"); break; } case 53: { - * System.out.print("saload"); break; } - */ - case 54: { - stack--; - y++; - break; - } - case 55: { - stack--; - y++; - break; - } - case 56: { - stack--; - y++; - break; - } - case 57: { - stack--; - y++; - break; - } - case 58: { - stack--; - y++; - break; - } - case 59: { - stack--; - break; - } - case 60: { - stack--; - break; - } - case 61: { - stack--; - break; - } - case 62: { - stack--; - break; - } - case 63: { - stack--; - break; - } - case 64: { - stack--; - break; - } - case 65: { - stack--; - break; - } - case 66: { - stack--; - break; - } - case 67: { - stack--; - break; - } - case 68: { - stack--; - break; - } - case 69: { - stack--; - break; - } - case 70: { - stack--; - break; - } - case 71: { - stack--; - break; - } - case 72: { - stack--; - break; - } - case 73: { - stack--; - break; - } - case 74: { - stack--; - break; - } - case 75: { - stack--; - break; - } - case 76: { - stack--; - break; - } - case 77: { - stack--; - break; - } - case 78: { - stack--; - break; - } - /* - * case 79: { System.out.print("iastore"); break; } case 80: { - * System.out.print("lastore"); break; } case 81: { - * System.out.print("fastore"); break; } case 82: { - * System.out.print("dastore"); break; } case 83: { - * System.out.print("aastore"); break; } case 84: { - * System.out.print("bastore"); break; } case 85: { - * System.out.print("castore"); break; } case 86: { - * System.out.print("sastore"); break; } - */ - case 87: { - stack--; - break; - } - case 88: { - stack -= 2; - break; - } - case 89: { - stack++; - break; - } - case 90: { - stack++; - break; - } - case 91: { - stack++; - break; - } - case 92: { - stack += 2; - break; - } - case 93: { - stack += 2; - break; - } - case 94: { - stack += 2; - break; - } - case 95: { - break; - } - case 96: { - stack--; - break; - } - case 97: { - stack--; - break; - } - case 98: { - stack--; - break; - } - case 99: { - stack--; - break; - } - case 100: { - stack--; - break; - } - case 101: { - stack--; - break; - } - case 102: { - stack--; - break; - } - case 103: { - stack--; - break; - } - case 104: { - stack--; - break; - } - case 105: { - stack--; - break; - } - case 106: { - stack--; - break; - } - case 107: { - stack--; - break; - } - case 108: { - stack--; - break; - } - case 109: { - stack--; - break; - } - case 110: { - stack--; - break; - } - case 111: { - stack--; - break; - } - case 112: { - stack--; - break; - } - case 113: { - stack--; - break; - } - case 114: { - stack--; - break; - } - case 115: { - stack--; - break; - } - case 116: { - break; - } - case 117: { - break; - } - case 118: { - break; - } - case 119: { - break; - } - case 120: { - stack--; - break; - } - case 121: { - stack--; - break; - } - case 122: { - stack--; - break; - } - case 123: { - stack--; - break; - } - case 124: { - stack--; - break; - } - case 125: { - stack--; - break; - } - case 126: { - stack--; - break; - } - case 127: { - stack--; - break; - } - case 128: { - stack--; - break; - } - case 129: { - stack--; - break; - } - case 130: { - stack--; - break; - } - case 131: { - stack--; - break; - } - case 132: { - y += 2; - break; - } - case 133: { - break; - } - case 134: { - break; - } - case 135: { - break; - } - case 136: { - break; - } - case 137: { - break; - } - case 138: { - break; - } - case 139: { - break; - } - case 140: { - break; - } - case 141: { - break; - } - case 142: { - break; - } - case 143: { - break; - } - case 144: { - break; - } - case 145: { - break; - } - case 146: { - break; - } - case 147: { - break; - } - case 148: { - stack--; - break; - } - case 149: { - stack--; - break; - } - case 150: { - stack--; - break; - } - case 151: { - stack--; - break; - } - case 152: { - stack--; - break; - } - case 153: { - stack--; - y += 2; - break; - } - case 154: { - stack--; - y += 2; - break; - } - case 155: { - stack--; - y += 2; - break; - } - case 156: { - stack--; - y += 2; - break; - } - case 157: { - stack--; - y += 2; - break; - } - case 158: { - stack--; - y += 2; - break; - } - case 159: { - stack -= 2; - y += 2; - break; - } - case 160: { - stack -= 2; - y += 2; - break; - } - case 161: { - stack -= 2; - y += 2; - break; - } - case 162: { - stack -= 2; - y += 2; - break; - } - case 163: { - stack -= 2; - y += 2; - break; - } - case 164: { - stack -= 2; - y += 2; - break; - } - case 165: { - stack -= 2; - y += 2; - break; - } - case 166: { - stack -= 2; - y += 2; - break; - } - case 167: { - y += 2; - break; - } - case 168: { - stack++; - y += 2; - break; - } - case 169: { - y++; - break; - } - // case 170: { System.out.print("tableswitch"); break; } - // case 171: { System.out.print("lookupswitch"); break; } - case 172: { - stack = 0; - break; - } - case 173: { - stack = 0; - break; - } - case 174: { - stack = 0; - break; - } - case 175: { - stack = 0; - break; - } - case 176: { - stack = 0; - break; - } - case 177: { - stack = 0; - break; - } - case 178: { - stack++; - y += 2; - break; - } - case 179: { - stack++; - y += 2; - break; - } - case 180: { - y += 2; - break; - } - case 181: { - stack += 2; - y += 2; - break; - } - case 182: { - y += 2; - stack = 0; - break; - } // invokevirtual - case 183: { - y += 2; - stack = 0; - break; - } // invokespecial - case 184: { - y += 2; - stack = 0; - break; - } // invokestatic - // case 185: { System.out.print("invokeinterface"); y+=4; break; } - case 187: { - stack++; - y += 2; - break; - } - case 188: { - y++; - break; - } - case 189: { - y += 2; - break; - } - case 190: { - break; - } - case 191: { - break; - } - case 192: { - y += 2; - break; - } - case 193: { - y += 2; - break; - } - case 194: { - stack--; - break; - } - case 195: { - stack--; - break; - } - // case 196: { System.out.print("wide"); break; } - case 197: { - y += 3; - break; - } - case 198: { - stack--; - y += 2; - break; - } - case 199: { - stack--; - y += 2; - break; - } - case 200: { - y += 4; - break; - } - case 201: { - stack++; - y += 4; - break; - } - // case 202: { System.out.print("breakpoint"); break; } - // case 254: { System.out.print("impdep1"); break; } - default: { - throw new JVMCodeException( - "JVMCodeException: Code_attribute: short calculate_max_stack()"); - } - } - if (stack > max_stack) - max_stack = stack; - } - return max_stack; - } - // ino.end - -// @Override -// public void codegen(ClassFile classfile, OutputStream f) -// throws JVMCodeException, IOException { -// throw new NotImplementedException(); -// } - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/ExceptionTable.java b/src/de/dhbwstuttgart/bytecode/ExceptionTable.java deleted file mode 100755 index 7d22e35f..00000000 --- a/src/de/dhbwstuttgart/bytecode/ExceptionTable.java +++ /dev/null @@ -1,58 +0,0 @@ -// ino.module.ExceptionTable.8545.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.ExceptionTable.8545.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - -// ino.class.ExceptionTable.22047.declaration -public class ExceptionTable implements ClassFileMember -// ino.end -// ino.class.ExceptionTable.22047.body -{ - // ino.attribute.codegenlog.22050.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22050.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - // ino.attribute.start_pc.22053.declaration - private short start_pc; - // ino.end - - // ino.attribute.end_pc.22056.declaration - private short end_pc; - // ino.end - - // ino.attribute.handler_pc.22059.declaration - private short handler_pc; - // ino.end - - // ino.attribute.catch_type.22062.declaration - private short catch_type; - // ino.end - - // ino.method.codegen.22065.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException - // ino.end - // ino.method.codegen.22065.body - { - classfile.writeShort(f, start_pc); - classfile.writeShort(f, end_pc); - classfile.writeShort(f, handler_pc); - classfile.writeShort(f, catch_type); - codegenlog.debug("Exception-Table: start_pc=" + start_pc - + ", end_pc=" + end_pc + ", handler_pc=" + handler_pc - + ", catch_type=" + catch_type); - } - // ino.end - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/FieldInfo.java b/src/de/dhbwstuttgart/bytecode/FieldInfo.java deleted file mode 100755 index 84a568c4..00000000 --- a/src/de/dhbwstuttgart/bytecode/FieldInfo.java +++ /dev/null @@ -1,203 +0,0 @@ -// ino.module.FieldInfo.8546.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.FieldInfo.8546.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - -import de.dhbwstuttgart.myexception.JVMCodeException; - -// ino.class.FieldInfo.22068.declaration -public class FieldInfo implements ClassFileMember -// ino.end -// ino.class.FieldInfo.22068.body -{ - // ino.attribute.codegenlog.22071.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22071.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.attribute.name.22074.declaration - private String name; - // ino.end - - // ino.attribute.type.22077.declaration - private String type; - // ino.end - - // ino.attribute.class_name.22080.declaration - private String class_name; - // ino.end - - // ino.attribute.access_flags.22083.declaration - private short access_flags; - // ino.end - - // ino.attribute.name_index.22086.declaration - private short name_index; - // ino.end - - // ino.attribute.descriptor_index.22089.declaration - private short descriptor_index; - // ino.end - - // ino.attribute.attributes.22092.declaration - private Menge attributes = new Menge(); // attribute - // ino.end - - // ino.method.get_Name.22095.definition - public String get_Name() - // ino.end - // ino.method.get_Name.22095.body - { - return this.name; - } - // ino.end - - // ino.method.get_Type.22098.definition - public String get_Type() - // ino.end - // ino.method.get_Type.22098.body - { - return this.type; - } - // ino.end - - // ino.method.get_Class_Name.22101.definition - public String get_Class_Name() - // ino.end - // ino.method.get_Class_Name.22101.body - { - return this.class_name; - } - // ino.end - - // ino.method.get_access_flags.22104.definition - public short get_access_flags() - // ino.end - // ino.method.get_access_flags.22104.body - { - return this.access_flags; - } - // ino.end - - // ino.method.get_name_index.22107.definition - public short get_name_index() - // ino.end - // ino.method.get_name_index.22107.body - { - return this.name_index; - } - // ino.end - - // ino.method.get_descriptor_index.22110.definition - public short get_descriptor_index() - // ino.end - // ino.method.get_descriptor_index.22110.body - { - return this.descriptor_index; - } - // ino.end - - // ino.method.get_attributes.22113.definition - public Menge get_attributes() - // ino.end - // ino.method.get_attributes.22113.body - { - return this.attributes; - } - // ino.end - - // ino.method.set_Name.22116.definition - public void set_Name(String t) - // ino.end - // ino.method.set_Name.22116.body - { - this.name = t; - } - // ino.end - - // ino.method.set_Type.22119.definition - public void set_Type(String t) - // ino.end - // ino.method.set_Type.22119.body - { - this.type = t; - } - // ino.end - - // ino.method.set_Class_Name.22122.definition - public void set_Class_Name(String t) - // ino.end - // ino.method.set_Class_Name.22122.body - { - this.class_name = t; - } - // ino.end - - // ino.method.set_access_flags.22125.definition - public void set_access_flags(short t) - // ino.end - // ino.method.set_access_flags.22125.body - { - this.access_flags = t; - } - // ino.end - - // ino.method.set_name_index.22128.definition - public void set_name_index(short t) - // ino.end - // ino.method.set_name_index.22128.body - { - this.name_index = t; - } - // ino.end - - // ino.method.set_descriptor_index.22131.definition - public void set_descriptor_index(short t) - // ino.end - // ino.method.set_descriptor_index.22131.body - { - this.descriptor_index = t; - } - // ino.end - - // ino.method.set_attributes.22134.definition - public void set_attributes(Menge t) - // ino.end - // ino.method.set_attributes.22134.body - { - this.attributes = t; - } - // ino.end - - // ino.method.codegen.22137.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws IOException, JVMCodeException - // ino.end - // ino.method.codegen.22137.body - { - classfile.writeShort(f, access_flags); - classfile.writeShort(f, name_index); - classfile.writeShort(f, descriptor_index); - codegenlog.debug("FieldInfo: acc_flag=" + access_flags - + ", name_index=" + name_index + ", descriptor_index=" - + descriptor_index + ", attributes_count=" + attributes.size()); - - classfile.writeShort(f, (short) attributes.size()); // attributes_count=0 - for (int i = 0; i < attributes.size(); i++) { // attributes - attributes.elementAt(i).codegen(classfile, f); - } - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/JVMCode.java b/src/de/dhbwstuttgart/bytecode/JVMCode.java deleted file mode 100755 index a1df3da4..00000000 --- a/src/de/dhbwstuttgart/bytecode/JVMCode.java +++ /dev/null @@ -1,1392 +0,0 @@ -// ino.module.JVMCode.8547.package -package de.dhbwstuttgart.bytecode; -// ino.end -// ino.module.JVMCode.8547.import -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - - -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; - -// ino.class.JVMCode.22140.description type=javadoc -/** - * Enthaelt die Befehle fuer die Umsetzung in JVM-Code und - * Konstantendefinitionen. - */ -// ino.end -// ino.class.JVMCode.22140.declaration -public class JVMCode -// ino.end -// ino.class.JVMCode.22140.body -{ - // ino.attribute.codegenlog.22143.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22143.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - // ino.attribute.bytecodelog.22146.decldescription type=line - // Logger fuer JVM Befehle - // ino.end - // ino.attribute.bytecodelog.22146.declaration - protected static Logger bytecodelog = Logger.getLogger("bytecode"); - // ino.end - - // ino.attribute.CONSTANT_Utf8.22149.decldescription type=line - // Konstanten fuer Items im Konstantenpool - // ino.end - // ino.attribute.CONSTANT_Utf8.22149.declaration - public static byte CONSTANT_Utf8 = 1; - // ino.end - // ino.attribute.CONSTANT_Integer.22152.declaration - public static byte CONSTANT_Integer = 3; - // ino.end - // ino.attribute.CONSTANT_Float.22155.declaration - public static byte CONSTANT_Float = 4; - // ino.end - // ino.attribute.CONSTANT_Long.22158.declaration - public static byte CONSTANT_Long = 5; - // ino.end - // ino.attribute.CONSTANT_Double.22161.declaration - public static byte CONSTANT_Double = 6; - // ino.end - // ino.attribute.CONSTANT_Class.22164.declaration - public static byte CONSTANT_Class = 7; - // ino.end - // ino.attribute.CONSTANT_String.22167.declaration - public static byte CONSTANT_String = 8; - // ino.end - // ino.attribute.CONSTANT_Fieldref.22170.declaration - public static byte CONSTANT_Fieldref = 9; - // ino.end - // ino.attribute.CONSTANT_Methodref.22173.declaration - public static byte CONSTANT_Methodref = 10; - // ino.end - // ino.attribute.CONSTANT_InterfaceMethodref.22176.declaration - public static byte CONSTANT_InterfaceMethodref = 11; - // ino.end - // ino.attribute.CONSTANT_NameAndType.22179.declaration - public static byte CONSTANT_NameAndType = 12; - // ino.end - - // ino.attribute.nop.22182.decldescription type=line - // Opcodes - // ino.end - // ino.attribute.nop.22182.declaration - public static Byte nop = new Byte((byte)0); - // ino.end - // ino.attribute.aconst_null.22185.declaration - public static Byte aconst_null = new Byte((byte)1); - // ino.end - // ino.attribute.iconst_m1.22188.declaration - public static Byte iconst_m1 = new Byte((byte)2); - // ino.end - // ino.attribute.iconst_0.22191.declaration - public static Byte iconst_0 = new Byte((byte)3); - // ino.end - // ino.attribute.iconst_1.22194.declaration - public static Byte iconst_1 = new Byte((byte)4); - // ino.end - // ino.attribute.iconst_2.22197.declaration - public static Byte iconst_2 = new Byte((byte)5); - // ino.end - // ino.attribute.iconst_3.22200.declaration - public static Byte iconst_3 = new Byte((byte)6); - // ino.end - // ino.attribute.iconst_4.22203.declaration - public static Byte iconst_4 = new Byte((byte)7); - // ino.end - // ino.attribute.iconst_5.22206.declaration - public static Byte iconst_5 = new Byte((byte)8); - // ino.end - // ino.attribute.lconst_0.22209.declaration - public static Byte lconst_0 = new Byte((byte)9); - // ino.end - // ino.attribute.lconst_1.22212.declaration - public static Byte lconst_1 = new Byte((byte)10); - // ino.end - // ino.attribute.fconst_0.22215.declaration - public static Byte fconst_0 = new Byte((byte)11); - // ino.end - // ino.attribute.fconst_1.22218.declaration - public static Byte fconst_1 = new Byte((byte)12); - // ino.end - // ino.attribute.fconst_2.22221.declaration - public static Byte fconst_2 = new Byte((byte)13); - // ino.end - // ino.attribute.dconst_0.22224.declaration - public static Byte dconst_0 = new Byte((byte)14); - // ino.end - // ino.attribute.dconst_1.22227.declaration - public static Byte dconst_1 = new Byte((byte)15); - // ino.end - // ino.attribute.bipush.22230.declaration - public static Byte bipush = new Byte((byte)16); - // ino.end - // ino.attribute.sipush.22233.declaration - public static Byte sipush = new Byte((byte)17); - // ino.end - // ino.attribute.ldc.22236.declaration - public static Byte ldc = new Byte((byte)18); - // ino.end - // ino.attribute.ldc_w.22239.declaration - public static Byte ldc_w = new Byte((byte)19); - // ino.end - // ino.attribute.ldc2_w.22242.declaration - public static Byte ldc2_w = new Byte((byte)20); - // ino.end - // ino.attribute.iload.22245.declaration - public static Byte iload = new Byte((byte)21); - // ino.end - // ino.attribute.lload.22248.declaration - public static Byte lload = new Byte((byte)22); - // ino.end - // ino.attribute.fload.22251.declaration - public static Byte fload = new Byte((byte)23); - // ino.end - // ino.attribute.dload.22254.declaration - public static Byte dload = new Byte((byte)24); - // ino.end - // ino.attribute.aload.22257.declaration - public static Byte aload = new Byte((byte)25); - // ino.end - // ino.attribute.iload_0.22260.declaration - public static Byte iload_0 = new Byte((byte)26); - // ino.end - // ino.attribute.iload_1.22263.declaration - public static Byte iload_1 = new Byte((byte)27); - // ino.end - // ino.attribute.iload_2.22266.declaration - public static Byte iload_2 = new Byte((byte)28); - // ino.end - // ino.attribute.iload_3.22269.declaration - public static Byte iload_3 = new Byte((byte)29); - // ino.end - // ino.attribute.lload_0.22272.declaration - public static Byte lload_0 = new Byte((byte)30); - // ino.end - // ino.attribute.lload_1.22275.declaration - public static Byte lload_1 = new Byte((byte)31); - // ino.end - // ino.attribute.lload_2.22278.declaration - public static Byte lload_2 = new Byte((byte)32); - // ino.end - // ino.attribute.lload_3.22281.declaration - public static Byte lload_3 = new Byte((byte)33); - // ino.end - // ino.attribute.fload_0.22284.declaration - public static Byte fload_0 = new Byte((byte)34); - // ino.end - // ino.attribute.fload_1.22287.declaration - public static Byte fload_1 = new Byte((byte)35); - // ino.end - // ino.attribute.fload_2.22290.declaration - public static Byte fload_2 = new Byte((byte)36); - // ino.end - // ino.attribute.fload_3.22293.declaration - public static Byte fload_3 = new Byte((byte)37); - // ino.end - // ino.attribute.dload_0.22296.declaration - public static Byte dload_0 = new Byte((byte)38); - // ino.end - // ino.attribute.dload_1.22299.declaration - public static Byte dload_1 = new Byte((byte)39); - // ino.end - // ino.attribute.dload_2.22302.declaration - public static Byte dload_2 = new Byte((byte)40); - // ino.end - // ino.attribute.dload_3.22305.declaration - public static Byte dload_3 = new Byte((byte)41); - // ino.end - // ino.attribute.aload_0.22308.declaration - public static Byte aload_0 = new Byte((byte)42); - // ino.end - // ino.attribute.aload_1.22311.declaration - public static Byte aload_1 = new Byte((byte)43); - // ino.end - // ino.attribute.aload_2.22314.declaration - public static Byte aload_2 = new Byte((byte)44); - // ino.end - // ino.attribute.aload_3.22317.declaration - public static Byte aload_3 = new Byte((byte)45); - // ino.end - // ino.attribute.iaload.22320.declaration - public static Byte iaload = new Byte((byte)46); - // ino.end - // ino.attribute.laload.22323.declaration - public static Byte laload = new Byte((byte)47); - // ino.end - // ino.attribute.faload.22326.declaration - public static Byte faload = new Byte((byte)48); - // ino.end - // ino.attribute.daload.22329.declaration - public static Byte daload = new Byte((byte)49); - // ino.end - // ino.attribute.aaload.22332.declaration - public static Byte aaload = new Byte((byte)50); - // ino.end - // ino.attribute.baload.22335.declaration - public static Byte baload = new Byte((byte)51); - // ino.end - // ino.attribute.caload.22338.declaration - public static Byte caload = new Byte((byte)52); - // ino.end - // ino.attribute.saload.22341.declaration - public static Byte saload = new Byte((byte)53); - // ino.end - // ino.attribute.istore.22344.declaration - public static Byte istore = new Byte((byte)54); - // ino.end - // ino.attribute.lstore.22347.declaration - public static Byte lstore = new Byte((byte)55); - // ino.end - // ino.attribute.fstore.22350.declaration - public static Byte fstore = new Byte((byte)56); - // ino.end - // ino.attribute.dstore.22353.declaration - public static Byte dstore = new Byte((byte)57); - // ino.end - // ino.attribute.astore.22356.declaration - public static Byte astore = new Byte((byte)58); - // ino.end - // ino.attribute.istore_0.22359.declaration - public static Byte istore_0 = new Byte((byte)59); - // ino.end - // ino.attribute.istore_1.22362.declaration - public static Byte istore_1 = new Byte((byte)60); - // ino.end - // ino.attribute.istore_2.22365.declaration - public static Byte istore_2 = new Byte((byte)61); - // ino.end - // ino.attribute.istore_3.22368.declaration - public static Byte istore_3 = new Byte((byte)62); - // ino.end - // ino.attribute.lstore_0.22371.declaration - public static Byte lstore_0 = new Byte((byte)63); - // ino.end - // ino.attribute.lstore_1.22374.declaration - public static Byte lstore_1 = new Byte((byte)64); - // ino.end - // ino.attribute.lstore_2.22377.declaration - public static Byte lstore_2 = new Byte((byte)65); - // ino.end - // ino.attribute.lstore_3.22380.declaration - public static Byte lstore_3 = new Byte((byte)66); - // ino.end - // ino.attribute.fstore_0.22383.declaration - public static Byte fstore_0 = new Byte((byte)67); - // ino.end - // ino.attribute.fstore_1.22386.declaration - public static Byte fstore_1 = new Byte((byte)68); - // ino.end - // ino.attribute.fstore_2.22389.declaration - public static Byte fstore_2 = new Byte((byte)69); - // ino.end - // ino.attribute.fstore_3.22392.declaration - public static Byte fstore_3 = new Byte((byte)70); - // ino.end - // ino.attribute.dstore_0.22395.declaration - public static Byte dstore_0 = new Byte((byte)71); - // ino.end - // ino.attribute.dstore_1.22398.declaration - public static Byte dstore_1 = new Byte((byte)72); - // ino.end - // ino.attribute.dstore_2.22401.declaration - public static Byte dstore_2 = new Byte((byte)73); - // ino.end - // ino.attribute.dstore_3.22404.declaration - public static Byte dstore_3 = new Byte((byte)74); - // ino.end - // ino.attribute.astore_0.22407.declaration - public static Byte astore_0 = new Byte((byte)75); - // ino.end - // ino.attribute.astore_1.22410.declaration - public static Byte astore_1 = new Byte((byte)76); - // ino.end - // ino.attribute.astore_2.22413.declaration - public static Byte astore_2 = new Byte((byte)77); - // ino.end - // ino.attribute.astore_3.22416.declaration - public static Byte astore_3 = new Byte((byte)78); - // ino.end - // ino.attribute.iastore.22419.declaration - public static Byte iastore = new Byte((byte)79); - // ino.end - // ino.attribute.lastore.22422.declaration - public static Byte lastore = new Byte((byte)80); - // ino.end - // ino.attribute.fastore.22425.declaration - public static Byte fastore = new Byte((byte)81); - // ino.end - // ino.attribute.dastore.22428.declaration - public static Byte dastore = new Byte((byte)82); - // ino.end - // ino.attribute.aastore.22431.declaration - public static Byte aastore = new Byte((byte)83); - // ino.end - // ino.attribute.bastore.22434.declaration - public static Byte bastore = new Byte((byte)84); - // ino.end - // ino.attribute.castore.22437.declaration - public static Byte castore = new Byte((byte)85); - // ino.end - // ino.attribute.sastore.22440.declaration - public static Byte sastore = new Byte((byte)86); - // ino.end - // ino.attribute.pop.22443.declaration - public static Byte pop = new Byte((byte)87); - // ino.end - // ino.attribute.pop2.22446.declaration - public static Byte pop2 = new Byte((byte)88); - // ino.end - // ino.attribute.dup.22449.declaration - public static Byte dup = new Byte((byte)89); - // ino.end - // ino.attribute.dup_x1.22452.declaration - public static Byte dup_x1 = new Byte((byte)90); - // ino.end - // ino.attribute.dup_x2.22455.declaration - public static Byte dup_x2 = new Byte((byte)91); - // ino.end - // ino.attribute.dup2.22458.declaration - public static Byte dup2 = new Byte((byte)92); - // ino.end - // ino.attribute.dup2_x1.22461.declaration - public static Byte dup2_x1 = new Byte((byte)93); - // ino.end - // ino.attribute.dup2_x2.22464.declaration - public static Byte dup2_x2 = new Byte((byte)94); - // ino.end - // ino.attribute.swap.22467.declaration - public static Byte swap = new Byte((byte)95); - // ino.end - // ino.attribute.iadd.22470.declaration - public static Byte iadd = new Byte((byte)96); - // ino.end - // ino.attribute.ladd.22473.declaration - public static Byte ladd = new Byte((byte)97); - // ino.end - // ino.attribute.fadd.22476.declaration - public static Byte fadd = new Byte((byte)98); - // ino.end - // ino.attribute.dadd.22479.declaration - public static Byte dadd = new Byte((byte)99); - // ino.end - // ino.attribute.isub.22482.declaration - public static Byte isub = new Byte((byte)100); - // ino.end - // ino.attribute.lsub.22485.declaration - public static Byte lsub = new Byte((byte)101); - // ino.end - // ino.attribute.fsub.22488.declaration - public static Byte fsub = new Byte((byte)102); - // ino.end - // ino.attribute.dsub.22491.declaration - public static Byte dsub = new Byte((byte)103); - // ino.end - // ino.attribute.imul.22494.declaration - public static Byte imul = new Byte((byte)104); - // ino.end - // ino.attribute.lmul.22497.declaration - public static Byte lmul = new Byte((byte)105); - // ino.end - // ino.attribute.fmul.22500.declaration - public static Byte fmul = new Byte((byte)106); - // ino.end - // ino.attribute.dmul.22503.declaration - public static Byte dmul = new Byte((byte)107); - // ino.end - // ino.attribute.idiv.22506.declaration - public static Byte idiv = new Byte((byte)108); - // ino.end - // ino.attribute.ldiv.22509.declaration - public static Byte ldiv = new Byte((byte)109); - // ino.end - // ino.attribute.fdiv.22512.declaration - public static Byte fdiv = new Byte((byte)110); - // ino.end - // ino.attribute.ddiv.22515.declaration - public static Byte ddiv = new Byte((byte)111); - // ino.end - // ino.attribute.irem.22518.declaration - public static Byte irem = new Byte((byte)112); - // ino.end - // ino.attribute.lrem.22521.declaration - public static Byte lrem = new Byte((byte)113); - // ino.end - // ino.attribute.frem.22524.declaration - public static Byte frem = new Byte((byte)114); - // ino.end - // ino.attribute.drem.22527.declaration - public static Byte drem = new Byte((byte)115); - // ino.end - // ino.attribute.ineg.22530.declaration - public static Byte ineg = new Byte((byte)116); - // ino.end - // ino.attribute.lneg.22533.declaration - public static Byte lneg = new Byte((byte)117); - // ino.end - // ino.attribute.fneg.22536.declaration - public static Byte fneg = new Byte((byte)118); - // ino.end - // ino.attribute.dneg.22539.declaration - public static Byte dneg = new Byte((byte)119); - // ino.end - // ino.attribute.ishl.22542.declaration - public static Byte ishl = new Byte((byte)120); - // ino.end - // ino.attribute.lshl.22545.declaration - public static Byte lshl = new Byte((byte)121); - // ino.end - // ino.attribute.ishr.22548.declaration - public static Byte ishr = new Byte((byte)122); - // ino.end - // ino.attribute.lshr.22551.declaration - public static Byte lshr = new Byte((byte)123); - // ino.end - // ino.attribute.iushr.22554.declaration - public static Byte iushr = new Byte((byte)124); - // ino.end - // ino.attribute.lushr.22557.declaration - public static Byte lushr = new Byte((byte)125); - // ino.end - // ino.attribute.iand.22560.declaration - public static Byte iand = new Byte((byte)126); - // ino.end - // ino.attribute.land.22563.declaration - public static Byte land = new Byte((byte)127); - // ino.end - // ino.attribute.ior.22566.declaration - public static Byte ior = new Byte((byte)128); - // ino.end - // ino.attribute.lor.22569.declaration - public static Byte lor = new Byte((byte)129); - // ino.end - // ino.attribute.ixor.22572.declaration - public static Byte ixor = new Byte((byte)130); - // ino.end - // ino.attribute.lxor.22575.declaration - public static Byte lxor = new Byte((byte)131); - // ino.end - // ino.attribute.iinc.22578.declaration - public static Byte iinc = new Byte((byte)132); - // ino.end - // ino.attribute.i2l.22581.declaration - public static Byte i2l = new Byte((byte)133); - // ino.end - // ino.attribute.i2f.22584.declaration - public static Byte i2f = new Byte((byte)134); - // ino.end - // ino.attribute.i2d.22587.declaration - public static Byte i2d = new Byte((byte)135); - // ino.end - // ino.attribute.l2i.22590.declaration - public static Byte l2i = new Byte((byte)136); - // ino.end - // ino.attribute.l2f.22593.declaration - public static Byte l2f = new Byte((byte)137); - // ino.end - // ino.attribute.l2d.22596.declaration - public static Byte l2d = new Byte((byte)138); - // ino.end - // ino.attribute.f2i.22599.declaration - public static Byte f2i = new Byte((byte)139); - // ino.end - // ino.attribute.f2l.22602.declaration - public static Byte f2l = new Byte((byte)140); - // ino.end - // ino.attribute.f2d.22605.declaration - public static Byte f2d = new Byte((byte)141); - // ino.end - // ino.attribute.d2i.22608.declaration - public static Byte d2i = new Byte((byte)142); - // ino.end - // ino.attribute.d2l.22611.declaration - public static Byte d2l = new Byte((byte)143); - // ino.end - // ino.attribute.d2f.22614.declaration - public static Byte d2f = new Byte((byte)144); - // ino.end - // ino.attribute.i2b.22617.declaration - public static Byte i2b = new Byte((byte)145); - // ino.end - // ino.attribute.i2c.22620.declaration - public static Byte i2c = new Byte((byte)146); - // ino.end - // ino.attribute.i2s.22623.declaration - public static Byte i2s = new Byte((byte)147); - // ino.end - // ino.attribute.lcmp.22626.declaration - public static Byte lcmp = new Byte((byte)148); - // ino.end - // ino.attribute.fcmpl.22629.declaration - public static Byte fcmpl = new Byte((byte)149); - // ino.end - // ino.attribute.fcmpg.22632.declaration - public static Byte fcmpg = new Byte((byte)150); - // ino.end - // ino.attribute.dcmpl.22635.declaration - public static Byte dcmpl = new Byte((byte)151); - // ino.end - // ino.attribute.dcmpg.22638.declaration - public static Byte dcmpg = new Byte((byte)152); - // ino.end - // ino.attribute.ifeq.22641.declaration - public static Byte ifeq = new Byte((byte)153); - // ino.end - // ino.attribute.ifne.22644.declaration - public static Byte ifne = new Byte((byte)154); - // ino.end - // ino.attribute.iflt.22647.declaration - public static Byte iflt = new Byte((byte)155); - // ino.end - // ino.attribute.ifge.22650.declaration - public static Byte ifge = new Byte((byte)156); - // ino.end - // ino.attribute.ifgt.22653.declaration - public static Byte ifgt = new Byte((byte)157); - // ino.end - // ino.attribute.ifle.22656.declaration - public static Byte ifle = new Byte((byte)158); - // ino.end - // ino.attribute.if_icmpeq.22659.declaration - public static Byte if_icmpeq = new Byte((byte)159); - // ino.end - // ino.attribute.if_icmpne.22662.declaration - public static Byte if_icmpne = new Byte((byte)160); - // ino.end - // ino.attribute.if_icmplt.22665.declaration - public static Byte if_icmplt = new Byte((byte)161); - // ino.end - // ino.attribute.if_icmpge.22668.declaration - public static Byte if_icmpge = new Byte((byte)162); - // ino.end - // ino.attribute.if_icmpgt.22671.declaration - public static Byte if_icmpgt = new Byte((byte)163); - // ino.end - // ino.attribute.if_icmple.22674.declaration - public static Byte if_icmple = new Byte((byte)164); - // ino.end - // ino.attribute.if_acmpeq.22677.declaration - public static Byte if_acmpeq = new Byte((byte)165); - // ino.end - // ino.attribute.if_acmpne.22680.declaration - public static Byte if_acmpne = new Byte((byte)166); - // ino.end - // ino.attribute.goto_.22683.declaration - public static Byte goto_ = new Byte((byte)167); - // ino.end - // ino.attribute.jsr.22686.declaration - public static Byte jsr = new Byte((byte)168); - // ino.end - // ino.attribute.ret.22689.declaration - public static Byte ret = new Byte((byte)169); - // ino.end - // ino.attribute.tableswitch.22692.declaration - public static Byte tableswitch = new Byte((byte)170); - // ino.end - // ino.attribute.lookupswitch.22695.declaration - public static Byte lookupswitch = new Byte((byte)171); - // ino.end - // ino.attribute.ireturn.22698.declaration - public static Byte ireturn = new Byte((byte)172); - // ino.end - // ino.attribute.lreturn.22701.declaration - public static Byte lreturn = new Byte((byte)173); - // ino.end - // ino.attribute.freturn.22704.declaration - public static Byte freturn = new Byte((byte)174); - // ino.end - // ino.attribute.dreturn.22707.declaration - public static Byte dreturn = new Byte((byte)175); - // ino.end - // ino.attribute.areturn.22710.declaration - public static Byte areturn = new Byte((byte)176); - // ino.end - // ino.attribute.return_.22713.declaration - public static Byte return_ = new Byte((byte)177); - // ino.end - // ino.attribute.getstatic.22716.declaration - public static Byte getstatic = new Byte((byte)178); - // ino.end - // ino.attribute.putstatic.22719.declaration - public static Byte putstatic = new Byte((byte)179); - // ino.end - // ino.attribute.getfield.22722.declaration - public static Byte getfield = new Byte((byte)180); - // ino.end - // ino.attribute.putfield.22725.declaration - public static Byte putfield = new Byte((byte)181); - // ino.end - // ino.attribute.invokevirtual.22728.declaration - public static Byte invokevirtual = new Byte((byte)182); - // ino.end - // ino.attribute.invokespecial.22731.declaration - public static Byte invokespecial = new Byte((byte)183); - // ino.end - // ino.attribute.invokestatic.22734.declaration - public static Byte invokestatic = new Byte((byte)184); - // ino.end - // ino.attribute.invokeinterface.22737.declaration - public static Byte invokeinterface = new Byte((byte)185); - // ino.end - // ino.attribute.new_.22740.declaration - public static Byte new_ = new Byte((byte)187); - // ino.end - // ino.attribute.newarray.22743.declaration - public static Byte newarray = new Byte((byte)188); - // ino.end - // ino.attribute.anewarray.22746.declaration - public static Byte anewarray = new Byte((byte)189); - // ino.end - // ino.attribute.arraylength.22749.declaration - public static Byte arraylength = new Byte((byte)190); - // ino.end - // ino.attribute.athrow.22752.declaration - public static Byte athrow = new Byte((byte)191); - // ino.end - // ino.attribute.checkcast.22755.declaration - public static Byte checkcast = new Byte((byte)192); - // ino.end - // ino.attribute.instanceof_.22758.declaration - public static Byte instanceof_ = new Byte((byte)193); - // ino.end - // ino.attribute.monitorenter.22761.declaration - public static Byte monitorenter = new Byte((byte)194); - // ino.end - // ino.attribute.monitorexit.22764.declaration - public static Byte monitorexit = new Byte((byte)195); - // ino.end - // ino.attribute.wide.22767.declaration - public static Byte wide = new Byte((byte)196); - // ino.end - // ino.attribute.multianewarray.22770.declaration - public static Byte multianewarray = new Byte((byte)197); - // ino.end - // ino.attribute.ifnull.22773.declaration - public static Byte ifnull = new Byte((byte)198); - // ino.end - // ino.attribute.ifnonnull.22776.declaration - public static Byte ifnonnull = new Byte((byte)199); - // ino.end - // ino.attribute.goto_w.22779.declaration - public static Byte goto_w = new Byte((byte)200); - // ino.end - // ino.attribute.jsr_w.22782.declaration - public static Byte jsr_w = new Byte((byte)201); - // ino.end - // ino.attribute.breakpoint.22785.declaration - public static Byte breakpoint = new Byte((byte)202); - // ino.end - // ino.attribute.impdep1.22788.declaration - public static Byte impdep1 = new Byte((byte)254); - // ino.end - // ino.attribute.impdep2.22791.declaration - public static Byte impdep2 = new Byte((byte)255); - // ino.end - - - - // ino.method.nconst_n.22794.definition - public static Byte nconst_n(String s1, int n2) - throws JVMCodeException - // ino.end - // ino.method.nconst_n.22794.body - { - int n1 = get_nType(s1); - switch(n1) { - case 0: { - if (n2 >= 0 && n2 <= 5) return new Byte((byte)(3 + n2)); - else break; - } - case 1: { - if (n2 >= 0 && n2 <= 2) return new Byte((byte)(9 + n2)); - else break; - } - case 2: { - if (n2 >= 0 && n2 <= 3) return new Byte((byte)(11 + n2)); - else break; - } - case 3: { - if (n2 >= 0 && n2 <= 2) return new Byte((byte)(14 + n2)); - else break; - } - } - throw new JVMCodeException("JVMCodeException: jvmCode: Byte nconst_n(String s1, int n2)"); - } - // ino.end - - // ino.method.nload.22797.definition - public static Byte nload(String s) - // ino.end - // ino.method.nload.22797.body - { - int n = get_nType(s); - if (n >= 0 && n <= 4) return new Byte((byte)(21 + n)); - else return new Byte((byte)21); - } - // ino.end - - // ino.method.nload_n.22800.definition - public static Byte nload_n(String s1, int n2) - throws JVMCodeException - // ino.end - // ino.method.nload_n.22800.body - { - int n1 = get_nType(s1); - if(n2 >= 0 && n2 <= 3) { - if (n1 >= 0 && n1 <= 4) return new Byte((byte)(26 + (n1*4) + n2)); - else return new Byte((byte)(26 + n2)); - } - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nload_n(String s1, int n2)"); - } - // ino.end - - // ino.method.naload.22803.definition - public static Byte naload(String s) - throws JVMCodeException - // ino.end - // ino.method.naload.22803.body - { - int n = get_nType(s); - if (n >= 0 && n <= 7) return new Byte((byte)(46 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte naload(String s)"); - } - // ino.end - - // ino.method.nstore.22806.definition - public static Byte nstore(String s) - // ino.end - // ino.method.nstore.22806.body - { - int n = get_nType(s); - if (n >= 0 && n <= 4) return new Byte((byte)(54 + n)); - else return new Byte((byte)54); - } - // ino.end - - // ino.method.nstore_n.22809.definition - public static Byte nstore_n(String s1, int n2) - throws JVMCodeException - // ino.end - // ino.method.nstore_n.22809.body - { - int n1 = get_nType(s1); - if(n2 >= 0 && n2 <= 3) { - if (n1 >= 0 && n1 <= 4) return new Byte((byte)(59 + (n1*4) + n2)); - else return new Byte((byte)(59 + n2)); - } - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nstore_n(String s1, int n2)"); - } - // ino.end - - // ino.method.nastore.22812.definition - public static Byte nastore(String s) - throws JVMCodeException - // ino.end - // ino.method.nastore.22812.body - { - int n = get_nType(s); - if (n >= 0 && n <= 7) return new Byte((byte)(79 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nastore(String s)"); - } - // ino.end - - // ino.method.nadd.22815.definition - public static Byte nadd(String s) - throws JVMCodeException - // ino.end - // ino.method.nadd.22815.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(96 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nadd(String s)"); - } - // ino.end - - // ino.method.nsub.22818.definition - public static Byte nsub(String s) - throws JVMCodeException - // ino.end - // ino.method.nsub.22818.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(100 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nsub(String s)"); - } - // ino.end - - // ino.method.nmul.22821.definition - public static Byte nmul(String s) - throws JVMCodeException - // ino.end - // ino.method.nmul.22821.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(104 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nmul(String s)"); - } - // ino.end - - // ino.method.ndiv.22824.definition - public static Byte ndiv(String s) - throws JVMCodeException - // ino.end - // ino.method.ndiv.22824.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(108 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte ndiv(String s)"); - } - // ino.end - - // ino.method.nrem.22827.definition - public static Byte nrem(String s) - throws JVMCodeException - // ino.end - // ino.method.nrem.22827.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(112 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nrem(String s)"); - } - // ino.end - - // ino.method.nneg.22830.definition - public static Byte nneg(String s) - throws JVMCodeException - // ino.end - // ino.method.nneg.22830.body - { - int n = get_nType(s); - if (n >= 0 && n <= 3) return new Byte((byte)(116 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nneg(String s)"); - } - // ino.end - - // ino.method.nshl.22833.definition - public static Byte nshl(String s) - throws JVMCodeException - // ino.end - // ino.method.nshl.22833.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(120 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nshl(String s)"); - } - // ino.end - - // ino.method.nshr.22836.definition - public static Byte nshr(String s) - throws JVMCodeException - // ino.end - // ino.method.nshr.22836.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(122 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nshr(String s)"); - } - // ino.end - - // ino.method.nushr.22839.definition - public static Byte nushr(String s) - throws JVMCodeException - // ino.end - // ino.method.nushr.22839.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(124 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nushr(String s)"); - } - // ino.end - - // ino.method.nand.22842.definition - public static Byte nand(String s) - throws JVMCodeException - // ino.end - // ino.method.nand.22842.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(126 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nand(String s)"); - } - // ino.end - - // ino.method.nor.22845.definition - public static Byte nor(String s) - throws JVMCodeException - // ino.end - // ino.method.nor.22845.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(128 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte nor(String s)"); - } - // ino.end - - // ino.method.nxor.22848.definition - public static Byte nxor(String s) - throws JVMCodeException - // ino.end - // ino.method.nxor.22848.body - { - int n = get_nType(s); - if (n == 0 || n == 1) return new Byte((byte)(130 + n)); - else throw new JVMCodeException("JVMCodeException: jvmCode: nxor(String s)"); - } - // ino.end - - // ino.method.n2n.22851.definition - public static Byte n2n(String s1, String s2) - throws JVMCodeException - // ino.end - // ino.method.n2n.22851.body - { - int n1 = get_nType(s1); - int n2 = get_nType(s2); - switch(n1) { - case 0: { - if (n2 >= 1 && n2 <= 3) return new Byte((byte)(132 + n2)); - if (n2 >= 5 && n2 <= 7) return new Byte((byte)(140 + n2)); - else break; - } - case 1: { - if (n2 == 0) return new Byte((byte)136); - else if (n2 == 2) return new Byte((byte)137); - else if (n2 == 3) return new Byte((byte)138); - else break; - } - case 2: { - if (n2 == 0) return new Byte((byte)139); - else if (n2 == 1) return new Byte((byte)140); - else if (n2 == 3) return new Byte((byte)141); - else break; - } - case 3: { - if (n2 >= 0 && n2 <= 2) return new Byte((byte)(142 + n2)); - else break; - } - } - throw new JVMCodeException("JVMCodeException: jvmCode: Byte n2n(String s1, String s2)"); - } - // ino.end - - // ino.method.ncmpl.22854.definition - public static Byte ncmpl(String s) - throws JVMCodeException - // ino.end - // ino.method.ncmpl.22854.body - { - int n = get_nType(s); - if (n == 2) return new Byte((byte)149); - else if (n == 3) return new Byte((byte)151); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte ncmpl(String s)"); - } - // ino.end - - // ino.method.ncmpg.22857.definition - public static Byte ncmpg(String s) - throws JVMCodeException - // ino.end - // ino.method.ncmpg.22857.body - { - int n = get_nType(s); - if (n == 2) return new Byte((byte)150); - else if (n == 3) return new Byte((byte)152); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte ncmpg(String s)"); - } - // ino.end - - // ino.method.if_ncmpeq.22860.definition - public static Byte if_ncmpeq(String s) - throws JVMCodeException - // ino.end - // ino.method.if_ncmpeq.22860.body - { - int n = get_nType(s); - if (n == 0) return new Byte((byte)159); - else if (n == 4) return new Byte((byte)165); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte if_ncmpeq(String s)"); - } - // ino.end - - // ino.method.if_ncmpne.22863.definition - public static Byte if_ncmpne(String s) - throws JVMCodeException - // ino.end - // ino.method.if_ncmpne.22863.body - { - int n = get_nType(s); - if (n == 0) return new Byte((byte)160); - else if (n == 4) return new Byte((byte)166); - else throw new JVMCodeException("JVMCodeException: jvmCode: Byte if_ncmpne(String s)"); - } - // ino.end - - // ino.method.nreturn.22866.definition - public static Byte nreturn(String s) - // ino.end - // ino.method.nreturn.22866.body - { - int n = get_nType(s); - if (n >= 0 && n <= 4) return new Byte((byte)(172 + n)); - else return new Byte((byte)(177)); - } - // ino.end - - // ino.method.get_nType.22869.definition - public static int get_nType(String type) - // ino.end - // ino.method.get_nType.22869.body - { - if(type.equals("void")) return 8; - else if(type.equals("int") || type.equals("boolean")) return 0; - else if(type.equals("long")) return 1; - else if(type.equals("float")) return 2; - else if(type.equals("double")) return 3; - else if(type.equals("byte")) return 5; - else if(type.equals("char")) return 6; - else if(type.equals("short")) return 7; - else return 4; - } - // ino.end - - - - // ino.method.get_codegen_Type.22872.defdescription type=javadoc - /** - * Liefert zu dem angegebenen Typ die entsprechende Repraesentation - * im Bytecode zurueck. Fuer integer bspw. I, fuer String Ljava/lang/String;. - * Wird im Menge paralist ein Objekt mit gleichen Namen gefunden, - * wird der Typ in Objekt geaendert (Typisierbare Klassen, hama). - */ - // ino.end - // ino.method.get_codegen_Type.22872.definition - public static String get_codegen_Type(String type, Menge paralist) - // ino.end - // ino.method.get_codegen_Type.22872.body - { - //hama: Hier wird geschaut, ob es im Menge paralist - //einen Eintrag mit gleichem Namen wie in dem type String gibt. - //Wenn dies der Fall ist, bedeute es, dass es sich um einen Typparameter - //handelt (bzw. handeln kann). Dann wird in type - //anstatt dem alten Namen - Object hineingeschieben. - //Dies ist fuer Codeerzeugung bei Typparametern erforderlich. - - if(paralist != null && !paralist.isEmpty()) - { - for(int i=0 ; i b) - throws JVMCodeException - // ino.end - // ino.method.get_Command.22875.body - { - StringBuffer sb = new StringBuffer(); - - sb.append(" {\n"); - for(int i=0; i < b.size(); i++) { - int x = bytes_to_int(b.elementAt(i)); - sb.append(" " + i + " "); - switch(x) { - case 0: { sb.append("nop"); break; } - case 1: { sb.append("aconst_null"); break; } - case 2: { sb.append("iconst_m1"); break; } - case 3: { sb.append("iconst_0"); break; } - case 4: { sb.append("iconst_1"); break; } - case 5: { sb.append("iconst_2"); break; } - case 6: { sb.append("iconst_3"); break; } - case 7: { sb.append("iconst_4"); break; } - case 8: { sb.append("iconst_5"); break; } - case 9: { sb.append("lconst_0"); break; } - case 10: { sb.append("lconst_1"); break; } - case 11: { sb.append("fconst_0"); break; } - case 12: { sb.append("fconst_1"); break; } - case 13: { sb.append("fconst_2"); break; } - case 14: { sb.append("dconst_0"); break; } - case 15: { sb.append("dconst_1"); break; } - case 16: { sb.append("bipush " + bytes_to_int(b.elementAt(++i))); break; } - case 17: { sb.append("sipush #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 18: { sb.append("ldc " + bytes_to_int(b.elementAt(++i))); break; } - case 19: { sb.append("ldc_w #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 20: { sb.append("ldc2_w #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 21: { sb.append("iload " + bytes_to_int(b.elementAt(++i))); break; } - case 22: { sb.append("lload " + bytes_to_int(b.elementAt(++i))); break; } - case 23: { sb.append("fload " + bytes_to_int(b.elementAt(++i))); break; } - case 24: { sb.append("dload " + bytes_to_int(b.elementAt(++i))); break; } - case 25: { sb.append("aload " + bytes_to_int(b.elementAt(++i))); break; } - case 26: { sb.append("iload_0"); break; } - case 27: { sb.append("iload_1"); break; } - case 28: { sb.append("iload_2"); break; } - case 29: { sb.append("iload_3"); break; } - case 30: { sb.append("lload_0"); break; } - case 31: { sb.append("lload_1"); break; } - case 32: { sb.append("lload_2"); break; } - case 33: { sb.append("lload_3"); break; } - case 34: { sb.append("fload_0"); break; } - case 35: { sb.append("fload_1"); break; } - case 36: { sb.append("fload_2"); break; } - case 37: { sb.append("fload_3"); break; } - case 38: { sb.append("dload_0"); break; } - case 39: { sb.append("dload_1"); break; } - case 40: { sb.append("dload_2"); break; } - case 41: { sb.append("dload_3"); break; } - case 42: { sb.append("aload_0"); break; } - case 43: { sb.append("aload_1"); break; } - case 44: { sb.append("aload_2"); break; } - case 45: { sb.append("aload_3"); break; } - case 46: { sb.append("iaload"); break; } - case 47: { sb.append("laload"); break; } - case 48: { sb.append("faload"); break; } - case 49: { sb.append("daload"); break; } - case 50: { sb.append("aaload"); break; } - case 51: { sb.append("baload"); break; } - case 52: { sb.append("caload"); break; } - case 53: { sb.append("saload"); break; } - case 54: { sb.append("istore " + bytes_to_int(b.elementAt(++i))); break; } - case 55: { sb.append("lstore " + bytes_to_int(b.elementAt(++i))); break; } - case 56: { sb.append("fstore " + bytes_to_int(b.elementAt(++i))); break; } - case 57: { sb.append("dstore " + bytes_to_int(b.elementAt(++i))); break; } - case 58: { sb.append("astore " + bytes_to_int(b.elementAt(++i))); break; } - case 59: { sb.append("istore_0"); break; } - case 60: { sb.append("istore_1"); break; } - case 61: { sb.append("istore_2"); break; } - case 62: { sb.append("istore_3"); break; } - case 63: { sb.append("lstore_0"); break; } - case 64: { sb.append("lstore_1"); break; } - case 65: { sb.append("lstore_2"); break; } - case 66: { sb.append("lstore_3"); break; } - case 67: { sb.append("fstore_0"); break; } - case 68: { sb.append("fstore_1"); break; } - case 69: { sb.append("fstore_2"); break; } - case 70: { sb.append("fstore_3"); break; } - case 71: { sb.append("dstore_0"); break; } - case 72: { sb.append("dstore_1"); break; } - case 73: { sb.append("dstore_2"); break; } - case 74: { sb.append("dstore_3"); break; } - case 75: { sb.append("astore_0"); break; } - case 76: { sb.append("astore_1"); break; } - case 77: { sb.append("astore_2"); break; } - case 78: { sb.append("astore_3"); break; } - case 79: { sb.append("iastore"); break; } - case 80: { sb.append("lastore"); break; } - case 81: { sb.append("fastore"); break; } - case 82: { sb.append("dastore"); break; } - case 83: { sb.append("aastore"); break; } - case 84: { sb.append("bastore"); break; } - case 85: { sb.append("castore"); break; } - case 86: { sb.append("sastore"); break; } - case 87: { sb.append("pop"); break; } - case 88: { sb.append("pop2"); break; } - case 89: { sb.append("dup"); break; } - case 90: { sb.append("dup_x1"); break; } - case 91: { sb.append("dup_x2"); break; } - case 92: { sb.append("dup2"); break; } - case 93: { sb.append("dup2_x1"); break; } - case 94: { sb.append("dup2_x2"); break; } - case 95: { sb.append("swap"); break; } - case 96: { sb.append("iadd"); break; } - case 97: { sb.append("ladd"); break; } - case 98: { sb.append("fadd"); break; } - case 99: { sb.append("dadd"); break; } - case 100: { sb.append("isub"); break; } - case 101: { sb.append("lsub"); break; } - case 102: { sb.append("fsub"); break; } - case 103: { sb.append("dsub"); break; } - case 104: { sb.append("imul"); break; } - case 105: { sb.append("lmul"); break; } - case 106: { sb.append("fmul"); break; } - case 107: { sb.append("dmul"); break; } - case 108: { sb.append("idiv"); break; } - case 109: { sb.append("ldiv"); break; } - case 110: { sb.append("fdiv"); break; } - case 111: { sb.append("ddiv"); break; } - case 112: { sb.append("irem"); break; } - case 113: { sb.append("lrem"); break; } - case 114: { sb.append("frem"); break; } - case 115: { sb.append("drem"); break; } - case 116: { sb.append("ineg"); break; } - case 117: { sb.append("lneg"); break; } - case 118: { sb.append("fneg"); break; } - case 119: { sb.append("dneg"); break; } - case 120: { sb.append("ishl"); break; } - case 121: { sb.append("lshl"); break; } - case 122: { sb.append("ishr"); break; } - case 123: { sb.append("lshr"); break; } - case 124: { sb.append("iushr"); break; } - case 125: { sb.append("lushr"); break; } - case 126: { sb.append("iand"); break; } - case 127: { sb.append("land"); break; } - case 128: { sb.append("ior"); break; } - case 129: { sb.append("lor"); break; } - case 130: { sb.append("ixor"); break; } - case 131: { sb.append("lxor"); break; } - case 132: { sb.append("iinc " + bytes_to_int(b.elementAt(++i)) + " " + bytes_to_int(b.elementAt(++i))); break; } - case 133: { sb.append("i2l"); break; } - case 134: { sb.append("i2f"); break; } - case 135: { sb.append("i2d"); break; } - case 136: { sb.append("l2i"); break; } - case 137: { sb.append("l2f"); break; } - case 138: { sb.append("l2d"); break; } - case 139: { sb.append("f2i"); break; } - case 140: { sb.append("f2l"); break; } - case 141: { sb.append("f2d"); break; } - case 142: { sb.append("d2i"); break; } - case 143: { sb.append("d2l"); break; } - case 144: { sb.append("d2f"); break; } - case 145: { sb.append("i2b"); break; } - case 146: { sb.append("i2c"); break; } - case 147: { sb.append("i2s"); break; } - case 148: { sb.append("lcmp"); break; } - case 149: { sb.append("fcmpl"); break; } - case 150: { sb.append("fcmpg"); break; } - case 151: { sb.append("dcmpl"); break; } - case 152: { sb.append("dcmpg"); break; } - case 153: { sb.append("ifeq #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 154: { sb.append("ifne #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 155: { sb.append("iflt #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 156: { sb.append("ifge #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 157: { sb.append("ifgt #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 158: { sb.append("ifle #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 159: { sb.append("if_icmpeq #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 160: { sb.append("if_icmpne #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 161: { sb.append("if_icmplt #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 162: { sb.append("if_icmpge #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 163: { sb.append("if_icmpgt #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 164: { sb.append("if_icmple #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 165: { sb.append("if_acmpeq #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 166: { sb.append("if_acmpne #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 167: { sb.append("goto #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 168: { sb.append("jsr #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 169: { sb.append("ret " + bytes_to_int(b.elementAt(++i))); break; } - // case 170: { sb.append("tableswitch"); break; } - // case 171: { sb.append("lookupswitch"); break; } - case 172: { sb.append("ireturn"); break; } - case 173: { sb.append("lreturn"); break; } - case 174: { sb.append("freturn"); break; } - case 175: { sb.append("dreturn"); break; } - case 176: { sb.append("areturn"); break; } - case 177: { sb.append("return"); break; } - case 178: { sb.append("getstatic #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 179: { sb.append("putstatic #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 180: { sb.append("getfield #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 181: { sb.append("putfield #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 182: { sb.append("invokevirtual #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 183: { sb.append("invokespecial #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 184: { sb.append("invokestatic #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 185: { sb.append("invokeinterface #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i)) + " " + bytes_to_int(b.elementAt(++i)) + " " + bytes_to_int(b.elementAt(++i))); break; } - case 187: { sb.append("new " + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 188: { sb.append("newarray " + bytes_to_int(b.elementAt(++i))); break; } - case 189: { sb.append("anewarray #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 190: { sb.append("arraylength"); break; } - case 191: { sb.append("athrow"); break; } - case 192: { sb.append("checkcast #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 193: { sb.append("instanceof #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 194: { sb.append("monitorenter"); break; } - case 195: { sb.append("monitorexit"); break; } - // case 196: { sb.append("wide"); break; } - case 197: { sb.append("multianewarray #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i)) + " " + bytes_to_int(b.elementAt(++i))); break; } - case 198: { sb.append("ifnull #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 199: { sb.append("ifnonnull #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i))); break; } - case 200: { sb.append("goto_w #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i), b.elementAt(++i), b.elementAt(++i))); break; } - case 201: { sb.append("jsr_w #" + bytes_to_int(b.elementAt(++i), b.elementAt(++i), b.elementAt(++i), b.elementAt(++i))); break; } - case 202: { sb.append("breakpoint"); break; } - case 254: { sb.append("impdep1"); break; } - default: { throw new JVMCodeException("JVMCodeException: jvmCode: void get_Command(Menge b)"); } - } - sb.append("\n"); - } - sb.append(" }"); - bytecodelog.debug("Bytecode der Methode: \n" + sb.toString()); - } - // ino.end - - // ino.method.bytes_to_int.22878.definition - public static int bytes_to_int(Byte b3, Byte b2, Byte b1, Byte b0) - // ino.end - // ino.method.bytes_to_int.22878.body - { - int x3 = b3.intValue(); if(x3 < 0) x3 = 256 + x3; - int x2 = b2.intValue(); if(x2 < 0) x2 = 256 + x2; - int x1 = b1.intValue(); if(x1 < 0) x1 = 256 + x1; - int x0 = b0.intValue(); if(x0 < 0) x0 = 256 + x0; - return (x3 << 24) + (x2 << 16) + (x1 << 8) + x0; - } - // ino.end - - // ino.method.bytes_to_int.22881.definition - public static int bytes_to_int(Byte b1, Byte b0) - // ino.end - // ino.method.bytes_to_int.22881.body - { - int x1 = b1.intValue(); if(x1 < 0) x1 = 256 + x1; - int x0 = b0.intValue(); if(x0 < 0) x0 = 256 + x0; - return (x1 << 8) + x0; - } - // ino.end - - // ino.method.bytes_to_int.22884.definition - public static int bytes_to_int(Byte b) - // ino.end - // ino.method.bytes_to_int.22884.body - { - int x = b.intValue(); if(x < 0) x = 256 + x; - return x; - } - // ino.end - - // ino.method.shortToBytes.22887.definition - public static byte[] shortToBytes(short i) - // ino.end - // ino.method.shortToBytes.22887.body - { - byte[] wert = new byte[2]; - wert[0] = (byte) ((i >>> 8) & 255); - wert[1] = (byte) ((i & 255)); - - return wert; - } - // ino.end - - - -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/Key.java b/src/de/dhbwstuttgart/bytecode/Key.java deleted file mode 100755 index 6f4eee5b..00000000 --- a/src/de/dhbwstuttgart/bytecode/Key.java +++ /dev/null @@ -1,125 +0,0 @@ -// ino.module.Key.8548.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.Key.8548.import -import java.io.FileOutputStream; -import java.io.OutputStream; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - -// ino.class.Key.22890.declaration -public class Key implements ClassFileMember -// ino.end -// ino.class.Key.22890.body -{ - // ino.attribute.tag.22893.declaration - private byte tag; - // ino.end - // ino.attribute.a.22896.declaration - private String a; - // ino.end - // ino.attribute.codegenlog.22899.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22899.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.method.Key.22902.definition - public Key(byte t, String a) - // ino.end - // ino.method.Key.22902.body - { - this.tag = t; - this.a = a; - } - // ino.end - - // ino.method.equals.22905.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.22905.body - { - if (obj instanceof Key) { - Key key_object = (Key) obj; - if (this.tag == key_object.get_tag() - && this.a.equals(key_object.get_a())) - return true; - } - return false; - } - // ino.end - - // ino.method.get_tag.22908.definition - public byte get_tag() - // ino.end - // ino.method.get_tag.22908.body - { - return tag; - } - // ino.end - - // ino.method.get_a.22911.definition - public String get_a() - // ino.end - // ino.method.get_a.22911.body - { - return a; - } - // ino.end - - // ino.method.set_tag.22914.definition - public void set_tag(byte t) - // ino.end - // ino.method.set_tag.22914.body - { - this.tag = t; - } - // ino.end - - // ino.method.set_a.22917.definition - public void set_a(String s) - // ino.end - // ino.method.set_a.22917.body - { - this.a = s; - } - // ino.end - - // ino.method.codegen.22920.definition - @Override - public void codegen(ClassFile classfile, OutputStream f) - // ino.end - // ino.method.codegen.22920.body - { - String tag_string = new String(); - if (tag == (byte) 1) - tag_string = "CONSTANT_Utf8"; - else if (tag == JVMCode.CONSTANT_Integer) - tag_string = "CONSTANT_Integer"; - else if (tag == JVMCode.CONSTANT_Float) - tag_string = "CONSTANT_Float"; - else if (tag == JVMCode.CONSTANT_Long) - tag_string = "CONSTANT_Long"; - else if (tag == JVMCode.CONSTANT_Double) - tag_string = "CONSTANT_Double"; - else if (tag == JVMCode.CONSTANT_Class) - tag_string = "CONSTANT_Class"; - else if (tag == JVMCode.CONSTANT_String) - tag_string = "CONSTANT_String"; - else if (tag == JVMCode.CONSTANT_Fieldref) - tag_string = "CONSTANT_Fieldref"; - else if (tag == JVMCode.CONSTANT_Methodref) - tag_string = "CONSTANT_Methodref"; - else if (tag == JVMCode.CONSTANT_InterfaceMethodref) - tag_string = "CONSTANT_InterfaceMethodref"; - else if (tag == JVMCode.CONSTANT_NameAndType) - tag_string = "CONSTANT_NameAndType"; - - codegenlog.debug(tag_string + " " + a); - } - // ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/MethodInfo.java b/src/de/dhbwstuttgart/bytecode/MethodInfo.java deleted file mode 100755 index 1733a93f..00000000 --- a/src/de/dhbwstuttgart/bytecode/MethodInfo.java +++ /dev/null @@ -1,138 +0,0 @@ -// ino.module.MethodInfo.8549.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.MethodInfo.8549.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - -import de.dhbwstuttgart.myexception.JVMCodeException; - -// ino.class.MethodInfo.22923.declaration -public class MethodInfo implements ClassFileMember -// ino.end -// ino.class.MethodInfo.22923.body -{ - // ino.attribute.codegenlog.22926.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22926.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - // ino.attribute.access_flags.22929.declaration - private short access_flags; - // ino.end - - // ino.attribute.name_index.22932.declaration - private short name_index; - // ino.end - - // ino.attribute.descriptor_index.22935.declaration - private short descriptor_index; - // ino.end - - // ino.attribute.attributes.22938.declaration - private Menge attributes = new Menge(); - // ino.end - - // ino.method.get_access_flags.22941.definition - public short get_access_flags() - // ino.end - // ino.method.get_access_flags.22941.body - { - return this.access_flags; - } - // ino.end - - // ino.method.get_name_index.22944.definition - public short get_name_index() - // ino.end - // ino.method.get_name_index.22944.body - { - return this.name_index; - } - // ino.end - - // ino.method.get_descriptor_index.22947.definition - public short get_descriptor_index() - // ino.end - // ino.method.get_descriptor_index.22947.body - { - return this.descriptor_index; - } - // ino.end - - // ino.method.get_attributes.22950.definition - public Menge get_attributes() - // ino.end - // ino.method.get_attributes.22950.body - { - return this.attributes; - } - // ino.end - - // ino.method.set_access_flags.22953.definition - public void set_access_flags(short t) - // ino.end - // ino.method.set_access_flags.22953.body - { - this.access_flags = t; - } - // ino.end - - // ino.method.set_name_index.22956.definition - public void set_name_index(short t) - // ino.end - // ino.method.set_name_index.22956.body - { - this.name_index = t; - } - // ino.end - - // ino.method.set_descriptor_index.22959.definition - public void set_descriptor_index(short t) - // ino.end - // ino.method.set_descriptor_index.22959.body - { - this.descriptor_index = t; - } - // ino.end - - // ino.method.set_attributes.22962.definition - public void set_attributes(Menge t) - // ino.end - // ino.method.set_attributes.22962.body - { - this.attributes = t; - } - // ino.end - - // ino.method.codegen.22965.definition - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException - // ino.end -// ino.method.codegen.22965.body -{ - classfile.writeShort(f, access_flags); - classfile.writeShort(f, name_index); - classfile.writeShort(f, descriptor_index); - classfile.writeShort(f, (short) attributes.size()); - - codegenlog.debug("MethodInfo: acc_flag=" + access_flags - + ", name_index=" + name_index + ", descriptor_index=" - + descriptor_index + ", attributes_count=" + attributes.size()); - - if (attributes != null) - for (int i = 0; i < attributes.size(); i++) { - attributes.elementAt(i).codegen(classfile, f); - } - } -// ino.end -} -// ino.end diff --git a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java b/src/de/dhbwstuttgart/bytecode/SignatureInfo.java deleted file mode 100755 index 11d57d23..00000000 --- a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java +++ /dev/null @@ -1,276 +0,0 @@ -// ino.module.SignatureInfo.8550.package -package de.dhbwstuttgart.bytecode; -// ino.end - -// ino.module.SignatureInfo.8550.import -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.logger.Logger; -// ino.end - - - - - -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.ParameterList; -import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import sun.reflect.generics.reflectiveObjects.NotImplementedException; - -// ino.class.SignatureInfo.22968.description type=javadoc -/** - * Generiert die Attribute eines Fields, einer Methode oder einer Klasse/Interface - * zur Integration der Signatur (Generics). - * @author SCJU - */ -// ino.end -// ino.class.SignatureInfo.22968.declaration -public class SignatureInfo extends Attribute -// ino.end -// ino.class.SignatureInfo.22968.body -{ - // ino.attribute.signatureID.22972.decldescription type=line - // UTF-8 Konstante mit der Signatur selbst - // ino.end - // ino.attribute.signatureID.22972.declaration - private short signatureID = 0; - // ino.end - - // ino.attribute.codegenlog.22975.decldescription type=line - // Logger fuer Code-Gen - // ino.end - // ino.attribute.codegenlog.22975.declaration - protected static Logger codegenlog = Logger.getLogger("codegen"); - // ino.end - - - public SignatureInfo(short sid) { - signatureID = sid; - } - // ino.method.SignatureInfo.22978.defdescription type=javadoc - /** - * Konstruktor fuer die Signatur einer Klasse bzw. eines Interfaces. - */ - // ino.end - // ino.method.SignatureInfo.22978.definition - public SignatureInfo(Menge vec, UsedId superclass, Menge superIf, ClassFile cf) - // ino.end - // ino.method.SignatureInfo.22978.body - { - StringBuffer sb = new StringBuffer(); - sb.append("<"); - set_attribute_name_index(cf.getSignatureID()); - - // Parameterliste verarbeiten, falls vorhanden - Type type; - for (int i=0; i"); - - - if (superclass == null && (superIf == null || superIf.size() == 0)) { - // Falls keine Superclassen oder Interfaces angegeben wurden, - // wird per Definition wird nochmals "Ljava/lang/Object;" angehaengt - sb.append(JVMCode.get_codegen_Type("Object", null)); - } else { - if (superclass != null) sb.append(superclass.getSignatureUsedId()); - - if (superIf != null && superIf.size() > 0) { - for (int i=0; i"); - } - - sig.append("("); - - // Parameterliste verarbeiten, falls vorhanden - if (param != null) { - for (int i=0; i filenames){ Menge resultSet = null; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration()); try{ ///////////////////////// // Parsen: @@ -47,7 +48,7 @@ public class ConsoleInterface { /////////////////////// // Ausgabe: /////////////////////// - if(resultSet == null)System.out.println("Keine Lösung!"); + if(resultSet == null)System.out.println("Keine Lösung!"); ArrayList resultJavaCodes = new ArrayList(); for(TypeinferenceResultSet result : resultSet){ String javaCode = result.getInterferedClass().printJavaCode(result); @@ -55,7 +56,7 @@ public class ConsoleInterface { } for(String out : resultJavaCodes){ - System.out.println("\nMögliche Typisierung:\n\n"); + System.out.println("\nMögliche Typisierung:\n\n"); System.out.println(out); } }catch(Exception e){ diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 3866e2aa..4304e55a 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -16,7 +16,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.LoggerConfiguration; import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaParser; @@ -83,7 +82,7 @@ public class MyCompiler implements MyCompilerAPI // ino.attribute.m_AbstractSyntaxTree.21280.decldescription type=javadoc /** * Der abstrake Syntaxbaum - *
    Autor: J�rg B�uerle + *
    Autor: J�rg B�uerle */ // ino.end // ino.attribute.m_AbstractSyntaxTree.21280.declaration @@ -92,10 +91,10 @@ public class MyCompiler implements MyCompilerAPI // ino.method.MyCompiler.21283.defdescription type=javadoc /** - * Author: J�rg B�uerle
    - * Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden - * k�nnen, sondern nur eine API zur Verf�gung gestellt werden. - * @param logger Konfiguration für Debug Ausgabe TODO + * Author: J�rg B�uerle
    + * Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden + * k�nnen, sondern nur eine API zur Verf�gung gestellt werden. + * @param logger Konfiguration für Debug Ausgabe TODO */ // ino.end // ino.method.MyCompiler.21283.definition @@ -109,8 +108,8 @@ public class MyCompiler implements MyCompilerAPI // ino.method.getAPI.21286.defdescription type=javadoc /** - * Author: J�rg B�uerle
    - * Stellt eine neue Instanz der CompilerAPI zur Verf�gung. + * Author: Jörg Bäuerle
    + * Stellt eine neue Instanz der CompilerAPI zur Verf�gung. * Diese Methode sollte von der IDE aus aufgerufen werden, * um eine Quellcode-Datei zu kompilieren. * @return Die Compiler-API @@ -132,8 +131,8 @@ public class MyCompiler implements MyCompilerAPI /** * Author: Thomas Ott
    * Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen - * GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t. - * Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine + * GenericTypeVars, zu denen es eine Klasse gibt, die gleich hei�t. + * Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine * RefTypes. Dies wird durch diese Methode nachgeholt.
    * Bsp.: class JoergsTolleKlasse
    extends MartinsSuperklasse *
    Wie man an diesem Beispiel sieht, kann nur eine Superklasse instantiierte @@ -153,7 +152,7 @@ public class MyCompiler implements MyCompilerAPI //wandleGeneric2RefType SOLLTE NICHT NUR FUER LISTEN //VON TYPEN FUNKTIONIEREN PL 05-01-19 // otth: GenericTypeVar in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln, - // falls: f�r GenericTypeVar existiert eine gleichnamige Klasse + // falls: f�r GenericTypeVar existiert eine gleichnamige Klasse if(Parameter == null) return; for( int i = 0; i < Parameter.size(); i++) @@ -165,7 +164,7 @@ public class MyCompiler implements MyCompilerAPI if ( TempParameter instanceof GenericTypeVar) { inferencelog.debug("Generic, WANDLE: " + TempParameter.getName()); - // existiert f�r GenericTypeVar eine deklarierte Klasse + // existiert f�r GenericTypeVar eine deklarierte Klasse for( int k = 0; k < KlassenVektor.size(); k++) { if( KlassenVektor.elementAt(k).getSimpleName().equals(TempParameter.getSimpleName()) ) @@ -228,9 +227,9 @@ public class MyCompiler implements MyCompilerAPI /** * Parst den Quellcode und baut den abstrakten Syntaxbaum auf. Danach wird * automatisch der von Thomas Ott implementierte Algorithmus - * NewTVar(jclass) (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) + * NewTVar(jclass) (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) * aufgerufen. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param reader * @throws IOException * @throws JavaParser.yyException @@ -248,7 +247,7 @@ public class MyCompiler implements MyCompilerAPI parserlog.info("#########################################\n"); ////////////////////////////////////// - // Alte Daten l�schen: + // Alte Daten l�schen: ////////////////////////////////////// m_AbstractSyntaxTree = null; @@ -268,7 +267,7 @@ public class MyCompiler implements MyCompilerAPI //PL 05-07-31 verschoben nach SourceFile.java in Methode typeReconstruction // otth: TypePlaceholders in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln, - // falls: f�r TypePlaceholder existiert eine gleichnamige Klasse + // falls: f�r TypePlaceholder existiert eine gleichnamige Klasse // Superklasse suchen //for( int i = 0; i < srcFile.KlassenVektor.size(); i++ ) //{ @@ -309,10 +308,10 @@ public class MyCompiler implements MyCompilerAPI if ( tempKlassBody != null ) { strKlasse = tempKlasse.getName(); - parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse); + parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse); parserlog.debug( "------------------------------------"); - // Schleife �ber alle fielddeclarations + // Schleife �ber alle fielddeclarations tempMengeFieldDecl = tempKlassBody.getFields(); for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { @@ -321,7 +320,7 @@ public class MyCompiler implements MyCompilerAPI { //parserlog.debug("T->Konstruktor: " + ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name() + " - ReturnType: " + tempFieldDecl.getTypeName()); - // pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!! + // pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!! String strConstName = ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name(); // Konstruktorname if ( !strConstName.equals( strKlasse ) ) { @@ -336,9 +335,9 @@ public class MyCompiler implements MyCompilerAPI Methode.set_ExceptionList( Konstruktor.get_ExceptionList() ); Methode.setReturnType( Konstruktor.getReturnType() ); Methode.setDeclIdMenge( Konstruktor.getDeclIdMenge() ); - // types_in_parameterlist wird wohl erst sp�ter und intern gef�llt + // types_in_parameterlist wird wohl erst sp�ter und intern gef�llt - // R�ckgabetyp = Objekt der Klasse 'TypePlaceholder' + // R�ckgabetyp = Objekt der Klasse 'TypePlaceholder' // #JB# 31.03.2005 // ########################################################### @@ -359,7 +358,7 @@ public class MyCompiler implements MyCompilerAPI // Debugg-Infos parserlog.debug(""); - parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse); + parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse); parserlog.debug( "-----------------------------------------"); for( int k = 0; k < tempMengeFieldDecl.size(); k++ ) { @@ -389,14 +388,14 @@ public class MyCompiler implements MyCompilerAPI tempMethod = (Method)tempFieldDecl; tempReturn = tempMethod.getReturnType(); - // Funktionen ohne definierten R�ckgabetyp suchen!!! + // Funktionen ohne definierten R�ckgabetyp suchen!!! if( tempReturn instanceof TypePlaceholder ) { - // Methode mit nicht-definiertem R�ckgabetyp gefunden! + // Methode mit nicht-definiertem R�ckgabetyp gefunden! // #JB# 31.03.2005 // ########################################################### - // Wird bereits �ber fresh() gemacht!! + // Wird bereits �ber fresh() gemacht!! //tempReturn.setName( TypePlaceholder.makeNewName() ); // ########################################################### parserlog.debug(""); @@ -425,7 +424,7 @@ public class MyCompiler implements MyCompilerAPI // #JB# 31.03.2005 // ########################################################### - // Wird bereits �ber fresh() gemacht!! + // Wird bereits �ber fresh() gemacht!! //tempType.setName( TypePlaceholder.makeNewName() ); // ########################################################### } @@ -458,7 +457,7 @@ public class MyCompiler implements MyCompilerAPI ///////////////////////////////////////////////////////////////////////////////////////////////// // ino.method.init.21295.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Initialisiert den Compiler */ // ino.end @@ -476,11 +475,11 @@ public class MyCompiler implements MyCompilerAPI // ino.method.parse.21298.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Ruft die Parse-Methode. * @param file Die Quellcode-Datei * @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert. - * @throws IOException Wenn was schief l�uft. + * @throws IOException Wenn was schief l�uft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. */ // ino.end @@ -500,9 +499,9 @@ public class MyCompiler implements MyCompilerAPI // ino.method.typeReconstruction.21304.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * Ruft den Typrekonstruktionsalgorithmus auf. - * @return Die Menge aller m�glichen Typkombinationen + * @return Die Menge aller m�glichen Typkombinationen * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @throws CTypeReconstructionException Wenn ein Fehler bei der * Typrekonstruktion auftritt. @@ -538,13 +537,13 @@ public class MyCompiler implements MyCompilerAPI /** * Erstellt die FunN-Assumptions - * Fun0-FunN (momentan für N = 6) + * Fun0-FunN (momentan für N = 6) * @return */ private TypeAssumptions makeFunNAssumptions(){ TypeAssumptions ret = new TypeAssumptions(); - //Basic Assumptions für die FunN Interfaces: + //Basic Assumptions für die FunN Interfaces: //TODO: Hier mehr als Fun1-Fun5 implementieren for(int i = 0; i<6; i++){ FunNInterface funN = new FunNInterface(i); @@ -556,8 +555,8 @@ public class MyCompiler implements MyCompilerAPI } /** - * Author: J�rg B�uerle
    - * Generiert den Bytecode und das Class-File f�r den Syntaxbaum. + * Author: J�rg B�uerle
    + * Generiert den Bytecode und das Class-File f�r den Syntaxbaum. * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @@ -583,7 +582,7 @@ public class MyCompiler implements MyCompilerAPI // ino.method.main.21313.defdescription type=javadoc /** - * Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet + * Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet * werden kann. * @param args Klassendatei */ @@ -696,7 +695,7 @@ public class MyCompiler implements MyCompilerAPI for( int i = 0; i < containedTypes.size(); i++) { Type tempParameter = (Type)(containedTypes.elementAt(i)); - // Nat�rlich nur RefTypes updaten + // Nat�rlich nur RefTypes updaten if(tempParameter instanceof RefType){ RefType typ=(RefType)tempParameter; UsedId fullyQualifiedName=UsedId.createFromQualifiedName(typ.getTypeName(),typ.getOffset()); @@ -717,9 +716,9 @@ public class MyCompiler implements MyCompilerAPI // ino.end */ /** - * @author Arne Lüdtke + * @author Arne Lüdtke * Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv. - * ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden. + * ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden. * @param T - Typ, bei welchem die GTVs ersetzt werden sollen. */ public static Type makeGenericTypeVars2TypePlaceHolders(Type T) @@ -811,12 +810,12 @@ public class MyCompiler implements MyCompilerAPI StringReader srcreader = new StringReader(fileData.toString()); //Den aus der Datei ausgelesenen Quellcode zu einem Syntaxbaum parsen: - this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen... + this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen... } /* String gesamterSrc = ""; - //Hier werden alle übergebenen Dateinamen abgearbeitet: + //Hier werden alle übergebenen Dateinamen abgearbeitet: for(String filename : filenames){ try { StringBuffer fileData = new StringBuffer(); @@ -829,15 +828,15 @@ public class MyCompiler implements MyCompilerAPI fileData.append(readData); } reader.close(); - gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen... + gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen... } catch (Exception e) { e.printStackTrace(); - throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden."); + throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden."); } } try { - // und anschließend zum Parsen übergeben. + // und anschließend zum Parsen übergeben. this.parse(gesamterSrc.toString()); } catch (Exception e) { e.printStackTrace(); @@ -853,12 +852,5 @@ public class MyCompiler implements MyCompilerAPI this.m_AbstractSyntaxTree.add(ret); return ret; } - - @Override - public Menge codeGeneration(ResultSet result) - throws NullPointerException, JVMCodeException { - // TODO Auto-generated method stub - return null; - } } // ino.end diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index 16fc0bd8..760c1929 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -8,7 +8,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaParser; @@ -24,7 +23,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; * IDE als Compiler-API zum Kompilieren einer Quellcode-Datei * dienen und stellt somit die Schnittstelle zur Studienarbeit * von Markus Melzer (Eclipse-Plugin) dar. - * @author Jörg Bäuerle + * @author Jörg Bäuerle * @version $Date: 2013/09/09 11:04:24 $ */ // ino.end @@ -36,7 +35,7 @@ public interface MyCompilerAPI // ino.method.init.21331.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Initialisiert den Compiler */ // ino.end @@ -46,11 +45,11 @@ public interface MyCompilerAPI // ino.method.parse.21334.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf. * @param file Die Quellcode-Datei * @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert. - * @throws IOException Wenn was schief läuft. + * @throws IOException Wenn was schief läuft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. */ // ino.end @@ -61,10 +60,10 @@ public interface MyCompilerAPI // ino.method.parse.21337.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Parst einen String und baut den abstrakten Syntaxbaum auf. * @param srcCode Der zu parsende Quellcode - * @throws IOException Wenn was schief läuft. + * @throws IOException Wenn was schief läuft. * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt. // ino.end @@ -76,9 +75,9 @@ public interface MyCompilerAPI // ino.method.typeReconstruction.21340.decldescription type=javadoc /** - * Author: Jörg Bäuerle
    + * Author: Jörg Bäuerle
    * Ruft den Typrekonstruktionsalgorithmus auf. - * @return Die Menge aller möglichen Typkombinationen + * @return Die Menge aller möglichen Typkombinationen * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * ist. @throws CTypeReconstructionException Wenn ein Fehler bei der * Typrekonstruktion auftritt. @@ -89,20 +88,6 @@ public interface MyCompilerAPI throws NullPointerException, TypeinferenceException; // ino.end - // ino.method.codeGeneration.21346.decldescription type=javadoc - /** - * Author: Jörg Bäuerle
    - * Generiert den Bytecode und das Class-File für den Syntaxbaum. - * @param syntaxTree Der Syntaxbaum - * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden - * ist. @throws JVMCodeException - */ - // ino.end - // ino.method.codeGeneration.21346.declaration - public Menge codeGeneration(ResultSet result) - throws NullPointerException, JVMCodeException; - // ino.end - // ino.method.setOutputDir.21349.decldescription type=javadoc /** * Author: Juergen Schmiing
    @@ -124,7 +109,7 @@ public interface MyCompilerAPI // ino.end /** - * Parst zusammenhängende JavaKlassen in verschiedenen Dateien. + * Parst zusammenhängende JavaKlassen in verschiedenen Dateien. * @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen */ public void parse(Menge filenames) throws ParserError; diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java index 98107988..dd870906 100755 --- a/src/de/dhbwstuttgart/logger/Logger.java +++ b/src/de/dhbwstuttgart/logger/Logger.java @@ -34,8 +34,8 @@ public class Logger { */ /** - * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. - * Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten. + * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. + * Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten. * @param message * @param section */ @@ -45,7 +45,7 @@ public class Logger { /** * Liefert den Logger mit dem angegebenen Namen. - * Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist. + * Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist. * @param name - Name der Klasse ( Ermittelbar mittels .class.getName() ) * @return */ @@ -94,7 +94,7 @@ public class Logger { } /** - * wird hier null übergeben, so wird sämtliches Logging unterdrückt. + * wird hier null übergeben, so wird sämtliches Logging unterdrückt. */ public static void setStandardConfiguration(LoggerConfiguration config) { Logger.standardConfiguration = config; diff --git a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java index 275c68a3..ce601fbc 100644 --- a/src/de/dhbwstuttgart/logger/LoggerConfiguration.java +++ b/src/de/dhbwstuttgart/logger/LoggerConfiguration.java @@ -12,7 +12,7 @@ public class LoggerConfiguration{ public LoggerConfiguration setOutput(Section forSection, PrintStream output){ if(outputs.containsKey(forSection)){ - //throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); + //throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden"); if(outputs.get(forSection).equals(output)){ //do nothing }else{ diff --git a/src/de/dhbwstuttgart/logger/SectionLogger.java b/src/de/dhbwstuttgart/logger/SectionLogger.java index 66fbbd80..15d36289 100644 --- a/src/de/dhbwstuttgart/logger/SectionLogger.java +++ b/src/de/dhbwstuttgart/logger/SectionLogger.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.logger; import java.util.logging.Level; /** - * Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt + * Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java index 3ca780a7..33542663 100755 --- a/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java +++ b/src/de/dhbwstuttgart/myexception/CTypeReconstructionException.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.core.IItemWithOffset; // ino.class.CTypeReconstructionException.23746.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2006/06/13 10:37:31 $ */ // ino.end diff --git a/src/de/dhbwstuttgart/parser/JavaClassName.java b/src/de/dhbwstuttgart/parser/JavaClassName.java index 352437c4..14005560 100644 --- a/src/de/dhbwstuttgart/parser/JavaClassName.java +++ b/src/de/dhbwstuttgart/parser/JavaClassName.java @@ -66,7 +66,7 @@ public class JavaClassName { return false; if (packageName != null && other.packageName != null) { if (!packageName.equals(other.packageName)) - return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden + return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden } return true; } diff --git a/src/de/dhbwstuttgart/parser/JavaLexer.java b/src/de/dhbwstuttgart/parser/JavaLexer.java index 2479f279..24224606 100644 --- a/src/de/dhbwstuttgart/parser/JavaLexer.java +++ b/src/de/dhbwstuttgart/parser/JavaLexer.java @@ -1,7 +1,7 @@ /******************************************** * file: JavaLexer.lex * * * - * enth�lt die JLex-Spezifikation f�r die * + * enth�lt die JLex-Spezifikation f�r die * * Generierung des lexical analyzers * * * ********************************************/ diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 5f023cb0..00e3854a 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -46,7 +46,7 @@ void initUsedIdsToCheck() { } //PL 05-07-30 eingefuegt. ENDE -//LUAR 07-05-29 Anfang für Wildcard Test +//LUAR 07-05-29 Anfang für Wildcard Test public Menge testPair = new Menge(); //LUAR 07-05-29 Ende // line 53 "-" @@ -817,7 +817,7 @@ case 19: { UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() ); - UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ yyVal = UI; } break; @@ -980,7 +980,7 @@ case 36: pl.getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null, ((Token)yyVals[0+yyTop]).getOffset())); /*pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); yyVal = pl; } break; @@ -991,7 +991,7 @@ case 37: RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); pl.getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal = pl; } break; @@ -1012,7 +1012,7 @@ case 39: ((ParaList)yyVals[-2+yyTop]).getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(), null,((Token)yyVals[0+yyTop]).getOffset())); /*$1.getParalist().addElement(new TypePlaceholder($3.getLexem()));*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist: " + ((ParaList)yyVals[-2+yyTop]).getParalist(), Section.PARSER); yyVal=((ParaList)yyVals[-2+yyTop]); } @@ -1023,7 +1023,7 @@ case 40: RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); ((ParaList)yyVals[-5+yyTop]).getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal=((ParaList)yyVals[-5+yyTop]); } break; @@ -1252,7 +1252,7 @@ case 71: { if (((Menge)yyVals[0+yyTop]) != null) { /*$1.set_ParaList($2.get_ParaList());*/ - ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ + ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ /* otth: originale (also diese) Parameterliste retten */ /*((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() );*/ } @@ -1410,7 +1410,7 @@ case 91: break; case 92: // line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - {/*angefügt von Andreas Stadelmeier*/ + {/*angefügt von Andreas Stadelmeier*/ ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); yyVal=((FieldDeclaration)yyVals[-1+yyTop]); @@ -1906,7 +1906,7 @@ case 153: /* #JB# 10.04.2005 */ /* ########################################################### */ met.setLineNumber(((Token)yyVals[-2+yyTop]).getLineNumber()); - met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId DImethod = new DeclId(); DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem()); @@ -1921,7 +1921,7 @@ case 154: /* #JB# 10.04.2005 */ /* ########################################################### */ met_para.setLineNumber(((Token)yyVals[-3+yyTop]).getLineNumber()); - met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId Dimet_para = new DeclId(); Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem()); @@ -1990,7 +1990,7 @@ case 161: { FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop])); FP.setType(((Type)yyVals[-1+yyTop])); - /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/ + /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/ yyVal=FP; } break; @@ -2042,7 +2042,7 @@ case 166: /* #JB# 10.04.2005 */ /* ########################################################### */ DI.setLineNumber(((Token)yyVals[0+yyTop]).getLineNumber()); - DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DI.set_Name(((Token)yyVals[0+yyTop]).getLexem()); yyVal=DI; diff --git a/src/de/dhbwstuttgart/parser/Token.java b/src/de/dhbwstuttgart/parser/Token.java index 7e6f005c..86c9dd09 100755 --- a/src/de/dhbwstuttgart/parser/Token.java +++ b/src/de/dhbwstuttgart/parser/Token.java @@ -16,7 +16,7 @@ public class Token private int m_LineNumber; // ino.end // ino.attribute.m_Offset.24871.declaration - private int m_Offset;//hinzugefügt hoth: 14.04.2006 + private int m_Offset;//hinzugefügt hoth: 14.04.2006 // ino.end @@ -54,7 +54,7 @@ public class Token // ino.end // ino.method.Token.24883.defdescription type=line - // hinzugefügt hoth: 14.04.2006 + // hinzugefügt hoth: 14.04.2006 // ino.end // ino.method.Token.24883.definition Token (int tok, String s, int lineNumber, int charOffset) @@ -69,7 +69,7 @@ public class Token // ino.end // ino.method.Token.24886.defdescription type=line - // hinzugefügt hoth: 14.04.2006 + // hinzugefügt hoth: 14.04.2006 // ino.end // ino.method.Token.24886.definition Token (int tok, char c, int lineNumber, int charOffset) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index b93e7df9..09d44797 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -125,7 +125,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.attribute.containedTypes.23032.decldescription type=line // PL 05-07-30 eingefuegt. Vektor aller Typdeklarationen, die in der Klasse - // vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt. + // vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt. // ino.end // ino.attribute.containedTypes.23032.declaration private Menge containedTypes = new Menge(); @@ -134,7 +134,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I private Menge usedIdsToCheck = new Menge(); // ino.end - private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden. + private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden. // ino.attribute.parserlog.23038.declaration //protected Logger parselog = Logger.getLogger("parser"); @@ -157,14 +157,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I superclassid=null; } this.offset = offset; - if(!name.equals("Object"))//Alle Klassen außer Object erben von Object: + if(!name.equals("Object"))//Alle Klassen außer Object erben von Object: this.superClass = new Class("Object", -1).getType(); } // ino.end /** - * Erstellt eine Klasse, welche nur für die Assumptions verwendet wird. - * Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody. + * Erstellt eine Klasse, welche nur für die Assumptions verwendet wird. + * Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody. * @param name * @param superClass * @param modifiers @@ -285,8 +285,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** * @author Andreas Stadelmeier, a10023 - * Fügt der Klasse eine Feld hinzu. - * Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um. + * Fügt der Klasse eine Feld hinzu. + * Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um. * @param feld */ public void addField(Field i) @@ -328,7 +328,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.complete_paralist.23062.body { - //Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen + //Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen Menge child = paralist; paralist = (Menge)superclassid.get_ParaList(); @@ -344,7 +344,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** - * Generiert die ClassFile für diese Klasse. + * Generiert die ClassFile für diese Klasse. * @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen. * @return * @throws JVMCodeException @@ -371,7 +371,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // pkgName = sf.getPackageName().get_codegen_UsedId() + "/"; //} - //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: + //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: String packageName = ""; if(pkgName != null) packageName = pkgName.get_Name_1Element(); classfile.add_class(getName(), superClass, getAccessFlags()); @@ -409,36 +409,36 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.end /** - * Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt. - * Der ClassBody enthält sämtliche Felder dieser Klasse. - * Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen. - * (Nur einmal während des Parsens aufrufen!) + * Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt. + * Der ClassBody enthält sämtliche Felder dieser Klasse. + * Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen. + * (Nur einmal während des Parsens aufrufen!) */ public void set_ClassBody(ClassBody body) { Menge tempFields=body.getFields(); for(Field f : this.getFields()){ - if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?) + if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?) Method m = (Method)f; /* * Ermitteln ob es sich bei der Methode um einen Konstruktor handelt: * (Parser kann nicht zwischen Methode und Konstruktor unterscheiden. - * Denn für einen Konstruktor gelten besondere Regeln: + * Denn für einen Konstruktor gelten besondere Regeln: * -Typ des Blocks eines Konstruktor ist void (kein Return-Statement) - * -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse + * -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse * -Ein Konstruktor kann nicht aufgerufen werden (nur mit new) */ - if(m.get_Method_Name().equals(""))throw new TypeinferenceException(" ist kein gültiger Methodenname", m); + if(m.get_Method_Name().equals(""))throw new TypeinferenceException(" ist kein gültiger Methodenname", m); if((m.get_Method_Name().equals(this.getName()))) { Constructor constructor = new Constructor(m); - tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen + tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen }else{ - //Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen: + //Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen: tempFields.add(m); } }else{ - tempFields.add(f); //Ansonsten das Feld anfügen... + tempFields.add(f); //Ansonsten das Feld anfügen... } } @@ -640,14 +640,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ///////////////////////////////////////////////////////////////////////// // ino.method.TRProg.23110.defdescription type=javadoc /** - * Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst + * Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst * die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe - * f�r den Algorithmus dienen.
    - * (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) - *
    Author: J�rg B�uerle + * f�r den Algorithmus dienen.
    + * (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) + *
    Author: J�rg B�uerle * @param supportData * @param globalAssumptions - * @return Liste aller bisher berechneten, m�glichen Typkombinationen + * @return Liste aller bisher berechneten, m�glichen Typkombinationen * @throws CTypeReconstructionException */ // ino.end @@ -671,16 +671,16 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ////////////////////////////// //Erzeuge Assumptions: TypeAssumptions assumptions = this.getPrivateFieldAssumptions(); - //Globale Assumptions anfügen: + //Globale Assumptions anfügen: assumptions.add(globalAssumptions); ConstraintsSet oderConstraints = new ConstraintsSet(); for(Type gparam : this.get_ParaList()){ - if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen + if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen } for(Type gparam : this.get_ParaList()){ - if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen + if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen } typinferenzLog.debug("Erstellte Assumptions: "+assumptions, Section.TYPEINFERENCE); @@ -709,7 +709,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /* CReconstructionTupleSet retTupleSet = this.TRStart(methodList, V, V_fields_methods, supportData); - inferencelog.debug("Bin aus TRStart() zur�ck in TRProg()."); + inferencelog.debug("Bin aus TRStart() zur�ck in TRProg()."); ////////////////////////////// // Neu Ergebnismenge A aller // Typannahmen erzeugen: @@ -717,12 +717,12 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I inferencelog.debug("Erstelle Ergebnismenge..."); Menge newA = new Menge(); - // Alle bisherigen M�glichkeiten an Typkombinationen durchgehen: + // Alle bisherigen M�glichkeiten an Typkombinationen durchgehen: Menge oldA = supportData.getA(); for(int i=0; i retTupleIt = retTupleSet.getIterator(); while(retTupleIt.hasNext()){ CReconstructionTuple possibleTuple = retTupleIt.next(); @@ -745,7 +745,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } newReconResult.addGenericTypeVars(this.getName(), genericsList); - //Hinzuf�gen: + //Hinzuf�gen: newA.addElement(newReconResult); } } @@ -761,7 +761,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(this.methodList != null) return this.methodList; - //TODO: Unnötige Berechnungen im folgenden Code rauskürzen: + //TODO: Unnötige Berechnungen im folgenden Code rauskürzen: ////////////////////////////// // Die Eingabedaten bauen: ////////////////////////////// @@ -774,7 +774,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ////////////////////////////// // Alle Felder durchgehen: // Zuerst alle Attribute, dann Methoden - // ge�ndert: hoth 06.04.2006 + // ge�ndert: hoth 06.04.2006 ////////////////////////////// for(Field field : this.getFields()) @@ -813,7 +813,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I methodList.addElement(method); - // F�r V_fields_methods: + // F�r V_fields_methods: CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(this.getType(), method.get_Method_Name(), method.getReturnType(), method.getParameterCount(),method.getLineNumber(),method.getOffset(),new Menge(),method.getGenericMethodParameters()); // Typannahme bauen... @@ -826,7 +826,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I method.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); - // F�r die V_i: + // F�r die V_i: CTypeAssumptionSet localAssum = new CTypeAssumptionSet(); // Bauen... @@ -834,7 +834,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(parameterList!=null){ for(int i=0; i()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -847,13 +847,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I - // F�r die V_i: + // F�r die V_i: CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),"1", para.getIdentifier(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); rememberLocals.addElement(varAssum); } } - // ...und hinzuf�gen: + // ...und hinzuf�gen: V.addElement(localAssum); } @@ -866,15 +866,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ /** - * Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese. - * Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben. + * Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese. + * Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben. * @return Die erstellten TypeAssumptions */ private TypeAssumptions getPrivateFieldAssumptions() { - if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden. + if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden. TypeAssumptions assumptions = new TypeAssumptions(this.getName()); - //this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden. - //Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist. + //this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden. + //Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist. //CLocalVarTypeAssumption thisAssumption = new CLocalVarTypeAssumption(this.name, name, 0, 0, name, "this", new RefType(name,0), 0, 0, null); //assumptions.setThisV(thisAssumption); @@ -882,20 +882,20 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(!field.isPublic())assumptions.add(field.createTypeAssumptions(this)); } - //Eine Assumption für den Standardkonstruktor: - // (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt) - //auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird. - //if(assumptions.getMethodAssumptions(this.getName(), "").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde: + //Eine Assumption für den Standardkonstruktor: + // (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt) + //auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird. + //if(assumptions.getMethodAssumptions(this.getName(), "").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde: // assumptions.addMethodAssumption(new RefType(this.getName(),0), "", new RefType(this.getName(),0), new Menge()); //} - this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. + this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. return assumptions; } /* public ConstraintsSet TYPE(Menge methodList, Menge fielddeclarationList, TypeAssumptions assumptions){ ConstraintsSet ret = new ConstraintsSet(); - // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. + // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. //TypeAssumptions assumptionsPlusFieldAssumptions = new TypeAssumptions(assumptions); for(Expr expr : fielddeclarationList){ //ret.add(expr.TYPEStmt(assumptionsPlusFieldAssumptions)); @@ -912,9 +912,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.RetType.23119.defdescription type=javadoc /** - * Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.
    - * (siehe Algorithmus RetType, Martin Pl�micke) - *
    Author: J�rg B�uerle + * Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.
    + * (siehe Algorithmus RetType, Martin Pl�micke) + *
    Author: J�rg B�uerle * @param me * @param V * @return @@ -936,7 +936,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ // ino.method.toString.23125.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -954,7 +954,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I // ino.method.wandleRefTypeAttributes2GenericAttributes.23128.defdescription type=javadoc /** - * Alle Methoden der Klassen überprüfen, ob sie als + * Alle Methoden der Klassen überprüfen, ob sie als * RefType deklarierte Attribute haben, die aber GenericTypeVars sind * und ggf. ersetzen * @@ -1043,7 +1043,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** - * Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet. + * Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet. * Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt. * @return Java-Sourcefile */ @@ -1073,7 +1073,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I classBodyCode.attach(bodyString); - //Zuerst die generischen Parameter für diese Klasse berechnen: + //Zuerst die generischen Parameter für diese Klasse berechnen: //this.createGenericTypeVars(classBodyCode.getUnresolvedTPH()); if(this.genericClassParameters != null && this.genericClassParameters.size()>0){ @@ -1094,9 +1094,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } /** - * Errechnet die Generischen Parameter der Klasse für diese Klasse. - * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. - * @param tphs : Alle übriggebliebenen TypePLaceholder + * Errechnet die Generischen Parameter der Klasse für diese Klasse. + * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. + * @param tphs : Alle übriggebliebenen TypePLaceholder private void createGenericTypeVars(Menge tphs){ this.genericClassParameters = new GenericDeclarationList(new Menge()); @@ -1107,8 +1107,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } */ /** - * Errechnet die Generischen Parameter der Klasse für diese Klasse. - * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. + * Errechnet die Generischen Parameter der Klasse für diese Klasse. + * Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben. * @param reconstructionResult public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){ @@ -1193,7 +1193,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } this.fielddecl = tempFields; - //Prüfen ob ein Konstruktor vorhanden ist: + //Prüfen ob ein Konstruktor vorhanden ist: boolean constructorVorhanden = false; for(Field f : this.getFields()){ if(f instanceof Constructor){ @@ -1201,7 +1201,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I break; } } - if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: + if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this)); this.addField(standardKonstruktor); } @@ -1289,7 +1289,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I @Override public int getGenericVarDeclarationOffset(){ - // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn + // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn if(this.genericClassParameters != null){ return this.genericClassParameters.getEndOffset(); }else{ @@ -1299,7 +1299,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I /** * Die Super Klasse dieser Klasse. - * @return null für Klasse Object + * @return null für Klasse Object */ public Type getSuperClass(){ return this.superClass; diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java index e0b36c8f..cbac8f9f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java @@ -10,11 +10,6 @@ import de.dhbwstuttgart.logger.Logger; // ino.end - - - - -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCClassBodyException; import de.dhbwstuttgart.myexception.SCExcept; @@ -72,27 +67,6 @@ Paratyp gesetzt."); } */ // ino.end - // ino.method.codegen.23176.definition - public void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.23176.body - { - for(int i=0 ; i < fielddecl.size() ; i++) - { - /* - * if(this.fielddecl.elementAt(i) instanceof InstVarDecl) - { - ((InstVarDecl)this.fielddecl.elementAt(i)).codegen(classfile, paralist); - } - else - */ - { - this.fielddecl.elementAt(i).codegen(classfile, paralist); - } - } - } - // ino.end @@ -103,7 +77,7 @@ Paratyp gesetzt."); } /** * @author Andreas Stadelmeier, a10023 - * Fügt der Klasse eine Feld hinzu. + * Fügt der Klasse eine Feld hinzu. * @param feld */ public void addField(Field i) @@ -305,7 +279,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) { if( ((RefType)TempParameter).get_ParaList().size() != KlassenVektor.elementAt(k).get_ParaList().size() ) { - parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD ); + parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD ); System.exit( 1 ); } else @@ -332,7 +306,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) } else { - // Tylose Variablen d�rfen nicht deklariert sein + // Tylose Variablen d�rfen nicht deklariert sein for( int k = 0; k < KlassenVektor.size(); k++) { if( KlassenVektor.elementAt(k).getName().equals(TempParameter.getName()) ) @@ -350,7 +324,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) // ino.method.toString.23203.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java index 36560d7e..ec7c20b1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassHelper.java @@ -18,8 +18,8 @@ public class ClassHelper /** * HOTI * Diese Methode sucht in der Klassendefinition nach einen GTV, die - * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden - * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls * angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert * die Methode null. * @param type diff --git a/src/de/dhbwstuttgart/syntaxtree/Constant.java b/src/de/dhbwstuttgart/syntaxtree/Constant.java index b1be13aa..1c9bc2f2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Constant.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constant.java @@ -4,10 +4,6 @@ package de.dhbwstuttgart.syntaxtree; // ino.module.Constant.8556.import import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.bytecode.AttributeInfo; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName; @@ -18,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; -import sun.reflect.generics.reflectiveObjects.NotImplementedException; +import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; // ino.class.Constant.23212.description type=javadoc /** @@ -159,32 +155,7 @@ public class Constant extends Method this.mod = modifiers; } // ino.end - - // ino.method.codegen.23258.definition - public void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.23258.body -{ - // Zugehoerigen Typ (I, Z, C, Ljava/lang/String;) fuer den Typ ermitteln - String bcgType = JVMCode.get_codegen_Type(typ.getName().toString(), paralist); - - if (getValue() == null || !(getValue() instanceof Literal) ) { - throw new JVMCodeException("Die Generierung der Konstante wird nicht unterstuetzt!"); - } - - // Attribut fuer Wertzuweisung erstellen - short index = (short) ((Literal)getValue()).ConstantCodegen(classfile); - AttributeInfo attrinfo = new AttributeInfo(); - attrinfo.set_attribute_name_index(classfile.getConstantValueID()); - attrinfo.set_info(JVMCode.shortToBytes(index)); - - - // Field hinzufuegen - classfile.add_field(name, bcgType, mod.calculate_access_flags(), attrinfo); - } -// ino.end // ino.method.getOffset.23261.definition public int getOffset() diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 859b2c02..e7b29569 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -2,7 +2,6 @@ package de.dhbwstuttgart.syntaxtree; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.misc.DeclId; diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 0437b44c..2b40a085 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -2,7 +2,6 @@ package de.dhbwstuttgart.syntaxtree; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -50,8 +49,6 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta return typ; } - public abstract void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException; @Override public Menge getGenericParameter() { @@ -79,7 +76,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta public Menge getDeclIdMenge() { - // otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) + // otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln) return declid; } @@ -95,7 +92,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta public abstract JavaCodeResult printJavaCode(ResultSet resultSet); /** - * Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember + * Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember * @param classmember * @return */ @@ -150,7 +147,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta @Override public int getGenericVarDeclarationOffset(){ - // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn + // Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn if(this.genericParameters != null){ return this.genericParameters.getEndOffset(); }else{ diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 5eef3ade..b452e3fc 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -2,7 +2,6 @@ package de.dhbwstuttgart.syntaxtree; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -21,7 +20,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** - * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung + * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung * Beispiel: 'public Feld FeldVar = FeldWert;' * @author janulrich * @@ -33,8 +32,8 @@ public class FieldDeclaration extends Field{ //private Menge parameter; /** - * Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. - * Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig. + * Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. + * Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig. */ public FieldDeclaration(String name, Type typ){ super(0);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset @@ -57,12 +56,6 @@ public class FieldDeclaration extends Field{ return this.get_Name().elementAt(0).name; } - @Override - public void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException { - // TODO Auto-generated method stub - - } @Override public String toString() @@ -88,7 +81,7 @@ public class FieldDeclaration extends Field{ ////////////////////////////// TypeAssumptions assumptions = new TypeAssumptions(); /* - * Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen. + * Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen. * Wird das Feld mit einem Typ initialisiert so muss dieser auch in die Assumptions. */ if(this.getType() == null)throw new TypeinferenceException("Der Typ eines Feldes darf nicht null sein", this); @@ -117,7 +110,7 @@ public class FieldDeclaration extends Field{ @Override public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) { if(this.wert == null && (this.getType() == null || this.getType() instanceof TypePlaceholder)) - throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this); + throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this); ConstraintsSet ret = new ConstraintsSet(); TypeAssumptions localAssumptions = publicAssumptions.clone(); @@ -151,7 +144,7 @@ public class FieldDeclaration extends Field{ ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht if(this.wert!=null){ - //Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement: + //Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement: ret.add(this.wert.TYPEExpr(localAssumptions)); ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType)); } @@ -161,7 +154,7 @@ public class FieldDeclaration extends Field{ @Override public void wandleRefTypeAttributes2GenericAttributes(Menge paralist){ super.wandleRefTypeAttributes2GenericAttributes(paralist); - if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben + if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben } } diff --git a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java index c4115bc4..e410bd57 100755 --- a/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java +++ b/src/de/dhbwstuttgart/syntaxtree/FormalParameter.java @@ -7,8 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; @@ -43,7 +41,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns @Override public boolean equals(Object object) { - //if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen. + //if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen. if(!(object instanceof FormalParameter))return false; FormalParameter equals = (FormalParameter)object; if((this.type==null)!=(equals.type == null))return false; @@ -56,7 +54,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.setType.23404.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param t */ // ino.end @@ -115,16 +113,6 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.end - - // ino.method.codegen.23419.definition - public void codegen(ClassFile classfile, CodeAttribute code) - // ino.end - // ino.method.codegen.23419.body - { - code.add_local(declid.get_Name(), this.getType()); - } - // ino.end - // ino.method.getOffset.23422.defdescription type=javadoc /** *
    Author: Thomas Hornberger 09.04.2006 @@ -142,7 +130,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.getLineNumber.23425.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -158,7 +146,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns // ino.method.getTypeLineNumber.23431.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Generic.java b/src/de/dhbwstuttgart/syntaxtree/Generic.java index bcd36611..90d63648 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Generic.java +++ b/src/de/dhbwstuttgart/syntaxtree/Generic.java @@ -6,7 +6,7 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; /** - * Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field) + * Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field) * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java index a25efc00..28bc26da 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java +++ b/src/de/dhbwstuttgart/syntaxtree/ImportDeclarations.java @@ -14,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.misc.UsedId; * HOTI 4.5.06 * Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) * Der Parser kann keine Generischen Typen darstellen, damit trotzdem - * an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung... + * an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung... */ // ino.end // ino.class.ImportDeclarations.23434.declaration diff --git a/src/de/dhbwstuttgart/syntaxtree/Interface.java b/src/de/dhbwstuttgart/syntaxtree/Interface.java index 194297d6..eb5aff6a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Interface.java +++ b/src/de/dhbwstuttgart/syntaxtree/Interface.java @@ -5,7 +5,6 @@ package de.dhbwstuttgart.syntaxtree; // ino.module.Interface.8582.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.core.AClassOrInterface; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.UsedId; diff --git a/src/de/dhbwstuttgart/syntaxtree/InterfaceBody.java b/src/de/dhbwstuttgart/syntaxtree/InterfaceBody.java index ea79a3f5..986eabd1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/InterfaceBody.java +++ b/src/de/dhbwstuttgart/syntaxtree/InterfaceBody.java @@ -5,7 +5,6 @@ package de.dhbwstuttgart.syntaxtree; // ino.module.InterfaceBody.8583.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; @@ -98,43 +97,6 @@ public class InterfaceBody } // ino.end - // ino.method.codegen.24011.definition - public void codegen(ClassFile cf, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24011.body - { - - // Constanten verarbeiten - for (int i=0; i < ConstantVektor.size(); i++) { - ConstantVektor.elementAt(i).codegen(cf, paralist); - } - - // Methodenheader verarbeiten - for (int i=0; i < MethodVektor.size(); i++) { - Method m = MethodVektor.elementAt(i); - - Modifiers mod = m.getDeclIdMenge().elementAt(0).get_Modifiers(); - - if (mod != null){ - mod.ensureAbstract(); - mod.ensurePublic(); - } else { - mod = new Modifiers(); - mod.ensureAbstract(); - mod.ensurePublic(); - m.getDeclIdMenge().elementAt(0).set_Modifiers(mod); - } - - - // Sicherstellen, dass kein Bytecode innerhalb - // der Methode generiert wird. - m.setAbstract(true); - m.codegen(cf, paralist); - } - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index f068ab67..a288aa98 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -9,7 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -86,7 +85,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.attribute.m_LineNumber.23512.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.attribute.inferencelog.23515.declaration protected static Logger inferencelog = Logger.getLogger("inference"); // ino.end @@ -311,33 +310,6 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable - // ino.method.get_codegen_Param_Type.23572.definition - public String get_codegen_Param_Type(Menge paralist) - // ino.end - // ino.method.get_codegen_Param_Type.23572.body - { - String ret = new String(); - if(this.getParameterList() == null) - { - ret += "()"; - } - else - { - ret += this.getParameterList().get_codegen_ParameterList(paralist); - } - if(this.getType() == null) - { - ret += "V"; - } - else - { - ret += this.getType().get_codegen_Type(paralist); - } - return ret; - } - // ino.end - - // ino.method.get_Method_Name.23575.definition public String get_Method_Name() @@ -359,16 +331,6 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end - - // ino.method.codegen.23581.definition - public void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.23581.body - { - classfile.add_method(declid.firstElement().get_Name(), this.get_codegen_Param_Type(paralist), this.getParameterList(), this.getType(), block, declid.firstElement().get_access_flags(), paralist, isAbstract); - } - // ino.end // ino.method.getLineNumber.23584.definition public int getLineNumber() @@ -389,7 +351,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.getOffset.23590.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23590.definition public int getOffset() @@ -410,7 +372,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.setOffset.23596.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23596.definition public void setOffset(int Offset) @@ -439,7 +401,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.method.toString.23605.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -529,8 +491,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = new ConstraintsSet(); TypeAssumptions localAss = new TypeAssumptions(); - localAss.add(ass); //Die globalen Assumptions anhängen - //Generische Parameterdeklarationen den Assumptions anfügen: + localAss.add(ass); //Die globalen Assumptions anhängen + //Generische Parameterdeklarationen den Assumptions anfügen: for(GenericTypeVar gtv : this.getGenericParameter()){ localAss.add(gtv.createAssumptions()); } @@ -549,7 +511,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable this.returntype = replaceType; } */ - //Die Parameter zu den Assumptions hinzufügen: + //Die Parameter zu den Assumptions hinzufügen: if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){ param.setType(param.getType().checkTYPE(localAss, this)); @@ -567,7 +529,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable localAss.addAssumption(new ParameterAssumption(param)); } ret.add(this.block.TYPEStmt(localAss)); - //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: + //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this))); return ret; } @@ -629,7 +591,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //methodList.addElement(method); - //F�r V_fields_methods: + //F�r V_fields_methods: CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Menge(),this.getGenericMethodParameters()); // Typannahme bauen... @@ -642,7 +604,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable this.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); - //F�r die V_i: + //F�r die V_i: CTypeAssumptionSet localAssum = new CTypeAssumptionSet(); //Bauen... @@ -650,7 +612,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable if(parameterList!=null){ for(int i=0; i()); //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 Class.isFirstLocalVarDecl=false; @@ -660,15 +622,15 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable methodAssum.addParaAssumption(paraAssum); - // F�r die V_i: + // F�r die V_i: CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); localAssum.addElement(varAssum); //rememberLocals.addElement(varAssum); } } - //...und hinzuf�gen: + //...und hinzuf�gen: - assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen + assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen //Hier wird der Typ der als Assumption eingetragen wird in die Variable assumedType dieser Klasse geschrieben: if(this.assumedType == null) // Falls der Typ nicht schon gesetzt ist. Das ist der Fall, falls die Methode ein Konstruktor ist @@ -682,7 +644,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void parserPostProcessing(SyntaxTreeNode parent){ if(this.getType()==null)this.setType(TypePlaceholder.fresh(this)); - //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: + //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: //Class parentClass = (Class)parent; if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); super.parserPostProcessing(parent); @@ -714,7 +676,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // Methode und Block teilen sich einen ReturnType: //this.block.setType(t); this.returntype = t; - this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) + this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) } /** diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index 7839e55d..a19889d0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -7,8 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import java.util.Iterator; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.syntaxtree.type.BaseType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.typeinference.JavaCodeResult; @@ -39,39 +37,6 @@ public class ParameterList extends SyntaxTreeNode implements Iterable + * Author: J�rg B�uerle
    * @return Die Anzahl der Parameter */ // ino.end @@ -132,7 +88,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterabletrue
    gesetzt ist, wird immer als Superklasse Object - * mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ - * auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine - * Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es + * mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ + * auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine + * Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es * die superclass von allen Class-Objekten. (Wenn true ist jede Class automatisch * wenn nicht anders eingegeben Subclass von Object (Wie es sein muss)) */ @@ -87,7 +86,7 @@ public class SourceFile // ino.attribute.READ_BASE_TYPE_SUPERCLASSES_FROM_JRE.21364.decldescription type=javadoc /** - * Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert + * Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert * durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen. D.h. * Integer hat bspw. nicht die Superklasse Number sondern OBJECT. * Dies verursacht bei den Int-Operationen ein Problem @@ -100,7 +99,7 @@ public class SourceFile /** * @autor PL - * Wenn dieses Flag auf false ist, werden für alle importierten Klassen + * Wenn dieses Flag auf false ist, werden für alle importierten Klassen * KEINE Superklassen geladen. */ private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE = false; @@ -128,7 +127,7 @@ public class SourceFile // ino.end /** - * Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. + * Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. * SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar. */ public SourceFile(){ @@ -178,12 +177,12 @@ public class SourceFile // ino.end // ino.attribute.baseTypeTranslationTable.21385.decldescription type=javadoc /** - * Table zum Übersetzen der nicht implementierten Base-Types: - * Überall im Compiler wird statt bspw. int Integer verwendet + * Table zum Übersetzen der nicht implementierten Base-Types: + * Überall im Compiler wird statt bspw. int Integer verwendet * d.h. 1+2 liefert ein Integer - * Deshalb benötigen wir hier eine Tabelle, mit der man die von + * Deshalb benötigen wir hier eine Tabelle, mit der man die von * der JRE gelieferten Base-Typen (int,char, etc) und die Objekt- - * Typen umwandeln können + * Typen umwandeln können */ // ino.end // ino.attribute.baseTypeTranslationTable.21385.declaration @@ -295,7 +294,7 @@ public class SourceFile // ino.method.makeFC.21403.defdescription type=javadoc /** * Erstellt die Finite Closure - * @return FC_TTO-Object, welches die Finite Closure repräsentiert + * @return FC_TTO-Object, welches die Finite Closure repräsentiert */ // ino.end // ino.method.makeFC.21403.definition @@ -311,7 +310,7 @@ public class SourceFile globalAssumptions.add(this.getPublicFieldAssumptions()); // 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen - Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. + Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType()); ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType()); @@ -327,10 +326,10 @@ public class SourceFile //System.out.println("FCPair: "+p); if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen. Type superTypeFromAssumptions = ass.getTypeFor(t2, t2).getType(); //In den Assumptions den SuperTyp nachschlagen - if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. + if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. vFC.add(p); } - basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen + basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen }else{ //System.out.println("Wurde nicht aufgenommen"); } @@ -403,7 +402,7 @@ public class SourceFile // konkret: rechte Seite von FC nach Typkonstruktoren in der Parameterliste durchsuchen for( int n = 0; n < vFC.size(); n++ ) { - // Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage + // Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage Pair PTypKonst = vFC.elementAt(n); // Parameter des rechten Typausdrucks des betrachteten Paars extrahieren @@ -445,7 +444,7 @@ public class SourceFile { inferencelog.debug(" gefundener Typ links: " + ((RefType)(PSuchen.TA1)).getName(), Section.FINITECLOSURE ); inferencelog.debug(" gefundener Typ rechts: " + ((RefType)(PSuchen.TA2)).getName() , Section.FINITECLOSURE); - // Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat + // Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat // Substitution //Pair P = new Pair( PSuchen.getTA1Copy( ), PSuchen.getTA2Copy( ) ); //linker Typterm bleibt gleich @@ -498,7 +497,7 @@ public class SourceFile // new RefType( (RefType)vPara.elementAt(u) ), // false ); // rechte Seite substituieren //Es genuegt die rechte Seite zu substituieren, da - //die linke Seite ein Typterm ausschlie�lich mit + //die linke Seite ein Typterm ausschlie�lich mit //Typvariablen ist } //Unify.SubstHashtableGeneric(((RefType)P.TA1), hts); //funktioniert nicht @@ -597,7 +596,7 @@ public class SourceFile } } // end for: linke Seite suchen } // end if: Element ist RefType - } // end for: Transitivit�ten berechnen + } // end for: Transitivit�ten berechnen //PL HIER REFLEXIVE HUELLE EINFUEGEN // 05-01-07 @@ -658,13 +657,13 @@ public class SourceFile ///////////////////////////////////////////////////////////////////////// // ino.method.typeReconstruction.21406.defdescription type=javadoc /** - * Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - * Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als - * Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen - * Typkombinationen f�r alle Klassen zusammen. - *
    Author: J�rg B�uerle - * @return Liste aller m�glichen Typkombinationen - * @throws CTypeReconstructionException Wenn was schief l�uft + * Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. + * Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als + * Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen + * Typkombinationen f�r alle Klassen zusammen. + *
    Author: J�rg B�uerle + * @return Liste aller m�glichen Typkombinationen + * @throws CTypeReconstructionException Wenn was schief l�uft */ // ino.end // ino.method.typeReconstruction.21406.definition @@ -678,7 +677,7 @@ public class SourceFile //Logger initialisieren: Logger typinferenzLog = Logger.getLogger("Typeinference"); - //Alle Assumptions für diese SourceFile sammeln: + //Alle Assumptions für diese SourceFile sammeln: for(Class klasse : this.KlassenVektor){ globalAssumptions.add(klasse.getPublicFieldAssumptions()); } @@ -703,14 +702,14 @@ public class SourceFile //Karthesisches Produkt bilden: //////////////// - //Unmögliche ConstraintsSets aussortieren durch Unifizierung + //Unmögliche ConstraintsSets aussortieren durch Unifizierung Unifier unifier = (pairs)->{ Menge> retValue = new Menge<>(); retValue = Unify.unify(pairs, finiteClosure); return retValue;}; //oderConstraints.filterWrongConstraints(unifier); oderConstraints.unifyUndConstraints(unifier); - typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); + typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE); //Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden): Menge> xConstraints = oderConstraints.cartesianProduct(); /* @@ -731,10 +730,10 @@ public class SourceFile ////////////////////////////// boolean unifyFail = true; for(Menge constraints : xConstraints){ - //Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen: + //Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen: Menge> result = new Menge>(); - //Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden. + //Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden. for(Pair p : constraints){ if(p.TA1 instanceof FunN){ p.TA1 = p.TA1.clone(); @@ -802,7 +801,7 @@ public class SourceFile ).collect(Menge::new, Menge::add, Menge::addAll); //Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen - //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen + //in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen Menge> indexeset = new Menge<>(); if (constraintsclonevars != null && constraintsclonevars.size()>0) { indexeset = Unify.schnitt(constraintsclonevars); @@ -880,7 +879,7 @@ public class SourceFile }); //Menge> unifyResult = Unify.unify(constraintsClone, finiteClosure); - //Dann den Ergebnissen anfügen + //Dann den Ergebnissen anfügen result.addAll(unifyResult); // Debugoutput:Menge> @@ -888,10 +887,10 @@ public class SourceFile //typinferenzLog.debug("Unifiziertes Ergebnis: "+result, Section.TYPEINFERENCE); /* - // Prüfe ob eindeutige Lösung: + // Prüfe ob eindeutige Lösung: if(result.size()>1 && !Unify.hasSolvedForm(result.elementAt(0))){ - typinferenzLog.debug("Keine eindeutige Lösung!"); + typinferenzLog.debug("Keine eindeutige Lösung!"); }else if(result.size()>1){ @@ -912,9 +911,9 @@ public class SourceFile //typinferenzLog.debug(this.printJavaCode(new ResultSet(new Menge()))); - //Für jede Klasse in diesem SourceFile gilt das selbe ResultSet: + //Für jede Klasse in diesem SourceFile gilt das selbe ResultSet: for(Class klasse : this.KlassenVektor){ - //Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen: + //Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen: for(Menge resultSet : result){ unifyFail = false; //Ein Unifiziertes Ergebnis ist entstanden (es kann auch leer sein, das bedeutet nur, dass die Constraints mindestens in einem Fall Sinn ergaben) //Add Result set as a new ReconstructionResult to ret: @@ -922,7 +921,7 @@ public class SourceFile ret.add(reconstructionResult); //ResultSet res = new ResultSet(resultSet); - typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE); + typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE); typinferenzLog.debug(klasse.printJavaCode(reconstructionResult), Section.TYPEINFERENCE); } @@ -934,8 +933,8 @@ public class SourceFile return ret; /* // HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit - // in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird. - // Wers braucht kanns natürlich ausschalten + // in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird. + // Wers braucht kanns natürlich ausschalten // inferencelog.setLevel(Level.INFO); @@ -966,7 +965,7 @@ public class SourceFile this.KlassenVektor); } - // HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als + // HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als // RefType deklarierte Attribute haben, die aber GenericTypeVars sind // Bsp.: // bei public E elementAt(i){...} wird E vorerst als RefType erkannt @@ -1014,10 +1013,10 @@ public class SourceFile inferencelog.info("Rufe \"SourceFile.makeFC()\"..."); - inferencelog.info("������������������������������������"); + inferencelog.info("������������������������������������"); FC_TTO finiteClosure = this.makeFC(); - inferencelog.info("������������������������������������"); - inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck."); + inferencelog.info("������������������������������������"); + inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck."); this.removeBasicAssumptions(); // PL 05-08-02 @@ -1031,19 +1030,19 @@ public class SourceFile Interface intf = intf_it.next(); // HOTI In diesem Moment gibt es nur _eine_ potentielle CTypeReconstructionResult, d.h. - // dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden + // dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden //intf.addThisToAssumptions(basics); } - // Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen: + // Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen: TypeAssumptions publicFieldsAssumptions = new TypeAssumptions(); for(Class cl : KlassenVektor){ publicFieldsAssumptions.add(cl.getPublicFieldAssumptions()); } - // Die BasicAssumptions anfügen: + // Die BasicAssumptions anfügen: publicFieldsAssumptions.add(this.getBasicAssumptions()); // Fuer jede Klasse separat den TRA aufrufen @@ -1064,7 +1063,7 @@ public class SourceFile * Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet * @return - @Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt + @Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt private TypeAssumptions getBasicAssumptions() { TypeAssumptions ret = new TypeAssumptions(null); @@ -1077,7 +1076,7 @@ public class SourceFile mod.addModifier(new Public()); - // Für jede einzelne Klasse + // Für jede einzelne Klasse while (imports.size()>0) { UsedId importDecl = imports.get(0); @@ -1209,9 +1208,9 @@ public class SourceFile }*/ /** - * Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen. + * Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen. * @param imports - * @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen. + * @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen. * @return */ private TypeAssumptions makeBasicAssumptionsFromJRE(Menge imports, boolean withSubtypes) @@ -1228,10 +1227,10 @@ public class SourceFile Modifiers mod = new Modifiers(); mod.addModifier(new Public()); - //Für Object: + //Für Object: imports.add(new UsedId("java.lang.Object",-1)); - // Für jede einzelne Klasse + // Für jede einzelne Klasse while (imports.size()>0) { UsedId importDecl = imports.get(0); @@ -1394,7 +1393,7 @@ public class SourceFile return new Class("java.lang.Object",new Modifiers(), 0); } - Menge supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen: + Menge supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen: java.lang.reflect.TypeVariable[] superclassTVS=s.getTypeParameters(); for(int tvi=0;tviAchtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes + * Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen. + *
    Achtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes * ersetzt werden.
    - * Author: J�rg B�uerle + * Author: J�rg B�uerle * * @return A priori Typinformationen * @throws ClassNotFoundException @@ -1599,7 +1598,7 @@ public class SourceFile // Menge bauen: //------------------------ foo.addClassName("java.lang.Menge"); //PL 05-08-01 eingefuegt - TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar + TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar Menge typeGenPara = new Menge(); typeGenPara.addElement(new GenericTypeVar(E.getName(),-1)); foo.addGenericTypeVars("java.lang.Menge", typeGenPara); @@ -1641,7 +1640,7 @@ public class SourceFile */ TypeAssumptions ret = new TypeAssumptions(); - //Basic Assumptions für die FunN Interfaces: + //Basic Assumptions für die FunN Interfaces: //TODO: Hier mehr als Fun1-Fun5 implementieren for(int i = 0; i<6; i++){ FunNInterface funN = new FunNInterface(i); @@ -1649,7 +1648,7 @@ public class SourceFile } - return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen + return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen } // ino.end @@ -1666,8 +1665,8 @@ public class SourceFile // ino.method.removeBasicAssumptions.21424.defdescription type=javadoc /** - * L�scht die Anfangsinformation wieder aus dem Klassenvektor - *
    Author: J�rg B�uerle + * L�scht die Anfangsinformation wieder aus dem Klassenvektor + *
    Author: J�rg B�uerle */ // ino.end // ino.method.removeBasicAssumptions.21424.definition @@ -1687,11 +1686,11 @@ public class SourceFile // ino.method.getPackageName.21427.defdescription type=javadoc /** - * Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars + * Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars * dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen * in der - * Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. - *
    Author: J�rg B�uerle + * Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. + *
    Author: J�rg B�uerle * @param res * / * /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){ diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index e263adc3..5a8e494a 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -21,11 +21,11 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ /** * Wird nach dem Parsen aufgerufen. - * Erfüllt folgenden Aufgaben: - * 1. Füllt fehlende Typangaben mit TPHs auf. - * 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + * Erfüllt folgenden Aufgaben: + * 1. Füllt fehlende Typangaben mit TPHs auf. + * 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) * 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. - * 4. Führt einen Teil des Syntaxckecks durch. + * 4. Führt einen Teil des Syntaxckecks durch. * */ public void parserPostProcessing(SyntaxTreeNode parent) { @@ -63,13 +63,13 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ SyntaxTreeNode equal = (SyntaxTreeNode)object; if(!equal.getDescription().equals(this.getDescription()))return false; if(this.getParent()!=null) - if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen. + if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen. return true; } /** * Methode zur Generierung der TypeInsertPoints - * @param insertSet - Generierte InsertPoints werden dem insertSet angefügt + * @param insertSet - Generierte InsertPoints werden dem insertSet angefügt * @param result - Das ResultSet auf dessen Basis die InsertPoints generiert werden */ public void addTypeInsertPoints(TypeInsertSet insertSet,ResultSet result) { @@ -77,7 +77,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ node.addTypeInsertPoints(insertSet, result); } - TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten + TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten //Fall der Knoten ein TypeInsertable ist, kann direkt der TypeInsertPoint generiert werden. if(this instanceof TypeInsertable){ TypeInsertable that = (TypeInsertable)this; @@ -87,7 +87,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ insertSet.add(tip);//ret.addAll(((TypePlaceholder)t).getTypeInsertPoints(result)); } /* - //Für den Fall, dass dieser Knoten Generische Variablen halten kann. + //Für den Fall, dass dieser Knoten Generische Variablen halten kann. if(that instanceof Generic && that.getOffset()>=0){ //Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden: Menge uTPHs = insertSet.getUnresolvedTPHs(); diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java index 679125ed..e7c5ec0a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/DeclId.java @@ -7,17 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; // ino.end - - - - - - -import de.dhbwstuttgart.bytecode.Attribute; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; -import de.dhbwstuttgart.bytecode.SignatureInfo; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Constant; @@ -54,7 +43,7 @@ public class DeclId // ino.attribute.m_LineNumber.23295.declaration private int m_LineNumber = MyCompiler.NO_LINENUMBER; // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.attribute.codegenlog.23298.decldescription type=line // Logger fuer Code-Gen // ino.end @@ -177,87 +166,7 @@ public class DeclId - // ino.method.codegen_InstVarDecl.23337.defdescription type=javadoc - /** - * Generieren einer Instanzvariable im Bytecode. - * Fuegt ggf. eine Signatur hinzu (Generics). - */ - // ino.end - // ino.method.codegen_InstVarDecl.23337.definition - public void codegen_InstVarDecl(ClassFile classfile, Type type, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen_InstVarDecl.23337.body - { - String codegen_type; - Attribute attr = null; - - // Spezialbehandlung fuer Konstanten .... - // Eine Unterscheidung im Parser wuerde Konflikte erzeugen - // da die Definition von Fields und Konstanten sehr aehnlich ist. - if (modifiers != null && modifiers.includesModifier(new Final())) { - Constant ct = new Constant(name, modifiers); - ct.setType(type); - if (!(wert instanceof Expr)) - throw new JVMCodeException("Das Generieren einer Konstante dieses Typs wird nicht unterstützt!"); - ct.setValue((Expr) wert); - - ct.codegen( classfile, paralist); - - return; - } - - - // Ueberpruefung auf Generics (Signaturen!) - if (SignatureInfo.needsSignature(type)) attr = new SignatureInfo(type, classfile); - - if (type instanceof RefType) - codegen_type = ((RefType)type).get_codegen_Type(null); - else - codegen_type = JVMCode.get_codegen_Type(type.getName().toString(), paralist); - - - // Instanzvariable genenerieren - classfile.add_field(name, codegen_type, get_access_flags(), attr); - - // Wertzuweisung ggf. hinzufuegen - if(wert != null) { - if(wert instanceof Expr) { - classfile.add_field_ref(name, null, codegen_type); - Assign assign = new Assign(getOffset(),name.length()); - assign.set_Expr(new InstVar(name, type.getName().toString(),getOffset()), (Expr)wert); - classfile.add_classblock_Element(assign); - } - else throw new JVMCodeException("Wertzuweisung der Instanzvariable kann nicht uebersetzt werden!"); - } - } - // ino.end - - - - // ino.method.codegen_LocalVarDecl.23340.definition - public void codegen_LocalVarDecl(ClassFile classfile, CodeAttribute code, Type type, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen_LocalVarDecl.23340.body - { - code.add_local(name, type); - if(wert != null) - { - if(wert instanceof Expr) - { - Assign assign = new Assign(getOffset(),name.length()); - assign.set_Expr(new LocalOrFieldVar(name,getOffset()), (Expr)wert); - assign.codegen(classfile, code, paralist); - } - else - { - throw new JVMCodeException("JVMCodeException: DeclId: void codegen(ClassFile classfile, Type type)"); - } - } - } - // ino.end - + // ino.method.getLineNumber.23343.definition public int getLineNumber() // ino.end @@ -277,7 +186,7 @@ public class DeclId // ino.end // ino.method.getOffset.23349.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23349.definition public int getOffset() @@ -289,7 +198,7 @@ public class DeclId // ino.end // ino.method.setOffset.23352.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23352.definition public void setOffset(int Offset) @@ -302,7 +211,7 @@ public class DeclId // ino.method.toString.23355.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java index e02d0cb3..6ee71dee 100755 --- a/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/UsedId.java @@ -5,7 +5,6 @@ package de.dhbwstuttgart.syntaxtree.misc; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -31,7 +30,7 @@ public class UsedId implements IItemWithOffset // ino.attribute.vParaOrg.23672.declaration public Menge vParaOrg = null; // otth: originale Parameterliste // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 + private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 // ino.method.UsedId.23675.definition public UsedId(int offset) @@ -49,7 +48,7 @@ public class UsedId implements IItemWithOffset } // ino.method.getOffset.23678.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.getOffset.23678.definition public int getOffset() @@ -70,7 +69,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.setOffset.23684.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 + // hinzugef�gt hoth: 07.04.2006 // ino.end // ino.method.setOffset.23684.definition public void setOffset(int Offset) @@ -178,34 +177,6 @@ public class UsedId implements IItemWithOffset } // ino.end - // ino.method.getSignatureUsedId.23717.definition - public String getSignatureUsedId() - // ino.end - // ino.method.getSignatureUsedId.23717.body - { - String basis = JVMCode.get_codegen_Type(getQualifiedName().toString(),null); - - if (paralist == null || paralist.size() ==0) - return basis; - - StringBuffer sb = new StringBuffer(); - - // Basistyp, ; entfernen - basis = basis.substring(0, basis.length() -1); - sb.append(basis); - - sb.append("<"); - - for(int i = 0; i< paralist.size(); i++) { - - sb.append(paralist.elementAt(i).get_codegen_Type(null)); - } - - sb.append(">;"); - - return sb.toString(); - } - // ino.end // ino.method.removeLast.23720.definition @@ -219,7 +190,7 @@ public class UsedId implements IItemWithOffset // ino.method.toString.23723.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -228,7 +199,7 @@ public class UsedId implements IItemWithOffset // ino.end // ino.method.toString.23723.body { - return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier + return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier /*String s = ""; for(int i = 0; i getOperatorTypes() { Hashtable types = new Hashtable(); diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java index bd04f950..4442e7a9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/DivideOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.DivideOp.8596.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.Binary; @@ -29,19 +26,6 @@ public class DivideOp extends MulOp } // ino.end - // ino.method.codegen.24115.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24115.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - code.add_code(JVMCode.ndiv(expr1.getTypeName())); - } - // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java index 8dcd630f..184a8501 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/EqualOp.java @@ -5,9 +5,6 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -34,50 +31,6 @@ public class EqualOp extends RelOp super(offset, variableLength); } // ino.end - - // ino.method.codegen.24125.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24125.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - int type1 = JVMCode.get_nType(expr1.getTypeName()); - int type2 = JVMCode.get_nType(expr2.getTypeName()); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if((expr1 instanceof Null) || (expr2 instanceof Null)) - if(type1==4 || type2==4) - if(!not) code.add_code(JVMCode.ifnonnull); - else code.add_code(JVMCode.ifnull); - else throw new JVMCodeException("JVMCodeException: EqualOp: void codegen(ClassFile classfile, Code_attribute code, Expr expr, boolean not)"); - else if(!not) code.add_code(JVMCode.if_ncmpne(expr1.getTypeName())); - else code.add_code(JVMCode.if_ncmpeq(expr1.getTypeName())); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.24128.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24128.body - { - if(type.equals("null")) - if(!not) code.add_code(JVMCode.ifnonnull); - else code.add_code(JVMCode.ifnull); - else - if(!not) code.add_code(JVMCode.if_ncmpne(type)); - else code.add_code(JVMCode.if_ncmpeq(type)); - } - // ino.end - - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java index 7225deee..a01e1285 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.GreaterEquOp.8598.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.Binary; @@ -28,38 +25,6 @@ public class GreaterEquOp extends RelOp super(offset,variableLength); } // ino.end - - // ino.method.codegen.24141.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24141.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(!not) code.add_code(JVMCode.if_icmplt); - else code.add_code(JVMCode.if_icmpge); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.24144.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24144.body - { - if(!not) code.add_code(JVMCode.if_icmplt); - else code.add_code(JVMCode.if_icmpge); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java index 332361e8..97a66824 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.GreaterOp.8599.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,36 +25,5 @@ public class GreaterOp extends RelOp } // ino.end -// ino.method.codegen.24154.definition -public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) -throws JVMCodeException -// ino.end -// ino.method.codegen.24154.body -{ - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(!not) code.add_code(JVMCode.if_icmple); - else code.add_code(JVMCode.if_icmpgt); - code.add_code_short(7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short(4); - code.add_code(JVMCode.iconst_0); - } -// ino.end - - // ino.method.if_codegen.24157.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24157.body - { - if(!not) code.add_code(JVMCode.if_icmple); - else code.add_code(JVMCode.if_icmpgt); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java index 2ed325ab..cff4e504 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.LessEquOp.8600.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,36 +25,5 @@ public class LessEquOp extends RelOp } // ino.end - // ino.method.codegen.24167.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24167.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code , paralist); - if(!not) code.add_code(JVMCode.if_icmpgt); - else code.add_code(JVMCode.if_icmple); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.24170.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24170.body - { - if(!not) code.add_code(JVMCode.if_icmpgt); - else code.add_code(JVMCode.if_icmple); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java index 56243808..2fcc7f11 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LessOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.LessOp.8601.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,36 +25,5 @@ public class LessOp extends RelOp } // ino.end - // ino.method.codegen.24180.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24180.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(!not) code.add_code(JVMCode.if_icmpge); - else code.add_code(JVMCode.if_icmplt); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.24183.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24183.body - { - if(!not) code.add_code(JVMCode.if_icmpge); - else code.add_code(JVMCode.if_icmplt); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java index 621b049a..7f1c421f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java @@ -7,9 +7,6 @@ import java.util.Hashtable; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; @@ -46,179 +43,7 @@ public abstract class LogOp extends Operator } // ino.end - // ino.method.codegen.24193.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24193.body - { - Menge indices = new Menge(); - Operator op = ((Binary)expr).get_Operator(); - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - boolean and; - - if(op instanceof OrOp) and = false; - else if(op instanceof AndOp) and = true; - else throw new JVMCodeException("JVMCodeException: LogOp: void codegen(ClassFile classfile, Code_attribute code, Expr expr, boolean not)"); - - build(classfile, code, expr1, indices, not, false, and, paralist); - build(classfile, code, expr2, indices, not, true, and, paralist); - - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short(4); - code.add_code(JVMCode.iconst_0); - int code_length = code.get_code_length(); - replace_index(code, indices, code_length - 1, code_length - 5); - } - // ino.end - - // ino.method.if_codegen.24196.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Expr expr, Statement then_block, Statement else_block, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24196.body - { - Menge indices = new Menge(); - Operator op = ((Binary)expr).get_Operator(); - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - boolean and; - - if(op instanceof OrOp) and = false; - else if(op instanceof AndOp) and = true; - else throw new JVMCodeException("JVMCodeException: LogOp: if_codegen(ClassFile classfile, Code_attribute code, boolean not, Expr expr, Statement then_block, Statement else_block)"); - - build(classfile, code, expr1, indices, not, false, and, paralist); - build(classfile, code, expr2, indices, not, true, and, paralist); - - int breakpoint1 = code.get_code_length(); - if(then_block != null) then_block.codegen(classfile, code, paralist); - - int breakpoint2 = code.get_code_length(); - if(else_block != null) { - code.add_code(JVMCode.goto_); - breakpoint2 = code.get_code_length(); - code.add_code_short(0); - else_block.codegen(classfile, code, paralist); - code.set_code_short(code.get_code_length() + 1 - breakpoint2, breakpoint2); - } - replace_index(code, indices, breakpoint2 + 2 , breakpoint1); - } - // ino.end - - // ino.method.loop_codegen.24199.definition - public void loop_codegen(ClassFile classfile, CodeAttribute code, Expr expr, int breakpoint, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.loop_codegen.24199.body - { - Menge indices = new Menge(); - Operator op = ((Binary)expr).get_Operator(); - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - boolean and; - - if(op instanceof OrOp) and = false; - else if(op instanceof AndOp) and = true; - else throw new JVMCodeException("JVMCodeException: LogOp: void loop_codegen(ClassFile classfile, Code_attribute code, Expr expr, int breakpoint, boolean not)"); - - build(classfile, code, expr1, indices, not, false, and, paralist); - build(classfile, code, expr2, indices, not, true, and, paralist); - - replace_index(code, indices, breakpoint + 2, code.get_code_length()); - } - // ino.end - - // ino.method.build.24202.definition - public static void build(ClassFile classfile, CodeAttribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.build.24202.body - { - if(expr instanceof NotExpr) - build(classfile, code, ((NotExpr)expr).get_Expr(), indices, !not, ex2, and, paralist); - else if(expr instanceof Binary) { - Operator op = ((Binary)expr).get_Operator(); - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - - if(op instanceof LogOp) { - boolean and2; - if(op instanceof OrOp) and2 = false; - else if(op instanceof AndOp) and2 = true; - else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and)"); - - if((and != and2) && !ex2) { - Menge indices2 = new Menge(); - build(classfile, code, expr1, indices2, not, false, and2, paralist); - build(classfile, code, expr2, indices, not, ex2, and, paralist); - int breakpoint = code.get_code_length(); - replace_index(code, indices2, breakpoint, breakpoint); - } - else { - build(classfile, code, expr1, indices, not, false, and2, paralist); - build(classfile, code, expr2, indices, not, ex2, and, paralist); - } - } - else if(op instanceof RelOp) { - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - - if(expr1 instanceof Null || expr2 instanceof Null) ((RelOp)op).if_codegen(classfile, code, "null", not); - else ((RelOp)op).if_codegen(classfile, code, expr.getTypeName(), not); - - indices.addElement(new Integer(code.get_code_length())); - - if(and) { - if(not && !ex2) code.add_code_short(1); - else code.add_code_short(0); - } - else { - if(not || ex2) code.add_code_short(0); - else code.add_code_short(1); - } - } - else throw new JVMCodeException("JVMCodeException: LogOp: void build(ClassFile classfile, Code_attribute code, Expr expr, Menge indices, boolean not, boolean ex2, boolean and)"); - } - else { - expr.codegen(classfile, code, paralist); - indices.addElement(new Integer(code.get_code_length() + 1)); - if(and) { - if(not && ex2) code.add_code(JVMCode.ifne); - else code.add_code(JVMCode.ifeq); - if(not && !ex2) code.add_code_short(1); - else code.add_code_short(0); - } - else { - if(!not && ex2) code.add_code(JVMCode.ifeq); - else code.add_code(JVMCode.ifne); - if(not || ex2) code.add_code_short(0); - else code.add_code_short(1); - } - } - } - // ino.end - - // ino.method.replace_index.24205.definition - public static void replace_index(CodeAttribute code, Menge indices, int else_index, int then_index) - throws JVMCodeException - // ino.end - // ino.method.replace_index.24205.body - { - Menge b = code.get_code_Menge(); - for(int i = 0; i < indices.size(); i++) { - int y = indices.elementAt(i).intValue(); - int high = JVMCode.bytes_to_int((Byte)b.elementAt(y)); - int low = JVMCode.bytes_to_int((Byte)b.elementAt(y+1)); - int x = (high << 8) + low; - if(x == 0) code.set_code_short(else_index + 1 - y, y); - else if(x == 1) code.set_code_short(then_index + 1 - y, y); - else throw new JVMCodeException("JVMCodeException: LogOp: replace_index(Code_attribute code, Menge indices, int else_index, int then_index)"); - } - } - // ino.end + @Override protected Hashtable getOperatorTypes() { diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java index a4e87cbd..3cd233ad 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/MinusOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.MinusOp.8603.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,19 +25,6 @@ public class MinusOp extends AddOp } // ino.end - // ino.method.codegen.24218.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24218.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(!neg) code.add_code(JVMCode.nsub(expr1.getTypeName())); - else code.add_code(JVMCode.nadd(expr1.getTypeName())); - } - // ino.end + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java index c4347325..57465f01 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.ModuloOp.8604.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,18 +25,5 @@ public class ModuloOp extends MulOp } // ino.end - // ino.method.codegen.24228.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24228.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - code.add_code(JVMCode.nrem(expr1.getTypeName())); - } - // ino.end } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java index 249a4ee3..7cbe3936 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.java @@ -5,9 +5,6 @@ package de.dhbwstuttgart.syntaxtree.operator; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; @@ -31,47 +28,5 @@ public class NotEqualOp extends RelOp } // ino.end - // ino.method.codegen.24248.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24248.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - int type1 = JVMCode.get_nType(expr1.getTypeName()); - int type2 = JVMCode.get_nType(expr2.getTypeName()); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if((expr1 instanceof Null) || (expr2 instanceof Null)) - if(type1==4 || type2==4) - if(!not) code.add_code(JVMCode.ifnull); - else code.add_code(JVMCode.ifnonnull); - else throw new JVMCodeException("JVMCodeException: NotEqualOp: void codegen(ClassFile classfile, Code_attribute code, Expr expr, boolean not)"); - else if(!not) code.add_code(JVMCode.if_ncmpeq(expr1.getTypeName())); - else code.add_code(JVMCode.if_ncmpne(expr1.getTypeName())); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.24251.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.24251.body - { - if(type.equals("null")) - if(!not) code.add_code(JVMCode.ifnull); - else code.add_code(JVMCode.ifnonnull); - else - if(!not) code.add_code(JVMCode.if_ncmpeq(type)); - else code.add_code(JVMCode.if_ncmpne(type)); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java index 953b11e0..dd1559ec 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java @@ -7,9 +7,6 @@ import java.util.Hashtable; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -72,11 +69,7 @@ public abstract class Operator extends SyntaxTreeNode } // ino.end - // ino.method.codegen.24276.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg_not, Menge paralist) - throws JVMCodeException; - // ino.end - + /** * @author timo * This is cool: @@ -86,36 +79,6 @@ public abstract class Operator extends SyntaxTreeNode */ protected abstract Hashtable getOperatorTypes( ); - - // ino.method.makePrimitive.29391.defdescription type=line - // Unter der Annahme, dass sich ein Integer-Objekt auf dem Stack - // befindet, wird dieses in den primitiven Typ int umgewandelt. - // ino.end - // ino.method.makePrimitive.29391.definition - public void makePrimitive(ClassFile classfile, CodeAttribute code) - // ino.end - // ino.method.makePrimitive.29391.body - { - code.add_code(JVMCode.invokevirtual); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "intValue", "()I")); - } - // ino.end - - // ino.method.makeWrapper.29394.defdescription type=line - // Unter der Annahame, dass ein primitiver int-Typ auf dem Stack liegt, - // wird dieser in den Wrapper-Typ Integer umgewandelt. - // ino.end - - // ino.method.makeWrapper.29394.definition - public void makeWrapper(ClassFile classfile, CodeAttribute code) - // ino.end - // ino.method.makeWrapper.29394.body - { - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;")); - } - // ino.end - /** * Liefert eine HashMap der Form: HashMap diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java index d4b5b402..e7d82823 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/PlusOp.java @@ -4,9 +4,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.PlusOp.8609.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -28,19 +25,5 @@ public class PlusOp extends AddOp } // ino.end - // ino.method.codegen.24296.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24296.body - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(!neg) code.add_code(JVMCode.nadd(expr1.getTypeName())); - else code.add_code(JVMCode.nsub(expr1.getTypeName())); - } - // ino.end } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java index 952b5313..64a07c17 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java @@ -8,8 +8,6 @@ import java.util.Hashtable; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; @@ -34,11 +32,6 @@ public abstract class RelOp extends Operator } // ino.end - // ino.method.if_codegen.24306.declaration - public abstract void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not) - throws JVMCodeException; - // ino.end - protected Hashtable getOperatorTypes() { Hashtable types = new Hashtable(); diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java index 3a66c28a..6f47068d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/TimesOp.java @@ -5,9 +5,6 @@ package de.dhbwstuttgart.syntaxtree.operator; // ino.module.TimesOp.8611.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -26,30 +23,5 @@ public class TimesOp extends MulOp } // ino.end - // ino.method.codegen.24319.definition - public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, - boolean neg, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.24319.body -{ - Expr expr1 = ((Binary) expr).get_Expr1(); - Expr expr2 = ((Binary) expr).get_Expr2(); - - expr1.codegen(classfile, code, paralist); - // unboxing - makePrimitive( classfile, code); - - expr2.codegen(classfile, code, paralist); - // unboxing - makePrimitive( classfile, code); - - // Die Multiplikation - code.add_code(JVMCode.imul); - - // Boxing des Typs - makeWrapper(classfile, code); - } -// ino.end } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java index 9757926f..3644ec30 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java @@ -5,9 +5,6 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.FormalParameter; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -27,38 +24,6 @@ public class ArgumentList extends SyntaxTreeNode // ino.end - - // ino.method.codegen.24917.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24917.body - { - for(int i = 0; i < expr.size(); i++) - { - expr.elementAt(i).codegen(classfile, code, paralist); - } - } - // ino.end - - - - // ino.method.get_codegen_ArgumentList.24920.definition - public String get_codegen_ArgumentList(Menge paralist) - // ino.end - // ino.method.get_codegen_ArgumentList.24920.body - { - String ret = "("; - for(int i = 0; i < expr.size(); i++) - { - ret += JVMCode.get_codegen_Type(expr.elementAt(i).getTypeName(), paralist); - } - return ret + ")"; - } - // ino.end - - - // ino.method.get_firstElement.24923.definition public Object get_firstElement() // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 329c6d88..03551933 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -89,94 +86,6 @@ public class Assign extends Expr } // ino.end - - - // ino.method.codegen.24951.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.24951.body - { - // AutoBoxing-Feature: Literale koennen nur als Objekt zugewiesen werden - if (expr2 instanceof Literal) ((Literal)expr2).setPrimitiveFlag(false); - - - if(expr1 instanceof LocalOrFieldVar) - { - LocalOrFieldVar local = (LocalOrFieldVar)expr1; - Menge name_Menge = local.get_Name_Menge(); - Menge type_Menge = local.get_Type_Menge(); - String local_name = null; - String class_name = null; - String type = null; - for(int i=0; i < name_Menge.size()-1; i++) - { - local_name = (String)name_Menge.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - int index = code.get_indexOf_Var(local_name); - if(index != -1) - { - // LocalVar - try - { - JavaClassName local_type = code.get_TypeOf_Var(local_name).getName(); - code.add_code(JVMCode.nload_n(local_type.toString(), index)); - } - catch(JVMCodeException e) - { - // out of nload_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else - { - // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - class_name = (String)type_Menge.elementAt(i); - } - expr2.codegen(classfile, code, paralist); - local_name = (String)name_Menge.lastElement(); - int index = code.get_indexOf_Var(local_name); - if(index != -1) - { - // LocalVar - try - { - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nstore_n(local_type, index)); - } - catch(JVMCodeException e) - { - // out of nstore_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nstore(local_type)); - code.add_code_byte((byte)index); - } - } - else - { - // FieldVar - code.add_code(JVMCode.putfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type(expr2.getTypeName(), paralist))); - } - } - else if(expr1 instanceof InstVar) - { - InstVar instvar = (InstVar)expr1; - String instvar_name = instvar.get_codegen_UsedId(); - code.add_code(JVMCode.aload_0); - expr2.codegen(classfile, code, paralist); - code.add_code(JVMCode.putfield); - code.add_code_short(classfile.add_field_ref(instvar_name, null, null)); - } - else throw new JVMCodeException("JVMCodeException: Assign: void test codegen(ClassFile classfile, Code_attribute code)"); - } - // ino.end /** * @author AI10023 - Andreas Stadelmeier @@ -210,7 +119,7 @@ public class Assign extends Expr // ino.method.toString.24960.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index c86f7c51..2283b0da 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -152,85 +149,7 @@ public class Binary extends BinaryExpr return expr2; } // ino.end - - - - // ino.method.codegen.25009.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25009.body - { - if(type_check(code)) - { - op.codegen(classfile, code, this, false, paralist); - } - else - { - throw new JVMCodeException("JVMCodeException: Binary: void codegen(ClassFile classfile, Code_attribute code)"); - } - } - // ino.end - - - - // ino.method.not_codegen.25012.definition - public void not_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.not_codegen.25012.body - { - if(((op instanceof RelOp) || (op instanceof LogOp)) && type_check(code)) - { - op.codegen(classfile, code, this, true, paralist); - } - else - { - throw new JVMCodeException("JVMCodeException: Binary: void not_codegen(ClassFile classfile, Code_attribute code)"); - } - } - // ino.end - - - - // ino.method.neg_codegen.25015.definition - public void neg_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.neg_codegen.25015.body - { - if(((op instanceof AddOp) || (op instanceof MulOp)) && type_check(code)) - { - op.codegen(classfile, code, this, true, paralist); - } - else - { - throw new JVMCodeException("JVMCodeException: Binary: void neg_codegen(ClassFile classfile, Code_attribute code)"); - } - } - // ino.end - - - - // ino.method.type_check.25018.definition - public boolean type_check(CodeAttribute code) - throws JVMCodeException - // ino.end - // ino.method.type_check.25018.body - { - int type1 = JVMCode.get_nType(expr1.getTypeName()); - int type2 = JVMCode.get_nType(expr2.getTypeName()); - if((type1 < type2) || ((type1==0 || type1==1) && (type2==2 || type2==3))) - { - return false; - } - if(type1 != type2) - { - code.add_code(JVMCode.n2n(expr2.getTypeName(), expr1.getTypeName())); - } - return true; - } - // ino.end + @@ -251,8 +170,8 @@ public class Binary extends BinaryExpr ret.add(this.expr1.TYPEExpr(assumptions)); ret.add(this.expr2.TYPEExpr(assumptions)); /** - * Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter - * Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints. + * Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter + * Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints. * @param expr1 * @param expr2 * @return diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 18275a7e..639a98c2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -9,8 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -103,21 +101,6 @@ public class Block extends Statement } // ino.end - - - // ino.method.codegen.25074.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25074.body - { - for(int i = 0; i < statements.size(); i++) - { - statements.elementAt(i).codegen(classfile, code, paralist); - } - } - // ino.end - ///////////////////////////////////////////////////////////////////////// @@ -128,7 +111,7 @@ public class Block extends Statement // ino.method.toString.25083.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -174,7 +157,7 @@ public class Block extends Statement typinferenceLog.debug("Prozessing statement: "+stmt, Section.TYPEINFERENCE); ret.add(stmt.TYPEStmt(assumptions)); /* if((stmt instanceof Return)){ - ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. + ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. } */ } @@ -188,7 +171,7 @@ public class Block extends Statement if (!(stmt.getReturnType() instanceof Void)) if (this.getReturnType() instanceof Void) { //this.setTypeVariable(stmt.getTypeVariable()); - throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this); + throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this); } else { TypePlaceholder tph = TypePlaceholder.fresh(this); @@ -212,7 +195,7 @@ public class Block extends Statement typinferenceLog.debug("Prozessing statement: "+stmt); ret.add(stmt.TYPEStmt(assumptions)); if((stmt instanceof Return)){ - ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. + ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. } } return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index e5f3a45d..c2a7eb92 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -91,37 +88,6 @@ public class BoolLiteral extends Literal - // ino.method.codegen.25111.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25111.body - { - if(Bool) - code.add_code(JVMCode.iconst_1); - else - code.add_code(JVMCode.iconst_0); - - // Auto-Boxing des Typs in Boolean - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;")); - } - // ino.end - - // ino.method.ConstantCodegen.25114.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25114.body - { - if (Bool) - return (short) classfile.add_CONSTANT_Integer_info(1); - else - return (short) classfile.add_CONSTANT_Integer_info(0); - } - // ino.end - - @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java index e2212b52..d2b0fedd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java @@ -7,9 +7,6 @@ import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -88,31 +85,6 @@ public class CastExpr extends UnaryExpr - // ino.method.codegen.25154.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25154.body - { - int itype = JVMCode.get_nType(type.getName().toString()); - int iexpr = JVMCode.get_nType(expr.getTypeName()); - if(itype != iexpr) - { - if((itype == 4) || (iexpr == 4)) - { - throw new JVMCodeException("JVMCodeException: CastExpr: void codegen(ClassFile classfile, Code_attribute code)"); - } - else - { - expr.set_Type(type); - code.add_code(JVMCode.n2n(expr.getTypeName(), type.getName().toString())); - } - } - else if(itype == 4) expr.set_Type(type); - } - // ino.end - - // ino.method.wandleRefTypeAttributes2GenericAttributes.25163.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index 9d0e6f46..b0aa0568 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -5,9 +5,6 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -84,33 +81,6 @@ public class CharLiteral extends Literal } // ino.end - - - // ino.method.codegen.25188.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25188.body - { - // Wert des chars auf den Stack laden - code.add_code(JVMCode.bipush); - code.add_code_byte((byte)Char); - - // Auto-Boxing des Typs in Character - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Character", "valueOf", "(C)Ljava/lang/Character;")); - } - // ino.end - - // ino.method.ConstantCodegen.25191.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25191.body - { - return (short) classfile.add_CONSTANT_Integer_info(Char); - } - // ino.end @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index 8b5ce901..ca888b97 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -79,7 +76,7 @@ public class DoubleLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r DoubleLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r DoubleLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -93,56 +90,10 @@ public class DoubleLiteral extends Literal } // ino.end - // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.25472.body -{ - /*if (Int >= 0 && Int <= 5) // Kleine Werte lassen sich direkt realisieren - code.add_code(JVMCode.nconst_n("int", Int)); - else if (Int >= -128 && Int <= 127) { // Aenderung des Codes fuer etwas groessere Werte - code.add_code(JVMCode.bipush); - code.add_code_byte((byte) Int); - } else if (Int >= -32768 && Int <= 32767) { // Aenderung des Codes fuer groessere Werte - code.add_code(JVMCode.sipush); - code.add_code_short((short) Int); - } else { // Ablage als Konstante - int index = classfile.add_CONSTANT_Integer_info(Int); - if (index < 256) { - code.add_code(JVMCode.ldc); - code.add_code_byte((byte) index); - } else { - code.add_code(JVMCode.ldc_w); - code.add_code_short((short) index); - } - } - - // Auto-Boxing: Da int nicht so nicht weiterverwendet werden kann, - // in Integer umwandeln. - if (!getPrimitiveFlag()) { - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;")); - }*/ - throw new JVMCodeException("Bytecode nicht implementiert"); - } -// ino.end - - // ino.method.ConstantCodegen.25475.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25475.body - { - //return (short) classfile.add_CONSTANT_Integer_info(get_Int()); - throw new JVMCodeException("Bytecode nicht implementiert"); - } - // ino.end - // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java index 7138eb27..67c80dc7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java @@ -7,8 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -55,13 +53,6 @@ public class EmptyStmt extends Statement // ino.end */ - // ino.method.codegen.25216.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25216.body - { } - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25222.definition diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index 57bffa6d..e62b9c53 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -95,15 +95,15 @@ public abstract class Expr extends ExprStmt /** * @author AI10023 - Andreas Stadelmeier - * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke + * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke * Jede Expression wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen. */ public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions); /** * @author AI10023 - Andreas Stadelmeier - * Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss. - * Denn Expressions müssen diese Funktion nicht implementieren. + * Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss. + * Denn Expressions müssen diese Funktion nicht implementieren. */ @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){ diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java index abdda826..ec7afd19 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java @@ -52,7 +52,7 @@ public abstract class ExprStmt extends Statement // ino.method.getTypeLineNumber.25291.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index 68671710..ed809fab 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -7,8 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -74,7 +72,7 @@ public class FloatLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r FloatLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r FloatLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -88,57 +86,11 @@ public class FloatLiteral extends Literal } // ino.end - // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.25472.body -{ - /*if (Int >= 0 && Int <= 5) // Kleine Werte lassen sich direkt realisieren - code.add_code(JVMCode.nconst_n("int", Int)); - else if (Int >= -128 && Int <= 127) { // Aenderung des Codes fuer etwas groessere Werte - code.add_code(JVMCode.bipush); - code.add_code_byte((byte) Int); - } else if (Int >= -32768 && Int <= 32767) { // Aenderung des Codes fuer groessere Werte - code.add_code(JVMCode.sipush); - code.add_code_short((short) Int); - } else { // Ablage als Konstante - int index = classfile.add_CONSTANT_Integer_info(Int); - if (index < 256) { - code.add_code(JVMCode.ldc); - code.add_code_byte((byte) index); - } else { - code.add_code(JVMCode.ldc_w); - code.add_code_short((short) index); - } - } - - // Auto-Boxing: Da int nicht so nicht weiterverwendet werden kann, - // in Integer umwandeln. - if (!getPrimitiveFlag()) { - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;")); - }*/ - throw new JVMCodeException("Bytecode nicht implementiert"); - } -// ino.end - - // ino.method.ConstantCodegen.25475.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25475.body - { - //return (short) classfile.add_CONSTANT_Integer_info(get_Int()); - throw new JVMCodeException("Bytecode nicht implementiert"); - } - // ino.end - // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java index 9f16e8b5..cbbb7075 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java @@ -7,9 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -56,13 +53,6 @@ public class ForStmt extends Statement } - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - { - - } - - public String toString() { return "FOR "; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index b0e798f9..5e23f141 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -103,134 +100,6 @@ public class IfStmt extends Statement } // ino.end - - - // ino.method.codegen.25334.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25334.body - { - if_codegen(classfile, code, false, paralist); - } - // ino.end - - - - // ino.method.if_codegen.25337.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.25337.body - { - if(expr instanceof NotExpr) - { - expr = ((NotExpr)expr).get_Expr(); - if_codegen(classfile, code, !not, paralist); - } - else - { - if(expr instanceof Binary) - { - Operator op = ((Binary)expr).get_Operator(); - if(op instanceof LogOp) - { - ((LogOp)op).if_codegen(classfile, code, not, expr, then_block, else_block, paralist); - } - else - { - if(op instanceof RelOp) - { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - if(expr1 instanceof Null || expr2 instanceof Null) - { - ((RelOp)op).if_codegen(classfile, code, "null", not); - } - else - { - ((RelOp)op).if_codegen(classfile, code, expr1.getTypeName(), not); - } - int breakpoint1 = code.get_code_length(); - code.add_code_short(0); - if(then_block!=null) - { - then_block.codegen(classfile, code, paralist); - code.set_code_short(code.get_code_length() + 1 - breakpoint1, breakpoint1); - } - int breakpoint2 = code.get_code_length(); - if(else_block != null) - { - code.add_code(JVMCode.goto_); - code.add_code_short(0); // replaced later - else_block.codegen(classfile, code, paralist); - code.set_code_short(breakpoint2 + 4 - breakpoint1, breakpoint1); - code.set_code_short(code.get_code_length() - breakpoint2, breakpoint2 + 1); - } - } - else - { - throw new JVMCodeException("JVMCodeException: IfStmt: void if_codegen(ClassFile classfile, Code_attribute code, boolean not)"); - } - } - } - else - { - expr.codegen(classfile, code, paralist); - if(!not) - { - code.add_code(JVMCode.ifeq); - } - else - { - code.add_code(JVMCode.ifne); - } - int breakpoint1 = code.get_code_length(); - code.add_code_short(0); - if(then_block!=null) - { - then_block.codegen(classfile, code, paralist); - code.set_code_short(code.get_code_length() + 1 - breakpoint1, breakpoint1); - } - int breakpoint2 = code.get_code_length(); - if(!(else_block==null || else_block instanceof EmptyStmt)) - { - //hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug, - //der zuerst im Use Case Toggle1 bemerkt wurde. Hier wird nun gepr�ft ob der - //letzte Befehl in einem if-Block ein return war. Trifft dieser Fall zu, - //so wird kein goto Befehl (f�r das �berspringen des else-Blocks eingef�gt) - //-> das verlangt die vm ->der code w�re nicht erreichbar. - //Allerdings k�nnte das return-Statement nat�rlich auch an einer anderen - //Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die - //Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit - //Toggle3 zu erzeugen - wird aber richtig generiert. - //letztes Statement im Menge in s schreiben - //Statement s = (Statement)(((Block)this.then_block).statements.lastElement()); - //Instanz von Return zum pr�fen anlegen - Return r = new Return(getOffset(),getVariableLength()); - - if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) ) - { - code.add_code(JVMCode.goto_); - code.add_code_short(0); - } - else_block.codegen(classfile, code, paralist); - if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) ) - { - code.set_code_short(breakpoint2 + 4 - breakpoint1, breakpoint1); - code.set_code_short(code.get_code_length()-breakpoint2, breakpoint2 + 1); - } - } - } - } - } - // ino.end - - - - // ino.method.wandleRefTypeAttributes2GenericAttributes.25349.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end @@ -252,7 +121,7 @@ public class IfStmt extends Statement ConstraintsSet ret = new ConstraintsSet(); this.setType(TypePlaceholder.fresh(this)); - ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt) + ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt) ret.add(this.then_block.TYPEStmt(assumptions)); if(else_block!=null){ ret.add(this.else_block.TYPEStmt(assumptions)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java index c6a254c8..a223621d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -80,7 +77,7 @@ public class InstVar extends Expr // ino.method.InstVar.25414.defdescription type=javadoc /** * macht aus einem UsedId mit einem Menge von Strings eine InstVar - *
    Author: Martin Pl�micke PL 05-08-17 + *
    Author: Martin Pl�micke PL 05-08-17 * @param ui * @return */ @@ -160,27 +157,9 @@ public class InstVar extends Expr { return usedid.get_codegen_UsedId(); } // ino.end - // ino.method.codegen.25426.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25426.body - { - String instvar_name = usedid.get_codegen_UsedId(); - - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(instvar_name, null, null)); - } - // ino.end - - - - - // ino.method.toString.25441.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java index b8764fc4..e000fe24 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java @@ -8,10 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; - -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -89,18 +85,7 @@ public class InstanceOf extends BinaryExpr return null; } // ino.end - - // ino.method.codegen.25380.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25380.body - { - expr.codegen(classfile, code, paralist); - code.add_code(JVMCode.instanceof_); - code.add_code_short(classfile.add_CONSTANT_Class_info(reftype.getName().toString())); - } - // ino.end + // ino.method.wandleRefTypeAttributes2GenericAttributes.25389.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index 7a4c15ad..e9632e9b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -77,7 +74,7 @@ public class IntLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r IntLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r IntLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -91,54 +88,10 @@ public class IntLiteral extends Literal } // ino.end - // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.25472.body -{ - if (Int >= 0 && Int <= 5) // Kleine Werte lassen sich direkt realisieren - code.add_code(JVMCode.nconst_n("int", Int)); - else if (Int >= -128 && Int <= 127) { // Aenderung des Codes fuer etwas groessere Werte - code.add_code(JVMCode.bipush); - code.add_code_byte((byte) Int); - } else if (Int >= -32768 && Int <= 32767) { // Aenderung des Codes fuer groessere Werte - code.add_code(JVMCode.sipush); - code.add_code_short((short) Int); - } else { // Ablage als Konstante - int index = classfile.add_CONSTANT_Integer_info(Int); - if (index < 256) { - code.add_code(JVMCode.ldc); - code.add_code_byte((byte) index); - } else { - code.add_code(JVMCode.ldc_w); - code.add_code_short((short) index); - } - } - - // Auto-Boxing: Da int nicht so nicht weiterverwendet werden kann, - // in Integer umwandeln. - if (!getPrimitiveFlag()) { - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;")); - } - } -// ino.end - - // ino.method.ConstantCodegen.25475.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25475.body - { - return (short) classfile.add_CONSTANT_Integer_info(get_Int()); - } - // ino.end - // ino.method.toString.25484.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index fc66ae38..133fe6d0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -3,8 +3,6 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -72,15 +70,6 @@ public class LambdaExpression extends Expr{ this.params = lambdaParameter; } - - @Override - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException { - // TODO Auto-generated method stub - - } - - @Override public void wandleRefTypeAttributes2GenericAttributes( Menge paralist, @@ -129,32 +118,32 @@ public class LambdaExpression extends Expr{ * TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) = * let * AssArgs = { xi : ai | ai fresh type variables } - * (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) + * (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) * | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt ) * in * (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a, - * ConS ∪ { (FunN a) }), + * ConS ∪ { (FunN a) }), * where a is a fresh type variable */ @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); - //Die Assumptions für die Parameter der LambdaExpression + //Die Assumptions für die Parameter der LambdaExpression TypeAssumptions ArgumentAssumptions = new TypeAssumptions(this.getParentClass().getName()); Menge paramTypes = new Menge(); for(FormalParameter param : params.formalparameter){ if(param.getType()==null)param.setType(TypePlaceholder.fresh(this)); int offset = 0; - //Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt: + //Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt: ArgumentAssumptions.addAssumption(new ParameterAssumption(param)); paramTypes.add(param.getType()); } this.setType(TypePlaceholder.fresh(this)); - //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: + //ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys: ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression - //Die Constraints für ParameterTypen und Ret Typ erstellen: + //Die Constraints für ParameterTypen und Ret Typ erstellen: Menge modifiedParamTypes = new Menge<>(); for(Type pT : paramTypes){ if(pT instanceof WildcardType){ @@ -175,7 +164,7 @@ public class LambdaExpression extends Expr{ if(retType instanceof SuperWildcardType){ throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this); }else{ - //retType bleibt unverändert + //retType bleibt unverändert } }else{ retType = new ExtendsWildcardType((ObjectType) retType); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Literal.java b/src/de/dhbwstuttgart/syntaxtree/statement/Literal.java index f83c1c36..bee299fe 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Literal.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Literal.java @@ -2,8 +2,6 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end -// ino.module.Literal.8636.import -import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; @@ -49,23 +47,5 @@ public abstract class Literal extends Expr } // ino.end - - // ino.method.ConstantCodegen.25500.defdescription type=javadoc - /** - * Erzeugt die benoetigten Konstanteneintraege, die den Wert - * des Literals darstellen. - */ - // ino.end - // ino.method.ConstantCodegen.25500.definition - public short ConstantCodegen(ClassFile cf) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25500.body - { - throw new JVMCodeException("Bytecodegenerierung fuer das Literal " + this.getClass().toString() - + " wurde nicht implementiert!"); - } - // ino.end - } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 2a3f38b6..23ada8aa 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -7,9 +7,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -82,73 +79,11 @@ public class LocalOrFieldVar extends Expr } // ino.end - - - // ino.method.codegen.25525.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25525.body - { - Menge name_Menge = get_Name_Menge(); - Menge type_Menge = get_Type_Menge(); - String local_name = null; - String class_name = null; - String type = null; - - for(int i=0; i < name_Menge.size(); i++) - { - local_name = (String)name_Menge.elementAt(i); - try {// TEST SCJU. ArrayIndexoutofBounds umgehen! - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - } catch (Throwable e) {type = null; } - - int index = code.get_indexOf_Var(local_name); - if(index != -1) - { - // LocalVar - try - { - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload_n(local_type, index)); - } - catch(JVMCodeException e) - { - // out of nstore_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else - { - // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - try { - // TEST SCJU. ArrayIndexoutofBounds umgehen! - class_name = (String)type_Menge.elementAt(i); - } catch (Throwable e) { } - } - - // Falls noetig, Unboxing auf primitiven Typ! - if (this.getType() instanceof RefType) { - RefType rt = (RefType) this.getType(); - if (! rt.getPrimitiveFlag()) return; - - if (rt.getName().toString().equalsIgnoreCase("java.lang.Integer")) { // Int Unboxen - code.add_code(JVMCode.invokevirtual); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "intValue", "()I")); - } - } - } - // ino.end + // ino.method.toString.25534.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -174,7 +109,7 @@ public class LocalOrFieldVar extends Expr @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); - //gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen: + //gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen: Type thisTypeAssumption = assumptions.getVarType(this.get_Name(), this.getParentClass()); if(thisTypeAssumption == null)throw new TypeinferenceException("Eine Variable "+this.get_Name()+" ist in den Assumptions nicht vorhanden",this); Type thisType = thisTypeAssumption.checkTYPE(assumptions, this); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 0b7a283d..14b7e3fe 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -8,8 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -214,7 +212,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable parserlog.debug(c.getName()+" "+c.get_ParaList().size()); SCStatementException ex = new SCStatementException(); SCExcept e = new SCExcept(); - e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!"); + e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!"); e.set_function("complete_parahashtable() --> check_anz()"); e.set_statement(type.getName().toString()); ex.addException(e); @@ -245,22 +243,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable } // ino.end */ - - - - // ino.method.codegen.25593.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25593.body - { - if(declid != null) - for(int i = 0; i < declid.size(); i++) - declid.elementAt(i).codegen_LocalVarDecl(classfile, code, this.getType(), paralist); - } - // ino.end - // ino.method.getDeclidMenge.25596.definition public Menge getDeclidMenge() // ino.end // ino.method.getDeclidMenge.25596.body @@ -279,7 +262,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.getLineNumber.25602.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -319,7 +302,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.getTypeLineNumber.25611.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -335,7 +318,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable // ino.method.toString.25617.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -371,8 +354,8 @@ public class LocalVarDecl extends Statement implements TypeInsertable /** * @author Andreas Stadelmeier, a10023 - * Der Typ der Variablendeklaration wird den Assumptions angefügt. - * Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt. + * Der Typ der Variablendeklaration wird den Assumptions angefügt. + * Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt. */ @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index 157234a3..cb9f4272 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -78,7 +75,7 @@ public class LongLiteral extends Literal // ino.end // ino.method.sc_check.25466.body { - parserlog.debug("SC -> Semantik-Check f�r LongLiteral wurde aufgerufen --> nichts zu tun!"); + parserlog.debug("SC -> Semantik-Check f�r LongLiteral wurde aufgerufen --> nichts zu tun!"); } // ino.end */ @@ -90,57 +87,9 @@ public class LongLiteral extends Literal { return null; } - // ino.end - - // ino.method.codegen.25472.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.25472.body -{ - /*if (Int >= 0 && Int <= 5) // Kleine Werte lassen sich direkt realisieren - code.add_code(JVMCode.nconst_n("int", Int)); - else if (Int >= -128 && Int <= 127) { // Aenderung des Codes fuer etwas groessere Werte - code.add_code(JVMCode.bipush); - code.add_code_byte((byte) Int); - } else if (Int >= -32768 && Int <= 32767) { // Aenderung des Codes fuer groessere Werte - code.add_code(JVMCode.sipush); - code.add_code_short((short) Int); - } else { // Ablage als Konstante - int index = classfile.add_CONSTANT_Integer_info(Int); - if (index < 256) { - code.add_code(JVMCode.ldc); - code.add_code_byte((byte) index); - } else { - code.add_code(JVMCode.ldc_w); - code.add_code_short((short) index); - } - } - - // Auto-Boxing: Da int nicht so nicht weiterverwendet werden kann, - // in Integer umwandeln. - if (!getPrimitiveFlag()) { - code.add_code(JVMCode.invokestatic); - code.add_code_short(classfile.add_method_ref("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;")); - }*/ - throw new JVMCodeException("Bytecode nicht implementiert"); - } -// ino.end - - // ino.method.ConstantCodegen.25475.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.25475.body - { - //return (short) classfile.add_CONSTANT_Integer_info(get_Int()); - throw new JVMCodeException("Bytecode nicht implementiert"); - } - // ino.end - - // ino.method.toString.25484.defdescription type=javadoc + /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 398ab68b..76461859 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -6,8 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -149,7 +147,7 @@ public class MethodCall extends Expr // ino.method.toString.25738.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -182,16 +180,16 @@ public class MethodCall extends Expr /** * @author AI10023 - Andreas Stadelmeier * - * Mögliche Probleme: + * Mögliche Probleme: * Wenn die Methode ohne Angabe eines Receivers im Quelltext steht: * methodCall(param); -> (bedeutet:) this.methodCall(param); - * Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff) + * Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff) */ @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - //Hier der Ablauf für einen Methodenaufruf: + //Hier der Ablauf für einen Methodenaufruf: ConstraintsSet ret = new ConstraintsSet(); - //Der Return-Type des MEthodenaufrufs ist zunächst unbekannt: + //Der Return-Type des MEthodenaufrufs ist zunächst unbekannt: this.setType(TypePlaceholder.fresh(this)); //Berechne die Constraints des Receivers if(receiver == null){ @@ -199,19 +197,19 @@ public class MethodCall extends Expr } ret.add(receiver.get_Expr().TYPEExpr(assumptions)); - //Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden) + //Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden) if(this.arglist != null)for(Expr arg : this.arglist.expr){ ret.add(arg.TYPEExpr(assumptions)); } - //Noch das Overloading-Constraint anhängen: + //Noch das Overloading-Constraint anhängen: ret.add(overloading(assumptions)); return ret; } /** - * Erstellt die Constraints für den eigentlichen Methodenaufruf. + * Erstellt die Constraints für den eigentlichen Methodenaufruf. * Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet. * @param assumptions * @return @@ -222,9 +220,9 @@ public class MethodCall extends Expr OderConstraint oCons = new OderConstraint(); Menge methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size()); if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+this.get_Name()+" ist in den Assumptions nicht vorhanden", this); - //Alle möglichen Methoden durchgehen: + //Alle möglichen Methoden durchgehen: for(MethodAssumption methodAssumption : methodAssumptions){ - //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: + //Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt: if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break; oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions)); } @@ -244,22 +242,22 @@ public class MethodCall extends Expr * method, where the argument types are supertypes of a minimal type * assumption. * - * @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden. + * @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden. * * @return */ public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){ UndConstraint methodConstraint = new UndConstraint(); - //Ein Constraint für den ReturnType der Methode... + //Ein Constraint für den ReturnType der Methode... methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this)); - //Ein Constraint für die Parameter der Methode... + //Ein Constraint für die Parameter der Methode... for(int i=0; i paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 7404db8b..3349dd04 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -7,9 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -51,7 +48,7 @@ public class NewArray extends Expr // ino.method.getType.25803.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the type. */ // ino.end @@ -66,7 +63,7 @@ public class NewArray extends Expr // ino.method.setType.25806.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param type The type to set. */ // ino.end @@ -118,26 +115,6 @@ public class NewArray extends Expr } // ino.end - // ino.method.codegen.25818.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25818.body - { - if(JVMCode.get_nType(this.getType().getName().toString()) == 4) { - for(int i = 0; i < expr.size(); i++) ((Expr)expr.elementAt(i)).codegen(classfile, code, paralist); - code.add_code(JVMCode.anewarray); - code.add_code_short(classfile.add_CONSTANT_Class_info(this.getType().getName().toString())); - } - else { - for(int i = 0; i < expr.size(); i++) ((Expr)expr.elementAt(i)).codegen(classfile, code, paralist); - code.add_code(JVMCode.newarray); - code.add_code_byte(this.get_codegen_Array_Type()); - } - } - // ino.end - - // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index 12cf8422..91c7d912 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -96,42 +93,9 @@ public class NewClass extends Expr } // ino.end - // ino.method.codegen.25858.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end -// ino.method.codegen.25858.body -{ - String class_name = this.get_UsedId().get_codegen_UsedId(); - String arg; - - // Argumentliste verarbeiten - if (arglist != null) { - arg = arglist.get_codegen_ArgumentList(paralist); - } else { - arg = "()"; - } - code.add_code(JVMCode.new_); - code.add_code_short(classfile.add_CONSTANT_Class_info(class_name)); - code.add_code(JVMCode.dup); - - // Vor invokespecial die Parameter auf den Stack legen - if (arglist != null) { - // Die einzelnen Argumente generieren - for (int i=0; i< arglist.expr.size(); i++) { - arglist.expr.elementAt(i).codegen(classfile, code, paralist); - } - } - - code.add_code(JVMCode.invokespecial); - code.add_code_short(classfile.add_method_ref(class_name, "", arg - + "V")); - } -// ino.end - // ino.method.toString.25867.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end @@ -158,10 +122,10 @@ public class NewClass extends Expr @Override public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - //TODO: Das hier noch vervollständigen + //TODO: Das hier noch vervollständigen ConstraintsSet ret = new ConstraintsSet(); UndConstraint callConstraints = new UndConstraint(); - //Die Auskommentierten Zeilen gehören zu MethodRefNew + //Die Auskommentierten Zeilen gehören zu MethodRefNew //Menge argumentTypeList = new Menge(); //for(Expr expr : this.arglist.expr){ // argumentTypeList.add(expr.getTypeVariable()); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index 63c3578e..a3cfbb67 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -8,8 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -93,35 +91,6 @@ public class NotExpr extends UnaryExpr } // ino.end - // ino.method.codegen.25904.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25904.body - { - if(expr instanceof Binary) ((Binary)expr).not_codegen(classfile, code, paralist); - else if(expr instanceof NotExpr) ((NotExpr)expr).not_codegen(classfile, code, paralist); - else { - expr.codegen(classfile, code, paralist); - not.codegen(classfile, code, true); - } - } - // ino.end - - // ino.method.not_codegen.25907.definition - public void not_codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.not_codegen.25907.body - { - if(expr instanceof Binary) ((Binary)expr).codegen(classfile, code, paralist); - else if(expr instanceof NotExpr) ((NotExpr)expr).codegen(classfile, code, paralist); - else { - expr.codegen(classfile, code, paralist); - not.codegen(classfile, code, false); - } - } - // ino.end /* public void if_codegen(ClassFile classfile, Code_attribute code, boolean sw) throws JVMCodeException { if(expr instanceof NotExpr) if_codegen(classfile, code, !sw); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 58924e57..325e6727 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -7,9 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -67,16 +64,6 @@ public class Null extends Literal // ino.end */ - // ino.method.codegen.25935.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25935.body - { - code.add_code(JVMCode.aconst_null); - } - // ino.end - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25944.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java index d2730c2a..ab5b1712 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java @@ -7,8 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -89,14 +87,6 @@ public class PositivExpr extends UnaryExpr // ino.end */ - // ino.method.codegen.25975.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.25975.body - {} - // ino.end - // ino.method.wandleRefTypeAttributes2GenericAttributes.25984.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java index e2ab3b53..3a006cd0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -69,83 +66,6 @@ public class PostDecExpr extends UnaryExpr } // ino.end -// ino.method.codegen.26009.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26009.body - { - if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); - - int index = code.get_indexOf_Var(local_name); - if(index != -1) { - code.add_code(JVMCode.iinc); - code.add_code_byte(index); - code.add_code_byte(-1); - } - else { - if(expr instanceof LocalOrFieldVar) { - LocalOrFieldVar local = (LocalOrFieldVar)expr; - Menge name_Menge = local.get_Name_Menge(); - Menge type_Menge = local.get_Type_Menge(); - String class_name = null; - String type = null; - for(int i=0; i < name_Menge.size()-1; i++) { - local_name = (String)name_Menge.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - - index = code.get_indexOf_Var(local_name); - if(index != -1) { // LocalVar - try{ - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload_n(local_type, index)); - } - catch(JVMCodeException e) { // out of nload_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else { // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - class_name = (String)type_Menge.elementAt(i); - } - - local_name = (String)name_Menge.lastElement(); - index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); - - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.isub); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - - } - } - } - else if(expr instanceof InstVar) { - InstVar instvar = (InstVar)expr; - String instvar_name = instvar.get_codegen_UsedId(); - int index = classfile.add_field_ref(instvar_name, null, null); - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.isub); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - } - else throw new JVMCodeException("JVMCodeException: PostDecExpr: void codegen(ClassFile classfile, Code_attribute code)"); - } - // ino.end - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26018.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java index e44c1e5c..1899fe91 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -73,83 +70,6 @@ public class PostIncExpr extends UnaryExpr } // ino.end - // ino.method.codegen.26043.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26043.body - { - if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); - - int index = code.get_indexOf_Var(local_name); - if(index != -1) { - code.add_code(JVMCode.iinc); - code.add_code_byte(index); - code.add_code_byte(1); - } - else { - if(expr instanceof LocalOrFieldVar) { - LocalOrFieldVar local = (LocalOrFieldVar)expr; - Menge name_Menge = local.get_Name_Menge(); - Menge type_Menge = local.get_Type_Menge(); - String class_name = null; - String type = null; - for(int i=0; i < name_Menge.size()-1; i++) { - local_name = (String)name_Menge.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - - index = code.get_indexOf_Var(local_name); - if(index != -1) { // LocalVar - try{ - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload_n(local_type, index)); - } - catch(JVMCodeException e) { // out of nload_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else { // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - class_name = (String)type_Menge.elementAt(i); - } - - local_name = (String)name_Menge.lastElement(); - index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); - - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.iadd); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - - } - } - } - else if(expr instanceof InstVar) { - InstVar instvar = (InstVar)expr; - String instvar_name = instvar.get_codegen_UsedId(); - int index = classfile.add_field_ref(instvar_name, null, null); - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.iadd); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - } - else throw new JVMCodeException("JVMCodeException: PostIncExpr: void codegen(ClassFile classfile, Code_attribute code)"); - } - // ino.end - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26052.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java index 02eee809..1f7fd415 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -68,83 +65,6 @@ public class PreDecExpr extends UnaryExpr return null; } // ino.end - - // ino.method.codegen.26077.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26077.body - { - if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); - - int index = code.get_indexOf_Var(local_name); - if(index != -1) { - code.add_code(JVMCode.iinc); - code.add_code_byte(index); - code.add_code_byte(-1); - } - else { - if(expr instanceof LocalOrFieldVar) { - LocalOrFieldVar local = (LocalOrFieldVar)expr; - Menge name_Menge = local.get_Name_Menge(); - Menge type_Menge = local.get_Type_Menge(); - String class_name = null; - String type = null; - for(int i=0; i < name_Menge.size()-1; i++) { - local_name = (String)name_Menge.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - - index = code.get_indexOf_Var(local_name); - if(index != -1) { // LocalVar - try{ - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload_n(local_type, index)); - } - catch(JVMCodeException e) { // out of nload_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else { // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - class_name = (String)type_Menge.elementAt(i); - } - - local_name = (String)name_Menge.lastElement(); - index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); - - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.isub); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - - } - } - } - else if(expr instanceof InstVar) { - InstVar instvar = (InstVar)expr; - String instvar_name = instvar.get_codegen_UsedId(); - int index = classfile.add_field_ref(instvar_name, null, null); - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.isub); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - } - else throw new JVMCodeException("JVMCodeException: PreDecExpr: void codegen(ClassFile classfile, Code_attribute code)"); - } - // ino.end // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26086.definition diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java index 00861390..49df77d5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java @@ -8,9 +8,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -70,83 +67,6 @@ public class PreIncExpr extends UnaryExpr } // ino.end - // ino.method.codegen.26111.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26111.body - { - if(expr instanceof LocalOrFieldVar) { - String local_name = (String)((LocalOrFieldVar)expr).get_Name_Menge().lastElement(); - - int index = code.get_indexOf_Var(local_name); - if(index != -1) { - code.add_code(JVMCode.iinc); - code.add_code_byte(index); - code.add_code_byte(1); - } - else { - if(expr instanceof LocalOrFieldVar) { - LocalOrFieldVar local = (LocalOrFieldVar)expr; - Menge name_Menge = local.get_Name_Menge(); - Menge type_Menge = local.get_Type_Menge(); - String class_name = null; - String type = null; - for(int i=0; i < name_Menge.size()-1; i++) { - local_name = (String)name_Menge.elementAt(i); - type = JVMCode.get_codegen_Type((String)type_Menge.elementAt(i), paralist); - - index = code.get_indexOf_Var(local_name); - if(index != -1) { // LocalVar - try{ - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload_n(local_type, index)); - } - catch(JVMCodeException e) { // out of nload_n - String local_type = code.get_TypeOf_Var(local_name).getName().toString(); - code.add_code(JVMCode.nload(local_type)); - code.add_code_byte((byte)index); - } - } - else { // FieldVar - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.getfield); - code.add_code_short(classfile.add_field_ref(local_name, class_name, type)); - } - class_name = (String)type_Menge.elementAt(i); - } - - local_name = (String)name_Menge.lastElement(); - index = classfile.add_field_ref(local_name, class_name, JVMCode.get_codegen_Type("int", paralist)); - - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.iadd); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - - } - } - } - else if(expr instanceof InstVar) { - InstVar instvar = (InstVar)expr; - String instvar_name = instvar.get_codegen_UsedId(); - int index = classfile.add_field_ref(instvar_name, null, null); - code.add_code(JVMCode.aload_0); - code.add_code(JVMCode.dup); - code.add_code(JVMCode.getfield); - code.add_code_short(index); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.iadd); - code.add_code(JVMCode.putfield); - code.add_code_short(index); - } - else throw new JVMCodeException("JVMCodeException: PreIncExpr: void codegen(ClassFile classfile, Code_attribute code)"); - } - // ino.end - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26120.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java index ddb35586..15a130a6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java @@ -34,7 +34,7 @@ public class Receiver // ino.method.Receiver.26132.defdescription type=javadoc /** - * Autor: J�rg B�uerle + * Autor: J�rg B�uerle * @param expr */ // ino.end @@ -76,7 +76,7 @@ public class Receiver // ino.method.toString.26147.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 08c516b5..57ed3ac5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -69,16 +66,6 @@ public class Return extends Statement } // ino.end - // ino.method.codegen.26172.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26172.body - { - retexpr.codegen(classfile, code, paralist); - code.add_code(JVMCode.nreturn(retexpr.getTypeName())); - } - // ino.end // ino.method.toString.26178.definition public String toString() diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index a450bb1d..b844a30f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -6,8 +6,6 @@ import java.util.Enumeration; import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; -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; @@ -69,11 +67,6 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse } // ino.end - // ino.method.codegen.26206.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException; - // ino.end - @@ -83,7 +76,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @author AI10023 - Andreas Stadelmeier - * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke + * 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); @@ -96,7 +89,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @author Andreas Stadelmeier, a10023 - * Sollte von jedem Statement überschrieben werden. + * Sollte von jedem Statement überschrieben werden. * Liefert Informationen zum Statment und dessen Typ. * @return */ @@ -108,7 +101,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse /** * @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. + * Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren. */ public void setType(Type t) { diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 89eb265d..f1c9b2ff 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -7,9 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -85,33 +82,6 @@ public class StringLiteral extends Literal } // ino.end - // ino.method.codegen.26249.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26249.body - { - int index = classfile.add_CONSTANT_String_info(string); - if(index < 256) { - code.add_code(JVMCode.ldc); - code.add_code_byte((byte)index); - } - else { - code.add_code(JVMCode.ldc_w); - code.add_code_short((short)index); - } - } - // ino.end - - // ino.method.ConstantCodegen.26252.definition - public short ConstantCodegen(ClassFile classfile) - throws JVMCodeException - // ino.end - // ino.method.ConstantCodegen.26252.body - { - return (short) classfile.add_CONSTANT_String_info(string); - } - // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26258.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index 262da736..a66c2042 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -67,7 +64,7 @@ public class SuperCall extends ThisCall return ret; }else{ //Ansonsten Fehler ausgeben: - throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this); + throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 32b6ad8f..cc13362f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -94,16 +91,6 @@ public class This extends Expr // ino.end */ - // ino.method.codegen.26283.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26283.body - { - code.add_code(JVMCode.aload_0); - } - // ino.end - // ino.method.get_Name.26286.definition public String get_Name() // ino.end @@ -124,7 +111,7 @@ public class This extends Expr public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); //this.set_Type(new); - //this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen. + //this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen. this.setType(this.getParentClass().getType()); return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java index 7ca986b5..2bc329bf 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ThisCall.java @@ -6,9 +6,6 @@ import java.util.Hashtable; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -87,7 +84,7 @@ public class ThisCall extends MethodCall return ret; }else{ //Ansonsten Fehler ausgeben: - throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this); + throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java index cf77ca24..53903512 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java @@ -4,8 +4,6 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.UnaryExpr.8655.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; @@ -33,10 +31,6 @@ public abstract class UnaryExpr extends Expr } // ino.end - // ino.method.codegen.26305.declaration - public abstract void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException; - // ino.end private Menge getNumericTypes(){ Menge ret = new Menge<>(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.java b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.java index 4c5fe47f..43de6608 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.java @@ -2,10 +2,6 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end -// ino.module.UnaryMinus.8656.import -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; // ino.class.UnaryMinus.26308.declaration @@ -13,16 +9,7 @@ public class UnaryMinus // ino.end // ino.class.UnaryMinus.26308.body { - // ino.method.codegen.26311.definition - public void codegen(ClassFile classfile, CodeAttribute code, String type, boolean neg) - throws JVMCodeException - // ino.end - // ino.method.codegen.26311.body - { - if(!neg) code.add_code(JVMCode.nneg(type)); - } - // ino.end - + } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.java b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.java index e76cc623..3cb1ef91 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.java @@ -2,10 +2,6 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end -// ino.module.UnaryNot.8657.import -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.JVMCodeException; // ino.class.UnaryNot.26314.declaration @@ -13,31 +9,6 @@ public class UnaryNot // ino.end // ino.class.UnaryNot.26314.body { - // ino.method.codegen.26317.definition - public void codegen(ClassFile classfile, CodeAttribute code, boolean sw) - throws JVMCodeException - // ino.end - // ino.method.codegen.26317.body - { - if(!sw)code.add_code(JVMCode.ifne); - else code.add_code(JVMCode.ifeq); - code.add_code_short((short)7); - code.add_code(JVMCode.iconst_1); - code.add_code(JVMCode.goto_); - code.add_code_short((short)4); - code.add_code(JVMCode.iconst_0); - } - // ino.end - - // ino.method.if_codegen.26320.definition - public void if_codegen(ClassFile classfile, CodeAttribute code, boolean sw) - throws JVMCodeException - // ino.end - // ino.method.if_codegen.26320.body - { - if(!sw) code.add_code(JVMCode.ifne); - else code.add_code(JVMCode.ifeq); - } - // ino.end + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 48f24c64..2de82c39 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -9,9 +9,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.bytecode.CodeAttribute; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -81,62 +78,10 @@ public class WhileStmt extends Statement } // ino.end - // ino.method.codegen.26351.definition - public void codegen(ClassFile classfile, CodeAttribute code, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.codegen.26351.body - { - if(loop_block!=null && expr!=null) { - code.add_code(JVMCode.goto_); - int breakpoint = code.get_code_length(); - code.add_code_short(0); - loop_block.codegen(classfile, code, paralist); - code.set_code_short(code.get_code_length() + 1 - breakpoint, breakpoint); - - loop_codegen(classfile, code, breakpoint, false, paralist); - } - } - // ino.end - - // ino.method.loop_codegen.26354.definition - public void loop_codegen(ClassFile classfile, CodeAttribute code, int breakpoint, boolean not, Menge paralist) - throws JVMCodeException - // ino.end - // ino.method.loop_codegen.26354.body - { - if(expr instanceof NotExpr) { - expr = ((NotExpr)expr).get_Expr(); - loop_codegen(classfile, code, breakpoint, !not, paralist); - } - else if(expr instanceof Binary) { - Operator op = ((Binary)expr).get_Operator(); - if(op instanceof LogOp) ((LogOp)op).loop_codegen(classfile, code, expr, breakpoint, !not, paralist); - else if(op instanceof RelOp) { - Expr expr1 = ((Binary)expr).get_Expr1(); - Expr expr2 = ((Binary)expr).get_Expr2(); - expr1.codegen(classfile, code, paralist); - expr2.codegen(classfile, code, paralist); - - if(expr1 instanceof Null || expr2 instanceof Null) ((RelOp)op).if_codegen(classfile, code, "null", !not); - else ((RelOp)op).if_codegen(classfile, code, expr1.getTypeName(), !not); - - code.add_code_short(breakpoint + 3 - code.get_code_length()); - } - else throw new JVMCodeException("JVMCodeException: WhileStmt: void loop_codegen(ClassFile classfile, Code_attribute code, int breakpoint, boolean not)"); - } - else { - expr.codegen(classfile, code, paralist); - if(!not) code.add_code(JVMCode.ifne); - else code.add_code(JVMCode.ifeq); - code.add_code_short(breakpoint + 3 - code.get_code_length()); - } - } - // ino.end // ino.method.toString.26360.defdescription type=javadoc /** - *
    Author: Martin Pl�micke + *
    Author: Martin Pl�micke * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java b/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java index c5adcbe0..5297dcec 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java @@ -40,7 +40,7 @@ public abstract class BaseType extends Type // ino.method.equals.26445.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -85,7 +85,7 @@ public abstract class BaseType extends Type @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden. + return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden. } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java b/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java index b1c88056..b2038516 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java @@ -22,7 +22,7 @@ public class BooleanType extends BaseType // ino.method.equals.26458.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class BooleanType extends BaseType // ino.method.clone.26461.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java index ad2d5ea5..02dc7560 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.java @@ -87,7 +87,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = super.TYPE(ass); //ass.addGenericVarAssumption(this); - //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds + //Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds Menge tempBounds = new Menge<>(); if(this.bounds != null){ for(ObjectType ev : this.bounds){ @@ -130,26 +130,6 @@ public class BoundedGenericTypeVar extends GenericTypeVar } // ino.end - // ino.method.getSignatureDefinition.26489.definition - public String getSignatureDefinition() - // ino.end - // ino.method.getSignatureDefinition.26489.body - { - // Rueckgabeformat: - // Zur kompletten Definition (bspw. Rueckgabewert) muss zusaetzlich - // noch ((GenericTypeVar)obj).getSignatureType(paralist) aufgerufen - // werden! - StringBuffer sb = new StringBuffer(); - sb.append(name); - - for (int i=0; i < bounds.size(); i++) { - sb.append(":"); - sb.append(bounds.elementAt(i).get_codegen_Type( null)); - } - - return sb.toString(); - } - // ino.end @Override public Menge getChildren() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java b/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java deleted file mode 100755 index bf6ab090..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/CRefTypeSet.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.dhbwstuttgart.syntaxtree.type; - -import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.typeinference.unify.CMengeSet; - -public class CRefTypeSet extends CMengeSet { - - public CRefTypeSet shallowCopy(){ - CRefTypeSet copy = new CRefTypeSet(); - copy.setMenge((Menge)this.getMenge().clone()); - return copy; - } - - public CRefTypeSet deepCopy() { - - CRefTypeSet copy = new CRefTypeSet(); - Iterator it = this.getIterator(); - while(it.hasNext()){ - copy.addElement(it.next().clone()); - } - return copy; - } - - public Iterator iterator() { - return this.getIterator(); - } -} diff --git a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java b/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java index 166192af..025863fb 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java @@ -22,7 +22,7 @@ public class CharacterType extends BaseType // ino.method.equals.26499.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class CharacterType extends BaseType // ino.method.clone.26502.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java b/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java index 50d4df58..36e0f047 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java @@ -22,7 +22,7 @@ public class DoubleType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class DoubleType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 347fbbe8..a48046b0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -21,8 +21,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{ /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine ExtendsWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine ExtendsWildcard */ public ExtendsWildcardType (int offset, ObjectType extendsType) { @@ -35,10 +35,10 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt den Typen in der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt den Typen in der Wildcard zurück. * Beispiel: ? extends Integer. - * Integer wird zurückgegeben. + * Integer wird zurückgegeben. */ public ObjectType get_ExtendsType() { @@ -46,8 +46,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -55,8 +55,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public ExtendsWildcardType clone() @@ -66,7 +66,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Vergleicht mit einem anderen Objekt. * @param obj - Object to compare. */ @@ -83,9 +83,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshExtendsWildcardType GetFreshWildcardType() { @@ -93,9 +93,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). - * Überschreibt die Methode der Superklasse. + * Überschreibt die Methode der Superklasse. */ public Type GetWildcardType() { @@ -103,7 +103,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard * @param T - Type to be set */ @@ -114,7 +114,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). * Implementiert ITypeContainer */ @@ -124,9 +124,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public ObjectType getMatchType() { @@ -153,7 +153,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. + //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java b/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java index 716f5bad..299589fd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java @@ -22,7 +22,7 @@ public class FloatType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class FloatType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java index 4c5d8e4f..2a455363 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java @@ -7,8 +7,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc private ObjectType extendsBoundType; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshExtendsWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshExtendsWildcard */ public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset) { @@ -17,8 +17,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Privater Konstruktor für clone + * Author: Arne Lüdtke
    + * Privater Konstruktor für clone */ private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name) { @@ -27,8 +27,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshExtendsWildcardType clone() @@ -50,8 +50,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die Grenze der Wildcard zurück + * Author: Arne Lüdtke
    + * Gibt die Grenze der Wildcard zurück */ public ObjectType get_ExtendsBound() { @@ -59,8 +59,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { @@ -74,9 +74,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die passende ExtendsWildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende ExtendsWildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public ExtendsWildcardType get_WildcardType() { @@ -84,9 +84,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java index 743c6f30..c381d8e8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.java @@ -7,8 +7,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha private ObjectType superBoundType; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshSuperWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshSuperWildcard */ public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset) { @@ -17,8 +17,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Privater Konstruktor für clone + * Author: Arne Lüdtke
    + * Privater Konstruktor für clone */ private FreshSuperWildcardType(ObjectType superBound,SyntaxTreeNode parent,int offset, String name) { @@ -27,8 +27,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshSuperWildcardType clone() @@ -50,8 +50,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt die Grenze der Wildcard zurück + * Author: Arne Lüdtke
    + * Gibt die Grenze der Wildcard zurück */ public ObjectType get_SuperBound() { @@ -59,8 +59,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { @@ -74,9 +74,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt die passende SuperWildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende SuperWildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public SuperWildcardType get_WildcardType() { @@ -84,9 +84,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java index 73f8019c..fc5c7338 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.java @@ -14,8 +14,8 @@ public class FreshWildcardType extends Type { private Menge upperBounds = new Menge(); /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshWildcard */ public FreshWildcardType(SyntaxTreeNode parent, int offset) { @@ -24,9 +24,9 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Protected Konstruktor für clone. - * Protected, da vererbte Klassen ihn verwenden müssen. + * Author: Arne Lüdtke
    + * Protected Konstruktor für clone. + * Protected, da vererbte Klassen ihn verwenden müssen. */ protected FreshWildcardType(SyntaxTreeNode parent, int offset, String name) { @@ -35,8 +35,8 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -56,8 +56,8 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshWildcardType clone() @@ -66,19 +66,19 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { //Da die Namensgebung von Typeplaceholdern und FreshWildcards identisch ist, - //und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird, + //und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird, //Wenn eine FreshWildcard mit einem TypePlaceholder verglichen wird. return (obj instanceof FreshWildcardType) && super.equals(obj); } /** - * Erzeugt einen neuen Namen, und gibt diesen zurück + * Erzeugt einen neuen Namen, und gibt diesen zurück * Methode aus TypePlaceholder kopiert */ private static JavaClassName makeNewName() @@ -86,14 +86,14 @@ public class FreshWildcardType extends Type { // luar: Methode aus TypePlaceholder kopiert. String strReturn = strNextName; - // n�chster Name berechnen und in strNextName speichern + // n�chster Name berechnen und in strNextName speichern inc( strNextName.length() - 1 ); return new JavaClassName(strReturn); } /** - * Hilfsmethode für makeNewName + * Hilfsmethode für makeNewName * Methode aus TypePlaceholder kopiert */ private static void inc(int i) @@ -112,18 +112,18 @@ public class FreshWildcardType extends Type { // aktuelle Stelle: auf A zuruecksetzen manipulate( i, 'A' ); - // vorherige Stelle erh�hen + // vorherige Stelle erh�hen inc( i - 1 ); } else { - // aktueller Buchstabe �ndern + // aktueller Buchstabe �ndern manipulate( i, cBuchstabe ); } } /** - * Hilfsmethode für makeNewName + * Hilfsmethode für makeNewName * Methode aus TypePlaceholder kopiert */ private static void manipulate( int nStelle, char nWert ) @@ -141,24 +141,24 @@ public class FreshWildcardType extends Type { } /** - * Author: Arne Lüdtke
    - * Gibt die passende WildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende WildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public WildcardType get_WildcardType() { return new WildcardType(null, this.getParent(),this.getOffset()); } /** - * Author: Arne Lüdtke
    - * Gibt den Menge der oberen Grenzen zurück + * Author: Arne Lüdtke
    + * Gibt den Menge der oberen Grenzen zurück */ public Menge get_UpperBounds() { return this.upperBounds; } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Menge der oberen Grenzen */ public void set_UpperBounds(Menge bounds) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index a1492e46..331c8831 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -24,8 +24,8 @@ import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; // ino.class.GenericTypeVar.26505.description type=javadoc /** - * TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert. - * @author J�rg B�uerle + * TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert. + * @author J�rg B�uerle * @version $Date: 2013/09/22 20:12:53 $ */ // ino.end @@ -38,9 +38,9 @@ public class GenericTypeVar extends ObjectType //Menge extendVars = new Menge(); protected Pair genericConstraint; /** - * Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch - * Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation. - *
    Autor: J�rg B�uerle + * Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch + * Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation. + *
    Autor: J�rg B�uerle */ // ino.method.GenericTypeVar.26509.defdescription type=line // private Hashtable> m_TypeErasureList; @@ -79,7 +79,7 @@ public class GenericTypeVar extends ObjectType */ // ino.method.clone.26512.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -94,7 +94,7 @@ public class GenericTypeVar extends ObjectType // ino.method.equals.26515.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param obj * @return */ @@ -200,7 +200,7 @@ public class GenericTypeVar extends ObjectType } /** - * Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions. + * Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions. * @param ass * @return */ @@ -212,7 +212,7 @@ public class GenericTypeVar extends ObjectType @Override public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden. + ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden. return super.TYPE(ass, parent); } @@ -224,7 +224,7 @@ public class GenericTypeVar extends ObjectType public void parserPostProcessing(SyntaxTreeNode parent) { //SyntaxTreeNode parentTemp = this.parent; super.parserPostProcessing(parent); - //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. + //if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt. } public GTVDeclarationContext getDeclarationContext() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java b/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java index 1a125293..8950040a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/IMatchable.java @@ -2,17 +2,17 @@ package de.dhbwstuttgart.syntaxtree.type; /** * Dieses Interface wird von allen Klassen implementiert, die weitere Klassen - * enthalten, die im match des Unify beachtet werden müssen. + * enthalten, die im match des Unify beachtet werden müssen. * - * @author Arne Lüdtke + * @author Arne Lüdtke * */ public interface IMatchable { /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ Type getMatchType(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java b/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java index 3ad4a511..8ce030cc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.java @@ -2,16 +2,16 @@ package de.dhbwstuttgart.syntaxtree.type; /** * Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten. - * Wird für diverse Hilfsmethoden verwendet. + * Wird für diverse Hilfsmethoden verwendet. * - * @author Arne Lüdtke + * @author Arne Lüdtke * */ public interface ITypeContainer { /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_ExtendsType(). * Implementiert ITypeContainer */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java b/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java index 84f0b1da..6fb86103 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java @@ -22,7 +22,7 @@ public class IntegerType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class IntegerType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java b/src/de/dhbwstuttgart/syntaxtree/type/LongType.java index 5b016403..8184ee47 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/LongType.java @@ -22,7 +22,7 @@ public class LongType extends BaseType // ino.method.equals.26534.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -43,7 +43,7 @@ public class LongType extends BaseType // ino.method.clone.26537.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index bb938fe8..e4cb9869 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -9,7 +9,6 @@ import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.SCException; import de.dhbwstuttgart.parser.JavaClassName; @@ -86,7 +85,7 @@ public class RefType extends ObjectType implements IMatchable public int hashCode() { int hash = 0; hash += super.hashCode(); - hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps + hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps return hash; } @@ -114,8 +113,8 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * Erstellt einen Referenztyp aus dem übergebenen Type. - * Dabei wird der Name und der Offset des baseType's übernommen. + * Erstellt einen Referenztyp aus dem übergebenen Type. + * Dabei wird der Name und der Offset des baseType's übernommen. * @param baseType */ public RefType( Type baseType){ @@ -229,8 +228,8 @@ public class RefType extends ObjectType implements IMatchable /** * HOTI * Diese Methode sucht in der Klassendefinition nach einen GTV, die - * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden - * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + * so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + * hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls * angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert * die Methode null. * @param type @@ -314,8 +313,8 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus. - * In einem RefType dürfen keine GTVs enthalten sein. + * Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus. + * In einem RefType dürfen keine GTVs enthalten sein. * @param v */ // ino.method.set_ParaList.26661.definition @@ -336,7 +335,7 @@ public class RefType extends ObjectType implements IMatchable // ino.end /** - * @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus + * @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus */ // ino.method.get_ParaList.26664.definition public Menge get_ParaList() @@ -671,32 +670,6 @@ public class RefType extends ObjectType implements IMatchable } // ino.end - // ino.method.getSignatureType.26700.definition - public String getSignatureType(Menge paralist) - // ino.end - // ino.method.getSignatureType.26700.body - { - if (parameter == null || parameter.size() == 0) - return get_codegen_Type(paralist); - - StringBuffer sb = new StringBuffer(); - - // Basistyp, ; entfernen - String basis = JVMCode.get_codegen_Type(getTypeName(),null); - basis = basis.substring(0, basis.length() -1); - sb.append(basis); - - sb.append("<"); - - for(int i = 0; i< parameter.size(); i++) { - sb.append(parameter.elementAt(i).get_codegen_Type(null)); - } - - sb.append(">;"); - - return sb.toString(); - } - // ino.end // ino.method.setPrimitiveFlag.29415.definition public void setPrimitiveFlag(boolean b) @@ -737,9 +710,9 @@ public class RefType extends ObjectType implements IMatchable } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java b/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java index e7c4a3bf..379b8999 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java @@ -21,7 +21,7 @@ public class ReturnType extends Type // ino.method.equals.26710.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -42,7 +42,7 @@ public class ReturnType extends Type // ino.method.clone.26713.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index be2ba3b6..5c97ea97 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -23,8 +23,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine SuperWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine SuperWildcard */ public SuperWildcardType(int offset, ObjectType innerType) { @@ -32,10 +32,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt den Typen in der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt den Typen in der Wildcard zurück. * Beispiel: ? super Integer. - * Integer wird zurückgegeben. + * Integer wird zurückgegeben. */ public ObjectType get_SuperType() { @@ -43,8 +43,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -52,8 +52,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public SuperWildcardType clone() @@ -63,9 +63,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshSuperWildcardType GetFreshWildcardType() { @@ -73,9 +73,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_innerType(). - * Überschreibt die Methode der Superklasse + * Überschreibt die Methode der Superklasse */ public Type GetWildcardType() { @@ -83,7 +83,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard * @param T - Type to be set */ @@ -94,7 +94,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Das gleiche wie get_innerType(). * Implementiert ITypeContainer */ @@ -104,9 +104,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { @@ -119,7 +119,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Vergleicht mit einem anderen Objekt. * @param obj - Object to compare. */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index 801dd754..ccb0a626 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -5,7 +5,6 @@ package de.dhbwstuttgart.syntaxtree.type; import java.util.ArrayList; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.bytecode.JVMCode; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -110,36 +109,8 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return used.name.toString(); } // ino.end - - // ino.method.get_codegen_Type.26750.defdescription type=javadoc - /** - * Liefert die Typrepraesentation fuer die - * Bytecodegenerierung zurueck. - */ - // ino.end - // ino.method.get_codegen_Type.26750.definition - public String get_codegen_Type(Menge paralist) - // ino.end - // ino.method.get_codegen_Type.26750.body - { - return JVMCode.get_codegen_Type(name.toString(), paralist); - } - // ino.end - - // ino.method.getSignatureType.26753.defdescription type=javadoc - /** - * Liefert den Typ fuer das Signature-Attribut zurueck. - */ - // ino.end - // ino.method.getSignatureType.26753.definition - public String getSignatureType(Menge paralist) - // ino.end - // ino.method.getSignatureType.26753.body - { - return get_codegen_Type(paralist); - } - // ino.end - + + // ino.method.Type2String.26756.definition public String Type2String() @@ -170,7 +141,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.equals.26765.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -194,7 +165,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.clone.26768.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return // ino.end @@ -212,7 +183,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset // ino.method.toString.26771.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -288,7 +259,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset } /** - * Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt. + * Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt. * @param tph * @return */ @@ -297,9 +268,9 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset } /** - * Prüft ob der Typ in den Assumptions ass vorhanden ist. - * Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird. - * @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + * Prüft ob der Typ in den Assumptions ass vorhanden ist. + * Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird. + * @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ ConstraintType t = ass.getTypeFor(this, this); @@ -308,7 +279,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return t; } */ - //TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen. + //TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen. public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ ConstraintType t = ass.getTypeFor(this, parent); if(t==null) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 41a43d47..8ea21928 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -20,11 +20,11 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; // ino.class.TypePlaceholder.26780.description type=javadoc /** - * Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben + * Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben * Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool * und * ist in einer zentralen Registry, d.h. einer Hashtable abgelegt. - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/06/19 12:45:37 $ */ // ino.end @@ -50,9 +50,9 @@ public class TypePlaceholder extends ObjectType // ino.method.TypePlaceholder.26794.defdescription type=javadoc /** - * Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die + * Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die * Factory-Methode fresh() erzeugt. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param typeName Der Name der TypePlaceholder-Variablen */ // ino.end @@ -64,14 +64,14 @@ public class TypePlaceholder extends ObjectType super(parent, -1); if(typeName == null)throw new NullPointerException(); this.name = new JavaClassName(typeName); - if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE); + if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE); } // ino.end // ino.method.getInstance.26797.defdescription type=javadoc /** * Statische Methode, um einen TypePlaceholder aus der Registry zu holen. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param name Der Name des TypePlaceholders * @return Der TypePlaceholder oder null, falls er nicht in der * Registry existiert @@ -88,7 +88,7 @@ public class TypePlaceholder extends ObjectType /** * Generiert einen neuen TPH mit einem bestimmten Namen. - * Wird benötigt, wenn aus Generischen Variablen TPH generiert werden. + * Wird benötigt, wenn aus Generischen Variablen TPH generiert werden. * @param name * @return */ @@ -110,7 +110,7 @@ public class TypePlaceholder extends ObjectType /** * @author Andreas Stadelmeier, a10023 * Ruft die TypePlaceholder.fresh()-Methode auf. - * Fügt zusätzlich einen Replacementlistener hinzu. + * Fügt zusätzlich einen Replacementlistener hinzu. * @param listener * @return */ @@ -129,8 +129,8 @@ public class TypePlaceholder extends ObjectType // ino.method.makeNewName.26803.defdescription type=javadoc /** - * Berechnet einen neuen, eindeutigen Namen f�r eine neue - * TypePlaceholder.
    Author: J�rg B�uerle + * Berechnet einen neuen, eindeutigen Namen f�r eine neue + * TypePlaceholder.
    Author: J�rg B�uerle * @return Der Name */ // ino.end @@ -142,7 +142,7 @@ public class TypePlaceholder extends ObjectType // otth: Funktion berechnet einen neuen Namen anhand eines alten gespeicherten String strReturn = strNextName; - // n�chster Name berechnen und in strNextName speichern + // n�chster Name berechnen und in strNextName speichern inc( strNextName.length() - 1 ); return strReturn; @@ -152,7 +152,7 @@ public class TypePlaceholder extends ObjectType // ino.method.inc.26806.defdescription type=javadoc /** * Hilfsfunktion zur Berechnung eines neuen Namens - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param i */ // ino.end @@ -162,10 +162,10 @@ public class TypePlaceholder extends ObjectType // ino.method.inc.26806.body { // otth: Hilfsfunktion zur Berechnung eines neuen Namens - // otth: Erh�hung des Buchstabens an der Stelle i im String strNextName - // otth: Nach �berlauf: rekursiver Aufruf + // otth: Erh�hung des Buchstabens an der Stelle i im String strNextName + // otth: Nach �berlauf: rekursiver Aufruf - // falls i = -1 --> neuer Buchstabe vorne anf�gen + // falls i = -1 --> neuer Buchstabe vorne anf�gen if ( i == -1 ) { strNextName = "A" + strNextName; @@ -179,12 +179,12 @@ public class TypePlaceholder extends ObjectType // aktuelle Stelle: auf A zuruecksetzen manipulate( i, 'A' ); - // vorherige Stelle erh�hen + // vorherige Stelle erh�hen inc( i - 1 ); } else { - // aktueller Buchstabe �ndern + // aktueller Buchstabe �ndern manipulate( i, cBuchstabe ); } @@ -194,7 +194,7 @@ public class TypePlaceholder extends ObjectType // ino.method.manipulate.26809.defdescription type=javadoc /** * Hilfsfunktion zur Berechnung eines neuen Namens. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param nStelle * @param nWert */ @@ -221,7 +221,7 @@ public class TypePlaceholder extends ObjectType // ino.method.equals.26812.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -244,9 +244,9 @@ public class TypePlaceholder extends ObjectType // ino.method.deleteRegistry.26839.defdescription type=javadoc /** - * L�scht die komplette Registry von TypePlaceholders. Sollte nur und - * ausschlie�lich von MyCompiler.init() aufgerufen werden!!! - *
    Author: J�rg B�uerle + * L�scht die komplette Registry von TypePlaceholders. Sollte nur und + * ausschlie�lich von MyCompiler.init() aufgerufen werden!!! + *
    Author: J�rg B�uerle */ // ino.end // ino.method.deleteRegistry.26839.definition @@ -262,12 +262,12 @@ public class TypePlaceholder extends ObjectType // ino.method.clone.26842.defdescription type=javadoc /** * Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die - * Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen + * Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen * muss.
    * Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich - * �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen + * �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen * benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -283,7 +283,7 @@ public class TypePlaceholder extends ObjectType /** * @author Andreas Stadelmeier, a10023 - * Überschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!) + * Überschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!) */ @Override public String get_Name(){ @@ -300,15 +300,15 @@ public class TypePlaceholder extends ObjectType // ino.end /////////////////////////////////////////////////////////////////// - // Spezialfunktionen, f�r makeFC() und unify() + // Spezialfunktionen, f�r makeFC() und unify() // Sollten sonst nicht aufgerufen werden... /////////////////////////////////////////////////////////////////// // ino.method.backdoorFresh.26848.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen - * werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. - *
    Author: J�rg B�uerle + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen + * werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. + *
    Author: J�rg B�uerle * @return Eine neue TypePlaceholder */ // ino.end @@ -332,14 +332,14 @@ public class TypePlaceholder extends ObjectType // ino.method.backdoorSetName.26851.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    * ACHTUNG: Diese TypePlaceholder darf nicht Teil des abstrakten * Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende - * TypePlaceholder nicht �ber die Methode fresh(), - * sondern �ber backdoorCreate() oder backdoorClone() + * TypePlaceholder nicht �ber die Methode fresh(), + * sondern �ber backdoorCreate() oder backdoorClone() * erzeugt worden ist. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param varName Der Name des zu erzeugenden TypePlaceholders */ // ino.end @@ -354,10 +354,10 @@ public class TypePlaceholder extends ObjectType // ino.method.backdoorCreate.26854.defdescription type=javadoc /** - * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() - * ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in - * der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig - * losgel�st vom abstrakten Syntaxbaum.
    Author: J�rg B�uerle + * Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + * ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in + * der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig + * losgel�st vom abstrakten Syntaxbaum.
    Author: J�rg B�uerle * @param name * @return */ @@ -387,9 +387,9 @@ public class TypePlaceholder extends ObjectType public JavaCodeResult printJavaCode(ResultSet resultSet) { Type equalType = resultSet.getTypeEqualTo(this); if(equalType == null || equalType.equals(this)){ - //Für den Fall das der TPH nicht aufgelöst werden konnte. + //Für den Fall das der TPH nicht aufgelöst werden konnte. JavaCodeResult ret = new JavaCodeResult(this.getName().toString()); - //Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden + //Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden ret.addUnresolvedTPH(this); return ret; } @@ -401,9 +401,9 @@ public class TypePlaceholder extends ObjectType * Berechnet die InsertPoints dieses TypePlaceholders. * Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert, * ob sie von TypeInsertable erben. - * Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint. + * Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint. * Mehrere TypeInsertPoint's ergeben ein TypeInsertSet. - * @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält. + * @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält. * @return * @see TypeInsertPoint */ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Void.java b/src/de/dhbwstuttgart/syntaxtree/type/Void.java index e97a809f..77b3234f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Void.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Void.java @@ -26,7 +26,7 @@ public class Void extends RefType // ino.method.equals.26864.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param Object * @return */ @@ -57,7 +57,7 @@ public class Void extends RefType // ino.method.clone.26867.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @return */ // ino.end @@ -77,7 +77,7 @@ public class Void extends RefType @Override public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method) { - return this;//VOID ist immer korrekt, das wird vom Parser geprüft + return this;//VOID ist immer korrekt, das wird vom Parser geprüft } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index b07a94b6..a6e4566d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -21,8 +21,8 @@ public class WildcardType extends Type{ protected ObjectType innerType = null; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine Wildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine Wildcard */ public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset) { @@ -31,8 +31,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. */ public WildcardType clone() { @@ -49,9 +49,9 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Gibt die passende FreshWildcardType Klasse zurück. - * Wird für CaptureConversion verwendet + * Author: Arne Lüdtke
    + * Gibt die passende FreshWildcardType Klasse zurück. + * Wird für CaptureConversion verwendet */ public FreshWildcardType GetFreshWildcardType() { @@ -59,8 +59,8 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    - * Die Allgemeine Wildcard enthält keinen Typen. + * Author: Arne Lüdtke
    + * Die Allgemeine Wildcard enthält keinen Typen. */ public Type GetWildcardType() { @@ -68,7 +68,7 @@ public class WildcardType extends Type{ } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen. * @param T - Type to be set */ diff --git a/src/de/dhbwstuttgart/typeinference/FunN.java b/src/de/dhbwstuttgart/typeinference/FunN.java index d03559ec..55101d67 100755 --- a/src/de/dhbwstuttgart/typeinference/FunN.java +++ b/src/de/dhbwstuttgart/typeinference/FunN.java @@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; /** - * @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke + * @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke * "interface FunN { R apply(T1 arg1, T2 arg2, ... , TN argN); }" * @author A10023 - Andreas Stadelmeier * @@ -30,7 +30,7 @@ public class FunN extends RefType { /** * @author Andreas Stadelmeier, a10023 - * Benötigt für den Typinferenzalgorithmus für Java 8 + * Benötigt für den Typinferenzalgorithmus für Java 8 * Generiert einen RefType auf eine FunN - Klasse. * @param R * @param T @@ -73,8 +73,8 @@ public class FunN extends RefType { } /** - * Muss nach jeder Änderung von T oder R aufgerufen werden. - * Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus. + * Muss nach jeder Änderung von T oder R aufgerufen werden. + * Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus. */ private void calculateNewParalist(){ Menge t = new Menge(); @@ -143,7 +143,7 @@ public class FunN extends RefType { } */ /** - * Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden. + * Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden. @Override public FunN clone() { diff --git a/src/de/dhbwstuttgart/typeinference/FunNInterface.java b/src/de/dhbwstuttgart/typeinference/FunNInterface.java index 2074e03b..b4c23318 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNInterface.java +++ b/src/de/dhbwstuttgart/typeinference/FunNInterface.java @@ -20,13 +20,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; */ public class FunNInterface extends Class{ //TODO: Diese Klasse sollte eigentlich von Interface erben - //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. + //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. //private Menge gtvparalist; /** - * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. + * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. * @param N - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt R apply(T1 par1); */ public FunNInterface(int N) { @@ -72,7 +72,7 @@ public class FunNInterface extends Class{ } /** - * Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode + * Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode * @return */ private FunNMethod getApplyFunction(){ diff --git a/src/de/dhbwstuttgart/typeinference/FunNMethod.java b/src/de/dhbwstuttgart/typeinference/FunNMethod.java index 1a7f6e74..d7a18ad4 100755 --- a/src/de/dhbwstuttgart/typeinference/FunNMethod.java +++ b/src/de/dhbwstuttgart/typeinference/FunNMethod.java @@ -18,12 +18,12 @@ public class FunNMethod extends Method{ */ public FunNMethod(Menge paralist){ super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode - int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp + int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp this.setType(paralist.firstElement()); this.set_DeclId(new DeclId("apply")); ParameterList pl = new ParameterList(); Menge fpList = new Menge(); - for(int i = 1;i fpList = new Menge(); - for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. + for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. DeclId paramName = new DeclId("T"+i); FormalParameter parameter = new FormalParameter(paramName); parameter.setType(TypePlaceholder.fresh(parameter)); diff --git a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java index fff505d2..cbd881bf 100755 --- a/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java +++ b/src/de/dhbwstuttgart/typeinference/JavaCodeResult.java @@ -24,7 +24,7 @@ public class JavaCodeResult{ public JavaCodeResult attach(JavaCodeResult javaCodeResult){ this.javaCode += javaCodeResult.getJavaCode(); - //Alle TPH anfügen: + //Alle TPH anfügen: for(TypePlaceholder tph : javaCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph); return this; } @@ -39,7 +39,7 @@ public class JavaCodeResult{ } /** - * Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden. + * Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden. * Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ. * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 527e8f4e..6272b7be 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -13,7 +13,7 @@ public abstract class KarthesischesProdukt { ret.add(v); } return ret; - //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); } return berechneKarthesischesProdukt(m1, null); } @@ -45,7 +45,7 @@ public abstract class KarthesischesProdukt { ret = new Menge>(); ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) ); }else{ - throw new TypinferenzException("Der übergebene Vektor m1 ist leer."); + throw new TypinferenzException("Der übergebene Vektor m1 ist leer."); } return ret;*/ @@ -53,10 +53,10 @@ public abstract class KarthesischesProdukt { private static Menge> karthesischesProdukt(Menge m1, Menge m2){ Menge> ret = new Menge>(); - /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden + /* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden if(m2.size() == 0){//Sonderfall, m2 ist leer: ret.add(m1); - return ret; //Die restliche Berechnungen können übersprungen werden. + return ret; //Die restliche Berechnungen können übersprungen werden. } */ //for(M o1 : m1){ diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index 1db2aa71..fc4935f8 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -15,7 +15,7 @@ public class OderConstraint extends OderMenge{ private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); /** - * Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu. + * Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu. * @param p1 * @param p2 */ @@ -30,7 +30,7 @@ public class OderConstraint extends OderMenge{ /** - * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. + * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. * @return public Menge getConstraintPairs(){ @@ -44,7 +44,7 @@ public class OderConstraint extends OderMenge{ */ /** - * Fügt ein Pair(p1, p2) dem Constraint hinzu + * Fügt ein Pair(p1, p2) dem Constraint hinzu * @param p1 * @param p2 */ @@ -64,7 +64,7 @@ public class OderConstraint extends OderMenge{ this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint); } - //TODO: Funktionalität für filter implementieren + //TODO: Funktionalität für filter implementieren void filterWrongConstraints(Unifier unifier) { /* Menge filteredConstraints = new Menge<>(); diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 1d08ae51..863b3623 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -43,15 +43,15 @@ public class Pair // ino.attribute.bSubst.26552.decldescription type=line // false <--> vorinitialisierter Wert // true <--> Dieses Paar entstand durch reduce1-Regel (=.) - // --> Name von TA1 mu� gleich sein wie Name von TA2 + // --> Name von TA1 mu� gleich sein wie Name von TA2 // Nur noch reduce2-Regel anwendbar // luar 15-04-2007 - // Der Unify mit Wildcards benötigt 3 verschiedene Operatoren. + // Der Unify mit Wildcards benötigt 3 verschiedene Operatoren. // Deshalb wurde der boolean durch einen Enum ersetzt. // Smaller <--> vorinitialisierter Wert // SmallerExtends <--> Kleiner extends (wie vorinitialisiert, nur mit einschluss der Wildcard) - // Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein. + // Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein. // ino.end // ino.attribute.bSubst.26552.declaration @@ -301,7 +301,7 @@ public class Pair // ino.method.equals.26588.defdescription type=javadoc /** - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param obj * @return */ @@ -321,8 +321,8 @@ public class Pair // ino.end /** - * Author: Arne Lüdtke
    - * Überprüft ob die Paare die gleichen Instanzen sind. + * Author: Arne Lüdtke
    + * Überprüft ob die Paare die gleichen Instanzen sind. */ public boolean instanzeEquals(Object obj) { @@ -330,7 +330,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ Equal ist. */ public boolean OperatorEqual() @@ -339,7 +339,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ Smaller ist. */ public boolean OperatorSmaller() @@ -348,7 +348,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Abfrage, ob Operator vom Typ SmallerExtends ist. */ public boolean OperatorSmallerExtends() @@ -357,8 +357,8 @@ public class Pair } /** - * Author: Arne Lüdtke
    - * Gibt den Operator zurück. + * Author: Arne Lüdtke
    + * Gibt den Operator zurück. */ public PairOperator GetOperator() { @@ -366,7 +366,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Setzt den Operator * @param operator - Operator to set. */ @@ -376,7 +376,7 @@ public class Pair } /** - * Author: Arne Lüdtke
    + * Author: Arne Lüdtke
    * Erzeugt einen Klon des Paares. */ public Pair clone() @@ -385,8 +385,8 @@ public class Pair } /** - * Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück. - * (Immer zwischen 0 und 2 Stück ;P) + * Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück. + * (Immer zwischen 0 und 2 Stück ;P) * @return */ public Menge getTypePlaceholder() { diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index 64737673..5f1aeca2 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -33,7 +33,7 @@ public class ResultSet implements Iterable { } /** - * Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void + * Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void * @param type * @return */ @@ -62,7 +62,7 @@ public class ResultSet implements Iterable { } /** - * Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst. + * Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst. * Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht. * @param tA1 * @return true, falls der gesuchte Typ enthalten ist. @@ -86,7 +86,7 @@ public class ResultSet implements Iterable { /** - * Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen. + * Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen. * Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt. * @return */ @@ -109,7 +109,7 @@ public class ResultSet implements Iterable { } /** - * Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden. + * Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden. * @param unresolvedTPH * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 8b0907f0..18232176 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -11,9 +11,9 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** - * Beschreibung von Herrn Plümicke: - * "The set of constraints consists of constraints of the form θ R θ' , where θ and - * θ' are Java types and R (R ∈ { < , { - //private Pair constraintPair; //entspricht θ condition θ' + //private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) public SingleConstraint(ConstraintType p1, ConstraintType p2){ @@ -41,7 +41,7 @@ public class SingleConstraint extends EinzelElement{ } /* - @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. + @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. public Menge getConstraintPairs(){ Menge ret = new Menge(); ret.add(constraintPair); @@ -50,7 +50,7 @@ public class SingleConstraint extends EinzelElement{ */ public void addConstraint(ConstraintPair toAdd){ - //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); + //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); Type p1 = toAdd.getPair().TA1; Type p2 = toAdd.getPair().TA2; @@ -64,12 +64,12 @@ public class SingleConstraint extends EinzelElement{ //if((p1 instanceof GenericTypeVar))p1 = ((GenericTypeVar)p1).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// //if((p2 instanceof GenericTypeVar))p2 = ((GenericTypeVar)p2).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// - // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. + // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1); //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2); //if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2))) - //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: + //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: // throw new TypinferenzException("Ein Constraint darf nur aus TypePlaceholdern und Reftypes bestehen"); //} //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); diff --git a/src/de/dhbwstuttgart/typeinference/TypeInsertable.java b/src/de/dhbwstuttgart/typeinference/TypeInsertable.java index f4b62ddb..cba61fce 100644 --- a/src/de/dhbwstuttgart/typeinference/TypeInsertable.java +++ b/src/de/dhbwstuttgart/typeinference/TypeInsertable.java @@ -11,11 +11,11 @@ public interface TypeInsertable extends Typeable, IItemWithOffset { public String getIdentifier(); /** - * Errechnet den TypeInsertPoint für das TypeInsertable. - * TypeInsertPoints sollten nur über diese Funktion erstellt werden. + * Errechnet den TypeInsertPoint für das TypeInsertable. + * TypeInsertPoints sollten nur über diese Funktion erstellt werden. * @param tph * @param resultSet - * @return - kann auch null zurückgeben. + * @return - kann auch null zurückgeben. */ public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet); diff --git a/src/de/dhbwstuttgart/typeinference/Typeable.java b/src/de/dhbwstuttgart/typeinference/Typeable.java index 85118f5d..d0b276a9 100755 --- a/src/de/dhbwstuttgart/typeinference/Typeable.java +++ b/src/de/dhbwstuttgart/typeinference/Typeable.java @@ -6,7 +6,7 @@ public interface Typeable { /** * @author Andreas Stadelmeier, a10023 * Jede Expression und jedes Statement muss im Zuge des Typinferenzalgorithmus das Interfece Typable einbinden. - * Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden. + * Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden. * Dabei kann auch eine FreshTypeVariable als Typ vergeben werden. * @param typ Der Typ der Typable-Expression/Statement */ diff --git a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java index 7c5d9f9a..f8fd20c8 100755 --- a/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.java @@ -19,12 +19,12 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; // ino.class.CTypeReconstructionResult.27238.description type=javadoc /** - * Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche + * Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche * Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine - * Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
    - * Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die - * Compiler-API zur�ckgegeben. - * @author J�rg B�uerle + * Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
    + * Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die + * Compiler-API zur�ckgegeben. + * @author J�rg B�uerle * @version $Date: 2013/09/22 20:13:02 $ */ // ino.end @@ -41,7 +41,7 @@ public class TypeinferenceResultSet * Das unifizierte ConstaraintsSet */ private ResultSet unifiedConstraints; - private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert. + private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert. // ino.method.CTypeReconstructionResult.27256.definition public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge constraints, ResultSet unifiedConstraints) @@ -57,7 +57,7 @@ public class TypeinferenceResultSet /** * @author Andreas Stadelmeier, a10023 * Anhand des Syntaxbaums errechnet der Typinferenzalgorithmus ein Set von Constraints. - * Diese Funktion ist nur für automatisierte Tests interessant. + * Diese Funktion ist nur für automatisierte Tests interessant. * Zum abrufen der Unifizierten Constraints siehe getUnifiedConstraints() * @return */ @@ -67,8 +67,8 @@ public class TypeinferenceResultSet /** * @author Andreas Stadelmeier, a10023 - * Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints. - * Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu. + * Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints. + * Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu. * @return Das fertige ConstraintsSet dieser CTypeRecunstructionResult */ public ResultSet getUnifiedConstraints() { @@ -77,7 +77,7 @@ public class TypeinferenceResultSet /** - * Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert. + * Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert. * @author Andreas Stadelmeier, a10023 */ public Type getTypeOfPlaceholder(TypePlaceholder tph){ @@ -86,7 +86,7 @@ public class TypeinferenceResultSet /** * Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse. - * @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist. + * @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist. */ public de.dhbwstuttgart.syntaxtree.Class getInterferedClass(){ return this.ownerOfResultSet; @@ -98,8 +98,8 @@ public class TypeinferenceResultSet } /** - * Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext - * Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet. + * Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext + * Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet. * * @return */ @@ -112,7 +112,7 @@ public class TypeinferenceResultSet } /** - * Startet die Bytecodegenerierung dieser Lösung. + * Startet die Bytecodegenerierung dieser Lösung. * Dabei wird die codegen-Methode der inferierten Klasse mit diesem ResultSet aufgerufen. */ public void codegen(){ diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 3c221d66..3e7b241a 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -7,7 +7,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.unify.Unifier; /** - * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. + * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. * @author janulrich * */ diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index 709b263d..a8fcc060 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -34,7 +34,7 @@ public class UndMenge
    implements KomplexeMenge{ ret = km.cartesianProduct(); }else{ Menge> cartesianProduct = new Menge<>(); - for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: + for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: Menge undElement = new Menge(); undElement.addAll(cloner.deepClone(r)); undElement.addAll(m); diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java index 0c66535e..bb7a9063 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/Assumption.java @@ -11,7 +11,7 @@ public class Assumption { private TypeInsertable typable; /** - * Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden. + * Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden. */ protected Assumption(){ } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java index 89364bc0..7c5c8b84 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java @@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.assumptions; import de.dhbwstuttgart.syntaxtree.FormalParameter; /** - * ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode. + * ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode. * * @author janulrich * diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index f9b4428d..1f7043d2 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** * Eine Sammlung von TypeAssumptions. - * Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben. + * Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben. * @author janulrich * * Es gibt verschiedene Assumptions: @@ -52,7 +52,7 @@ public class TypeAssumptions { /** * Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this" - * @param klassenname - Wert für "this" + * @param klassenname - Wert für "this" */ public TypeAssumptions(){ //this.thisClassName = klassenname; @@ -64,7 +64,7 @@ public class TypeAssumptions { } /** - * Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht. + * Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht. * @param withName * @return */ @@ -80,7 +80,7 @@ public class TypeAssumptions { * Liefert den Typ einer Feldvariable der Klasse inClass * @param withName * @param inClass - * @return null, falls die Klasse kein zugängliches Feld enthält + * @return null, falls die Klasse kein zugängliches Feld enthält */ public Type getTypeOfFieldVar(String withName, Class inClass){ for(FieldAssumption fa : this.getFieldVars(withName)){ @@ -102,7 +102,7 @@ public class TypeAssumptions { } /** - * Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse + * Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse * @param withName * @return */ @@ -121,7 +121,7 @@ public class TypeAssumptions { * Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern. * @param methodName * @param i Die Parameter, welche die Methode verarbeiten soll - * @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können. + * @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können. */ public Menge getMethodAssumptions(String methodName, int parameterCount){ Menge ret = new Menge(); @@ -133,7 +133,7 @@ public class TypeAssumptions { //TODO: Dieser Teil mit der Generierung von FunN-Methoden kann raus, da die FunNInterfaces sich in den Basic-Assumptions befinden sollten. //Falls es sich um die apply-Methode eines FunN-Interface handelt: - //if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen. + //if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen. //CMethodTypeAssumption funNAssumption = new FunN(parameterCount).toCMethodTypeAssumption(); // MethodAssumption funNAssumption = new MethodAssumption(new FunNMethod(parameterCount), new FunNInterface(parameter)); // ret.add(funNAssumption); @@ -144,11 +144,11 @@ public class TypeAssumptions { /** - * Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen. - * In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht. + * Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen. + * In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht. * @param variableName - der Identifier der gesuchten Variablen - * @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht. - * @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt. + * @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht. + * @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt. */ public Type getVarType(String variableName, Class inScope){ //Zuerst die Parameter durchsuchen @@ -193,7 +193,7 @@ public class TypeAssumptions { } /** - * Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind. + * Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind. * @param className * @return */ @@ -280,7 +280,7 @@ public class TypeAssumptions { /** * Kontrolliert den vom Parser gesetzten Typ. - * Erweitert dessen Bezeichnung, wenn nötig. + * Erweitert dessen Bezeichnung, wenn nötig. * @param t * @return null, falls der Typ nicht vorhanden ist. */ @@ -305,14 +305,14 @@ public class TypeAssumptions { match = name.equals(typName); if(match && t instanceof RefType){ RefType tr = (RefType)t; - RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer) + RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer) - //Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben: + //Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben: if(tr.get_ParaList()!=null && tr.getParaList().size()>0){ ret.set_ParaList(tr.getParaList()); } - //Der RefType muss zusätzlich seine Parameter prüfen. + //Der RefType muss zusätzlich seine Parameter prüfen. Menge parameterList = new Menge<>(); if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){ ConstraintType ct = param.TYPE(this, inNode); @@ -334,7 +334,7 @@ public class TypeAssumptions { GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext(); //Der GTV-Kontext von inNOde GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext(); - //Überprüfungen (siehe Dokumentation): + //Überprüfungen (siehe Dokumentation): if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false; }else{ //GTV wurde in Methode oder Feld definiert: @@ -353,7 +353,7 @@ public class TypeAssumptions { } if(t.getName() == null)throw new DebugException(t.toString()); - //Spezialfälle bei char, int, boolean, .... + //Spezialfälle bei char, int, boolean, .... String name = t.getName().toString(); switch(name){ case "int": @@ -374,8 +374,8 @@ public class TypeAssumptions { } /** - * Fügt eine TypAssumption an. - * Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind. + * Fügt eine TypAssumption an. + * Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind. * Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren. * @param classAssumption */ @@ -397,7 +397,7 @@ public class TypeAssumptions { } /** - * Fügt eine Generische Typvariablen den Assumptions hinzu + * Fügt eine Generische Typvariablen den Assumptions hinzu * @param genericTypeVar */ public void addGenericVarAssumption( @@ -410,13 +410,13 @@ public class TypeAssumptions { } public Type checkType(RefType type, SyntaxTreeNode parent) { - ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen + ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen type.setName(t.getType().getName()); //Und diesen auf den Typ anwenden return t.getType(); } /** - * Prüft einen Typ auf das vorhandensein in den BasicAssumptions. + * Prüft einen Typ auf das vorhandensein in den BasicAssumptions. * Dabei werden alle Konstruktoren nach diesem Typ durchsucht. Denn jede Klasse hat einen Konstruktor und der muss in den TypeAssumptions vorhanden sein. * @param t * @return diff --git a/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java b/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java index 4108f1e7..feaa287c 100755 --- a/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java +++ b/src/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.java @@ -4,8 +4,8 @@ import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; /** - * Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird. - * Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst. + * Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird. + * Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst. * @author Andreas Stadelmeier, a10023 * */ diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index 50f9e081..5b2601db 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -17,9 +17,9 @@ import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** - * Ein InsertPoint für Generische Variablen + * Ein InsertPoint für Generische Variablen * Wird beim Einsetzen eines TIP generiert. - * Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile. + * Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile. * @author janulrich * */ @@ -37,7 +37,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint { } /** - * Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert. + * Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert. * @return */ public String getTypeInsertString() { @@ -55,7 +55,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint { @Override public int compareTo(SourcePatchPoint arg0) { int ret = super.compareTo(arg0); - if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden. + if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden. return ret; } @@ -95,7 +95,7 @@ class GenericVarPatch { private Menge usedTPHs; /** - * Fügt eine generische Variable in Form eines Pairs an. + * Fügt eine generische Variable in Form eines Pairs an. * @param p */ public void add(Pair p){ @@ -112,10 +112,10 @@ class GenericVarPatch { } public String getInsertString(ResultSet rs){ - //Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden: + //Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden: /* - * Dies geht mit der momentanen Variante nur für die genericVarDeclarations. - * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, + * Dies geht mit der momentanen Variante nur für die genericVarDeclarations. + * Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind, * welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind. */ Menge tmpGenVars = new Menge<>(); @@ -126,7 +126,7 @@ class GenericVarPatch { } this.genericVarDeclarations = tmpGenVars; - //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: + //Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden: String ret = ""; Iterator it1 = this.genericVarDeclarations.iterator(); boolean bereitsVorhanden = false; @@ -194,7 +194,7 @@ class GenericVarExtendsDeclarationPatch { private Pair genericPair; /** - * Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2 + * Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2 * @param tph * @return */ diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java index 2d4f0fc3..6540249b 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java @@ -14,7 +14,7 @@ import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** - * Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar. + * Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar. * Mehrere TypeInsertPoint's werden in einem TypInsertSet zusammengefasst. * @author janulrich * @@ -41,7 +41,7 @@ public class TypeInsertPoint extends SourcePatchPoint { } /** - * Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein. + * Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein. * @param fileContent - der Quelltext * @param additionalOffset - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden. * @return @@ -59,7 +59,7 @@ public class TypeInsertPoint extends SourcePatchPoint { /** * - * @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde. + * @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde. */ public int getOffset(){ return this.getInsertPoint().getOffset(); @@ -79,7 +79,7 @@ public class TypeInsertPoint extends SourcePatchPoint { } /** - * @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt. + * @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt. */ public IItemWithOffset getInsertPoint(){ return this.point; diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 7e7bb3a0..6510d90e 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -19,9 +19,9 @@ import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; /** - * Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören. - * Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt, - * müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden. + * Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören. + * Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt, + * müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden. * @author janulrich * */ @@ -37,7 +37,7 @@ public class TypeInsertSet { } /** - * Fügt einen TypeInsertPoint dem TypeInsertSet hinzu. + * Fügt einen TypeInsertPoint dem TypeInsertSet hinzu. * @param typeInsertPoint * @return */ @@ -48,7 +48,7 @@ public class TypeInsertSet { } /** - * Fügt nur einen einzelnen TypeInsertPoint in fileContent ein. + * Fügt nur einen einzelnen TypeInsertPoint in fileContent ein. * @param tip * @param fileContent * @return @@ -60,7 +60,7 @@ public class TypeInsertSet { } /** - * Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu + * Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu * @param tip * @param tpj */ @@ -68,8 +68,8 @@ public class TypeInsertSet { /* * Ablauf: * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. - * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) - * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) + * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. @@ -102,7 +102,7 @@ public class TypeInsertSet { /* - // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) + // und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen) for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){ if(!allTPHs.contains(tph)){ allTPHs.add(tph); @@ -144,7 +144,7 @@ public class TypeInsertSet { } /** - * Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein + * Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein * @param fileContent * @return */ @@ -160,7 +160,7 @@ public class TypeInsertSet { /** * * @param node - * @return - null, falls kein InsertPoint für node vorhanden. + * @return - null, falls kein InsertPoint für node vorhanden. */ public TypeInsertPoint getInsertPointFor(TypeInsertable node){ for(TypeInsertPoint point : points){ @@ -179,14 +179,14 @@ public class TypeInsertSet { //Jeder TypeInsertPoint muss auch in equals vorkommen: if(!equals.points.contains(point)) return false; - //... aber nicht öfter als 1x : + //... aber nicht öfter als 1x : if(equals.points.lastIndexOf(point)!=equals.points.indexOf(point))return false; } return true; } /** - * Fügt TypeInsertPoints an + * Fügt TypeInsertPoints an * @param insertPoints */ public void add(Menge insertPoints) { diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java index eef00233..fc9d6705 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitution.java @@ -30,7 +30,7 @@ import de.dhbwstuttgart.typeinference.Pair; * TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser * Klasse werden in der Regel aus * Pair-Objekten erzeugt. - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2006/07/10 11:27:04 $ */ // ino.end @@ -74,7 +74,7 @@ public class CSubstitution // ino.method.CSubstitution.27021.body { if(!(unifier.TA1 instanceof TypePlaceholder)){ - throw new CTypeReconstructionException("Unifier enth�lt keinen Typeplaceholder",unifier.TA1); + throw new CTypeReconstructionException("Unifier enth�lt keinen Typeplaceholder",unifier.TA1); } m_TypeVar = (TypePlaceholder)unifier.TA1; m_Type = unifier.TA2; @@ -84,7 +84,7 @@ public class CSubstitution // ino.method.getType.27024.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the Type. */ // ino.end @@ -99,7 +99,7 @@ public class CSubstitution // ino.method.setType.27027.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param type The Type to set. */ // ino.end @@ -114,7 +114,7 @@ public class CSubstitution // ino.method.getTypeVar.27030.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the TypeVar. */ // ino.end @@ -129,7 +129,7 @@ public class CSubstitution // ino.method.setTypeVar.27033.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @param typeVar The TypeVar to set. */ // ino.end @@ -184,7 +184,7 @@ public class CSubstitution // ino.method.applyUnifier.27048.defdescription type=javadoc /** * Wendet den Unifier auf die rechte Seite dieser Substitution an. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param unifier */ // ino.end @@ -207,8 +207,8 @@ public class CSubstitution // ino.method.applySubstitution.27051.defdescription type=javadoc /** - * Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an. - *
    Author: J�rg B�uerle + * Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an. + *
    Author: J�rg B�uerle * @param type Der zu untersuchende Typ * @param unifierSub Die anzuwendende Substitution * @return Den ermittelnden Typ diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java index e1676902..a93b6eec 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.java @@ -11,7 +11,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; * TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser * Klasse werden in der Regel aus * Pair-Objekten erzeugt. - * @author Martin Pl�micke + * @author Martin Pl�micke * @version $Date: 2006/06/13 10:37:32 $ */ // ino.end @@ -45,7 +45,7 @@ public class CSubstitutionGenVar extends CSubstitution // ino.method.getTypeVar.27070.defdescription type=javadoc /** - * Author: J�rg B�uerle
    + * Author: J�rg B�uerle
    * @return Returns the TypeVar. */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java index e10f62aa..481ca7cf 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.java @@ -12,7 +12,7 @@ import de.dhbwstuttgart.typeinference.Pair; // ino.class.CSubstitutionSet.27471.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/03/27 18:29:34 $ */ // ino.end @@ -71,7 +71,7 @@ public class CSubstitutionSet extends CVectorSet // ino.method.applyUnifier.27487.defdescription type=javadoc /** * Wendet den Unifier auf die rechten Seiten alle Substitutionen an. - *
    Author: J�rg B�uerle + *
    Author: J�rg B�uerle * @param unifier */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java index 96d45191..5fc6146f 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/CVectorSet.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.typeinference.Menge; // ino.class.CMengeSet.27519.description type=javadoc /** - * @author J�rg B�uerle + * @author J�rg B�uerle * @version $Date: 2013/02/07 05:08:51 $ */ // ino.end @@ -85,9 +85,9 @@ public abstract class CVectorSet extends CSet // ino.end /** - * Fügt ein CMengeSet an! - * Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen) - * @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert) + * Fügt ein CMengeSet an! + * Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen) + * @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert) */ // ino.method.unite.27544.definition public void unite(CSet anotherSet) @@ -99,7 +99,7 @@ public abstract class CVectorSet extends CSet } CVectorSet MengeSet = (CVectorSet)anotherSet; - // Elemente der anderen Menge hinzuf�gen: + // Elemente der anderen Menge hinzuf�gen: Iterator it = MengeSet.getIterator(); while(it.hasNext()){ E elem = it.next(); diff --git a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java index 708959ae..56cf9176 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java +++ b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java @@ -11,8 +11,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; // ino.class.FC_TTO.28013.description type=javadoc /** - * Hilfsklasse f�r den Unifizierungsalgorithmus - * @author Martin Pl�micke + * Hilfsklasse f�r den Unifizierungsalgorithmus + * @author Martin Pl�micke * @version $Date: 2013/05/12 14:00:05 $ */ // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index d10f9e41..858f5c35 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -21,7 +21,6 @@ import de.dhbwstuttgart.myexception.SCException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.CRefTypeSet; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType; @@ -46,7 +45,7 @@ import de.dhbwstuttgart.typeinference.UndConstraint; // ino.class.Unify.28049.description type=javadoc /** * Implementierung des Unifizierungsalgorithmus - * @author Martin Pl�micke, Thomas Ott + * @author Martin Pl�micke, Thomas Ott * @version $Date: 2013/05/22 22:23:50 $ */ // ino.end @@ -116,7 +115,7 @@ public class Unify * Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] * oder alle Elemente in der Form [A <. B, C <. D, ..., E in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ public static Menge> unify (Menge E, FC_TTO fc_tto) { @@ -140,7 +139,7 @@ public class Unify } else if(!(p.TA1 instanceof TypePlaceholder) && !(p.TA2 instanceof TypePlaceholder)) { - //Diese Paare können nicht mehr Unifiziert werden. fail. + //Diese Paare können nicht mehr Unifiziert werden. fail. inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten."); return new Menge>(); } @@ -152,8 +151,8 @@ public class Unify if(!Eq1.contains(p)) Eq2.add(p); } - /* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt. - * Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt + /* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt. + * Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt * werden, aus denen dann das kartesische Produkt gebildet wird.*/ Menge>> cartProduktSets = new Menge>>(); for(Pair p : Eq2) @@ -165,7 +164,7 @@ public class Unify p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType(); //HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12 //Dann ist THP <. TPH in Eq2 anstatt in Eq1 - //Muesste mit folgendem if gelöst sein. PL 15-03-17 + //Muesste mit folgendem if gelöst sein. PL 15-03-17 if (p.TA2 instanceof TypePlaceholder) { Eq1.addElement(p); // Eq2.remove(p); @@ -216,7 +215,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } -// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. +// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -315,7 +314,7 @@ public class Unify } else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar) { - //Paar unverändert lassen, wenn eine GenericTypeVar ist + //Paar unverändert lassen, wenn eine GenericTypeVar ist Menge> setofsetofpairs = new Menge>(); Menge vTmp = new Menge(); vTmp.add(p); @@ -357,7 +356,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } - //Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. + //Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -532,7 +531,7 @@ public class Unify unifyErgs.add(unifyErgsElement.firstElement()); } } -// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. +// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht. if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty()) || p_fc.TA2.equals(p_TA1)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05 { @@ -631,7 +630,7 @@ public class Unify } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern + //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); for (Menge> vecvecpair : cartProduktSets){ @@ -688,7 +687,7 @@ public class Unify } //Schritt 5: Einsetzen der Subst Regel - //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. + //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. Menge> changedSets = new Menge>(); Menge> notChangedSets = new Menge>(); for(Menge vecpair : bigCartProductErg) @@ -742,29 +741,29 @@ public class Unify } } - //Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird. + //Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird. Menge> Eq2Set = new Menge>(); - //Schritt 6A: Beginnen mit Schritt 1 bei den geänderten. + //Schritt 6A: Beginnen mit Schritt 1 bei den geänderten. for(Menge vecpair : changedSets) { Menge> unifyErgs = unify(vecpair,fc_tto); - //Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden. + //Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden. Eq2Set.addAll(unifyErgs); } - //Schritt 6B Einfügen der nicht geänderten. + //Schritt 6B Einfügen der nicht geänderten. //Schritt 7: Aussortieren der falschen Sets /* * Durch die Rekursion in Schritt 6A sind die Ergebnisse, welche in 6A dazukommen auf jeden Fall korrekt. - * Es müssen nur die Ergebnisse aus 6B geprüft werden. + * Es müssen nur die Ergebnisse aus 6B geprüft werden. */ for(Menge vecpair : notChangedSets) { - //Überprüfen ob Menge in SolvedForm ist. + //Überprüfen ob Menge in SolvedForm ist. if(hasSolvedForm(vecpair)) //PL 13-05-22 hasSolvedForm angepasst { - //Überprüfung auf FreshTypeVars in den Typen + //Überprüfung auf FreshTypeVars in den Typen boolean foundFresh = false; for(Pair p : vecpair) { @@ -782,14 +781,14 @@ public class Unify } } - //Ergebnis zurückgeben. + //Ergebnis zurückgeben. return Eq2Set; } /** * PL 2014-10-25 * schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind - * Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind. + * Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind. * @param var * @param vars * @param indexe @@ -840,10 +839,10 @@ public class Unify * Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge
    * In diesm fall wird b = Number aus dem Menge entfernt. * - * Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht. + * Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht. * - * @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen. - * @param test - RefType gegen den geprüft werden soll. + * @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen. + * @param test - RefType gegen den geprüft werden soll. */ private static void testUnifyErg(Menge> unifyErgs, RefType test) { @@ -857,7 +856,7 @@ public class Unify vec--; } } - //Gleiche Mengeen löschen + //Gleiche Mengeen löschen for(int i = 0; i < unifyErgs.size(); i++) { Menge p1 = unifyErgs.elementAt(i); @@ -886,13 +885,13 @@ public class Unify } /** - * Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. + * Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. * Beispiel: otherPairTypes = [Integer, Number, Menge], TA1 = TPH a. * return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge]] * * @param TA1 - Der Typ der immer vorne steht * @param otherPairTypes - Die anderen Typen - * @return - Ein Menge> der alle Paare enthält. + * @return - Ein Menge> der alle Paare enthält. */ private static Menge> generateSetOfSetOfPair(Type TA1, Menge otherPairTypes) { @@ -993,7 +992,7 @@ public class Unify //Menge wird geclont, Elemente nicht //Menge Mub = (Menge)ub.clone(); - //Elemente die nicht kleinste obere Schranken sind, werden gel�scht + //Elemente die nicht kleinste obere Schranken sind, werden gel�scht //FUNKTIONIERT NICHT. SIEHE iftest.java PL 08-08-13 for (int i = 0; i < ub.size(); i++) { for (int j = 0; j < ub.size(); j++) { @@ -1049,7 +1048,7 @@ throws MatchException // ino.method.match.28064.body { //PL 05-01-22 - //gibt eine Substitution zur�ck, die den Variablen aus FCtype + //gibt eine Substitution zur�ck, die den Variablen aus FCtype //die Typterme aus tomatch zu ordnet. Es wird davon ausgegangen, dass //FCtype gegen tomatch gematcht werden kann. if (FCtype.getTypeName().equals(tomatch.getTypeName())) { @@ -1093,7 +1092,7 @@ throws MatchException // ino.method.sub_unify.28067.body { //PL 05-01-21 umbenannt in sub_unify - //Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht. + //Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht. // otth: Unifikation - Versuch 1 :-) //Menge FC = fc_tto.getFC(); @@ -1118,7 +1117,7 @@ throws MatchException inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + ""); inferencelog.debug( "--------------------------------------------------"); - // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. + // Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht. //ERASE3 if( P.isEqual() && P.OperatorEqual() ) { @@ -1240,13 +1239,13 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } else { - inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); + inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); break; } } @@ -1297,13 +1296,13 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } else { - inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); + inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!"); break; } } @@ -1374,7 +1373,7 @@ throws MatchException RefType TA1 = null; RefType TA2 = null; - //Hier werden die RefTypes gefüllt. + //Hier werden die RefTypes gefüllt. if(P.TA1 instanceof RefType && P.TA2 instanceof RefType) { TA1 = (RefType)P.TA1; @@ -1396,7 +1395,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1429,7 +1428,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1449,7 +1448,7 @@ throws MatchException } catch( SCException Ex ) { - inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); + inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!"); break; } } @@ -1562,7 +1561,7 @@ throws MatchException } - // Subst --> noch zu pr�fen + // Subst --> noch zu pr�fen if( P.TA1 instanceof TypePlaceholder && P.OperatorEqual() && useSubst) //&& P.TA2 instanceof RefType ) //PL 05-02-09 P.TA@ duerfen auch TypePlaceholder sein /* BEISPIEL: @@ -1716,7 +1715,7 @@ throws MatchException /** * Implementiert die reduceEq Regel des sub_unify - * Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren. + * Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren. */ private static void reduceEq(Menge H, RefType TA1, RefType TA2, Menge TTO) throws SCException { @@ -1738,11 +1737,11 @@ throws MatchException inferencelog.debug("---- Parameteranzahl gleich"); inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)"); - // hier mu� die PERMUTATION erfolgen + // hier mu� die PERMUTATION erfolgen inferencelog.debug("---- PAARBILDUNG "); for( int k = 0; k < L1.size(); k++ ) { - // pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-) + // pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-) //luar 19-04-2007 durch das pi kann reduce2 auch als reduceEq verwendet werden. Wenn das pi durch k ersetzt wird, muss reduceEq entsprechend ausprogrammiert werden. Pair P2 = new Pair( L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) ), L2.elementAt(k), PairOperator.Equal ); inferencelog.debug("---- Paar1: (" + (L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) )).getName() + ", " + (L2.elementAt(k)).getName() + P2.OperatorEqual() + ")"); @@ -2041,7 +2040,7 @@ throws MatchException //LIEGT //erlegigt 06-04-28 Menge res = sub_unify(subunifypair, fc_tto); - if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. inferencelog.debug("HasSolvedForm: "); printMenge("RES_SMALLER", res, 6); ht = MengePair2SubstHashtableMengePair(res); @@ -2157,6 +2156,7 @@ throws MatchException } // ino.end + /* // ino.method.allGreater.29428.definition public static Menge allGreater (BoundedGenericTypeVar ty, Menge FC) // ino.end @@ -2174,6 +2174,7 @@ throws MatchException return ret.getMenge(); } // ino.end + */ // ino.method.allGreater.28094.definition public static Menge allGreater (RefType ty, Menge FC) @@ -2222,7 +2223,7 @@ throws MatchException { // otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten - // z.B. Menge w�re hier gleich wie Menge + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA @@ -2270,7 +2271,7 @@ throws MatchException { // otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt, // bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten - // z.B. Menge w�re hier gleich wie Menge + // z.B. Menge w�re hier gleich wie Menge // z.B. FC = { ( AA <=* CC< DD > ) ,...} // R1 = AA @@ -2308,7 +2309,7 @@ throws MatchException Menge vp = sub_unify(R2vec, fc_tto); printMenge("VP", vp, 6); - if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. //if( isRXSimilarRY( RFC, R2 ) ) { inferencelog.debug("SIMILAR2"); @@ -2405,7 +2406,7 @@ throws MatchException if (o instanceof RefType) {//PL 05-02-09 eingefuegt siehe Methodenkopf if( bMitVorbedingung && isTVinRefType( a, (RefType)o ) ) { - inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName()); + inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName()); return false; } } @@ -2415,7 +2416,7 @@ throws MatchException { // Parameterliste durchgehen Menge vTemp = ((RefType)T).get_ParaList(); - Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs + Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs //sonst werden nicht alle Elemente der Forschleife durchlaufen for( int i = 0; i < vTemp.size(); i++ ) { @@ -2461,7 +2462,7 @@ throws MatchException return true; } } - //Wildcard ergänzt PL 14-12-05 + //Wildcard ergänzt PL 14-12-05 if ( T instanceof ExtendsWildcardType ) { Type Temp = ((ExtendsWildcardType) T).get_ExtendsType(); @@ -2476,7 +2477,7 @@ throws MatchException } } } - //Wildcard ergänzt PL 14-12-05 + //Wildcard ergänzt PL 14-12-05 if ( T instanceof SuperWildcardType ) { Type Temp = ((SuperWildcardType) T).get_SuperType(); @@ -2557,7 +2558,7 @@ throws MatchException { - // otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist + // otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist // Basisklasse suchen Menge tto = fc_tto.getTTO(); @@ -2581,9 +2582,9 @@ throws MatchException } /* - * Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist. - * Sollte ein anderes Element gefunden werden ist Reduce nicht möglich. - * Beispiel: Matrix <. Menge> ist nur durch adapt möglich. + * Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist. + * Sollte ein anderes Element gefunden werden ist Reduce nicht möglich. + * Beispiel: Matrix <. Menge> ist nur durch adapt möglich. */ for(Type t : s) { @@ -2717,7 +2718,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if( n >= vD.size() ) throw F; - // Permuationswert f�r 'n' berechnen + // Permuationswert f�r 'n' berechnen Type TV = (Type)vD.elementAt(n); int nPos = -1; @@ -2749,12 +2750,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: // ino.method.printMengeUnifier.28121.body { //PL 05-01-21 - //Ruft f�r eine Menge von Unifikatoren die Methode + //Ruft f�r eine Menge von Unifikatoren die Methode //printMenge auf for (int i = 0; i < Uni.size(); i++) { inferencelog.debug((i+1) + ". Unifier"); printMenge(strMenge, Uni.elementAt(i), nDebug); - if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. + if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert. inferencelog.debug((i+1) + ". Unifier ist in 'Solved form'!\n"); } else { @@ -2781,7 +2782,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } for( int tt = 0; tt < E.size(); tt++ ) { - //luar 13-03-07 If Else Block gelöscht, da sinnlos. + //luar 13-03-07 If Else Block gelöscht, da sinnlos. if( tt > 0 ) strTemp = strTemp + ",\n" + E.elementAt(tt).toString(); else @@ -2874,7 +2875,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Menge TVec an. - * Rückgabe ist ein ErgebnisMenge + * Rückgabe ist ein ErgebnisMenge */ private static Menge CaptureConversion(Menge TVec, FC_TTO fc_tto) { @@ -2882,7 +2883,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: for(ObjectType t : TVec) { ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto); - //CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen. + //CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen. if(ccT != null) retVec.add(ccT); } @@ -2892,7 +2893,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt die CaptureConversion von einem Typ. * - * @param T - Ãœbergebener Typ, von welchem die CaptureConversion gemacht werden soll. + * @param T - Übergebener Typ, von welchem die CaptureConversion gemacht werden soll. * @param fc_tto - Hilfsklasse. * @return - CC(T) */ @@ -2927,7 +2928,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(t instanceof WildcardType) { FreshWildcardType fwcT = ((WildcardType)t).GetFreshWildcardType(); - //Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt. + //Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt. if(cl.get_ParaList().elementAt(i) instanceof BoundedGenericTypeVar) { BoundedGenericTypeVar bgv = (BoundedGenericTypeVar)cl.get_ParaList().elementAt(i); @@ -2941,7 +2942,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } refT.set_ParaList(ccTypes); } - //Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben. + //Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben. if(ccDone) return refT; else @@ -2958,13 +2959,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Von hier an Greater implementierung 28-03-07 /** - * Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen - * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. + * Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen + * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. */ /** - * Erzeugt alle Typen die greater sind als T. Gibt diese zurück. - * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Erzeugt alle Typen die greater sind als T. Gibt diese zurück. + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greater(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 @@ -2989,22 +2990,22 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //greater1 Erzeugen Menge greater1Erg = greater1(T,fc_tto); - //Reflexivität, deshalb T hinzufügen. + //Reflexivität, deshalb T hinzufügen. if(!greater1Erg.contains(T)) greater1Erg.add(T); - //Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen. + //Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen. for(ObjectType t : greater1Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen + //Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen Menge greater2Erg = greater2(greater1Erg,fc_tto); for(ObjectType t : greater2Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen + //Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen Menge greater3Erg = greater3(greater2Erg,fc_tto); for(ObjectType t : greater3Erg) if(!retVec.contains(t)) @@ -3015,7 +3016,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greater1 Schritt von greater. - * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greater1(ObjectType T, FC_TTO fc_tto) { @@ -3053,8 +3054,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Ãœberladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter - * welcher für die rekursion erforderlich ist mit übergeben muss. + * Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + * welcher für die rekursion erforderlich ist mit übergeben muss. */ private static Menge> cartProductType (Menge> vec) { @@ -3063,7 +3064,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt das Kartesische Product von mehreren Mengeen von Typen. - * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf. + * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf. */ private static Menge> cartProductType (Menge> vec, int index) { @@ -3098,8 +3099,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Ãœberladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter - * welcher für die rekursion erforderlich ist mit übergeben muss. + * Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + * welcher für die rekursion erforderlich ist mit übergeben muss. */ private static Menge> cartProductPair (Menge> vec) { @@ -3108,7 +3109,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * Erzeugt das Kartesische Product von mehreren Mengeen von Paaren. - * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf. + * Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf. */ private static Menge> cartProductPair (Menge> vec, int index) { @@ -3168,7 +3169,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: /** * greaterArg Schritt von greater - * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt + * Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt */ private static Menge greaterArg(Type T, FC_TTO fc_tto) { @@ -3224,7 +3225,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return new Menge(); */ - //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 + //Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31 else if(T instanceof TypePlaceholder) retVec.add(T); //Diese Abfrage verhindert, dass bei FunN Wildcard-Typen generiert werden //PL 13-05-22 @@ -3253,7 +3254,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: - * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. + * Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen. * Wenn das Funktioniert, dann ist der Typ auf der rechten Seite auch greater. * */ Hashtable ht = new Hashtable(); @@ -3278,7 +3279,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: RefType TA2neu = ((RefType)p.TA2).clone(); SubstHashtableGeneric(TA2neu,ht); - //TA2neu ist greater als T. Einfügen in retVec + //TA2neu ist greater als T. Einfügen in retVec if(!retVec.contains(TA2neu)) retVec.add(TA2neu); } @@ -3308,12 +3309,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Von hier an Smaller implementierung luar 28-03-07 /** - * Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen - * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. + * Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen + * im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden. */ /** - * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. + * Erzeugt alle Typen die smaller sind als T. Gibt diese zurück. */ private static Menge smaller(ObjectType T, FC_TTO fc_tto) //an die Aenderungen im Skript anpassen 07-11-03 @@ -3349,18 +3350,18 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(!smaller12Erg.contains(T)) smaller12Erg.add(T); - //Ergebnise in retVec einfügen. Doppelte werden gelöscht. + //Ergebnise in retVec einfügen. Doppelte werden gelöscht. for(ObjectType t : smaller12Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. + //Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen. Menge smaller3Erg = smaller3(smaller12Erg,fc_tto); for(ObjectType t : smaller3Erg) if(!retVec.contains(t)) retVec.add(t); - //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. + //Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen. Menge smaller4Erg = smaller4(smaller3Erg); for(ObjectType t : smaller4Erg) if(!retVec.contains(t)) @@ -3409,7 +3410,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); if(T instanceof ExtendsWildcardType) { - //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. + //Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen. ExtendsWildcardType exT = (ExtendsWildcardType)T; Menge smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto); for(ObjectType t : smallerTypes) @@ -3420,7 +3421,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } else if(T instanceof SuperWildcardType) { - //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. + //Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen. SuperWildcardType suT = (SuperWildcardType)T; Menge greaterTypes = greater0(suT.get_SuperType(),fc_tto); for(ObjectType t : greaterTypes) @@ -3459,7 +3460,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: Menge retVec = new Menge(); /* * luar 02-05-07: Beschreibung der Funktion: - * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. + * Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen. * Wenn das Funktioniert, dann ist der Typ auf der linken Seite auch smaller. * */ Hashtable ht = new Hashtable(); @@ -3482,7 +3483,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: //Macht hat funktioniert. In Linker Seite Typen substituieren RefType TA1neu = ((RefType)p.TA1).clone(); SubstHashtableGeneric(TA1neu,ht); - //TA1neu ist smaller als T. Einfügen in retVec + //TA1neu ist smaller als T. Einfügen in retVec if(!retVec.contains(TA1neu)) retVec.add(TA1neu); } @@ -3532,12 +3533,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } /** - * Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält. + * Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält. */ private static boolean DelFreshWildcardTypeVar(Type T) { //luar 29-05-2007 - //Ãœberprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist. + //Überprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist. if(T instanceof RefType) { RefType refT = (RefType)T; @@ -3546,7 +3547,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: if(DelFreshWildcardTypeVar(t)) return true; } - //Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen. + //Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen. if(T instanceof ExtendsWildcardType) return DelFreshWildcardTypeVar(((ExtendsWildcardType)T).get_ExtendsType()); diff --git a/test/bytecode/BytecodeTester.java b/test/bytecode/BytecodeTester.java deleted file mode 100644 index a8ed0eaf..00000000 --- a/test/bytecode/BytecodeTester.java +++ /dev/null @@ -1,45 +0,0 @@ -package bytecode; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.bytecode.ClassFile; -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.myexception.JVMCodeException; -import junit.framework.TestCase; - -public class BytecodeTester{ - - //Web-Disassembler: http://hakurai.github.io/javap.js/web/ - - public static final String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - - public static Menge testCodegen(String sourceCode){ - MyCompilerAPI compiler = MyCompiler.getAPI(); - compiler.parse(sourceCode); - Menge ret = null; - try { - ret = compiler.codeGeneration(null); - } catch (NullPointerException | JVMCodeException e) { - e.printStackTrace(); - TestCase.fail(); - } - TestCase.assertTrue("Es wurden keine ClassFiles generiert",ret != null && ret.size()>0); - return ret; - } - - public static Menge readFileAndTestCodegen(String fileName) throws IOException{ - return testCodegen(getFileContent(rootDirectory + fileName)); - } - - private static String getFileContent(String path)throws IOException - { - byte[] encoded = Files.readAllBytes(Paths.get(path)); - return StandardCharsets.UTF_8.decode(ByteBuffer.wrap(encoded)).toString(); - } -} diff --git a/test/bytecode/EmptyClassTest.java b/test/bytecode/EmptyClassTest.java deleted file mode 100644 index c31f510a..00000000 --- a/test/bytecode/EmptyClassTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package bytecode; - -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import org.junit.Test; - -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class EmptyClassTest extends TestCase { - - @Test - public void test(){ - BytecodeTester.testCodegen("class EmptyClass{}"); - } - -} diff --git a/test/bytecode/FieldTest.jav b/test/bytecode/FieldTest.jav deleted file mode 100644 index 57f1614a..00000000 --- a/test/bytecode/FieldTest.jav +++ /dev/null @@ -1,6 +0,0 @@ -class FieldTest{ - String var; - String methode(String para1){ - return var; - } -} \ No newline at end of file diff --git a/test/bytecode/GeneralTest.java b/test/bytecode/GeneralTest.java deleted file mode 100644 index e9c9c12e..00000000 --- a/test/bytecode/GeneralTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package bytecode; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import org.junit.Test; - -import de.dhbwstuttgart.bytecode.ClassFile; -import sun.misc.IOUtils; - -public class GeneralTest extends TestCase{ - @Test - public void test(){ - Menge cfs = null; - try { - cfs = BytecodeTester.readFileAndTestCodegen("FieldTest.jav"); - } catch (IOException e) { - e.printStackTrace(); - fail(); - } - assertTrue("Es darf nur eine ClassFile erstellt werden", cfs.size()==1); - try { - FileOutputStream output = new FileOutputStream(new File(BytecodeTester.rootDirectory+"FieldTest.class")); - output.write(cfs.firstElement().getBytecode()); - } catch (IOException e) { - e.printStackTrace(); - fail(); - } - } - -} diff --git a/test/bytecode/MethodTest.java b/test/bytecode/MethodTest.java deleted file mode 100644 index 6df9d419..00000000 --- a/test/bytecode/MethodTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package bytecode; - -import org.junit.Test; - -public class MethodTest { - - @Test - public void test(){ - BytecodeTester.testCodegen("class MethodTest{ public void method(){} }"); - } - -} diff --git a/test/mycompiler/test/AllTests.java b/test/mycompiler/test/AllTests.java deleted file mode 100755 index c4e1235a..00000000 --- a/test/mycompiler/test/AllTests.java +++ /dev/null @@ -1,41 +0,0 @@ -package mycompiler.test; - -import junit.framework.Test; -import junit.framework.TestSuite; -import mycompiler.test.blocks.AllTestsBlocks; -import mycompiler.test.complexTypes.AllTestsComplexTypes; -import mycompiler.test.generics.AllTestsGenerics; -import mycompiler.test.inferenceByCharacteristic.AllTestsInferenceByCharacteristic; -import mycompiler.test.javaConcepts.inheritance.AllTestsInheritance; -import mycompiler.test.javaConcepts.overloading.AllTestsOverloading; -import mycompiler.test.javaConcepts.staticAccess.AllTestsStaticAccess; -import mycompiler.test.operators.AllTestsOperators; -import mycompiler.test.primitiveTypes.AllTestsPrimitiveTypes; -import mycompiler.test.trivial.AllTestsTrivial; - -import de.dhbwstuttgart.logger.xml.DOMConfigurator; - -public class AllTests { - - - public static Test suite() { -// DOMConfigurator.configure("test/log4jTesting.xml"); -// DOMConfigurator.configure("log4j.xml"); - TestSuite suite = new TestSuite("Test for mycompiler.test"); - //$JUnit-BEGIN$ - suite.addTest(AllTestsBlocks.suite()); - suite.addTest(AllTestsInferenceByCharacteristic.suite()); - suite.addTest(AllTestsInheritance.suite()); - suite.addTest(AllTestsOverloading.suite()); - suite.addTest(AllTestsOperators.suite()); - suite.addTest(AllTestsPrimitiveTypes.suite()); - suite.addTest(AllTestsTrivial.suite()); - suite.addTest(AllTestsGenerics.suite()); - suite.addTest(AllTestsStaticAccess.suite()); - suite.addTest(AllTestsComplexTypes.suite()); - - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/LambdaInterferenzTest.java b/test/mycompiler/test/LambdaInterferenzTest.java deleted file mode 100755 index 7fb0ac2d..00000000 --- a/test/mycompiler/test/LambdaInterferenzTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package mycompiler.test; - -import junit.framework.Test; -import junit.framework.TestSuite; - - -public class LambdaInterferenzTest { - - public static Test suite() { - - TestSuite suite = new TestSuite("Test for 'Complete Typeinference in Java 8'"); - - return suite; - } -} diff --git a/test/mycompiler/test/Log4jWrapper.java b/test/mycompiler/test/Log4jWrapper.java deleted file mode 100755 index 715dedb2..00000000 --- a/test/mycompiler/test/Log4jWrapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package mycompiler.test; - -import de.dhbwstuttgart.logger.xml.DOMConfigurator; - -/** - * needed to assure one-time execution of configure script - * @author tom - * - */ -public class Log4jWrapper { - - private static Log4jWrapper instance=null; - private static boolean log4jInit=false; - - private Log4jWrapper() { - - } - - public static Log4jWrapper getInstance() { - if (instance==null) { - instance=new Log4jWrapper(); - } - return instance; - } - - public void configureLog4j() { - if (!this.log4jInit){ - DOMConfigurator.configure("test/log4jTesting.xml"); - DOMConfigurator.configure("log4j.xml"); - this.log4jInit=true; - } - - } - -} diff --git a/test/mycompiler/test/blocks/AllTestsBlocks.java b/test/mycompiler/test/blocks/AllTestsBlocks.java deleted file mode 100755 index 7e07e922..00000000 --- a/test/mycompiler/test/blocks/AllTestsBlocks.java +++ /dev/null @@ -1,23 +0,0 @@ -package mycompiler.test.blocks; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsBlocks { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for mycompiler.test.blocks"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestWhileStmt.class); - suite.addTestSuite(TestUninitializedVariable.class); - suite.addTestSuite(TestForStmt.class); - suite.addTestSuite(TestInferenceAcrossBlocks.class); - suite.addTestSuite(TestIfStmt.class); - suite.addTestSuite(TestSimpleVariable.class); - suite.addTestSuite(TestSimpleBlocks.class); - suite.addTestSuite(TestUndeterminedReturnNegative.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/blocks/TestForStmt.jav b/test/mycompiler/test/blocks/TestForStmt.jav deleted file mode 100755 index a12ba6c8..00000000 --- a/test/mycompiler/test/blocks/TestForStmt.jav +++ /dev/null @@ -1,32 +0,0 @@ - -public class TestForStmt { - - public void m1() { - - i; - for (i=0;i<5;i++) { - - } - } - - public void m2() { - i; - for (i=0;i<5;i++) { - j; - j="abc"; - } - j; - j=3; - } - - public m3() { - i; - for (i=0;i<5;i++) { - j; - for (j=0;j<5;j++) { - return i==j; - } - } - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestForStmt.java b/test/mycompiler/test/blocks/TestForStmt.java deleted file mode 100755 index 587992cc..00000000 --- a/test/mycompiler/test/blocks/TestForStmt.java +++ /dev/null @@ -1,75 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.BlockExpect; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * tests correct identification of for-stmt - */ - -public class TestForStmt extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestForStmt"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestForStmt(String name) { - super(name,TestForStmt.JAVPATH+TestForStmt.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testForStmt = new ClassExpect(TestForStmt.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - VarExpect var1 = new VarExpect("i",new RefType("java.lang.Integer",-1)); - //short not inferenced - //var1.addExpectedType(new RefType("java.lang.Short",-1)); - m1.getBlock().addLocalVar(var1); - - MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - VarExpect var20 = new VarExpect("i",new RefType("java.lang.Integer",-1)); - //short not inferenced - //var20.addExpectedType(new RefType("java.lang.Short",-1)); - VarExpect var21 = new VarExpect("j",new RefType("java.lang.String",-1)); - VarExpect var22 = new VarExpect("j",new RefType("java.lang.Integer",-1)); - //short not inferenced - //var22.addExpectedType(new RefType("java.lang.Short",-1)); - //var22.addExpectedType(new RefType("java.lang.Long",-1)); - m2.getBlock().addLocalVar(var20); - BlockExpect for2 = new BlockExpect("1","1"); - for2.addLocalVar(var21); - m2.getBlock().addBlock(for2); - m2.getBlock().addLocalVar(var22); - - MethodExpect m3 = new MethodExpect("m3", new RefType("java.lang.Boolean",-1)); - VarExpect var30 = new VarExpect("i",new RefType("java.lang.Integer",-1)); - //short not inferenced - //var30.addExpectedType(new RefType("java.lang.Short",-1)); - VarExpect var31 = new VarExpect("j",new RefType("java.lang.Integer",-1)); - //short not inferenced - //var31.addExpectedType(new RefType("java.lang.Short",-1)); - //var31.addExpectedType(new RefType("java.lang.Long",-1)); - m3.getBlock().addLocalVar(var30); - BlockExpect for3 = new BlockExpect("1","1"); - for3.addLocalVar(var31); - m3.getBlock().addBlock(for3); - m3.getBlock().addLocalVar(var22); - - - testForStmt.addMethod(m1); - testForStmt.addMethod(m2); - testForStmt.addMethod(m3); - return new Expectation(testForStmt); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestIfStmt.jav b/test/mycompiler/test/blocks/TestIfStmt.jav deleted file mode 100755 index de6e7e12..00000000 --- a/test/mycompiler/test/blocks/TestIfStmt.jav +++ /dev/null @@ -1,27 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; - -public class TestIfStmt { - - public m1() { - a; - if (a) { - return a; - } - else - return false; - } - - public m2() { - a; - c; - a = new Menge(); - if (a.isEmpty()) { - c="empty"; - } - else if (a.size()==1) { - c="almost empty"; - } - else - return a; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestIfStmt.java b/test/mycompiler/test/blocks/TestIfStmt.java deleted file mode 100755 index 442bd0f0..00000000 --- a/test/mycompiler/test/blocks/TestIfStmt.java +++ /dev/null @@ -1,74 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * this test checks correct identification of if-stmt and block usage - */ - -public class TestIfStmt extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestIfStmt"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestIfStmt(String name) { - super(name,TestIfStmt.JAVPATH+TestIfStmt.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testIfStmt = new ClassExpect(TestIfStmt.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Boolean",-1)); - VarExpect var1 = new VarExpect("a",new RefType("java.lang.Boolean",-1)); - //short not inferenced - //var1.addExpectedType(new RefType("java.lang.Short",-1)); - m1.getBlock().addLocalVar(var1); - - Menge ret = new Menge(); - ret.add(new RefType("java.lang.Integer",-1)); - MethodExpect m2 = new MethodExpect("m2",new RefType("de.dhbwstuttgart.typeinference.Menge",ret,-1)); - - Menge ret1 = new Menge(); - ret1.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge ret2 = new Menge(); - ret2.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - m2.addReturntype(new RefType("de.dhbwstuttgart.typeinference.Menge",ret1,-1)); - m2.addReturntype(new RefType("de.dhbwstuttgart.typeinference.Menge",ret2,-1)); - - Menge a_param = new Menge(); - a_param.add(new RefType("java.lang.Integer",-1)); - VarExpect var21 = new VarExpect("a",new RefType("de.dhbwstuttgart.typeinference.Menge",a_param,-1)); - Menge a_param1 = new Menge(); - a_param1.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge a_param2 = new Menge(); - a_param2.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - var21.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",a_param1,-1)); - var21.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",a_param2,-1)); - - VarExpect var22 = new VarExpect("c",new RefType("java.lang.String",-1)); - - m2.getBlock().addLocalVar(var21); - m2.getBlock().addLocalVar(var22); - - testIfStmt.addMethod(m1); - testIfStmt.addMethod(m2); - return new Expectation(testIfStmt); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav b/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav deleted file mode 100755 index 508f0aaf..00000000 --- a/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.jav +++ /dev/null @@ -1,12 +0,0 @@ -public class TestInferenceAcrossBlocks{ - - public m(a){ - if(a==true){ - return 3; - } - else { - x; - return x; - } - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.java b/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.java deleted file mode 100755 index 8bccc6f3..00000000 --- a/test/mycompiler/test/blocks/TestInferenceAcrossBlocks.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.BlockExpect; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 18-04-08 - * @author - * - * this test checks correct inference across different block with respect to local variables - */ - -public class TestInferenceAcrossBlocks extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceAcrossBlocks"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestInferenceAcrossBlocks(String name) { - super(name,TestInferenceAcrossBlocks.JAVPATH+TestInferenceAcrossBlocks.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceAcrossBlocks = new ClassExpect(TestInferenceAcrossBlocks.TESTEDCLASSNAME); - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("java.lang.Integer",-1)); - m.addParameter(new VarExpect("a", new RefType("java.lang.Boolean",-1))); - BlockExpect elseBlock = new BlockExpect(m.getBlock().getBlockID(),"2"); - elseBlock.addLocalVar(new VarExpect("x", new RefType("java.lang.Integer",-1))); - m.getBlock().addBlock(elseBlock); - - - testInferenceAcrossBlocks.addMethod(m); - return new Expectation(testInferenceAcrossBlocks); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestSimpleBlocks.jav b/test/mycompiler/test/blocks/TestSimpleBlocks.jav deleted file mode 100755 index 25d97b97..00000000 --- a/test/mycompiler/test/blocks/TestSimpleBlocks.jav +++ /dev/null @@ -1,18 +0,0 @@ -public class TestSimpleBlocks{ - - public m(a){ - { - d; - d = 'a'; - { - c; - c = d; - } - { - c; - c = d==a; - } - } - return a; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestSimpleBlocks.java b/test/mycompiler/test/blocks/TestSimpleBlocks.java deleted file mode 100755 index 11221b7d..00000000 --- a/test/mycompiler/test/blocks/TestSimpleBlocks.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.BlockExpect; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 18-04-08 - * @author - * - * this test checks correct detection of scope of variables in simple blocks without a language specific statement - */ - -public class TestSimpleBlocks extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestSimpleBlocks"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestSimpleBlocks(String name) { - super(name,TestSimpleBlocks.JAVPATH+TestSimpleBlocks.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleBlocks = new ClassExpect(TestSimpleBlocks.TESTEDCLASSNAME); - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("java.lang.Character",-1)); - m.addParameter(new VarExpect("a", new RefType("java.lang.Character",-1))); - BlockExpect outerBlock = new BlockExpect(m.getBlock().getBlockID(),"1"); - outerBlock.addLocalVar(new VarExpect("d",new RefType("java.lang.Character",-1))); - - - BlockExpect firstBlock = new BlockExpect(outerBlock.getBlockID(),"1"); - firstBlock.addLocalVar(new VarExpect("c", new RefType("java.lang.Character",-1))); - - BlockExpect secondBlock = new BlockExpect(outerBlock.getBlockID(),"2"); - secondBlock.addLocalVar(new VarExpect("c", new RefType("java.lang.Boolean",-1))); - - outerBlock.addBlock(firstBlock); - outerBlock.addBlock(secondBlock); - - m.getBlock().addBlock(outerBlock); - - testSimpleBlocks.addMethod(m); - - return new Expectation(testSimpleBlocks); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestSimpleVariable.jav b/test/mycompiler/test/blocks/TestSimpleVariable.jav deleted file mode 100755 index b3d3ba24..00000000 --- a/test/mycompiler/test/blocks/TestSimpleVariable.jav +++ /dev/null @@ -1,7 +0,0 @@ -public class TestSimpleVariable { - - public m() { - c; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestSimpleVariable.java b/test/mycompiler/test/blocks/TestSimpleVariable.java deleted file mode 100755 index 26f4d2c3..00000000 --- a/test/mycompiler/test/blocks/TestSimpleVariable.java +++ /dev/null @@ -1,43 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 18-04-08 - * @author - * - * this test checks correct detection of a single variable in root block - * TODO: maybe move to trival? - */ - -public class TestSimpleVariable extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestSimpleVariable"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestSimpleVariable(String name) { - super(name,TestSimpleVariable.JAVPATH+TestSimpleVariable.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleVariable = new ClassExpect(TestSimpleVariable.TESTEDCLASSNAME); - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("void",-1)); - VarExpect var = new VarExpect("c",new TypePlaceholderExpect("a")); - m.getBlock().addLocalVar(var); - - testSimpleVariable.addMethod(m); - return new Expectation(testSimpleVariable); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestSwitchStmt.jav b/test/mycompiler/test/blocks/TestSwitchStmt.jav deleted file mode 100755 index 1b9f689b..00000000 --- a/test/mycompiler/test/blocks/TestSwitchStmt.jav +++ /dev/null @@ -1,11 +0,0 @@ -public class TestSwitchStmt { - - public m(a) { - switch (a) { - case 1: return a++; break; - case 2: return a--; break; - default: return a; - } - - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestTryCatchBlock.jav b/test/mycompiler/test/blocks/TestTryCatchBlock.jav deleted file mode 100755 index 59951045..00000000 --- a/test/mycompiler/test/blocks/TestTryCatchBlock.jav +++ /dev/null @@ -1,14 +0,0 @@ -public class TestTryCatchBlock { - - public m() { - - try { - return new TestTryCatchBlock(); - } - catch (e) { - return null; - } - - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav b/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav deleted file mode 100755 index 166cd973..00000000 --- a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.jav +++ /dev/null @@ -1,12 +0,0 @@ - -public class TestUndeterminedReturnNegative { - - public m1(a) { - if (a) { - a=false; - } - else - return false; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java b/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java deleted file mode 100755 index 490c2721..00000000 --- a/test/mycompiler/test/blocks/TestUndeterminedReturnNegative.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 16-05-08 - * @author - * - * this test checks a scenario where undefined return state is given by condition dependant retun statment# - * Test expects an exception thrown - */ -public class TestUndeterminedReturnNegative extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestUndeterminedReturnNegative"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestUndeterminedReturnNegative(String name) { - super(name,TestUndeterminedReturnNegative.JAVPATH+TestUndeterminedReturnNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testUndeterminedReturnNegative = new ClassExpect(TestUndeterminedReturnNegative.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Boolean",-1)); - //m1.addReturntype(new RefType("void",-1)); - VarExpect var1 = new VarExpect("a",new RefType("java.lang.Boolean",-1)); - m1.addParameter(var1); - //short not inferenced - //var1.addExpectedType(new RefType("java.lang.Short",-1)); - - - testUndeterminedReturnNegative.addMethod(m1); - - Expectation ret = new Expectation(testUndeterminedReturnNegative); - ret.addException(new Exception()); //returntype undefined, one case return = boolean, other case return=void - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestUninitializedVariable.jav b/test/mycompiler/test/blocks/TestUninitializedVariable.jav deleted file mode 100755 index 793bbbe8..00000000 --- a/test/mycompiler/test/blocks/TestUninitializedVariable.jav +++ /dev/null @@ -1,11 +0,0 @@ -public class TestUninitializedVariable { - - public void m1() { - a; - a++; - } - - void m2(T a) { - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestUninitializedVariable.java b/test/mycompiler/test/blocks/TestUninitializedVariable.java deleted file mode 100755 index be8d1616..00000000 --- a/test/mycompiler/test/blocks/TestUninitializedVariable.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 29-05-08 - * @author - * - * this test checks a scenario where an uninitialized variable is incremented, which should be discarded by the compiler - * Test expects an exception thrown - */ -public class TestUninitializedVariable extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestUninitializedVariable"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestUninitializedVariable(String name) { - super(name,TestUninitializedVariable.JAVPATH+TestUninitializedVariable.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testUninitializedVariable = new ClassExpect(TestUninitializedVariable.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - VarExpect var1 = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m1.getBlock().addLocalVar(var1); - - - testUninitializedVariable.addMethod(m1); - - Expectation ret = new Expectation(testUninitializedVariable); - ret.addException(new Exception()); //variable used not initialized - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestWhileStmt.jav b/test/mycompiler/test/blocks/TestWhileStmt.jav deleted file mode 100755 index 1debca80..00000000 --- a/test/mycompiler/test/blocks/TestWhileStmt.jav +++ /dev/null @@ -1,9 +0,0 @@ -public class TestWhileStmt { - - public m1() { - i; - while (true) - i++; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/blocks/TestWhileStmt.java b/test/mycompiler/test/blocks/TestWhileStmt.java deleted file mode 100755 index 28f20741..00000000 --- a/test/mycompiler/test/blocks/TestWhileStmt.java +++ /dev/null @@ -1,43 +0,0 @@ -package mycompiler.test.blocks; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 18-04-08 - * @author - * - * simply verifies while-stmt recognition - */ - -public class TestWhileStmt extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestWhileStmt"; - private final static String JAVPATH="test/mycompiler/test/blocks/"; - - public TestWhileStmt(String name) { - super(name,TestWhileStmt.JAVPATH+TestWhileStmt.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testWhileStmt = new ClassExpect(TestWhileStmt.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - VarExpect var1 = new VarExpect("i",new RefType("java.lang.Integer",-1)); - //var1.addExpectedType(new RefType("java.lang.Short",-1)); - //var1.addExpectedType(new RefType("java.lang.Long",-1)); - m1.getBlock().addLocalVar(var1); - - testWhileStmt.addMethod(m1); - return new Expectation(testWhileStmt); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/AllTestsComplexTypes.java b/test/mycompiler/test/complexTypes/AllTestsComplexTypes.java deleted file mode 100755 index 31cf867b..00000000 --- a/test/mycompiler/test/complexTypes/AllTestsComplexTypes.java +++ /dev/null @@ -1,19 +0,0 @@ -package mycompiler.test.complexTypes; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsComplexTypes { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for mycompiler.test.complexTypes"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestOwnClassMethod.class); - suite.addTestSuite(TestOwnClassMember.class); - suite.addTestSuite(TestStandardLibMethod.class); - suite.addTestSuite(TestStandardLibInheritanceInference.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/complexTypes/TestOwnClassMember.jav b/test/mycompiler/test/complexTypes/TestOwnClassMember.jav deleted file mode 100755 index fa73127e..00000000 --- a/test/mycompiler/test/complexTypes/TestOwnClassMember.jav +++ /dev/null @@ -1,9 +0,0 @@ -public class TestOwnClassMember { - - Integer a; - - public void m1(b) { - b += a; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestOwnClassMember.java b/test/mycompiler/test/complexTypes/TestOwnClassMember.java deleted file mode 100755 index 60fceee0..00000000 --- a/test/mycompiler/test/complexTypes/TestOwnClassMember.java +++ /dev/null @@ -1,41 +0,0 @@ -package mycompiler.test.complexTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 25-04-08 - * @author - * - * test checks for correct inference using a class member variable - */ -public class TestOwnClassMember extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="TestOwnClassMember"; - private final static String JAVPATH="test/mycompiler/test/complexTypes/"; - - public TestOwnClassMember(String name) { - super(name,TestOwnClassMember.JAVPATH+TestOwnClassMember.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOwnClassMember = new ClassExpect(TestOwnClassMember.TESTEDCLASSNAME); - //Member - testOwnClassMember.addMember(new VarExpect("a", new RefType("java.lang.Integer",-1))); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - m1.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - - - - testOwnClassMember.addMethod(m1); - - return new Expectation(testOwnClassMember); - } - } \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestOwnClassMethod.jav b/test/mycompiler/test/complexTypes/TestOwnClassMethod.jav deleted file mode 100755 index e3d2a925..00000000 --- a/test/mycompiler/test/complexTypes/TestOwnClassMethod.jav +++ /dev/null @@ -1,12 +0,0 @@ -public class TestOwnClassMethod { - - Integer a; - - public void m1(b) { - a += b; - } - - public void m2(c, d) { - c.m1(d); - } - } \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestOwnClassMethod.java b/test/mycompiler/test/complexTypes/TestOwnClassMethod.java deleted file mode 100755 index 19eaad00..00000000 --- a/test/mycompiler/test/complexTypes/TestOwnClassMethod.java +++ /dev/null @@ -1,47 +0,0 @@ -package mycompiler.test.complexTypes; - - - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * tests inference using return statement of a member-method - */ -public class TestOwnClassMethod extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="TestOwnClassMethod"; - private final static String JAVPATH="test/mycompiler/test/complexTypes/"; - - public TestOwnClassMethod(String name) { - super(name,TestOwnClassMethod.JAVPATH+TestOwnClassMethod.TESTEDCLASSNAME + ".jav"); - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOwnClassMethod = new ClassExpect(TestOwnClassMethod.TESTEDCLASSNAME); - //Member - testOwnClassMethod.addMember(new VarExpect("a", new RefType("java.lang.Integer",-1))); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - m1.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - m2.addParameter(new VarExpect("c", new RefType(TestOwnClassMethod.TESTEDCLASSNAME,-1))); - m2.addParameter(new VarExpect("d", new RefType("java.lang.Integer",-1))); - - - testOwnClassMethod.addMethod(m1); - testOwnClassMethod.addMethod(m2); - - return new Expectation(testOwnClassMethod); - } - } \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav b/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav deleted file mode 100755 index deafc13a..00000000 --- a/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.jav +++ /dev/null @@ -1,12 +0,0 @@ -import java.io.OutputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.BufferedOutputStream; -import java.sql.Connection; - - -class TestStandardLibInheritanceInference{ - foo(x){ - x.close(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.java b/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.java deleted file mode 100755 index 060322cb..00000000 --- a/test/mycompiler/test/complexTypes/TestStandardLibInheritanceInference.java +++ /dev/null @@ -1,44 +0,0 @@ -package mycompiler.test.complexTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 25-05-08 - * @author - * - * inference of std-types according to import statements with respect to inheritance structure - */ - -public class TestStandardLibInheritanceInference extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="TestStandardLibInheritanceInference"; - private final static String JAVPATH="test/mycompiler/test/complexTypes/"; - - public TestStandardLibInheritanceInference(String name) { - super(name,TestStandardLibInheritanceInference.JAVPATH+TestStandardLibInheritanceInference.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testStandardLibInheritanceInference = new ClassExpect(TESTEDCLASSNAME); - - //Methods - MethodExpect foo = new MethodExpect("foo",new RefType("void",-1)); - VarExpect x = new VarExpect("x",new RefType("java.io.OutputStream",-1)); - x.addExpectedType(new RefType("java.io.BufferedOutputStream",-1)); - x.addExpectedType(new RefType("java.io.InputStream",-1)); - x.addExpectedType(new RefType("java.io.ByteArrayOutputStream",-1)); - x.addExpectedType(new RefType("java.sql.Connection",-1)); - foo.addParameter(x); - - testStandardLibInheritanceInference.addMethod(foo); - - return new Expectation(testStandardLibInheritanceInference); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestStandardLibMember.jav b/test/mycompiler/test/complexTypes/TestStandardLibMember.jav deleted file mode 100755 index c54b0b14..00000000 --- a/test/mycompiler/test/complexTypes/TestStandardLibMember.jav +++ /dev/null @@ -1,11 +0,0 @@ -import java.lang.System; -import java.io.PrintStream; - -public class TestStandardLibMember { - - public m1() { - a; - a=System.out; - a.println(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav b/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav deleted file mode 100755 index 3f01ac70..00000000 --- a/test/mycompiler/test/complexTypes/TestStandardLibMethod.jav +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -public class TestStandardLibMethod { - - public m1() { - a; - a = new HashMap(); - a.put("2",-1); - } - - public m2(Menge> m){ - k; - k = 0; - ret; - ret = m.elementAt(k).elementAt(k).intValue(); - return ret; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/complexTypes/TestStandardLibMethod.java b/test/mycompiler/test/complexTypes/TestStandardLibMethod.java deleted file mode 100755 index 8e6c2919..00000000 --- a/test/mycompiler/test/complexTypes/TestStandardLibMethod.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.complexTypes; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 18-04-08 - * @author - * - * this test checks correct inference of std types by their methods used - */ -public class TestStandardLibMethod extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="TestStandardLibMethod"; - private final static String JAVPATH="test/mycompiler/test/complexTypes/"; - - public TestStandardLibMethod(String name) { - super(name,TestStandardLibMethod.JAVPATH+TestStandardLibMethod.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testStandardLibMethod = new ClassExpect(TestStandardLibMethod.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - RefType aType = new RefType("java.util.HashMap",new Menge(),-1); - aType.add_Parameter(new RefType("java.lang.String",-1)); - aType.add_Parameter(new RefType("java.lang.Integer",-1)); - m1.getBlock().addLocalVar(new VarExpect("a", aType)); - - MethodExpect m2 = new MethodExpect("m2", new RefType("java.lang.Integer",-1)); - RefType mType = new RefType("de.dhbwstuttgart.typeinference.Menge",new Menge(),-1); - RefType mType1 = new RefType("de.dhbwstuttgart.typeinference.Menge",new Menge(),-1); - mType1.add_Parameter(new RefType("java.lang.Integer",-1)); - mType.add_Parameter(mType1); - m2.addParameter(new VarExpect("m", mType)); - m2.getBlock().addLocalVar(new VarExpect("k",new RefType("java.lang.Integer",-1))); - m2.getBlock().addLocalVar(new VarExpect("ret",new RefType("java.lang.Integer",-1))); - - - testStandardLibMethod.addMethod(m1); - testStandardLibMethod.addMethod(m2); - - return new Expectation(testStandardLibMethod); - } - } \ No newline at end of file diff --git a/test/mycompiler/test/expectationTypes/BlockExpect.java b/test/mycompiler/test/expectationTypes/BlockExpect.java deleted file mode 100755 index 47e4b4e6..00000000 --- a/test/mycompiler/test/expectationTypes/BlockExpect.java +++ /dev/null @@ -1,74 +0,0 @@ -package mycompiler.test.expectationTypes; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -/** - * 15-04-08 - * @author - * - * expectation structure to define expectations for a particular block - */ - -public class BlockExpect implements IExpectation{ - private HashMap localVars = null; - private Menge containedBlocks = null; - private String blockID = null; - - public BlockExpect(String parentBlockID,String blockID) { - - this.localVars = new HashMap(); - this.containedBlocks = new Menge(); - if (parentBlockID==null) - this.blockID=blockID; - else - this.blockID = parentBlockID+"-"+blockID; - } - - public void addBlock(BlockExpect block) { - this.containedBlocks.add(block); - } - - public void addLocalVar(VarExpect localVar) { - this.localVars.put(localVar.getName(), localVar); - } - - public boolean verifyTypeExpectationsCompletelyMet() { - boolean ret = true; - for (VarExpect localVar : localVars.values()) { - ret &=localVar.verifyTypeExpectationsCompletelyMet(); - } - - for (BlockExpect containedBlock : containedBlocks) { - ret &=containedBlock.verifyTypeExpectationsCompletelyMet(); - } - return ret; - } - - public HashMap getLocalVar() { - return localVars; - } - - public void setLocalVar(HashMap localVar) { - this.localVars = localVar; - } - - public Menge getContainedBlocks() { - return containedBlocks; - } - - public void setContainedBlocks(Menge containedBlocks) { - this.containedBlocks = containedBlocks; - } - - public String getBlockID() { - return blockID; - } - - public void setBlockID(String blockID) { - this.blockID = blockID; - } - - - -} diff --git a/test/mycompiler/test/expectationTypes/ClassExpect.java b/test/mycompiler/test/expectationTypes/ClassExpect.java deleted file mode 100755 index dcc9f693..00000000 --- a/test/mycompiler/test/expectationTypes/ClassExpect.java +++ /dev/null @@ -1,92 +0,0 @@ -package mycompiler.test.expectationTypes; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey; -/** - * 15-04-08 - * @author - * - * expectation structure to define expectations for a particular class - */ -public class ClassExpect implements IExpectation { - private String name = null; - private Menge generics = null; - private HashMap members = null; - private HashMap methods = null; - - - public ClassExpect(String name) { - this.name = name; - this.generics= new Menge(); - this.members = new HashMap(); - this.methods = new HashMap(); - } - - public void addGeneric(GenericTypeVar generic) { - this.generics.add(generic); - } - - public void addMember(VarExpect member) { - this.members.put(member.getName(), member); - } - - public void addMethod(MethodExpect method) { - this.methods.put(new CMethodKey(this.getName(),method.getName(),method.getParaCount(),method.getOverloadID()),method); - } - - public boolean verifyTypeExpectationsCompletelyMet() { - boolean ret=true; - for (VarExpect member : this.members.values()) - ret &=member.verifyTypeExpectationsCompletelyMet(); - for (MethodExpect method: this.methods.values()) - ret &=method.verifyTypeExpectationsCompletelyMet(); - return ret; - } - - public String getName() { - return name; - } - - - public void setName(String name) { - this.name = name; - } - - - public Menge getGenerics() { - return generics; - } - - - public void setGenerics(Menge generics) { - this.generics = generics; - } - - - public HashMap getMembers() { - return members; - } - - - public void setMembers(HashMap members) { - this.members = members; - } - - - public HashMap getMethods() { - return methods; - } - - - public void setMethods(HashMap methods) { - this.methods = methods; - } - - - - - -} \ No newline at end of file diff --git a/test/mycompiler/test/expectationTypes/Expectation.java b/test/mycompiler/test/expectationTypes/Expectation.java deleted file mode 100755 index 1b80baec..00000000 --- a/test/mycompiler/test/expectationTypes/Expectation.java +++ /dev/null @@ -1,58 +0,0 @@ -package mycompiler.test.expectationTypes; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; -/** - * 15-04-08 - * @author - * - * expectation structure to define expectations for an entire testcase - * holds information about classes, exceptions - */ -public class Expectation implements IExpectation { - - private HashMap classes = null; - private Menge exceptions = null; - private UnknownTypesMappingExpect mappings = null; - - public Expectation(ClassExpect classExpect) { - if (classExpect!=null) { - this.classes = new HashMap(); - this.classes.put(classExpect.getName(), classExpect); - } - this.exceptions = new Menge(); - this.mappings = new UnknownTypesMappingExpect(); - } - - public boolean verifyTypeExpectationsCompletelyMet() { - boolean ret = true; - for (ClassExpect classexpect : this.classes.values()) - ret &= classexpect.verifyTypeExpectationsCompletelyMet(); - return ret; - } - - public void addClass(ClassExpect classExpect) { - this.classes.put(classExpect.getName(),classExpect); - } - - public void addException (Exception e) { - this.exceptions.add(e); - } - - public Menge getExceptions() { - return this.exceptions; - } - - public HashMap getClasses() { - return classes; - } - - public void setClasses(HashMap classes) { - this.classes = classes; - } - - public UnknownTypesMappingExpect getMappings() { - return mappings; - } - -} diff --git a/test/mycompiler/test/expectationTypes/GenericTypeVarExpect.java b/test/mycompiler/test/expectationTypes/GenericTypeVarExpect.java deleted file mode 100755 index 8f2131e6..00000000 --- a/test/mycompiler/test/expectationTypes/GenericTypeVarExpect.java +++ /dev/null @@ -1,21 +0,0 @@ -package mycompiler.test.expectationTypes; - -import mycompiler.test.expectationTypes.IUnknownTypeExpect; -/** - * 15-05-08 - * @author - * - * class used to define variable expectations for a GenericTypeVar - */ -public class GenericTypeVarExpect implements IUnknownTypeExpect { - - private String name = null; - - public GenericTypeVarExpect(String name) { - this.name=name; - } - - public String getName() { - return this.name; - } -} diff --git a/test/mycompiler/test/expectationTypes/IExpectation.java b/test/mycompiler/test/expectationTypes/IExpectation.java deleted file mode 100755 index 5e74f38b..00000000 --- a/test/mycompiler/test/expectationTypes/IExpectation.java +++ /dev/null @@ -1,12 +0,0 @@ -package mycompiler.test.expectationTypes; - -/** - * 15-04-08 - * @author - * an interface defining common structure of a expectation definition - */ -public interface IExpectation { - - public boolean verifyTypeExpectationsCompletelyMet(); - -} diff --git a/test/mycompiler/test/expectationTypes/IUnknownTypeExpect.java b/test/mycompiler/test/expectationTypes/IUnknownTypeExpect.java deleted file mode 100755 index bf4334ed..00000000 --- a/test/mycompiler/test/expectationTypes/IUnknownTypeExpect.java +++ /dev/null @@ -1,12 +0,0 @@ -package mycompiler.test.expectationTypes; - -/** - * 15-05-08 - * @author - * - * interface for an expectation class to be defined - */ -public interface IUnknownTypeExpect { - - public String getName(); -} diff --git a/test/mycompiler/test/expectationTypes/MethodExpect.java b/test/mycompiler/test/expectationTypes/MethodExpect.java deleted file mode 100755 index e2822f6e..00000000 --- a/test/mycompiler/test/expectationTypes/MethodExpect.java +++ /dev/null @@ -1,157 +0,0 @@ -package mycompiler.test.expectationTypes; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.Type; -/** - * 15-04-08 - * @author - * - * defines expectations for methods - */ -public class MethodExpect implements IExpectation { - - private final static String METHODNAMEDELIMITER = "#"; - - private String name = null; - private Menge returntypes = null; - private Menge returntypesCopy = null; //used to ensure all expectations have been met - private IUnknownTypeExpect unknownReturnType=null; - private Menge generics = null; - private HashMap parameters = null; - private BlockExpect block = null; - private int overloadID = 0; - - - public MethodExpect(String name) { - this(name,0); - } - - public MethodExpect(String name, int overloadID) { - this.name = name; - - this.generics=new Menge(); - this.parameters=new HashMap(); - this.returntypes = new Menge(); - this.returntypesCopy=(Menge)this.returntypes.clone(); - this.block = new BlockExpect(null,"1"); - - this.overloadID = overloadID; - } - - public MethodExpect(String name, Type returntype) { - this(name,returntype,0); - } - - public MethodExpect(String name, Type returntype, int overloadID) { - this(name,overloadID); - this.returntypes.add(returntype); - this.returntypesCopy=(Menge)this.returntypes.clone(); - } - - public MethodExpect(String name, IUnknownTypeExpect unknownreturntype) { - this(name,unknownreturntype,0); - } - - public MethodExpect(String name, IUnknownTypeExpect unknownreturntype, int overloadID) { - this(name,overloadID); - this.unknownReturnType=unknownreturntype; - } - - public void addGeneric (GenericTypeVar generic) { - this.generics.add(generic); - } - - public void addReturntype(Type returntype) { - if (this.returntypes==null) - this.returntypes = new Menge(); - //to avoid usage of returntypes and unknownreturntypes at the same time - if (this.unknownReturnType==null) { - this.returntypes.add(returntype); - this.returntypesCopy.add(returntype); - } - } - - public void addParameter(VarExpect parameter) { - this.parameters.put(parameter.getName(),parameter); - } - - public boolean verifyTypeExpectationsCompletelyMet() { - boolean ret = true; - for (VarExpect parameter : this.parameters.values() ) { - ret &=parameter.verifyTypeExpectationsCompletelyMet(); - } - if (this.block!=null) - ret &=this.block.verifyTypeExpectationsCompletelyMet(); - ret &=this.returntypesCopy.size()==0; - return ret; - } - - public String getName() { - return this.name; - } - - public void setName(String name) { - this.name = name; - } - - public Menge getReturntypes() { - return returntypes; - } - - public void setReturntypes(Menge returntypes) { - this.returntypes = returntypes; - } - - public Menge getGenerics() { - return generics; - } - - public void setGenerics(Menge generics) { - this.generics = generics; - } - - public HashMap getParameter() { - return parameters; - } - - public void setParameter(HashMap parameter) { - this.parameters = parameter; - } - - public BlockExpect getBlock() { - return block; - } - - public void setBlock(BlockExpect block) { - this.block = block; - } - - public int getOverloadID() { - return overloadID; - } - - public void setOverloadID(int overloadID) { - this.overloadID = overloadID; - } - - public Menge getReturntypesCopy() { - return returntypesCopy; - } - - public void setReturntypesCopy(Menge returntypesCopy) { - this.returntypesCopy = returntypesCopy; - this.returntypesCopy=(Menge)this.returntypes.clone(); - } - - public IUnknownTypeExpect getUnknownReturnType() { - return this.unknownReturnType; - } - - public int getParaCount() { - return this.getParameter().size(); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/expectationTypes/TypePlaceholderExpect.java b/test/mycompiler/test/expectationTypes/TypePlaceholderExpect.java deleted file mode 100755 index fcfc08e0..00000000 --- a/test/mycompiler/test/expectationTypes/TypePlaceholderExpect.java +++ /dev/null @@ -1,21 +0,0 @@ -package mycompiler.test.expectationTypes; - -import mycompiler.test.expectationTypes.IUnknownTypeExpect; -/** - * 15-05-08 - * @author - * - * type for defining an expected TypePlaceholder - */ -public class TypePlaceholderExpect implements IUnknownTypeExpect { - - private String name = null; - - public TypePlaceholderExpect(String name) { - this.name=name; - } - - public String getName() { - return this.name; - } -} diff --git a/test/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.java b/test/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.java deleted file mode 100755 index 6e3a5e65..00000000 --- a/test/mycompiler/test/expectationTypes/UnknownTypesMappingExpect.java +++ /dev/null @@ -1,42 +0,0 @@ -package mycompiler.test.expectationTypes; - -import java.util.HashMap; - -/** - * class is used to translate expected Typeplaceholder variable names to the ones used by the compiler allowing a comparison. It simply holds a registry that is filled upon detection of an unknown type which may later be in need of comparison - * only helps verifying that same expected typeplaceholders are mapped to same assumed typeplaceholders - * @author stresing - * - */ - -public class UnknownTypesMappingExpect { - - private HashMap unknownTypeNameMapping = null; - - public UnknownTypesMappingExpect() { - this.unknownTypeNameMapping = new HashMap(); - } - - /** - * returns mapped Type name as of expectation or null if not yet mapped - * @param foundTypeName - * @return - */ - public String getMappedType(String expectedTypeName) { - return this.unknownTypeNameMapping.get(expectedTypeName); - } - - public void addMapping(String expectedTypeName, String foundTypeName) { - this.unknownTypeNameMapping.put(expectedTypeName, foundTypeName); - - } - - public HashMap getUnknownTypeNameMapping() { - return unknownTypeNameMapping; - } - - public void setUnknownTypeNameMapping( - HashMap unknownTypeNameMapping) { - this.unknownTypeNameMapping = unknownTypeNameMapping; - } -} diff --git a/test/mycompiler/test/expectationTypes/VarExpect.java b/test/mycompiler/test/expectationTypes/VarExpect.java deleted file mode 100755 index f849841b..00000000 --- a/test/mycompiler/test/expectationTypes/VarExpect.java +++ /dev/null @@ -1,80 +0,0 @@ -package mycompiler.test.expectationTypes; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.Type; -/** - * 15-04-08 - * @author - * - * classes used to define expectation of a particular variable - */ -public class VarExpect implements IExpectation { - private Menge expectedType = null; - private Menge expectedTypeCopy = null; - private IUnknownTypeExpect expectedUnknownType=null; - private String name = null; - - public VarExpect(String name) { - this.name=name; - this.expectedType=new Menge(); - this.expectedTypeCopy=(Menge)this.expectedType.clone(); - } - - public VarExpect(String name, Type expectedType) { - this(name); - this.expectedType.add(expectedType); - this.expectedTypeCopy=(Menge)this.expectedType.clone(); - } - - public VarExpect(String name, IUnknownTypeExpect expectedUnknownType) { - this(name); - this.expectedUnknownType=expectedUnknownType; - } - - public void addExpectedType(Type type) { - if (this.expectedType==null) - this.expectedType = new Menge(); - this.expectedType.add(type); - this.expectedTypeCopy=(Menge)this.expectedType.clone(); - } - - public boolean verifyTypeExpectationsCompletelyMet() { - return this.expectedTypeCopy.size()==0; - } - - public Menge getExpectedType() { - return expectedType; - } - - public void setExpectedType(Menge expectedType) { - this.expectedType = expectedType; - this.expectedTypeCopy=(Menge)this.expectedType.clone(); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Menge getExpectedTypeCopy() { - return expectedTypeCopy; - } - - public void setExpectedTypeCopy(Menge expectedTypeCopy) { - this.expectedTypeCopy = expectedTypeCopy; - } - - public IUnknownTypeExpect getExpectedUnknownType() { - return expectedUnknownType; - } - - public void setExpectedUnknownType(IUnknownTypeExpect expectedUnknownType) { - this.expectedUnknownType = expectedUnknownType; - } - -} - diff --git a/test/mycompiler/test/generics/AllTestsGenerics.java b/test/mycompiler/test/generics/AllTestsGenerics.java deleted file mode 100755 index bf3a7144..00000000 --- a/test/mycompiler/test/generics/AllTestsGenerics.java +++ /dev/null @@ -1,25 +0,0 @@ -package mycompiler.test.generics; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsGenerics { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for mycompiler.test.generics"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestExtendedClassesWithBoundedGenerics.class); - suite.addTestSuite(TestAssignmentTwoGenericTypesNegative.class); - suite.addTestSuite(TestNestedGenerics.class); - suite.addTestSuite(TestSimpleClassesWithGenerics.class); - suite.addTestSuite(TestClassesWithBoundedGenericsUsedInMethods.class); - suite.addTestSuite(TestSimpleClassesWithBoundedGenerics.class); - suite.addTestSuite(TestSimpleClassesWithGenericsNegative.class); - suite.addTestSuite(TestClassesWithBoundedGenericsOfTwoTypes.class); - suite.addTestSuite(TestSimpleClassesWithBoundedGenericsNegative.class); - suite.addTestSuite(TestNestedGenericsNonExistingType.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.jav b/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.jav deleted file mode 100755 index 160126b5..00000000 --- a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.jav +++ /dev/null @@ -1,12 +0,0 @@ -import java.util.ArrayList; - -public class TestAssignmentTwoGenericTypesNegative { - - public void m() { - - ArrayList ls; - ls = new ArrayList(); - ArrayList lo; - lo = ls; /*<-- compile error*/ - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java b/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java deleted file mode 100755 index 9658e395..00000000 --- a/test/mycompiler/test/generics/TestAssignmentTwoGenericTypesNegative.java +++ /dev/null @@ -1,51 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * verifies correct detection of incompatible type assignments of two templates - * @author - * 13-05-08 - */ - - -public class TestAssignmentTwoGenericTypesNegative extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestAssignmentTwoGenericTypesNegative"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestAssignmentTwoGenericTypesNegative(String name) { - super(name,TestAssignmentTwoGenericTypesNegative.JAVPATH+TestAssignmentTwoGenericTypesNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testAssignmentTwoGenericTypesNegative = new ClassExpect(TestAssignmentTwoGenericTypesNegative.TESTEDCLASSNAME); - //Methods - MethodExpect method = new MethodExpect("m",new RefType("void",-1)); - RefType paramString = new RefType("java.lang.String",-1); - Menge param1 = new Menge(); - param1.add(paramString); - method.getBlock().addLocalVar(new VarExpect("ls", new RefType("java.util.ArrayList",param1,-1))); - RefType paramObject = new RefType("java.lang.Object",-1); - Menge param2 = new Menge(); - param2.add(paramObject); - method.getBlock().addLocalVar(new VarExpect("lo", new RefType("java.util.ArrayList",param2,-1))); - - testAssignmentTwoGenericTypesNegative.addMethod(method); - - Expectation ret = new Expectation(testAssignmentTwoGenericTypesNegative); - ret.addException(new Exception()); - return ret; - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.jav b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.jav deleted file mode 100755 index aec3e235..00000000 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.jav +++ /dev/null @@ -1,17 +0,0 @@ -interface I1 {} - -interface I2 {} - -class Implementation implements I1 {} - -class Implementation2 implements I2 {} - -class A {} - -class B{} - -class C{} - -class D{} - -class E{} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java deleted file mode 100755 index 31c65b5e..00000000 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsOfTwoTypes.java +++ /dev/null @@ -1,86 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * checks inference upon bounds, however test fails up to now, bounds are not considered - * @author - * 21-04-08 - */ - - -public class TestClassesWithBoundedGenericsOfTwoTypes extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestClassesWithBoundedGenericsOfTwoTypes"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestClassesWithBoundedGenericsOfTwoTypes(String name) { - super(name,TestClassesWithBoundedGenericsOfTwoTypes.JAVPATH+TestClassesWithBoundedGenericsOfTwoTypes.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //interfaces - ClassExpect i1 = new ClassExpect("I1"); - ClassExpect i2 = new ClassExpect("I2"); - - //classes - ClassExpect impl = new ClassExpect("Implementation"); - ClassExpect impl2 = new ClassExpect("Implementation2"); - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect c = new ClassExpect("C"); - ClassExpect d = new ClassExpect("D"); - ClassExpect e = new ClassExpect("E"); - - //generics - Menge boundsA = new Menge(); - boundsA.add(new RefType("I1",-1)); - a.addGeneric(new BoundedGenericTypeVar("T",boundsA,-1)); - - Menge boundsB = new Menge(); - boundsB.add(new RefType("I1",-1)); - boundsB.add(new RefType("I2",-1)); - b.addGeneric(new BoundedGenericTypeVar("T",boundsB,-1)); - - Menge boundsC = new Menge(); - boundsC.add(new RefType("I1",-1)); - boundsC.add(new RefType("Implementation",-1)); - c.addGeneric(new BoundedGenericTypeVar("T",boundsC,-1)); - - Menge boundsD = new Menge(); - boundsD.add(new RefType("I2",-1)); - boundsD.add(new RefType("Implementation",-1)); - d.addGeneric(new BoundedGenericTypeVar("T",boundsD,-1)); - - Menge boundsE = new Menge(); - boundsE.add(new RefType("Implementation",-1)); - boundsE.add(new RefType("Implementation2",-1)); - e.addGeneric(new BoundedGenericTypeVar("T",boundsE,-1)); - - - Expectation ret = new Expectation(i1); - ret.addClass(i2); - ret.addClass(impl); - ret.addClass(impl2); - ret.addClass(a); - ret.addClass(b); - ret.addClass(c); - ret.addClass(d); - ret.addClass(e); - //generic cannot extend two classes - no multiple inheritance in java - ret.addException(new Exception()); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.jav b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.jav deleted file mode 100755 index b5a53fc7..00000000 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.jav +++ /dev/null @@ -1,21 +0,0 @@ -interface I1 { - public m1(); -} - -class Implementation implements I1 { - public m1() { - } -} - -class TestClassesWithBoundedGenericsUsedInMethods { - - /*since S is at least of Type I1, call m1() should work*/ - public void m3 (S x) { - x.m1(); - } - - /*T is bounded by class generics, thus always at least of type I1*/ - public m2(T x) { - x.m1(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java b/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java deleted file mode 100755 index 6699b484..00000000 --- a/test/mycompiler/test/generics/TestClassesWithBoundedGenericsUsedInMethods.java +++ /dev/null @@ -1,75 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; - -/** - * checks case of bounds being two classes, which should not be possible: multiple inheritance is not allowed in java - * @author - * 21-04-08 - */ - - -public class TestClassesWithBoundedGenericsUsedInMethods extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestClassesWithBoundedGenericsUsedInMethods"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestClassesWithBoundedGenericsUsedInMethods(String name) { - super(name,TestClassesWithBoundedGenericsUsedInMethods.JAVPATH+TestClassesWithBoundedGenericsUsedInMethods.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //interfaces - ClassExpect i1 = new ClassExpect("I1"); - - //classes - ClassExpect impl = new ClassExpect("Implementation"); - ClassExpect testClassesWithBoundedGenericsUsedInMethods = new ClassExpect(TestClassesWithBoundedGenericsUsedInMethods.TESTEDCLASSNAME); - - //generics - Menge boundsT = new Menge(); - boundsT.add(new RefType("I1",-1)); - BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",boundsT,-1); - Menge boundsS = new Menge(); - boundsS.add(new RefType("I1",-1)); - - BoundedGenericTypeVar s = new BoundedGenericTypeVar("T",boundsS,-1); - - - testClassesWithBoundedGenericsUsedInMethods.addGeneric(t); - - //methods - MethodExpect m1 = new MethodExpect("m1", new TypePlaceholderExpect("a")); - i1.addMethod(m1); - - MethodExpect mImpl1 = new MethodExpect("m1", new RefType("void",-1)); - impl.addMethod(mImpl1); - - MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - m2.addParameter(new VarExpect("x", t)); - testClassesWithBoundedGenericsUsedInMethods.addMethod(m2); - - MethodExpect m3 = new MethodExpect("m3", new RefType("void",-1)); - m3.addGeneric(new GenericTypeVar("T",-1)); - m3.addParameter(new VarExpect("x", s)); - testClassesWithBoundedGenericsUsedInMethods.addMethod(m3); - - Expectation ret = new Expectation(testClassesWithBoundedGenericsUsedInMethods); - ret.addClass(i1); - ret.addClass(impl); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.jav b/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.jav deleted file mode 100755 index 9e98bb17..00000000 --- a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.jav +++ /dev/null @@ -1,34 +0,0 @@ -interface I1 { - public m1(); -} - -interface I2 { - public m2(); -} - -class Implementation implements I1, I2 { - public m1() {} - - public m2() {} -} - -class Tester { - - public m3(T x) { - x.m1(); - x.m2(); - } -} - -public class TestExtendedClassesWithBoundedGenerics { - - public m() { - x; - /*can only be of Type Implementation*/ - x= new Implementation(); - y; - /*could be of Type: Tester, Tester*/ - y= new Tester(); - y.m3(x); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java b/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java deleted file mode 100755 index dacf3125..00000000 --- a/test/mycompiler/test/generics/TestExtendedClassesWithBoundedGenerics.java +++ /dev/null @@ -1,90 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; - -/** - * checks extended usage of generics, however test fails up to now because of no relation between class generics and method generics - * @author - * 21-04-08 - */ - - -public class TestExtendedClassesWithBoundedGenerics extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestExtendedClassesWithBoundedGenerics"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestExtendedClassesWithBoundedGenerics(String name) { - super(name,TestExtendedClassesWithBoundedGenerics.JAVPATH+TestExtendedClassesWithBoundedGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //interfaces - ClassExpect i1 = new ClassExpect("I1"); - ClassExpect i2 = new ClassExpect("I2"); - - //classes - ClassExpect impl = new ClassExpect("Implementation"); - ClassExpect testExtendedClassesWithBoundedGenerics = new ClassExpect(TestExtendedClassesWithBoundedGenerics.TESTEDCLASSNAME); - ClassExpect tester = new ClassExpect("Tester"); - - //generics - Menge bounds = new Menge(); - bounds.add(new RefType("I1",-1)); - bounds.add(new RefType("I2",-1)); - BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",bounds,-1); - tester.addGeneric(t); - - //methods - MethodExpect m1 = new MethodExpect("m1", new TypePlaceholderExpect("a")); - i1.addMethod(m1); - MethodExpect m2 = new MethodExpect("m2", new TypePlaceholderExpect("b")); - i2.addMethod(m2); - - MethodExpect mImpl1 = new MethodExpect("m1", new RefType("void",-1)); - MethodExpect mImpl2 = new MethodExpect("m2", new RefType("void",-1)); - - impl.addMethod(mImpl1); - impl.addMethod(mImpl2); - - MethodExpect m3 = new MethodExpect("m3", new RefType("void",-1)); - m3.addParameter(new VarExpect("x", t)); - tester.addMethod(m3); - - MethodExpect m = new MethodExpect("m", new RefType("void",-1)); - VarExpect x = new VarExpect("x",new RefType("Implementation",-1)); - //x.addExpectedType(new RefType("I1",-1)); - //x.addExpectedType(new RefType("I2",-1)); - m.getBlock().addLocalVar(x); - - Menge testerParams1 = new Menge(); - testerParams1.add(new RefType("Implementation",-1)); - Menge testerParams2 = new Menge(); - testerParams2.add(new SuperWildcardType(-1,new RefType("Implementation",-1))); - VarExpect y = new VarExpect("y",new RefType("Tester",testerParams1,-1)); - y.addExpectedType(new RefType("Tester",testerParams2,-1)); - m.getBlock().addLocalVar(y); - - testExtendedClassesWithBoundedGenerics.addMethod(m); - - Expectation ret = new Expectation(testExtendedClassesWithBoundedGenerics); - ret.addClass(i1); - ret.addClass(i2); - ret.addClass(impl); - ret.addClass(tester); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestNestedGenerics.jav b/test/mycompiler/test/generics/TestNestedGenerics.jav deleted file mode 100755 index 1b34d70c..00000000 --- a/test/mycompiler/test/generics/TestNestedGenerics.jav +++ /dev/null @@ -1,14 +0,0 @@ -class A{ - -} - -public class TestNestedGenerics{ - ,C> void foo(T a,C b){} - - void m(){ - TestNestedGenerics t = new TestNestedGenerics(); - String str = new String(); - A a = new A(); - t.foo(a,str); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestNestedGenerics.java b/test/mycompiler/test/generics/TestNestedGenerics.java deleted file mode 100755 index 6d2cc167..00000000 --- a/test/mycompiler/test/generics/TestNestedGenerics.java +++ /dev/null @@ -1,64 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 16-05-08 - * @author - * - * this test tests for nested generics, meaning a generic whose bound is another class with a generic - */ -public class TestNestedGenerics extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestNestedGenerics"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestNestedGenerics(String name) { - super(name,TestNestedGenerics.JAVPATH+TestNestedGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testNestedGenerics = new ClassExpect(TestNestedGenerics.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - a.addGeneric(new GenericTypeVar("T",-1)); - - //Methods - MethodExpect foo = new MethodExpect("foo",new RefType("void",-1)); - BoundedGenericTypeVar genericT = new BoundedGenericTypeVar("T",-1); - GenericTypeVar genericC = new GenericTypeVar("C",-1); - Menge param = new Menge(); - param.add(genericC); - genericT.addBound(new RefType("A",param,-1)); - foo.addParameter(new VarExpect("a",genericT)); - foo.addParameter(new VarExpect("b",genericC)); - - MethodExpect m = new MethodExpect("m", new RefType("void",-1)); - m.getBlock().addLocalVar(new VarExpect("t", new RefType("TestNestedGenerics",-1))); - m.getBlock().addLocalVar(new VarExpect("str",new RefType("java.lang.String",-1))); - RefType typeString = new RefType("java.lang.String",-1); - Mengeparam2 = new Menge(); - param2.add(typeString); - m.getBlock().addLocalVar(new VarExpect("a", new RefType("A",param2,-1))); - - testNestedGenerics.addMethod(foo); - testNestedGenerics.addMethod(m); - - Expectation ret = new Expectation(testNestedGenerics); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.jav b/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.jav deleted file mode 100755 index 428cdda4..00000000 --- a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.jav +++ /dev/null @@ -1,6 +0,0 @@ - -public class TestNestedGenerics{ - - ,C> void foo(T a,C b){} - -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java b/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java deleted file mode 100755 index 263a51a1..00000000 --- a/test/mycompiler/test/generics/TestNestedGenericsNonExistingType.java +++ /dev/null @@ -1,51 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 16-05-08 - * @author - * - * tests case where bounds are of a non exisiting type -> should throw error - */ -public class TestNestedGenericsNonExistingType extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestNestedGenericsNonExistingType"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestNestedGenericsNonExistingType(String name) { - super(name,TestNestedGenericsNonExistingType.JAVPATH+TestNestedGenericsNonExistingType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testNestedGenericsNonExistingType = new ClassExpect(TestNestedGenericsNonExistingType.TESTEDCLASSNAME); - - //Methods - MethodExpect foo = new MethodExpect("foo",new RefType("void",-1)); - BoundedGenericTypeVar genericT = new BoundedGenericTypeVar("T",-1); - GenericTypeVar genericC = new GenericTypeVar("C",-1); - Menge param = new Menge(); - param.add(genericC); - genericT.addBound(new RefType("A",param,-1)); - foo.addParameter(new VarExpect("a",genericT)); - foo.addParameter(new VarExpect("b",genericC)); - - testNestedGenericsNonExistingType.addMethod(foo); - - return new Expectation(testNestedGenericsNonExistingType); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav deleted file mode 100755 index 8b43ff95..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.jav +++ /dev/null @@ -1,30 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; -import java.util.HashMap; - -public class TestSimpleClassesWithBoundedGenerics { - - public ma(T x) { - return x; - } -} - -class A { - - public m1() { - x; - x= new TestSimpleClassesWithBoundedGenerics(); - return x.ma(3); - } - - public m2() { - x; - x = new TestSimpleClassesWithBoundedGenerics(); - } -/* - public m2() { - x; - x= new TestSimpleClassesWithBoundedGenerics(); - return x.m(new Double(3.)); - } -*/ -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java deleted file mode 100755 index 77ea4fab..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenerics.java +++ /dev/null @@ -1,71 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 13-05-08 - * @author - * - * test bounded generics - */ -public class TestSimpleClassesWithBoundedGenerics extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestSimpleClassesWithBoundedGenerics"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestSimpleClassesWithBoundedGenerics(String name) { - super(name,TestSimpleClassesWithBoundedGenerics.JAVPATH+TestSimpleClassesWithBoundedGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleClassesWithBoundedGenerics = new ClassExpect(TestSimpleClassesWithBoundedGenerics.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - - //generics - BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",-1); - t.addBound(new RefType("java.lang.Number",-1)); - testSimpleClassesWithBoundedGenerics.addGeneric(t); - - - //methods - MethodExpect ma = new MethodExpect("ma", t); - ma.addParameter(new VarExpect("x", t)); - testSimpleClassesWithBoundedGenerics.addMethod(ma); - - MethodExpect m1 = new MethodExpect("m1", new RefType("java.lang.Integer",-1)); - Menge param = new Menge(); - param.add(new RefType("java.lang.Integer",-1)); - m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithBoundedGenerics.TESTEDCLASSNAME,param,-1))); - a.addMethod(m1); - - MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - Menge testerParams1 = new Menge(); - testerParams1.add(new RefType("java.lang.Double",-1)); - Menge testerParams2 = new Menge(); - testerParams2.add(new SuperWildcardType(-1,new RefType("java.lang.Double",-1))); - Menge testerParams3 = new Menge(); - testerParams3.add(new ExtendsWildcardType(-1,new RefType("java.lang.Double",-1))); - VarExpect x = new VarExpect("x",new RefType("TestSimpleClassesWithBoundedGenerics",testerParams1,-1)); - x.addExpectedType(new RefType("TestSimpleClassesWithBoundedGenerics",testerParams2,-1)); - x.addExpectedType(new RefType("TestSimpleClassesWithBoundedGenerics",testerParams3,-1)); - m2.getBlock().addLocalVar(x); - a.addMethod(m2); - - Expectation ret = new Expectation(testSimpleClassesWithBoundedGenerics); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.jav b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.jav deleted file mode 100755 index 19ef124c..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.jav +++ /dev/null @@ -1,17 +0,0 @@ - -public class TestSimpleClassesWithBoundedGenericsNegative { - - public m(T x) { - return x; - } - -} - -class A { - public m1() { - x; - x = new TestSimpleClassesWithBoundedGenericsNegative(); - return x.m("abc"); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java b/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java deleted file mode 100755 index 68036d57..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithBoundedGenericsNegative.java +++ /dev/null @@ -1,62 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * verifies correct identification of a bounded generic which is instanciated with a type not included in bounds - * @author tom - * - */ - - -public class TestSimpleClassesWithBoundedGenericsNegative extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestSimpleClassesWithBoundedGenericsNegative"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestSimpleClassesWithBoundedGenericsNegative(String name) { - super(name,TestSimpleClassesWithBoundedGenericsNegative.JAVPATH+TestSimpleClassesWithBoundedGenericsNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleClassesWithBoundedGenericsNegative = new ClassExpect(TestSimpleClassesWithBoundedGenericsNegative.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - - //generics - BoundedGenericTypeVar t = new BoundedGenericTypeVar("T",-1); - t.addBound(new RefType("java.lang.Number",-1)); - testSimpleClassesWithBoundedGenericsNegative.addGeneric(t); - - - //methods - MethodExpect m = new MethodExpect("m", t); - m.addParameter(new VarExpect("x", t)); - testSimpleClassesWithBoundedGenericsNegative.addMethod(m); - - MethodExpect m1 = new MethodExpect("m1", new RefType("java.lang.String",-1)); - Menge param = new Menge(); - param.add(new RefType("java.lang.String",-1)); - m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithBoundedGenericsNegative.TESTEDCLASSNAME,param,-1))); - a.addMethod(m1); - - Expectation ret = new Expectation(testSimpleClassesWithBoundedGenericsNegative); - ret.addClass(a); - - //Exception expected!!! - ret.addException(new Exception()); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.jav b/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.jav deleted file mode 100755 index 359b9a52..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.jav +++ /dev/null @@ -1,17 +0,0 @@ -public class TestSimpleClassesWithGenerics { - - public m(T x) { - return x; - } - -} - -class A { - - public method() { - x; - x= new TestSimpleClassesWithGenerics(); - return x.m(3); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java b/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java deleted file mode 100755 index 7dfed4f9..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenerics.java +++ /dev/null @@ -1,58 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * checks simple usage of generics without bounds - * @author tom - * - */ - - -public class TestSimpleClassesWithGenerics extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestSimpleClassesWithGenerics"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestSimpleClassesWithGenerics(String name) { - super(name,TestSimpleClassesWithGenerics.JAVPATH+TestSimpleClassesWithGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleClassesWithGenerics = new ClassExpect(TestSimpleClassesWithGenerics.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - - //generics - GenericTypeVar t = new GenericTypeVar("T",-1); - testSimpleClassesWithGenerics.addGeneric(t); - - - //methods - MethodExpect m = new MethodExpect("m", t); - m.addParameter(new VarExpect("x", t)); - testSimpleClassesWithGenerics.addMethod(m); - - MethodExpect m1 = new MethodExpect("method", new RefType("java.lang.Integer",-1)); - Menge param = new Menge(); - param.add(new RefType("java.lang.Integer",-1)); - m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithGenerics.TESTEDCLASSNAME,param,-1))); - a.addMethod(m1); - - Expectation ret = new Expectation(testSimpleClassesWithGenerics); - ret.addClass(a); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.jav b/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.jav deleted file mode 100755 index 938ea504..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.jav +++ /dev/null @@ -1,17 +0,0 @@ -public class TestSimpleClassesWithGenericsNegative { - - public m(T x) { - return x; - } - -} - -class A { - - public method() { - x; - x= new TestSimpleClassesWithGenerics(); - return x.m("abc"); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java b/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java deleted file mode 100755 index 2c00eae0..00000000 --- a/test/mycompiler/test/generics/TestSimpleClassesWithGenericsNegative.java +++ /dev/null @@ -1,59 +0,0 @@ -package mycompiler.test.generics; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * checks whether wrong usage of generics is detected - * @author tom - * - */ - - -public class TestSimpleClassesWithGenericsNegative extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestSimpleClassesWithGenericsNegative"; - private final static String JAVPATH="test/mycompiler/test/generics/"; - - public TestSimpleClassesWithGenericsNegative(String name) { - super(name,TestSimpleClassesWithGenericsNegative.JAVPATH+TestSimpleClassesWithGenericsNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testSimpleClassesWithGenericsNegative = new ClassExpect(TestSimpleClassesWithGenericsNegative.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - - //generics - GenericTypeVar t = new GenericTypeVar("T",-1); - testSimpleClassesWithGenericsNegative.addGeneric(t); - - - //methods - MethodExpect m = new MethodExpect("m", t); - m.addParameter(new VarExpect("x", t)); - testSimpleClassesWithGenericsNegative.addMethod(m); - - MethodExpect m1 = new MethodExpect("method", new RefType("java.lang.String",-1)); - Menge param = new Menge(); - param.add(new RefType("java.lang.Integer",-1)); - m1.getBlock().addLocalVar(new VarExpect("x", new RefType(TestSimpleClassesWithGenericsNegative.TESTEDCLASSNAME,param,-1))); - a.addMethod(m1); - - Expectation ret = new Expectation(testSimpleClassesWithGenericsNegative); - ret.addClass(a); - //Exception - ret.addException(new Exception()); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.java b/test/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.java deleted file mode 100755 index 61f294e1..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/AllTestsInferenceByCharacteristic.java +++ /dev/null @@ -1,26 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsInferenceByCharacteristic { - - public static Test suite() { - TestSuite suite = new TestSuite( - "Test for mycompiler.test.inferenceByCharacteristic"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestInferenceStdTypeByReturnType.class); - suite.addTestSuite(TestInferenceOwnTypeByMemberAcrossClasses.class); - suite.addTestSuite(TestInferenceOwnTypeByReturnType.class); - suite.addTestSuite(TestInferenceStdTypeByOperation.class); - suite.addTestSuite(TestInferenceOwnTypeByMember.class); - suite.addTestSuite(TestInferenceOwnTypeByMethodReturnTypeMixed1.class); - suite.addTestSuite(TestInferenceOwnTypeByMethodParameter.class); - suite.addTestSuite(TestInferenceOwnTypeByMethodCallAcrossClasses.class); - suite.addTestSuite(TestInferenceOwnTypeByMethodCall.class); - suite.addTestSuite(TestInferenceOwnTypeByReturnTypeAcrossClasses.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.jav deleted file mode 100755 index d6b39b87..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.jav +++ /dev/null @@ -1,16 +0,0 @@ -public class TestInferenceOwnTypeByMember { - - Float a; - - public void m1(b) { - a += b; - } - - public void m2(a) { - this.a=a; - } - - public m3() { - return a; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.java deleted file mode 100755 index 897943fa..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMember.java +++ /dev/null @@ -1,52 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 28-04-08 - * @author - * - * test inference by member of same class - */ - -public class TestInferenceOwnTypeByMember extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMember"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMember(String name) { - super(name,TestInferenceOwnTypeByMember.JAVPATH+TestInferenceOwnTypeByMember.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceOwnTypeByMember = new ClassExpect(TestInferenceOwnTypeByMember.TESTEDCLASSNAME); - //Member - testInferenceOwnTypeByMember.addMember(new VarExpect("a", new RefType("java.lang.Float",-1))); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1),0); - m1.addParameter(new VarExpect("b",new RefType("java.lang.Float",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("void",-1),0); - m2.addParameter(new VarExpect("a",new RefType("java.lang.Float",-1))); - - MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Float",-1),0); - - - - - testInferenceOwnTypeByMember.addMethod(m1); - //testInferenceOwnTypeByMember.addMethod(m2); - testInferenceOwnTypeByMember.addMethod(m3); - - return new Expectation(testInferenceOwnTypeByMember); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.jav deleted file mode 100755 index c595b224..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.jav +++ /dev/null @@ -1,14 +0,0 @@ -class A { - - public Character c; - -} - -public class TestInferenceOwnTypeByMemberAcrossClasses { - - public m1(a) { - x; - x = new A(); - a=x.c; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.java deleted file mode 100755 index 8493685a..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMemberAcrossClasses.java +++ /dev/null @@ -1,47 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 28-04-08 - * @author - * - * test inference by member across different classes - */ - -public class TestInferenceOwnTypeByMemberAcrossClasses extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMemberAcrossClasses"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMemberAcrossClasses(String name) { - super(name,TestInferenceOwnTypeByMemberAcrossClasses.JAVPATH+TestInferenceOwnTypeByMemberAcrossClasses.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect a = new ClassExpect("A"); - ClassExpect testInferenceOwnTypeByMemberAcrossClasses = new ClassExpect(TestInferenceOwnTypeByMemberAcrossClasses.TESTEDCLASSNAME); - //Member - a.addMember(new VarExpect("c", new RefType("java.lang.Character",-1))); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1),0); - m1.addParameter(new VarExpect("a",new RefType("java.lang.Character",-1))); - m1.getBlock().addLocalVar(new VarExpect("x",new RefType("A",-1))); - - - testInferenceOwnTypeByMemberAcrossClasses.addMethod(m1); - - Expectation ret = new Expectation(testInferenceOwnTypeByMemberAcrossClasses); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.jav deleted file mode 100755 index fc3ca3d2..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.jav +++ /dev/null @@ -1,32 +0,0 @@ -public class TestInferenceOwnTypeByMethodCall{ - - public m1(a) { - return a; - } - - public Integer m2(a) { - return a; - } - - public m3(a) { - return a; - } - - - - public void m01(d) { - e; - e=m1(d); - } - - public void m02(d) { - e; - e=m2(d); - } - - public void m03(c,Character d) { - e; - e=c.m3(d); - } - - } \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.java deleted file mode 100755 index aac98c00..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCall.java +++ /dev/null @@ -1,68 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.logger.xml.DOMConfigurator; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.GenericTypeVarExpect; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 29-04-08 - * @author - * - * test checks extended inference by return type of a method of same class - */ - -public class TestInferenceOwnTypeByMethodCall extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMethodCall"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMethodCall(String name) { - super(name,TestInferenceOwnTypeByMethodCall.JAVPATH+TestInferenceOwnTypeByMethodCall.TESTEDCLASSNAME + ".jav"); - DOMConfigurator.configure("test/log4jTesting.xml"); - DOMConfigurator.configure("log4j.xml"); - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceOwnTypeByMethodCall = new ClassExpect(TestInferenceOwnTypeByMethodCall.TESTEDCLASSNAME); - //Member - - //Methods - MethodExpect m1 = new MethodExpect("m1",new GenericTypeVarExpect("a")); - m1.addParameter(new VarExpect("a",new GenericTypeVarExpect("a"))); - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Integer",-1)); - m2.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Character",-1)); - m3.addParameter(new VarExpect("a",new RefType("java.lang.Character",-1))); - - MethodExpect m01 = new MethodExpect("m01",new RefType("void",-1)); - m01.addParameter(new VarExpect("d",new GenericTypeVarExpect("a"))); - m01.getBlock().addLocalVar(new VarExpect("e",new GenericTypeVarExpect("a"))); - MethodExpect m02 = new MethodExpect("m02",new RefType("void",-1),0); - m02.addParameter(new VarExpect("d",new RefType("java.lang.Integer",-1))); - m02.getBlock().addLocalVar(new VarExpect("e",new RefType("java.lang.Integer",-1))); - MethodExpect m03 = new MethodExpect("m03",new RefType("void",-1),0); - m03.addParameter(new VarExpect("c",new RefType(TestInferenceOwnTypeByMethodCall.TESTEDCLASSNAME,-1))); - m03.addParameter(new VarExpect("d",new RefType("java.lang.Character",-1))); - m03.getBlock().addLocalVar(new VarExpect("e",new RefType("java.lang.Character",-1))); - - - testInferenceOwnTypeByMethodCall.addMethod(m1); - testInferenceOwnTypeByMethodCall.addMethod(m2); - testInferenceOwnTypeByMethodCall.addMethod(m3); - - testInferenceOwnTypeByMethodCall.addMethod(m01); - testInferenceOwnTypeByMethodCall.addMethod(m02); - testInferenceOwnTypeByMethodCall.addMethod(m03); - - - return new Expectation(testInferenceOwnTypeByMethodCall); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.jav deleted file mode 100755 index 4bb4bcce..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.jav +++ /dev/null @@ -1,18 +0,0 @@ -class A{ - public mA(x){ - return(x); - } -} - -class TestInferenceOwnTypeByMethodCallAcrossClasses{ - - public m(Integer a, String b){ - x; - x=new A(); - c; - c=x.mA(a); - d; - d=x.mA(b); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.java deleted file mode 100755 index 7ece1945..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodCallAcrossClasses.java +++ /dev/null @@ -1,55 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.GenericTypeVarExpect; - -/** - * 28-04-08 - * @author - * - * tests method call across classes - */ - -public class TestInferenceOwnTypeByMethodCallAcrossClasses extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMethodCallAcrossClasses"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMethodCallAcrossClasses(String name) { - super(name,TestInferenceOwnTypeByMethodCallAcrossClasses.JAVPATH+TestInferenceOwnTypeByMethodCallAcrossClasses.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect a = new ClassExpect("A"); - ClassExpect testInferenceOwnTypeByMethodCallAcrossClasses = new ClassExpect(TestInferenceOwnTypeByMethodCallAcrossClasses.TESTEDCLASSNAME); - //Member - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("void",-1),0); - m.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - m.addParameter(new VarExpect("b",new RefType("java.lang.String",-1))); - m.getBlock().addLocalVar(new VarExpect("c",new RefType("java.lang.Integer",-1))); - m.getBlock().addLocalVar(new VarExpect("d",new RefType("java.lang.String",-1))); - m.getBlock().addLocalVar(new VarExpect("x",new RefType("A",-1))); - - - MethodExpect mA = new MethodExpect("mA",new GenericTypeVarExpect("a")); - mA.addParameter(new VarExpect("x",new GenericTypeVarExpect("a"))); - - - testInferenceOwnTypeByMethodCallAcrossClasses.addMethod(m); - a.addMethod(mA); - - Expectation ret = new Expectation(testInferenceOwnTypeByMethodCallAcrossClasses); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.jav deleted file mode 100755 index 0970988f..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.jav +++ /dev/null @@ -1,19 +0,0 @@ -class A { - static void m() {} -} - -public class TestInferenceOwnTypeByMethodParameter { - - m1(a,b) { - return a+b; - } - - m2(java.lang.String a) { - return a; - } - - m3(a) { - return a.m(); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java deleted file mode 100755 index c6f5d942..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodParameter.java +++ /dev/null @@ -1,61 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** - * 28-04-08 - * @author - * - * checks inference by method parameter - */ - -public class TestInferenceOwnTypeByMethodParameter extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMethodParameter"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMethodParameter(String name) { - super(name,TestInferenceOwnTypeByMethodParameter.JAVPATH+TestInferenceOwnTypeByMethodParameter.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect a = new ClassExpect("A"); - ClassExpect testInferenceOwnTypeByMethodParameter = new ClassExpect(TestInferenceOwnTypeByMethodParameter.TESTEDCLASSNAME); - //Member - - //Methods - MethodExpect m = new MethodExpect("m", new RefType("void",-1)); - - MethodExpect m1 = new MethodExpect("m1"); - m1.setReturntypes(createMengeAllNumberTypes()); - VarExpect m1a = new VarExpect("a"); - VarExpect m1b = new VarExpect("b"); - m1a.setExpectedType(createMengeAllNumberTypes()); - m1b.setExpectedType(createMengeAllNumberTypes()); - m1.addParameter(m1a); - m1.addParameter(m1b); - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.String",-1)); - m2.addParameter(new VarExpect("a", new RefType("java.lang.String",-1))); - - - MethodExpect m3 = new MethodExpect("m3",new RefType("void",-1),0); - m3.addParameter(new VarExpect("a",new RefType("A",-1))); - - testInferenceOwnTypeByMethodParameter.addMethod(m1); - testInferenceOwnTypeByMethodParameter.addMethod(m2); - testInferenceOwnTypeByMethodParameter.addMethod(m3); - a.addMethod(m); - - Expectation ret = new Expectation(testInferenceOwnTypeByMethodParameter); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.jav deleted file mode 100755 index b6e341d3..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.jav +++ /dev/null @@ -1,20 +0,0 @@ -class A1{ - void foo(java.lang.String x){} -} -class A2{ - void foo(java.lang.Integer y){} -} -class B1{ - java.lang.String bar(){return("");} -} -class B2{ - java.lang.Integer bar(){return(1);} -} -public class TestInferenceOwnTypeByMethodReturnTypeMixed1{ - method1(a,b){ - a.foo(b.bar()); - } - method2(a,B2 b) { - a.foo(b.bar()); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.java deleted file mode 100755 index a771f483..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByMethodReturnTypeMixed1.java +++ /dev/null @@ -1,71 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; -/** -* 26-04-08 -* @author -* -* identifying type of a variable by parameter passed to a method of another class -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestInferenceOwnTypeByMethodReturnTypeMixed1 extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByMethodReturnTypeMixed1"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByMethodReturnTypeMixed1(String name) { - super(name,TestInferenceOwnTypeByMethodReturnTypeMixed1.JAVPATH+TestInferenceOwnTypeByMethodReturnTypeMixed1.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect testInferenceOwnTypeByMethodReturnTypeMixed1 = new ClassExpect(TestInferenceOwnTypeByMethodReturnTypeMixed1.TESTEDCLASSNAME); - ClassExpect a1 = new ClassExpect("A1"); - ClassExpect a2 = new ClassExpect("A2"); - ClassExpect b1 = new ClassExpect("B1"); - ClassExpect b2 = new ClassExpect("B2"); - - //Methods - MethodExpect method1 = new MethodExpect("method1",new RefType("void",-1)); - MethodExpect method2 = new MethodExpect("method2",new RefType("void",-1)); - VarExpect method1a = new VarExpect("a",new RefType("A1",-1)); - method1a.addExpectedType(new RefType("A2",-1)); - VarExpect method1b = new VarExpect("b",new RefType("B1",-1)); - method1b.addExpectedType(new RefType("B2",-1)); - method1.addParameter(method1a); - method1.addParameter(method1b); - method2.addParameter(new VarExpect("a", new RefType("A2",-1))); - method2.addParameter(new VarExpect("b", new RefType("B2",-1))); - - - MethodExpect foo1 = new MethodExpect("foo", new RefType("void",-1)); - foo1.addParameter(new VarExpect("x", new RefType("java.lang.String",-1))); - MethodExpect foo2 = new MethodExpect("foo", new RefType("void",-1)); - foo2.addParameter(new VarExpect("y", new RefType("java.lang.Integer",-1))); - - MethodExpect bar1 = new MethodExpect("bar", new RefType("java.lang.String",-1)); - MethodExpect bar2 = new MethodExpect("bar", new RefType("java.lang.Integer",-1)); - - - testInferenceOwnTypeByMethodReturnTypeMixed1.addMethod(method1); - testInferenceOwnTypeByMethodReturnTypeMixed1.addMethod(method2); - a1.addMethod(foo1); - a2.addMethod(foo2); - b1.addMethod(bar1); - b2.addMethod(bar2); - - Expectation ret = new Expectation(testInferenceOwnTypeByMethodReturnTypeMixed1); - ret.addClass(a1); - ret.addClass(a2); - ret.addClass(b1); - ret.addClass(b2); - - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.jav deleted file mode 100755 index 559fde50..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.jav +++ /dev/null @@ -1,18 +0,0 @@ -public class TestInferenceOwnTypeByReturnType { - - public java.lang.Integer m1(a) { - return a; - } - - public String m2() { - return "abc"; - } - - public void m3(a) { - a=m2(); - } - - public java.lang.Integer m4(a,b) { - return a+b; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.java deleted file mode 100755 index 81b10adf..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnType.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 28-04-08 - * @author - * - * checks inference by method return type -*/ - -public class TestInferenceOwnTypeByReturnType extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByReturnType"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByReturnType(String name) { - super(name,TestInferenceOwnTypeByReturnType.JAVPATH+TestInferenceOwnTypeByReturnType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceOwnTypeByReturnType = new ClassExpect(TestInferenceOwnTypeByReturnType.TESTEDCLASSNAME); - //Member - - //Methods - - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1)); - m1.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.String",-1)); - - MethodExpect m3 = new MethodExpect("m3",new RefType("void",-1)); - m3.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - - MethodExpect m4 = new MethodExpect("m4", new RefType("java.lang.Integer",-1)); - m4.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - m4.addParameter(new VarExpect("b", new RefType("java.lang.Integer",-1))); - - testInferenceOwnTypeByReturnType.addMethod(m1); - testInferenceOwnTypeByReturnType.addMethod(m2); - testInferenceOwnTypeByReturnType.addMethod(m3); - testInferenceOwnTypeByReturnType.addMethod(m4); - - - return new Expectation(testInferenceOwnTypeByReturnType); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.jav deleted file mode 100755 index 243df6d9..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.jav +++ /dev/null @@ -1,23 +0,0 @@ -class A{ - public String m() { - return "abc"; - } -} - -class B{ - public Integer m() { - return 1; - } -} - -public class TestInferenceOwnTypeByReturnTypeAcrossClasses { - - public main1(java.lang.Integer i, x){ - i=x.m(); - } - - public main2(i,x) { - i=x.m(); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.java deleted file mode 100755 index bf5c07ac..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceOwnTypeByReturnTypeAcrossClasses.java +++ /dev/null @@ -1,66 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 27-04-08 -* @author -* -* checks inference by return type across classes -*/ -public class TestInferenceOwnTypeByReturnTypeAcrossClasses extends AbstractInferenceTest{ - - private final static String TESTEDCLASSNAME="TestInferenceOwnTypeByReturnTypeAcrossClasses"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceOwnTypeByReturnTypeAcrossClasses(String name) { - super(name,TestInferenceOwnTypeByReturnTypeAcrossClasses.JAVPATH+TestInferenceOwnTypeByReturnTypeAcrossClasses.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect testInferenceOwnTypeByReturnTypeAcrossClasses = new ClassExpect(TestInferenceOwnTypeByReturnTypeAcrossClasses.TESTEDCLASSNAME); - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - - //Methods - MethodExpect main1 = new MethodExpect("main1",new RefType("void",-1),0); - main1.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - main1.addParameter(new VarExpect("x",new RefType("B",-1))); - - MethodExpect main2 = new MethodExpect("main2",new RefType("void",-1),0); - VarExpect main2i = new VarExpect("i", new RefType("java.lang.Integer",-1)); - main2i.addExpectedType(new RefType("java.lang.String",-1)); - main2.addParameter(main2i); - VarExpect main2x = new VarExpect("x", new RefType("A",-1)); - main2x.addExpectedType(new RefType("B",-1)); - main2.addParameter(main2x); - - MethodExpect foo1 = new MethodExpect("foo", new RefType("void",-1)); - foo1.addParameter(new VarExpect("x", new RefType("java.lang.String",-1))); - MethodExpect foo2 = new MethodExpect("foo", new RefType("void",-1)); - foo2.addParameter(new VarExpect("y", new RefType("java.lang.Integer",-1))); - - MethodExpect mA = new MethodExpect("m", new RefType("java.lang.String",-1)); - MethodExpect mB = new MethodExpect("m", new RefType("java.lang.Integer",-1)); - - - testInferenceOwnTypeByReturnTypeAcrossClasses.addMethod(main1); - testInferenceOwnTypeByReturnTypeAcrossClasses.addMethod(main2); - a.addMethod(mA); - b.addMethod(mB); - - Expectation ret = new Expectation(testInferenceOwnTypeByReturnTypeAcrossClasses); - ret.addClass(a); - ret.addClass(b); - - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByMember.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByMember.jav deleted file mode 100755 index a2c370f4..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByMember.jav +++ /dev/null @@ -1,9 +0,0 @@ -import java.lang.System; - -public class TestInferenceStdTypeByMember { - - public m1(a) { - a=System.out; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.jav deleted file mode 100755 index 955a1478..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.jav +++ /dev/null @@ -1,13 +0,0 @@ -import java.util.HashMap; -import java.lang.Object; - -public class TestInferenceStdTypeByOperation { - - public m1(a) { - a.put("1","1"); - } - - public m2(b) { - b.toString(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.java deleted file mode 100755 index c098cf17..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByOperation.java +++ /dev/null @@ -1,47 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** -* 4-05-08 -* @author -* -* checks inference of std types by operation -*/ - -public class TestInferenceStdTypeByOperation extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceStdTypeByOperation"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceStdTypeByOperation(String name) { - super(name,TestInferenceStdTypeByOperation.JAVPATH+TestInferenceStdTypeByOperation.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceStdTypeByOperation = new ClassExpect(TestInferenceStdTypeByOperation.TESTEDCLASSNAME); - //Member - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - m1.addParameter(new VarExpect("a",new RefType("java.util.HashMap",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("void",-1)); - m2.addParameter(new VarExpect("b", new RefType("java.lang.Object",-1))); - - testInferenceStdTypeByOperation.addMethod(m1); - testInferenceStdTypeByOperation.addMethod(m2); - - - return new Expectation(testInferenceStdTypeByOperation); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav deleted file mode 100755 index 7be9e282..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.jav +++ /dev/null @@ -1,18 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; -import java.util.ArrayList; - -public class TestInferenceStdTypeByReturnType { - - public void m1(a) { - b; - b= new Menge(); - a = b.size(); - } - - public void m2(a) { - b; - b= new ArrayList(); - a = b.get(0); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java b/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java deleted file mode 100755 index 73368266..00000000 --- a/test/mycompiler/test/inferenceByCharacteristic/TestInferenceStdTypeByReturnType.java +++ /dev/null @@ -1,80 +0,0 @@ -package mycompiler.test.inferenceByCharacteristic; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** -* 4-05-08 -* @author -* -* checks inference of std types by return type -*/ - -public class TestInferenceStdTypeByReturnType extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInferenceStdTypeByReturnType"; - private final static String JAVPATH="test/mycompiler/test/inferenceByCharacteristic/"; - - public TestInferenceStdTypeByReturnType(String name) { - super(name,TestInferenceStdTypeByReturnType.JAVPATH+TestInferenceStdTypeByReturnType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testInferenceStdTypeByReturnType = new ClassExpect(TestInferenceStdTypeByReturnType.TESTEDCLASSNAME); - //Member - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1)); - m1.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("void",-1)); - m2.addParameter(new VarExpect("a", new RefType("java.lang.Object",-1))); - - - - //Vars - VarExpect m1B= new VarExpect("b"); - Menge paramsm1B1 = new Menge(); - paramsm1B1.add(new RefType("java.lang.String",-1)); - m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B1,-1)); - Menge paramsm1B2 = new Menge(); - paramsm1B2.add(new ExtendsWildcardType(-1,new RefType("java.lang.String",-1))); - m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B2,-1)); - Menge paramsm1B3 = new Menge(); - paramsm1B3.add(new SuperWildcardType(-1,new RefType("java.lang.String",-1))); - m1B.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",paramsm1B3,-1)); - m1.getBlock().addLocalVar(m1B); - - VarExpect m2B= new VarExpect("b"); - Menge paramsm2B1 = new Menge(); - paramsm2B1.add(new RefType("java.lang.String",-1)); - m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B1,-1)); - Menge paramsm2B2 = new Menge(); - paramsm2B2.add(new ExtendsWildcardType(-1,new RefType("java.lang.String",-1))); - m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B2,-1)); - Menge paramsm2B3 = new Menge(); - paramsm2B3.add(new SuperWildcardType(-1,new RefType("java.lang.String",-1))); - m2B.addExpectedType(new RefType("java.util.ArrayList",paramsm2B3,-1)); - m2.getBlock().addLocalVar(m2B); - - - - testInferenceStdTypeByReturnType.addMethod(m1); - testInferenceStdTypeByReturnType.addMethod(m2); - - return new Expectation(testInferenceStdTypeByReturnType); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.java b/test/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.java deleted file mode 100755 index 7bfd2ef5..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/AllTestsInheritance.java +++ /dev/null @@ -1,24 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsInheritance { - - public static Test suite() { - TestSuite suite = new TestSuite( - "Test for mycompiler.test.javaConcepts.inheritance"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestInheritanceCircle.class); - suite.addTestSuite(TestInheritanceMultipleClasses.class); - suite.addTestSuite(TestInheritanceAcrossLevel.class); - suite.addTestSuite(TestInheritanceOverriding.class); - suite.addTestSuite(TestInheritanceConstructor.class); - suite.addTestSuite(TestInheritanceTwoHierarchies.class); - suite.addTestSuite(TestSimpleInheritance.class); - suite.addTestSuite(TestInheritanceMultiple.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.jav deleted file mode 100755 index 05327568..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.jav +++ /dev/null @@ -1,56 +0,0 @@ -/* - A - B C -D E - -*/ - -class A { - fooA() {} -} - -class B extends A { - fooB() {} -} - -class C extends A { - fooC(){} -} - -class D extends B { - fooD() {} -} - -class E extends B { - fooE() {} -} - - - -public class TestInheritanceAcrossLevel { - - public m1(x) { - x.fooA(); - return x; - } - - public m2(x) { - x.fooB(); - /*return x;*/ - } - - public m3(x) { - x.fooC(); - /*return x;*/ - } - - public m4(x) { - x.fooD(); - /*return x;*/ - } - - public m5(B x) { - x.fooA(); - return x; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.java deleted file mode 100755 index 7dbfefb5..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceAcrossLevel.java +++ /dev/null @@ -1,92 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestInheritanceAcrossLevel extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceAcrossLevel"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceAcrossLevel(String name) { - super(name,TestInheritanceAcrossLevel.JAVPATH+TestInheritanceAcrossLevel.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //Classes - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect c = new ClassExpect("C"); - ClassExpect d = new ClassExpect("D"); - ClassExpect e = new ClassExpect("E"); - ClassExpect testInheritanceAcrossLevel = new ClassExpect(TestInheritanceAcrossLevel.TESTEDCLASSNAME); - - //methods - MethodExpect fooA = new MethodExpect("fooA", new RefType("void",-1),0); - MethodExpect fooB = new MethodExpect("fooB", new RefType("void",-1),0); - MethodExpect fooC = new MethodExpect("fooC", new RefType("void",-1),0); - MethodExpect fooD = new MethodExpect("fooD", new RefType("void",-1),0); - MethodExpect fooE = new MethodExpect("fooE", new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("m1",new RefType("A",-1),0); - m1.addReturntype(new RefType("B",-1)); - m1.addReturntype(new RefType("C",-1)); - m1.addReturntype(new RefType("D",-1)); - m1.addReturntype(new RefType("E",-1)); - VarExpect x1 = new VarExpect("x",new RefType("A",-1)); - x1.addExpectedType(new RefType("B",-1)); - x1.addExpectedType(new RefType("C",-1)); - x1.addExpectedType(new RefType("D",-1)); - x1.addExpectedType(new RefType("E",-1)); - m1.addParameter(x1); - - MethodExpect m2 = new MethodExpect("m2",new RefType("void",-1),0); - VarExpect x2 = new VarExpect("x",new RefType("B",-1)); - x2.addExpectedType(new RefType("D",-1)); - x2.addExpectedType(new RefType("E",-1)); - m2.addParameter(x2); - - MethodExpect m3 = new MethodExpect("m3",new RefType("void",-1),0); - VarExpect x3 = new VarExpect("x",new RefType("C",-1)); - m3.addParameter(x3); - - MethodExpect m4 = new MethodExpect("m4",new RefType("void",-1),0); - VarExpect x4 = new VarExpect("x",new RefType("D",-1)); - m4.addParameter(x4); - - MethodExpect m5 = new MethodExpect("m5",new RefType("A",-1),0); - VarExpect x5 = new VarExpect("x",new RefType("B",-1)); - m5.addReturntype(new RefType("B",-1)); - m5.addParameter(x5); - - //adding methods to classes - a.addMethod(fooA); - b.addMethod(fooB); - c.addMethod(fooC); - d.addMethod(fooD); - e.addMethod(fooE); - - - testInheritanceAcrossLevel.addMethod(m1); - testInheritanceAcrossLevel.addMethod(m2); - testInheritanceAcrossLevel.addMethod(m3); - testInheritanceAcrossLevel.addMethod(m4); - testInheritanceAcrossLevel.addMethod(m5); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceAcrossLevel); - ret.addClass(a); - ret.addClass(b); - ret.addClass(c); - ret.addClass(d); - ret.addClass(e); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.jav deleted file mode 100755 index 354e09f5..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.jav +++ /dev/null @@ -1,41 +0,0 @@ -/* - - A - B C - D -*/ - -interface A{ - fooA(); -} - -interface B extends A{ - fooB(); -} - -interface C extends A{} - -class D implements B,C { - fooA() { - } - fooB() { - } -} - -public class TestInheritanceCircle{ - - public m1(x) { - x.fooA(); - /*return x;*/ - } - - public m2(x) { - x.fooB(); - /*return x;*/ - } - public m3(D x) { - x.fooA(); - return x; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.java deleted file mode 100755 index 2184b449..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceCircle.java +++ /dev/null @@ -1,82 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; - - -/* - * Testcase currently adjusted to compiler implementation - */ - -public class TestInheritanceCircle extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceCircle"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceCircle(String name) { - super(name,TestInheritanceCircle.JAVPATH+TestInheritanceCircle.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //Interfaces - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect c = new ClassExpect("C"); - //classes - ClassExpect d = new ClassExpect("D"); - ClassExpect testInheritanceCircle = new ClassExpect(TestInheritanceCircle.TESTEDCLASSNAME); - - //methods - //return type should not be "null" since implementation shows "void" -> Testcase adjusted to current compiler implementation, but shall be changed as soon as adapted - MethodExpect fooAa = new MethodExpect("fooA", new TypePlaceholderExpect("a")); - MethodExpect fooBb = new MethodExpect("fooB", new TypePlaceholderExpect("b")); - MethodExpect fooAd = new MethodExpect("fooA", new RefType("void",-1) ,0); - MethodExpect fooBd = new MethodExpect("fooB", new RefType("void",-1),0); - - - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1),0); - VarExpect x1 = new VarExpect("x",new RefType("A",-1)); - x1.addExpectedType(new RefType("B",-1)); - x1.addExpectedType(new RefType("C",-1)); - x1.addExpectedType(new RefType("D",-1)); - m1.addParameter(x1); - - MethodExpect m2 = new MethodExpect("m2",new RefType("void",-1),0); - VarExpect x2 = new VarExpect("x",new RefType("B",-1)); - x2.addExpectedType(new RefType("D",-1)); - m2.addParameter(x2); - - MethodExpect m3 = new MethodExpect("m3",new RefType("B",-1),0); - m3.addReturntype(new RefType("A",-1)); - m3.addReturntype(new RefType("C",-1)); - m3.addReturntype(new RefType("D",-1)); - VarExpect x3 = new VarExpect("x",new RefType("D",-1)); - m3.addParameter(x3); - - //adding methods to classes - a.addMethod(fooAa); - b.addMethod(fooBb); - d.addMethod(fooAd); - d.addMethod(fooBd); - - testInheritanceCircle.addMethod(m1); - testInheritanceCircle.addMethod(m2); - testInheritanceCircle.addMethod(m3); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceCircle); - ret.addClass(a); - ret.addClass(b); - ret.addClass(c); - ret.addClass(d); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.jav deleted file mode 100755 index 11073ccf..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.jav +++ /dev/null @@ -1,27 +0,0 @@ -class A { - public Integer memberInteger; - - public A(i) { - member=i; - } - -} - -class B extends A { - public String memberString; - public B(i,s) { - super(i); - memberString=s; - } -} - -public class TestInheritanceConstructor { - - public static main() { - x; - x=new B(3,"abc"); - y; - y=x.memberInteger; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.java deleted file mode 100755 index 7552296f..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceConstructor.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/* - * Testcase currently adjusted to compiler implementation - */ - -public class TestInheritanceConstructor extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceConstructor"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceConstructor(String name) { - super(name,TestInheritanceConstructor.JAVPATH+TestInheritanceConstructor.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect a = new ClassExpect("A"); - a.addMember(new VarExpect("memberInteger",new RefType("java.lang.Integer",-1))); - ClassExpect b = new ClassExpect("B"); - b.addMember(new VarExpect("memberString",new RefType("java.lang.String",-1))); - ClassExpect testInheritanceConstructor = new ClassExpect(TestInheritanceConstructor.TESTEDCLASSNAME); - - //methods - MethodExpect aA = new MethodExpect("A", new RefType("void",-1)); - aA.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - MethodExpect bB = new MethodExpect("B", new RefType("void",-1)); - bB.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - bB.addParameter(new VarExpect("s",new RefType("java.lang.String",-1))); - MethodExpect main = new MethodExpect("main",new RefType("void",-1)); - main.getBlock().addLocalVar(new VarExpect("x",new RefType("B",-1))); - main.getBlock().addLocalVar(new VarExpect("y",new RefType("java.lang.Integer",-1))); - - //adding methods to classes - a.addMethod(aA); - b.addMethod(bB); - - testInheritanceConstructor.addMethod(main); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceConstructor); - ret.addClass(a); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.jav deleted file mode 100755 index 63b6a199..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.jav +++ /dev/null @@ -1,22 +0,0 @@ -interface A{ -} -interface B{} - -class Tester implements A,B{ - m(){ - } -} - -public class TestInheritanceMultiple{ - - /*should return either of Type Intf1, Intf2, or Tester*/ - public m1(x){ - x.m(); - return(x); - } - - public m2(Tester x){ - x.m(); - return x; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.java deleted file mode 100755 index bf44556b..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultiple.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestInheritanceMultiple extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceMultiple"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceMultiple(String name) { - super(name,TestInheritanceMultiple.JAVPATH+TestInheritanceMultiple.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //Interfaces - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - //classes - ClassExpect tester = new ClassExpect("Tester"); - ClassExpect testInheritanceMultiple = new ClassExpect(TestInheritanceMultiple.TESTEDCLASSNAME); - - //methods - MethodExpect m = new MethodExpect("m", new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("m1",new RefType("Tester",-1),0); - m1.addReturntype(new RefType("A",-1)); - m1.addReturntype(new RefType("B",-1)); - VarExpect x1 = new VarExpect("x",new RefType("Tester",-1)); - m1.addParameter(x1); - - MethodExpect m2 = new MethodExpect("m2",new RefType("Tester",-1),0); - VarExpect x2 = new VarExpect("x",new RefType("Tester",-1)); - m2.addReturntype(new RefType("A",-1)); - m2.addReturntype(new RefType("B",-1)); - m2.addParameter(x2); - - tester.addMethod(m); - testInheritanceMultiple.addMethod(m1); - testInheritanceMultiple.addMethod(m2); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceMultiple); - ret.addClass(a); - ret.addClass(b); - ret.addClass(tester); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.jav deleted file mode 100755 index 70241b36..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.jav +++ /dev/null @@ -1,8 +0,0 @@ - -class A {} - -class B {} - -public class TestInheritanceMultipleClasses extends A, B { - -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.java deleted file mode 100755 index 04b0526e..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceMultipleClasses.java +++ /dev/null @@ -1,34 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; - -public class TestInheritanceMultipleClasses extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceMultipleClasses"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceMultipleClasses(String name) { - super(name,TestInheritanceMultipleClasses.JAVPATH+TestInheritanceMultipleClasses.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect testInheritanceMultipleClasses = new ClassExpect(TestInheritanceMultipleClasses.TESTEDCLASSNAME); - - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceMultipleClasses); - ret.addClass(a); - ret.addClass(b); - //multiple inheritance of classes not possible in java - ret.addException(new Exception()); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.jav deleted file mode 100755 index 7690516b..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.jav +++ /dev/null @@ -1,27 +0,0 @@ -class A{ - public m() { - return new A(); - } -} - -class B extends A{ - - public m() { - return new B(); - } - public m(java.lang.Integer a) { - return a; - } -} - -public class TestInheritanceOverriding { - - public main1(x,A y) { - y = new B(); - x = y.m(); - } - /*public main2(x) { - y; - y=x.m(2); - }*/ -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.java deleted file mode 100755 index 498ebdec..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceOverriding.java +++ /dev/null @@ -1,55 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestInheritanceOverriding extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceOverriding"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceOverriding(String name) { - super(name,TestInheritanceOverriding.JAVPATH+TestInheritanceOverriding.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect testInheritanceOverriding = new ClassExpect(TestInheritanceOverriding.TESTEDCLASSNAME); - - //methods - MethodExpect ma = new MethodExpect("m", new RefType("A",-1)); - MethodExpect mb1 = new MethodExpect("m", new RefType("B",-1)); - mb1.addReturntype(new RefType("A",-1)); - MethodExpect mb2 = new MethodExpect("m", new RefType("java.lang.Integer",-1)); - mb2.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - - MethodExpect main1 = new MethodExpect("main1",new RefType("void",-1)); - main1.addParameter(new VarExpect("x", new RefType("A",-1))); - main1.addParameter(new VarExpect("y", new RefType("A",-1))); - - MethodExpect main2 = new MethodExpect("main2",new RefType("void",-1)); - main2.addParameter(new VarExpect("x", new RefType("B",-1))); - main2.getBlock().addLocalVar(new VarExpect("y", new RefType("java.lang.Integer",-1))); - - a.addMethod(ma); - b.addMethod(mb1); - b.addMethod(mb2); - testInheritanceOverriding.addMethod(main1); - //testInheritanceOverriding.addMethod(main2); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceOverriding); - ret.addClass(a); - ret.addClass(b); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.jav b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.jav deleted file mode 100755 index df2f7dca..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.jav +++ /dev/null @@ -1,37 +0,0 @@ - -/* - - A I - B C D -E F - -*/ -interface I{ - void fooA(); -} -class A{ - void fooA() {} -} -class B extends A{} - -class C extends A implements I{} - -class D implements I{ - fooD() {} -} -class E extends B {} - -class F extends C{} - -public class TestInheritanceTwoHierarchies { - - public m1(x) { - x.fooA(); - return x; - } - - public m2(x) { - x.fooD(); - return x; - } -} diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.java b/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.java deleted file mode 100755 index 32d98791..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestInheritanceTwoHierarchies.java +++ /dev/null @@ -1,83 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestInheritanceTwoHierarchies extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceTwoHierarchies"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceTwoHierarchies(String name) { - super(name,TestInheritanceTwoHierarchies.JAVPATH+TestInheritanceTwoHierarchies.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //interfaces - ClassExpect i = new ClassExpect("I"); - - //Classes - ClassExpect a = new ClassExpect("A"); - ClassExpect b = new ClassExpect("B"); - ClassExpect c = new ClassExpect("C"); - ClassExpect d = new ClassExpect("D"); - ClassExpect e = new ClassExpect("E"); - ClassExpect f = new ClassExpect("F"); - ClassExpect testInheritanceTwoHierarchies = new ClassExpect(TestInheritanceTwoHierarchies.TESTEDCLASSNAME); - - //methods - MethodExpect fooAa = new MethodExpect("fooA", new RefType("void",-1),0); - MethodExpect fooAi = new MethodExpect("fooA", new RefType("void",-1),0); - MethodExpect fooD = new MethodExpect("fooD", new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("m1",new RefType("A",-1),0); - m1.addReturntype(new RefType("B",-1)); - m1.addReturntype(new RefType("C",-1)); - m1.addReturntype(new RefType("D",-1)); - m1.addReturntype(new RefType("E",-1)); - m1.addReturntype(new RefType("F",-1)); - m1.addReturntype(new RefType("I",-1)); - VarExpect x1 = new VarExpect("x",new RefType("A",-1)); - x1.addExpectedType(new RefType("B",-1)); - x1.addExpectedType(new RefType("C",-1)); - x1.addExpectedType(new RefType("D",-1)); - x1.addExpectedType(new RefType("E",-1)); - x1.addExpectedType(new RefType("F",-1)); - x1.addExpectedType(new RefType("I",-1)); - m1.addParameter(x1); - - MethodExpect m2 = new MethodExpect("m2",new RefType("I",-1),0); - m2.addReturntype(new RefType("D",-1)); - VarExpect x2 = new VarExpect("x",new RefType("D",-1)); - m2.addParameter(x2); - - - //adding methods to classes - a.addMethod(fooAa); - d.addMethod(fooD); - i.addMethod(fooAi); - - - testInheritanceTwoHierarchies.addMethod(m1); - testInheritanceTwoHierarchies.addMethod(m2); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceTwoHierarchies); - ret.addClass(a); - ret.addClass(b); - ret.addClass(c); - ret.addClass(d); - ret.addClass(e); - ret.addClass(f); - ret.addClass(i); - - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.jav b/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.jav deleted file mode 100755 index 3a0c0639..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.jav +++ /dev/null @@ -1,13 +0,0 @@ - -class A { - - public m1() { - } -} - -public class TestSimpleInheritance extends A { - - public m(x) { - x.m1(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.java b/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.java deleted file mode 100755 index 1eaa2d3d..00000000 --- a/test/mycompiler/test/javaConcepts/inheritance/TestSimpleInheritance.java +++ /dev/null @@ -1,42 +0,0 @@ -package mycompiler.test.javaConcepts.inheritance; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestSimpleInheritance extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestSimpleInheritance"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestSimpleInheritance(String name) { - super(name,TestSimpleInheritance.JAVPATH+TestSimpleInheritance.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect a = new ClassExpect("A"); - ClassExpect testSimpleInheritance = new ClassExpect(TestSimpleInheritance.TESTEDCLASSNAME); - - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1),0); - - MethodExpect m = new MethodExpect("m",new RefType("void",-1),0); - VarExpect x2 = new VarExpect("x",new RefType("A",-1)); - x2.addExpectedType(new RefType(TestSimpleInheritance.TESTEDCLASSNAME,-1)); - m.addParameter(x2); - - a.addMethod(m1); - testSimpleInheritance.addMethod(m); - - //adding classes to Expectation - Expectation ret = new Expectation(testSimpleInheritance); - ret.addClass(a); - return ret; - } - -} - diff --git a/test/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.java b/test/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.java deleted file mode 100755 index 9bedaa69..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/AllTestsOverloading.java +++ /dev/null @@ -1,31 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsOverloading { - - public static Test suite() { - TestSuite suite = new TestSuite( - "Test for mycompiler.test.javaConcepts.overloading"); - //$JUnit-BEGIN$ - suite.addTestSuite(OverloadingNotSameHierarchy.class); - suite - .addTestSuite(OverloadingDifferentNumberOfParametersAndDifferentTypes.class); - suite.addTestSuite(OverloadingTypeInferenceSameHierarchy.class); - suite.addTestSuite(OverloadingGenericSameHierarchy.class); - suite.addTestSuite(OverloadingSameSignature.class); - suite.addTestSuite(OverloadingSameHierarchy.class); - suite.addTestSuite(OverloadingSameSignatureGenerics.class); - suite.addTestSuite(OverloadingGenericTypeInferenceSameHierarchy.class); - suite.addTestSuite(OverloadingSameSignatureDifferentReturnTypes.class); - suite.addTestSuite(OverloadingTypeInferenceNotSameHierarchy.class); - suite.addTestSuite(OverloadingDifferentNumberOfParameters.class); - suite.addTestSuite(OverloadingGenericNotSameHierarchy.class); - suite - .addTestSuite(OverloadingGenericTypeInferenceNotSameHierarchy.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.jav deleted file mode 100755 index 27139295..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.jav +++ /dev/null @@ -1,6 +0,0 @@ -class OverloadingDifferentNumberOfParameters{ - void foo(){} - void foo(Integer a){} - void foo(Integer a, Double b){} - void foo(Integer a, Double b, Long c){} -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.java deleted file mode 100755 index 89404d4d..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParameters.java +++ /dev/null @@ -1,51 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingDifferentNumberOfParameters extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingDifferentNumberOfParameters"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingDifferentNumberOfParameters(String name) { - super(name,OverloadingDifferentNumberOfParameters.JAVPATH+OverloadingDifferentNumberOfParameters.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingDifferentNumberOfParameters.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - m1.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),0); - m2.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - m2.addParameter(new VarExpect("b",new RefType("java.lang.Double",-1))); - - MethodExpect m3 = new MethodExpect("foo",new RefType("void",-1),0); - m3.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - m3.addParameter(new VarExpect("b",new RefType("java.lang.Double",-1))); - m3.addParameter(new VarExpect("c",new RefType("java.lang.Long",-1))); - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - overloading.addMethod(m3); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.jav deleted file mode 100755 index 5cc96afc..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.jav +++ /dev/null @@ -1,9 +0,0 @@ -class OverloadingDifferentNumberOfParametersAndDifferentTypes{ - void foo(){} - void foo(Integer a){} - void foo(Integer a, Double b){} - void foo(Integer a, Double b, Long c){} - void foo(String a){} - void foo(String a, Integer b){} - void foo(String a, Integer b, Long c){} -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.java deleted file mode 100755 index e7b1b28f..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingDifferentNumberOfParametersAndDifferentTypes.java +++ /dev/null @@ -1,66 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingDifferentNumberOfParametersAndDifferentTypes extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingDifferentNumberOfParametersAndDifferentTypes"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingDifferentNumberOfParametersAndDifferentTypes(String name) { - super(name,OverloadingDifferentNumberOfParametersAndDifferentTypes.JAVPATH+OverloadingDifferentNumberOfParametersAndDifferentTypes.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingDifferentNumberOfParametersAndDifferentTypes.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - m1.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),0); - m2.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - m2.addParameter(new VarExpect("b",new RefType("java.lang.Double",-1))); - - MethodExpect m3 = new MethodExpect("foo",new RefType("void",-1),0); - m3.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - m3.addParameter(new VarExpect("b",new RefType("java.lang.Double",-1))); - m3.addParameter(new VarExpect("c",new RefType("java.lang.Long",-1))); - - MethodExpect m4 = new MethodExpect("foo",new RefType("void",-1),1); - m4.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - - MethodExpect m5 = new MethodExpect("foo",new RefType("void",-1),1); - m5.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - m5.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - - MethodExpect m6 = new MethodExpect("foo",new RefType("void",-1),1); - m6.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - m6.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - m6.addParameter(new VarExpect("c",new RefType("java.lang.Long",-1))); - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - overloading.addMethod(m3); - overloading.addMethod(m4); - overloading.addMethod(m5); - overloading.addMethod(m6); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav deleted file mode 100755 index 50bae3e0..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.jav +++ /dev/null @@ -1,13 +0,0 @@ -/* -Diese Klasse ueberlaed eine Methoden bei total Typverschiedenen generischen parametern (nicht gleiche Vererbungshierarchie -*/ -class OverloadingGenericNotSameHierarchy{ - - void foo(){} - void foo(T n){} - void foo(T v){} - -/* - void foo(T n){} - */ -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java deleted file mode 100755 index 7c721a48..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericNotSameHierarchy.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingGenericNotSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingGenericNotSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingGenericNotSameHierarchy(String name) { - super(name,OverloadingGenericNotSameHierarchy.JAVPATH+OverloadingGenericNotSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingGenericNotSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Menge bounds = new Menge(); - bounds.add(new RefType("Number",-1)); - BoundedGenericTypeVar boundedGenericT = new BoundedGenericTypeVar("T",bounds,-1); - m1.addGeneric(boundedGenericT); - m1.addParameter(new VarExpect("n",boundedGenericT)); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Menge bounds2 = new Menge(); - bounds2.add(new RefType("de.dhbwstuttgart.typeinference.Menge",-1)); - BoundedGenericTypeVar boundedGenericT2 = new BoundedGenericTypeVar("T",bounds2,-1); - m2.addGeneric(boundedGenericT2); - m2.addParameter(new VarExpect("v",boundedGenericT2)); - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.jav deleted file mode 100755 index 7db40652..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.jav +++ /dev/null @@ -1,8 +0,0 @@ -/* -Diese Klasse ueberlaedt eine Methoden bei verschiedenen generischen Typen von Parametern welche in der gleichen Vererbungshierarchie liegen*/ - -class OverloadingGenericSameHierarchy { - void foo(T o){} - void foo(T n){} - void foo(T i){} -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java deleted file mode 100755 index fc4b6996..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericSameHierarchy.java +++ /dev/null @@ -1,61 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingGenericSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingGenericSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingGenericSameHierarchy(String name) { - super(name,OverloadingGenericSameHierarchy.JAVPATH+OverloadingGenericSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingGenericSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - Menge bounds0 = new Menge(); - bounds0.add(new RefType("Object",-1)); - BoundedGenericTypeVar boundedGenericT0 = new BoundedGenericTypeVar("T",bounds0,-1); - m0.addGeneric(boundedGenericT0); - m0.addParameter(new VarExpect("o",boundedGenericT0)); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - Menge bounds1 = new Menge(); - bounds1.add(new RefType("Number",-1)); - BoundedGenericTypeVar boundedGenericT1 = new BoundedGenericTypeVar("T",bounds1,-1); - m1.addGeneric(boundedGenericT1); - m1.addParameter(new VarExpect("n",boundedGenericT1)); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),2); - Menge bounds2 = new Menge(); - bounds2.add(new RefType("java.lang.Integer",-1)); - BoundedGenericTypeVar boundedGenericT2 = new BoundedGenericTypeVar("T",bounds2,-1); - m2.addGeneric(boundedGenericT2); - m2.addParameter(new VarExpect("i",boundedGenericT2)); - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav deleted file mode 100755 index b2dec67e..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.jav +++ /dev/null @@ -1,19 +0,0 @@ -/* -Diese Klasse ueberlaedt eine Methode durch Typinferenz erkannte generische typverschiedenen Tarametern (nicht gleiche Vererbungshierarchie) -*/ - -import de.dhbwstuttgart.typeinference.Menge; - -class A { - -} - -class OverloadingGenericTypeInferenceNotSameHierarchy{ - foo(){} - foo(i){ - i = new A(); - } - foo(s){ - s = new Menge(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java deleted file mode 100755 index f924c18a..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceNotSameHierarchy.java +++ /dev/null @@ -1,77 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingGenericTypeInferenceNotSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingGenericTypeInferenceNotSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingGenericTypeInferenceNotSameHierarchy(String name) { - super(name,OverloadingGenericTypeInferenceNotSameHierarchy.JAVPATH+OverloadingGenericTypeInferenceNotSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect a = new ClassExpect("A"); - a.addGeneric(new GenericTypeVar("T",-1)); - - ClassExpect overloading = new ClassExpect(OverloadingGenericTypeInferenceNotSameHierarchy.TESTEDCLASSNAME); - overloading.addGeneric(new GenericTypeVar("T",-1)); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1)); -// m0.addParameter(new VarExpect("o",boundedGenericT0)); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Menge bounds1a = new Menge(); - bounds1a.add(new RefType("java.lang.Double",-1)); - Menge bounds1b = new Menge(); - bounds1b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Double",-1))); - Menge bounds1c = new Menge(); - bounds1c.add(new SuperWildcardType(-1,new RefType("java.lang.Double",-1))); - VarExpect i = new VarExpect("i", new RefType("A",bounds1a,-1)); - i.addExpectedType(new RefType("A",bounds1b,-1)); - i.addExpectedType(new RefType("A",bounds1c,-1)); - m1.addParameter(i); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Menge bounds2a = new Menge(); - bounds2a.add(new RefType("java.lang.Integer",-1)); - Menge bounds2b = new Menge(); - bounds2b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge bounds2c = new Menge(); - bounds2c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - VarExpect s = new VarExpect("s",new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2a,-1)); - s.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2b,-1)); - s.addExpectedType(new RefType("de.dhbwstuttgart.typeinference.Menge",bounds2c,-1)); - - m2.addParameter(s); - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - Expectation ret = new Expectation(a); - ret.addClass(overloading); - return ret; - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.jav deleted file mode 100755 index e4af9239..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.jav +++ /dev/null @@ -1,20 +0,0 @@ -/* -Diese Klasse ueberlaedt eine Methoden durch typeinferenz erkannte generische Typverschiedenen parametern welche in der selben Typhierarchie sind*/ -class B{ -} -class C extends B{ -} -class D extends C{ -} -class OverloadingGenericTypeInferenceSameHierarchy{ - foo(i){ - i = new B(); - } - foo(n){ - n = new C(); - } - - foo(o){ - o = new D(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java deleted file mode 100755 index e2549b75..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingGenericTypeInferenceSameHierarchy.java +++ /dev/null @@ -1,91 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingGenericTypeInferenceSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingGenericTypeInferenceSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingGenericTypeInferenceSameHierarchy(String name) { - super(name,OverloadingGenericTypeInferenceSameHierarchy.JAVPATH+OverloadingGenericTypeInferenceSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect b = new ClassExpect("B"); - ClassExpect c = new ClassExpect("C"); - ClassExpect d = new ClassExpect("D"); - ClassExpect overloading = new ClassExpect(OverloadingGenericTypeInferenceSameHierarchy.TESTEDCLASSNAME); - - //generics - b.addGeneric(new GenericTypeVar("T",-1)); - c.addGeneric(new GenericTypeVar("T",-1)); - d.addGeneric(new GenericTypeVar("T",-1)); - - //methods - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - Menge bounds1a = new Menge(); - bounds1a.add(new RefType("java.lang.Integer",-1)); - Menge bounds1b = new Menge(); - bounds1b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge bounds1c = new Menge(); - bounds1c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - VarExpect i = new VarExpect("i", new RefType("B",bounds1a,-1)); - i.addExpectedType(new RefType("B",bounds1b,-1)); - i.addExpectedType(new RefType("B",bounds1c,-1)); - m1.addParameter(i); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - Menge bounds2a = new Menge(); - bounds2a.add(new RefType("java.lang.Integer",-1)); - Menge bounds2b = new Menge(); - bounds2b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge bounds2c = new Menge(); - bounds2c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - VarExpect n = new VarExpect("n", new RefType("B",bounds2a,-1)); - n.addExpectedType(new RefType("B",bounds2b,-1)); - n.addExpectedType(new RefType("B",bounds2c,-1)); - n.addExpectedType(new RefType("C",bounds2a,-1)); - n.addExpectedType(new RefType("C",bounds2b,-1)); - n.addExpectedType(new RefType("C",bounds2c,-1)); - m2.addParameter(n); - MethodExpect m3 = new MethodExpect("foo",new RefType("void",-1),2); - Menge bounds3a = new Menge(); - bounds3a.add(new RefType("java.lang.Integer",-1)); - Menge bounds3b = new Menge(); - bounds3b.add(new ExtendsWildcardType(-1,new RefType("java.lang.Integer",-1))); - Menge bounds3c = new Menge(); - bounds3c.add(new SuperWildcardType(-1,new RefType("java.lang.Integer",-1))); - VarExpect o = new VarExpect("o", new RefType("B",bounds3a,-1)); - o.addExpectedType(new RefType("B",bounds3b,-1)); - o.addExpectedType(new RefType("B",bounds3c,-1)); - o.addExpectedType(new RefType("C",bounds3a,-1)); - o.addExpectedType(new RefType("C",bounds3b,-1)); - o.addExpectedType(new RefType("C",bounds3c,-1)); - o.addExpectedType(new RefType("D",bounds3a,-1)); - o.addExpectedType(new RefType("D",bounds3b,-1)); - o.addExpectedType(new RefType("D",bounds3c,-1)); - m3.addParameter(o); - - overloading.addMethod(m1); - overloading.addMethod(m2); - overloading.addMethod(m3); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.jav deleted file mode 100755 index 2b2e635e..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.jav +++ /dev/null @@ -1,8 +0,0 @@ -/* -Diese Klasse ueberlaed eine Methoden bei total Typverschiedenen parametern (nicht gleiche Vererbungshierarchie -*/ -class OverloadingNotSameHierarchy{ - void foo(){} - void foo(String s){} - void foo(Integer i){} -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.java deleted file mode 100755 index 30f86e92..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingNotSameHierarchy.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingNotSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingNotSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingNotSameHierarchy(String name) { - super(name,OverloadingNotSameHierarchy.JAVPATH+OverloadingNotSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingNotSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),0); - m1.addParameter(new VarExpect("s",new RefType("java.lang.String",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),1); - m2.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.jav deleted file mode 100755 index d622462f..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.jav +++ /dev/null @@ -1,7 +0,0 @@ -/* -Diese Klasse ueberlaedt eine Methoden bei verschiedenen Typen von Parametern welche in der gleichen Vererbungshierarchie liegen*/ -class OverloadingSameHierarchy{ - void foo(java.lang.Number n){} - void foo(java.lang.Integer i){} - void foo(java.lang.Object o){} -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.java deleted file mode 100755 index 63813ef1..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameHierarchy.java +++ /dev/null @@ -1,46 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingSameHierarchy(String name) { - super(name,OverloadingSameHierarchy.JAVPATH+OverloadingSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - m0.addParameter(new VarExpect("n",new RefType("java.lang.Number",-1))); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - m1.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),2); - m2.addParameter(new VarExpect("o",new RefType("java.lang.Object",-1))); - - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.jav deleted file mode 100755 index ff58ff0a..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.jav +++ /dev/null @@ -1,6 +0,0 @@ -class OverloadingSameSignature{ - void foo(){ - } - void foo(){ - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.java deleted file mode 100755 index fe856c0b..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignature.java +++ /dev/null @@ -1,27 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.notUsedAnymore.TestAbstractInferenceTest2; - -public class OverloadingSameSignature extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="OverloadingSameSignature"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingSameSignature(String name) { - super(name,OverloadingSameSignature.JAVPATH+OverloadingSameSignature.TESTEDCLASSNAME + ".jav"); - } - - @Override - protected Expectation getExpectations() { - Expectation expect = new Expectation(null); - expect.addException(new Exception()); - return expect; - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.jav deleted file mode 100755 index 2668cd06..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.jav +++ /dev/null @@ -1,7 +0,0 @@ -class OverloadingSameSignatureDifferentReturnTypes{ - void foo(){ - } - String foo(){ - return "abcd"; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.java deleted file mode 100755 index c42febce..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureDifferentReturnTypes.java +++ /dev/null @@ -1,26 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.Expectation; - -public class OverloadingSameSignatureDifferentReturnTypes extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="OverloadingSameSignatureDifferentReturnTypes"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingSameSignatureDifferentReturnTypes(String name) { - super(name,OverloadingSameSignatureDifferentReturnTypes.JAVPATH+OverloadingSameSignatureDifferentReturnTypes.TESTEDCLASSNAME + ".jav"); - } - - @Override - protected Expectation getExpectations() { - Expectation expect = new Expectation(null); - expect.addException(new Exception()); - return expect; - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.jav deleted file mode 100755 index de6ebda2..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.jav +++ /dev/null @@ -1,8 +0,0 @@ -class OverloadingSameSignatureGenerics{ - T foo(T a){ - return a; - } - void foo(T a){ - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.java deleted file mode 100755 index 8519973a..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingSameSignatureGenerics.java +++ /dev/null @@ -1,25 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.Expectation; - -public class OverloadingSameSignatureGenerics extends AbstractInferenceTest{ - private final static String TESTEDCLASSNAME="OverloadingSameSignatureGenerics"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingSameSignatureGenerics(String name) { - super(name,OverloadingSameSignatureGenerics.JAVPATH+OverloadingSameSignatureGenerics.TESTEDCLASSNAME + ".jav"); - } - - @Override - protected Expectation getExpectations() { - Expectation expect = new Expectation(null); - expect.addException(new Exception()); - return expect; - } -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.jav deleted file mode 100755 index 317fc85c..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.jav +++ /dev/null @@ -1,12 +0,0 @@ -/* -Diese Klasse ueberlaed eine Methoden durch typeinferenz erkannte Typverschiedenen parametern (nicht gleiche Vererbungshierarchie -*/ -class OverloadingTypeInferenceNotSameHierarchy{ - foo(){} - foo(i){ - i = new java.lang.Integer(); - } - foo(s){ - s = "String"; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.java deleted file mode 100755 index 749902f9..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceNotSameHierarchy.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingTypeInferenceNotSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingTypeInferenceNotSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading/"; - - public OverloadingTypeInferenceNotSameHierarchy(String name) { - super(name,OverloadingTypeInferenceNotSameHierarchy.JAVPATH+OverloadingTypeInferenceNotSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingTypeInferenceNotSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - m1.addParameter(new VarExpect("s",new RefType("java.lang.String",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),0); - m2.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.jav b/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.jav deleted file mode 100755 index dc83554c..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.jav +++ /dev/null @@ -1,16 +0,0 @@ -/* -Diese Klasse ueberlaed eine Methoden durch typeinferenz erkannte Typverschiedenen parametern welche in der selben Typhierarchie sind*/ -class OverloadingTypeInferenceSameHierarchy{ - /*i = Integer*/ - foo(i){ - i = new java.lang.Integer(); - } - /*n = Number*/ - foo(n){ - n = new java.lang.Number(); - } - /*o = Object*/ - foo(o){ - o = new java.lang.Object(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.java b/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.java deleted file mode 100755 index 031bd343..00000000 --- a/test/mycompiler/test/javaConcepts/overloading/OverloadingTypeInferenceSameHierarchy.java +++ /dev/null @@ -1,47 +0,0 @@ -package mycompiler.test.javaConcepts.overloading; -/** -* 16-04-08 -* @author -* -* -*/ -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class OverloadingTypeInferenceSameHierarchy extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="OverloadingTypeInferenceSameHierarchy"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/overloading//"; - - public OverloadingTypeInferenceSameHierarchy(String name) { - super(name,OverloadingTypeInferenceSameHierarchy.JAVPATH+OverloadingTypeInferenceSameHierarchy.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(OverloadingTypeInferenceSameHierarchy.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - m0.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - m1.addParameter(new VarExpect("n",new RefType("java.lang.Number",-1))); - - MethodExpect m2 = new MethodExpect("foo",new RefType("void",-1),2); - m2.addParameter(new VarExpect("o",new RefType("java.lang.Object",-1))); - - - - overloading.addMethod(m0); - overloading.addMethod(m1); - overloading.addMethod(m2); - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.java b/test/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.java deleted file mode 100755 index ab4edc30..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/AllTestsStaticAccess.java +++ /dev/null @@ -1,19 +0,0 @@ -package mycompiler.test.javaConcepts.staticAccess; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsStaticAccess { - - public static Test suite() { - TestSuite suite = new TestSuite( - "Test for mycompiler.test.javaConcepts.staticAccess"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestNonStaticAccess.class); - suite.addTestSuite(TestStaticAccess.class); - suite.addTestSuite(TestStaticAccessError.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.jav b/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.jav deleted file mode 100755 index 717d5ed3..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.jav +++ /dev/null @@ -1,19 +0,0 @@ -public class Access{ - - public String nonStaticMember="abc"; - - public nonStaticMethod() { - return "def"; - } - -} - -class TestNonStaticAccess { - - public method1(a,b) { - x; - x = new Access(); - a=x.nonStaticMember; - b=x.nonStaticMethod(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java b/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java deleted file mode 100755 index 441599e6..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestNonStaticAccess.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.javaConcepts.staticAccess; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** -* 22-04-08 -* @author -* Tests non static access of a method or a member -* -*/ -public class TestNonStaticAccess extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestNonStaticAccess"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/staticAccess/"; - - public TestNonStaticAccess(String name) { - super(name,TestNonStaticAccess.JAVPATH+TestNonStaticAccess.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect access = new ClassExpect("Access"); - ClassExpect testNonStaticAccess = new ClassExpect(TestNonStaticAccess.TESTEDCLASSNAME); - - //Methods - MethodExpect method = new MethodExpect("method1",new RefType("void",-1)); - method.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - method.addParameter(new VarExpect("b",new RefType("java.lang.String",-1))); - method.getBlock().addLocalVar(new VarExpect("x",new RefType("Access",-1))); - - MethodExpect nonStaticMethod = new MethodExpect("nonStaticMethod",new RefType("java.lang.String",-1)); - - //add methods to classes - testNonStaticAccess.addMethod(method); - access.addMethod(nonStaticMethod); - - //Member - access.addMember(new VarExpect("nonStaticMember",new RefType("java.lang.String",-1))); - - Expectation ret = new Expectation(testNonStaticAccess); - ret.addClass(access); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.jav b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.jav deleted file mode 100755 index b00c2e8e..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.jav +++ /dev/null @@ -1,18 +0,0 @@ -public class Access{ - - public static String staticMember="def"; - - public static staticMethod() { - return "abc"; - } - -} - -class TestStaticAccess { - - public method1(a,b) { - x; - a=x.staticMember; - b=x.staticMethod(); - } -} diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java deleted file mode 100755 index aa4542be..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccess.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.javaConcepts.staticAccess; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** -* 22-04-08 -* @author -* -* Tests static access of a member or methods -*/ -public class TestStaticAccess extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestStaticAccess"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/staticAccess/"; - - public TestStaticAccess(String name) { - super(name,TestStaticAccess.JAVPATH+TestStaticAccess.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect access = new ClassExpect("Access"); - ClassExpect testStaticAccess = new ClassExpect(TestStaticAccess.TESTEDCLASSNAME); - - //Methods - MethodExpect method = new MethodExpect("method1",new RefType("void",-1)); - method.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - method.addParameter(new VarExpect("b",new RefType("java.lang.String",-1))); - method.getBlock().addLocalVar(new VarExpect("x",new RefType("Access",-1))); - - MethodExpect nonStaticMethod = new MethodExpect("staticMethod",new RefType("java.lang.String",-1)); - - //add methods to classes - testStaticAccess.addMethod(method); - - access.addMethod(nonStaticMethod); - //Member - access.addMember(new VarExpect("staticMember",new RefType("java.lang.String",-1))); - - Expectation ret = new Expectation(testStaticAccess); - ret.addClass(access); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.jav b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.jav deleted file mode 100755 index e7445702..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.jav +++ /dev/null @@ -1,17 +0,0 @@ -public class Access{ - public String nonStaticMember="abc"; - - public nonStaticMethod() { - return "def"; - } - -} - -class TestStaticAccessError { - - public methodError1(a,b) { - x; - a=x.nonStaticMember; - b=x.nonStaticMethod(); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.java b/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.java deleted file mode 100755 index 3c284eb9..00000000 --- a/test/mycompiler/test/javaConcepts/staticAccess/TestStaticAccessError.java +++ /dev/null @@ -1,54 +0,0 @@ -package mycompiler.test.javaConcepts.staticAccess; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 22-04-08 -* @author -* -* checks static access to non-static elements -> should throw erro -*/ - -public class TestStaticAccessError extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestStaticAccessError"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/staticAccess/"; - - public TestStaticAccessError(String name) { - super(name,TestStaticAccessError.JAVPATH+TestStaticAccessError.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect access = new ClassExpect("Access"); - ClassExpect testStaticAccessError = new ClassExpect(TestStaticAccessError.TESTEDCLASSNAME); - - //Methods - MethodExpect method = new MethodExpect("methodError1",new RefType("void",-1)); - method.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - method.addParameter(new VarExpect("b",new RefType("java.lang.String",-1))); - method.getBlock().addLocalVar(new VarExpect("x",new RefType("Access",-1))); - - MethodExpect nonStaticMethod = new MethodExpect("nonStaticMethod",new RefType("java.lang.String",-1)); - - //add methods to classes - testStaticAccessError.addMethod(method); - - access.addMethod(nonStaticMethod); - //Member - access.addMember(new VarExpect("nonStaticMember",new RefType("java.lang.String",-1))); - - Expectation ret = new Expectation(testStaticAccessError); - ret.addClass(access); - //static accessing of objects not possible - ret.addException(new Exception()); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/AllgemeinerLambdaTest1.java b/test/mycompiler/test/lambda/AllgemeinerLambdaTest1.java deleted file mode 100755 index 0d331aff..00000000 --- a/test/mycompiler/test/lambda/AllgemeinerLambdaTest1.java +++ /dev/null @@ -1,28 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class AllgemeinerLambdaTest1 { - private static final String exampleJavFile = "LambdaTest1.jav"; - private static final String classname = "LambdaTest1"; - - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - variableTypeAssumptions.put("var", "String"); - executeTest(); - } - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } - -} diff --git a/test/mycompiler/test/lambda/BasicAssumptions.jav b/test/mycompiler/test/lambda/BasicAssumptions.jav deleted file mode 100755 index 91a38c9c..00000000 --- a/test/mycompiler/test/lambda/BasicAssumptions.jav +++ /dev/null @@ -1,12 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; - -class BasicAssumptionsTest{ - -varString; -var = 2; - -void methode(){ - var = 1; - varString.add(var); -} -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/BasicAssumptionsTest.java b/test/mycompiler/test/lambda/BasicAssumptionsTest.java deleted file mode 100755 index 90b5cf8b..00000000 --- a/test/mycompiler/test/lambda/BasicAssumptionsTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class BasicAssumptionsTest { - private static final String exampleJavFile = "BasicAssumptions.jav"; - private static final String classname = "BasicAssumptionsTest"; - - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - variableTypeAssumptions.put("varString", "java.lang.String"); - executeTest(); - } - - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } - -} diff --git a/test/mycompiler/test/lambda/ConstructorTest.java b/test/mycompiler/test/lambda/ConstructorTest.java deleted file mode 100755 index 1ba00518..00000000 --- a/test/mycompiler/test/lambda/ConstructorTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import de.dhbwstuttgart.typeinference.Menge; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; - -public class ConstructorTest { - - @Test - public void test() { - executeTest(); - } - - private static final Menge exampleJavFiles = new Menge(); - static{ - exampleJavFiles.add("ConstructorTestFile1.jav"); - exampleJavFiles.add("ConstructorTestFile2.jav"); - } - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFiles); - Menge results = tester.runTest(); - int anzahlGeparsterKlassen = 0; - for(TypeinferenceResultSet res : results){ - de.dhbwstuttgart.syntaxtree.Class cl = res.getInterferedClass(); - TypeAssumptions ass = cl.getPublicFieldAssumptions(); - if(cl.getName().equals("ConstructorTest1")){ - anzahlGeparsterKlassen++; - }else if(cl.getName().equals("ConstructorTest2")){ - anzahlGeparsterKlassen++; - assertTrue("ConstructorTest2.var muss vom Typ ConstructorTest1 sein.", ass.getVarType("var",cl).printJavaCode( - res.getUnifiedConstraints()).toString().equals("ConstructorTest1")); - }else fail("Die geparsten Klassen müssen ConstructorTest1 und ConstructorTest2 heißen"); - } - assertTrue("Es müssen insgesamt 2 Klassen inferierd worden sein", anzahlGeparsterKlassen == 2); - } - -} diff --git a/test/mycompiler/test/lambda/ConstructorTestFile1.jav b/test/mycompiler/test/lambda/ConstructorTestFile1.jav deleted file mode 100755 index 1b26e2bb..00000000 --- a/test/mycompiler/test/lambda/ConstructorTestFile1.jav +++ /dev/null @@ -1,8 +0,0 @@ -class ConstructorTest1{ - -ConstructorTest1(){ -var; -var = 1; -} - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/ConstructorTestFile2.jav b/test/mycompiler/test/lambda/ConstructorTestFile2.jav deleted file mode 100755 index d2ce318e..00000000 --- a/test/mycompiler/test/lambda/ConstructorTestFile2.jav +++ /dev/null @@ -1,7 +0,0 @@ -class ConstructorTest2{ -var; - void method(){ - var = new ConstructorTest1(); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/GenericParameterTest.jav b/test/mycompiler/test/lambda/GenericParameterTest.jav deleted file mode 100644 index 2655fe56..00000000 --- a/test/mycompiler/test/lambda/GenericParameterTest.jav +++ /dev/null @@ -1,7 +0,0 @@ -class GenericVarTest{ - Menge test; - method(){ - test = test; - return 1; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/GenericParameterTest.java b/test/mycompiler/test/lambda/GenericParameterTest.java deleted file mode 100644 index f0adfa95..00000000 --- a/test/mycompiler/test/lambda/GenericParameterTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package mycompiler.test.lambda; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class GenericParameterTest { - @Test - public void test() { - executeTest(); - } - - private static final String exampleJavFile = "GenericParameterTest.jav"; - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - TypeinferenceResultSet result1 = tester.runTestAndGetSingularResultSet(); - } -} diff --git a/test/mycompiler/test/lambda/GenericVarTest.jav b/test/mycompiler/test/lambda/GenericVarTest.jav deleted file mode 100755 index 6e6db51b..00000000 --- a/test/mycompiler/test/lambda/GenericVarTest.jav +++ /dev/null @@ -1,7 +0,0 @@ -class GenericVarTest{ - test; - method(){ - test = test; - return 1; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/GenericVarTest.java b/test/mycompiler/test/lambda/GenericVarTest.java deleted file mode 100755 index 9f546dad..00000000 --- a/test/mycompiler/test/lambda/GenericVarTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import de.dhbwstuttgart.typeinference.Menge; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class GenericVarTest { - - @Test - public void test() { - executeTest(); - } - - private static final String exampleJavFile = "GenericVarTest.jav"; - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - TypeinferenceResultSet result1 = tester.runTestAndGetSingularResultSet(); - } - -} diff --git a/test/mycompiler/test/lambda/LambdaTest1.jav b/test/mycompiler/test/lambda/LambdaTest1.jav deleted file mode 100755 index b024385c..00000000 --- a/test/mycompiler/test/lambda/LambdaTest1.jav +++ /dev/null @@ -1,7 +0,0 @@ -class LambdaTest1{ - var = "test"; - - method(String toAppend){ - return (String text) -> { return toAppend;}; - } -} diff --git a/test/mycompiler/test/lambda/OverloadingTest.jav b/test/mycompiler/test/lambda/OverloadingTest.jav deleted file mode 100755 index bdcba2bc..00000000 --- a/test/mycompiler/test/lambda/OverloadingTest.jav +++ /dev/null @@ -1,21 +0,0 @@ -class OverloadingTest{ - - var; - - public clone(){ - return this; - } - - public testMethode(){ - return var.clone(); - } - -} - -class OverloadingTest2{ - - public clone(){ - return this; - } - -} diff --git a/test/mycompiler/test/lambda/OverloadingTest.java b/test/mycompiler/test/lambda/OverloadingTest.java deleted file mode 100755 index 869c3198..00000000 --- a/test/mycompiler/test/lambda/OverloadingTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import de.dhbwstuttgart.typeinference.Menge; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class OverloadingTest { - - @Test - public void test() { - executeTest(); - } - - private static final String exampleJavFile = "OverloadingTest.jav"; - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - Menge result1 = tester.runTest(); - } - -} diff --git a/test/mycompiler/test/lambda/ParseMultipleFilesTest.java b/test/mycompiler/test/lambda/ParseMultipleFilesTest.java deleted file mode 100755 index 47a10a8a..00000000 --- a/test/mycompiler/test/lambda/ParseMultipleFilesTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.lambda; - -import de.dhbwstuttgart.typeinference.Menge; - -import static org.junit.Assert.*; -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; - -public class ParseMultipleFilesTest { - - @Test - public void test() { - executeTest(); - } - - private static final Menge exampleJavFiles = new Menge(); - static{ - exampleJavFiles.add("parseMultipleFilesFile1.jav"); - exampleJavFiles.add("parseMultipleFilesFile2.jav"); - } - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFiles); - Menge results = tester.runTest(); - int anzahlGeparsterKlassen = 0; - for(TypeinferenceResultSet res : results){ - de.dhbwstuttgart.syntaxtree.Class cl = res.getInterferedClass(); - TypeAssumptions ass = cl.getPublicFieldAssumptions(); - if(cl.getName().equals("Klasse1")){ - anzahlGeparsterKlassen++; - assertTrue("Klasse1.var1 muss vom Typ int sein.", ass.getVarType("var1",cl).printJavaCode(res.getUnifiedConstraints()).toString().equals("int")); - }else if(cl.getName().equals("Klasse2")){ - anzahlGeparsterKlassen++; - assertTrue("Klasse1.var1 muss vom Typ Klasse1 sein.", ass.getVarType("var1",cl).printJavaCode(res.getUnifiedConstraints()).toString().equals("Klasse1")); - }else fail("Die geparsten Klassen müssen Klasse1 und Klasse2 heißen"); - } - assertTrue("Es müssen insgesamt 2 Klassen inferierd worden sein", anzahlGeparsterKlassen == 2); - } - -} diff --git a/test/mycompiler/test/lambda/TestAssign.jav b/test/mycompiler/test/lambda/TestAssign.jav deleted file mode 100755 index 17117f18..00000000 --- a/test/mycompiler/test/lambda/TestAssign.jav +++ /dev/null @@ -1,3 +0,0 @@ -class Assign{ -stringVar = "String"; -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestAssign.java b/test/mycompiler/test/lambda/TestAssign.java deleted file mode 100755 index f8aace82..00000000 --- a/test/mycompiler/test/lambda/TestAssign.java +++ /dev/null @@ -1,35 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class TestAssign extends TestCase{ - - private static final String exampleJavFile = "TestAssign.jav"; - private static final String classname = "Assign"; - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - variableTypeAssumptions.put("stringVar", "java.lang.String"); - executeTest(); - } - - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } - - -} diff --git a/test/mycompiler/test/lambda/TestFunN.jav b/test/mycompiler/test/lambda/TestFunN.jav deleted file mode 100755 index 6488fdf7..00000000 --- a/test/mycompiler/test/lambda/TestFunN.jav +++ /dev/null @@ -1,2 +0,0 @@ -class Matrix extends Menge> { -op = (m) -> (f) -> f.apply(this, m); } \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestFunN.java b/test/mycompiler/test/lambda/TestFunN.java deleted file mode 100755 index 6866be67..00000000 --- a/test/mycompiler/test/lambda/TestFunN.java +++ /dev/null @@ -1,29 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class TestFunN { - - private static final String exampleJavFile = "TestFunN.jav"; - private static final String classname = "TestFunN"; - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - //variableTypeAssumptions.put("op", "Fun1"); - executeTest(); - } - - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } -} diff --git a/test/mycompiler/test/lambda/TestIfStmt.jav b/test/mycompiler/test/lambda/TestIfStmt.jav deleted file mode 100755 index b4a244d4..00000000 --- a/test/mycompiler/test/lambda/TestIfStmt.jav +++ /dev/null @@ -1,13 +0,0 @@ -class TestIfStmt { - -methode(){ - var; - if(true){ - var=this; - }else{ - var=this; - } - return 1; -} - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestIfStmt.java b/test/mycompiler/test/lambda/TestIfStmt.java deleted file mode 100755 index d405c4cc..00000000 --- a/test/mycompiler/test/lambda/TestIfStmt.java +++ /dev/null @@ -1,28 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class TestIfStmt { - @Test - public void test() { - variableTypeAssumptions.put("var", "TestIfStmt"); - executeTest(); - } - - private static final String exampleJavFile = "TestIfStmt.jav"; - private static final String classname = "TestIfStmt"; - - private HashMap variableTypeAssumptions = new HashMap(); - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } -} diff --git a/test/mycompiler/test/lambda/TestInterface.jav b/test/mycompiler/test/lambda/TestInterface.jav deleted file mode 100644 index 569e1294..00000000 --- a/test/mycompiler/test/lambda/TestInterface.jav +++ /dev/null @@ -1,9 +0,0 @@ -interface TestInterface{ - methode(); -} - -class TestClass implements TestInterface{ - methode(){ - return "test"; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestInterface.java b/test/mycompiler/test/lambda/TestInterface.java deleted file mode 100644 index a73aa952..00000000 --- a/test/mycompiler/test/lambda/TestInterface.java +++ /dev/null @@ -1,24 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class TestInterface { - @Test - public void test() { - //Testet nur ob ein Interface ohne Fehler geparst und inferiert wird. - executeTest(); - } - - private static final String exampleJavFile = "TestInterface.jav"; - - private HashMap variableTypeAssumptions = new HashMap(); - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTest(); - } -} diff --git a/test/mycompiler/test/lambda/TestLambda.jav b/test/mycompiler/test/lambda/TestLambda.jav deleted file mode 100755 index 36f10734..00000000 --- a/test/mycompiler/test/lambda/TestLambda.jav +++ /dev/null @@ -1,3 +0,0 @@ -class TestLambda{ -op = (test) -> test = "string"; -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestLambda.java b/test/mycompiler/test/lambda/TestLambda.java deleted file mode 100755 index 4c540f48..00000000 --- a/test/mycompiler/test/lambda/TestLambda.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public class TestLambda { - - private static final String exampleJavFile = "TestLambda.jav"; - private static final String classname = "TestLambda"; - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - // Die folgenden 3 Lösungen sind alle richtig. - //TODO: Möglichkeit mehrere richtiger Lösungen beim Test implementieren. - variableTypeAssumptions.put("op", "Fun1"); - variableTypeAssumptions.put("op", "Fun1"); - variableTypeAssumptions.put("op", "Fun1"); - executeTest(); - } - - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - //tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - tester.runTest(); - } - -} diff --git a/test/mycompiler/test/lambda/TestMethodCall.jav b/test/mycompiler/test/lambda/TestMethodCall.jav deleted file mode 100755 index 8abb035b..00000000 --- a/test/mycompiler/test/lambda/TestMethodCall.jav +++ /dev/null @@ -1,17 +0,0 @@ -class TestMethodCall { - -var; - -getSomething(){ - return this; -} - -getSomethingMore(){ - return getSomething(); -} - -void setVar(){ - var = getSomethingMore(); -} - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestMethodCall.java b/test/mycompiler/test/lambda/TestMethodCall.java deleted file mode 100755 index 5e39ba27..00000000 --- a/test/mycompiler/test/lambda/TestMethodCall.java +++ /dev/null @@ -1,29 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class TestMethodCall { - - @Test - public void test() { - variableTypeAssumptions.put("var", "TestMethodCall"); - executeTest(); - } - - private static final String exampleJavFile = "TestMethodCall.jav"; - private static final String classname = "TestMethodCall"; - - private HashMap variableTypeAssumptions = new HashMap(); - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - } - -} diff --git a/test/mycompiler/test/lambda/TestThis.java b/test/mycompiler/test/lambda/TestThis.java deleted file mode 100755 index a03575e5..00000000 --- a/test/mycompiler/test/lambda/TestThis.java +++ /dev/null @@ -1,29 +0,0 @@ -package mycompiler.test.lambda; - -import java.util.HashMap; - -import mycompiler.mytest.LambdaTest; - -import org.junit.Test; - -public class TestThis { - private static final String exampleJavFile = "ThisTest.jav"; - private static final String classname = "ThisTest"; - private HashMap variableTypeAssumptions = new HashMap(); - - - @Test - public void test() { - variableTypeAssumptions.put("thisVar", "ThisTest"); - executeTest(); - } - - - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } - -} diff --git a/test/mycompiler/test/lambda/TestWhile.jav b/test/mycompiler/test/lambda/TestWhile.jav deleted file mode 100755 index 504a72cf..00000000 --- a/test/mycompiler/test/lambda/TestWhile.jav +++ /dev/null @@ -1,10 +0,0 @@ -class WhileTest{ - - var; - public method(){ - while(true){ - var = "String"; - } - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/TestWhile.java b/test/mycompiler/test/lambda/TestWhile.java deleted file mode 100755 index 1c193d6c..00000000 --- a/test/mycompiler/test/lambda/TestWhile.java +++ /dev/null @@ -1,37 +0,0 @@ -package mycompiler.test.lambda; - -import static org.junit.Assert.*; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -import mycompiler.mytest.LambdaTest; -import mycompiler.mytypereconstruction.set.CTypeAssumptionSet; - -import org.junit.Test; - -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; - -public class TestWhile { - - @Test - public void test() { - variableTypeAssumptions.put("var", "String"); - executeTest(); - } - - private static final String exampleJavFile = "TestWhile.jav"; - private static final String classname = "WhileTest"; - - private HashMap variableTypeAssumptions = new HashMap(); - - public void executeTest(){ - LambdaTest tester = new LambdaTest(exampleJavFile); - tester.runTestAndCheckResultSet(classname, variableTypeAssumptions); - - } - -} diff --git a/test/mycompiler/test/lambda/ThisTest.jav b/test/mycompiler/test/lambda/ThisTest.jav deleted file mode 100755 index 0ca72558..00000000 --- a/test/mycompiler/test/lambda/ThisTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class ThisTest{ - -thisVar = this; - -} \ No newline at end of file diff --git a/test/mycompiler/test/lambda/parseMultipleFilesFile1.jav b/test/mycompiler/test/lambda/parseMultipleFilesFile1.jav deleted file mode 100755 index e51527c0..00000000 --- a/test/mycompiler/test/lambda/parseMultipleFilesFile1.jav +++ /dev/null @@ -1,18 +0,0 @@ -class Klasse2 { - -var1; - -testMethode(){ - var1 = new Klasse1(); - return var1.getVar1(); -} - -} - -class Klasse1 { - var1; - - int getVar1(){ - return var1; - } -} diff --git a/test/mycompiler/test/lambda/parseMultipleFilesFile2.jav b/test/mycompiler/test/lambda/parseMultipleFilesFile2.jav deleted file mode 100755 index 47def195..00000000 --- a/test/mycompiler/test/lambda/parseMultipleFilesFile2.jav +++ /dev/null @@ -1,7 +0,0 @@ -class Klasse1 { - var1; - - int getVar1(){ - return var1; - } -} diff --git a/test/mycompiler/test/lambda/testResults/LambdaTest.log b/test/mycompiler/test/lambda/testResults/LambdaTest.log deleted file mode 100644 index e69de29b..00000000 diff --git a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java deleted file mode 100755 index 55da86ac..00000000 --- a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestExtendedOLD.java +++ /dev/null @@ -1,149 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import java.util.HashMap; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption; - -/* TODO: this file may be merged with AbstractInferenceTest, meanwhile used for extended testing, where redundant implementations are realized here - * - */ - -public abstract class AbstractInferenceTestExtendedOLD extends AbstractInferenceTestOLD_2 { - - protected HashMap expectedMethodTypeAssumptions = null; - protected HashMap> expectedMethodsTypeAssumptions = null; - - protected AbstractInferenceTestExtendedOLD(String name, String javFilename) { - super(name,javFilename); - this.expectedMethodTypeAssumptions=getExpectedMethodTypeAssumptions(); - this.expectedMethodsTypeAssumptions=getExpectedMethodsTypeAssumptions(); - } - @Deprecated - /** - * - * @return HashMap containing inference results for specific method or null - * key: method name - * value: CMethodTypeAssumption - */ - protected HashMap getExpectedMethodTypeAssumptions() { - return null; - } - - protected HashMap> getExpectedMethodsTypeAssumptions() { - return null; - } - - /** - * start test according to JUnit conventions - * @throws Throwable - */ - public void testSetup() throws Throwable { - runTest(); - } - - protected void checkForFoundClass(Menge foundClasses) { - AbstractInferenceTestExtendedOLD.assertTrue(foundClasses.contains(this.testedClasses.elementAt(0))); - } - - protected void checkForFoundGenerics(Menge foundGenerics) { - - } - - protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) { - //if called, methods have been found, thus expectation should not be null - if (this.expectedMethodTypeAssumptions!=null) { - //check if found method is expected - AbstractInferenceTestExtendedOLD.assertTrue(expectedMethodTypeAssumptions.containsKey(assumpt.getIdentifier())); - //select correct expected method for further asserts - CMethodTypeAssumption expected = this.expectedMethodTypeAssumptions.get(assumpt.getIdentifier()); - - //return type - AbstractInferenceTestExtendedOLD.assertEquals(expected.getAssumedType().getName(), assumpt.getAssumedType().getName()); - - AbstractInferenceTestExtendedOLD.assertTrue(expected.equalsAssumption(assumpt)); - //number parameters - // AbstractInferenceTestExtended.assertTrue(expected.getParaCount()==assumpt.getParaCount()); - /* for (int i=0;i param = expected.getParaAssumptions(); - AbstractInferenceTestExtended.assertTrue(expected.getParaAssumptions().contains(param.get(i))); - } - */ - //Generic Parameter - AbstractInferenceTestExtendedOLD.assertTrue(expected.getGenericMethodParameters().size()==assumpt.getGenericMethodParameters().size()); - for (int i=0;i> assumptions) { - - AbstractInferenceTestExtendedOLD.assertTrue(expectedMethodsTypeAssumptions.size()==assumptions.size()); - AbstractInferenceTestExtendedOLD.assertTrue(expectedMethodsTypeAssumptions.keySet().equals(assumptions.keySet())); - - //call test for every method - for(String method : assumptions.keySet()) { - Menge currentMethodExpectation = expectedMethodsTypeAssumptions.get(method); - Menge currentMethodAssumption = assumptions.get(method); - - //verify amount of assumption for method - AbstractInferenceTestExtendedOLD.assertTrue(currentMethodExpectation.size()==currentMethodAssumption.size()); - - for (int i=0;i paramExpected = currentMethodExpectation.elementAt(i).getParaAssumptions(); - Menge paramAssumpt = currentMethodAssumption.elementAt(i).getParaAssumptions(); - //check for parameter assumptions - for (int j=0;j genericsExpected = currentMethodExpectation.get(i).getGenericMethodParameters(); - Menge genericsAssumpt = currentMethodAssumption.get(i).getGenericMethodParameters(); - //check amount - AbstractInferenceTestExtendedOLD.assertTrue(genericsExpected.size()==genericsAssumpt.size()); - for (int j=0;j assumption,Menge expected) { - //boolean ret=false; - for (int i=0;i testedClasses = null; - protected MyCompilerAPI compiler = MyCompiler.getAPI(); - - protected AbstractInferenceTestOLD_2(String name, String javFilename) { - super(name); - javFile = new File(javFilename); - this.testedClasses = getTestedClasses(); - } - - protected void runTest() throws Throwable { - parseFile(); - typeReconstruction(); - codeGeneration(); - } - - protected void parseFile() - throws Throwable - { - // Parsen der Klasse - compiler.parse(javFile); - } - - protected void typeReconstruction() - throws Exception - { - // Typ-Rekonstruktion - Menge resultSet = compiler.typeReconstruction(); - // Keine Typ-Rekonstruktion erforderlich - if (resultSet == null || resultSet.size() == 0) throw new Exception("Typrekonstruktion nicht durchfuehrbar!"); - - //specific Testcase-Check for every tested class - - for (String testedClass : this.testedClasses) { - //System.out.println("number1: "+ testedClass); - checkResults(resultSet, testedClass); - } - - TypeinferenceResultSet onePossibility = resultSet.firstElement(); - Iterator substIt = onePossibility.getSubstitutions().getIterator(); - while(substIt.hasNext()){ - CSubstitution subst = (CSubstitution)substIt.next(); - // Substition machen - subst.execute(); - } - } - - protected void codeGeneration() - throws Exception - { - // Code generieren - compiler.codeGeneration(); - } - - - /** - * extracts type-inference results for tested class and calls test methods - * test methods shall be implemented as needed in test class, - * @param resultSet result from typeReconstruction() - */ -// protected void checkResults(Menge resultSet, String testedClass) { -// -// //check valid - implementation -//System.out.println("Länge ResultSet: " + resultSet.size()); -// for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { -// //-------- -// //Classes: -// //-------- -// checkForFoundClass(resultSet.get(resIndex).getClassNameList()); -// //--------- -// //Generics: -// //---------Menge genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); -// checkForFoundGenerics(resultSet.get(resIndex).getGenericsTable().get(testedClass)); -// //---------- -// // Methods: -// //---------- -// HashMap> assumptions = new HashMap>(); -// Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); -// while (iter1.hasNext()) { -// Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); -// //for (int i=0; i()); -// } -// -// assumptions.get(assumpt.getIdentifier()).add(assumpt); -// //------------------------- -// } -// //} -// } -// if (!assumptions.isEmpty()) -// checkForValidMethodTypes(assumptions); -// //--------------------------- -// //Local and member variables: -// //--------------------------- -// -// Iterator iter2 = resultSet.get(resIndex).getFieldAndLocalVarAssumptions().values().iterator(); -// while (iter2.hasNext()) { -// CTypeAssumption assumption = iter2.next(); -// -// // Es ist eine locale Variable -// if (assumption instanceof CLocalVarTypeAssumption) { -// -// CLocalVarTypeAssumption assu = (CLocalVarTypeAssumption)assumption; -// -// if (assu.getClassName().equals(testedClass)) { -// //---------------------- -// checkForValidLocalVarTypes(assu); -// //---------------------- -// } -// -// } -// -// // Es ist eine Member-Variable -// else if (assumption instanceof CInstVarTypeAssumption) { -// -// CInstVarTypeAssumption assu = (CInstVarTypeAssumption)assumption; -// if (assu.getClassName().equals(testedClass)) { -// //------------------- -// checkForValidMemberTypes(assu); -// //-------------------- -// } -// } -// } -// } -// } - protected void checkResults(Menge resultSet, String testedClass) { - - //check valid - implementation -System.out.println("Länge ResultSet: " + resultSet.size()); - for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { - //-------- - //Classes: - //-------- - // checkForFoundClass(resultSet.get(resIndex).getClassNameList()); - //--------- - //Generics: - //---------Menge genVec = resultSet.get(resIndex).getGenericsTable().get(testedClass); - // checkForFoundGenerics(resultSet.get(resIndex).getGenericsTable().get(testedClass)); - //---------- - // Methods: - //---------- - HashMap> assumptions = new HashMap>(); - Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); - while (iter1.hasNext()) { - Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); - //for (int i=0; i()); - } - - assumptions.get(assumpt.getIdentifier()).add(assumpt); - //------------------------- - } - //} - } - if (!assumptions.isEmpty()) - checkForValidMethodTypes(assumptions); - //--------------------------- - //Local and member variables: - //--------------------------- - - Iterator iter2 = resultSet.get(resIndex).getFieldAndLocalVarAssumptions().values().iterator(); - while (iter2.hasNext()) { - CTypeAssumption assumption = iter2.next(); - - // Es ist eine locale Variable - if (assumption instanceof CLocalVarTypeAssumption) { - - CLocalVarTypeAssumption assu = (CLocalVarTypeAssumption)assumption; - - if (assu.getClassName().equals(testedClass)) { - //---------------------- - checkForValidLocalVarTypes(assu); - //---------------------- - } - - } - - // Es ist eine Member-Variable - else if (assumption instanceof CInstVarTypeAssumption) { - - CInstVarTypeAssumption assu = (CInstVarTypeAssumption)assumption; - if (assu.getClassName().equals(testedClass)) { - //------------------- - checkForValidMemberTypes(assu); - //-------------------- - } - } - } - } - } - - /** - * @return returns a Menge of class names of tested file - */ - protected abstract Menge getTestedClasses(); - protected void checkForFoundClass(Menge foundClasses) {} - protected void checkForFoundGenerics(Menge foundGenerics) {} - @Deprecated - protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) {} - protected void checkForValidMethodTypes(HashMap> assumptions) {} - protected void checkForValidLocalVarTypes(CLocalVarTypeAssumption assumpt) {} - protected void checkForValidMemberTypes(CInstVarTypeAssumption assumpt) {} - protected void setUp() {} - protected void tearDown() {} - -// protected void setUp() -// throws Exception -// { -// super.setUp(); -//System.out.println("setup called"); -// -// // Setup fuer Log4J -// // Logfiles werden im Ordner testResults gespeichert -// // Der Dateiname ist der Klassename plus .log -// String logFile = "testResults/"+ javFile.getName() + ".log"; -// -// File f = new File(logFile); // Altes Logfile loeschen -// f.delete(); -// -// // Ausgabeoptionen fuer die Logger -// PatternLayout pl = new PatternLayout("%-15C{1} %-5p [%-9c] %m%n"); -// FileAppender fa = new FileAppender(pl, logFile); -// -// // Die Einstellungen jedes Loggers veraendern -// ModifyLogger("parser", Level.ALL, fa); -// ModifyLogger("inference", Level.INFO, fa); -// ModifyLogger("codegen", Level.ALL, fa); -// ModifyLogger("bytecode", Level.ALL, fa); -// } -// -// protected void ModifyLogger(String strlogger, Level lv, FileAppender fa) -// { -// Logger lg = Logger.getLogger(strlogger); -// -// lg.setLevel(lv); -// lg.removeAllAppenders(); -// lg.addAppender(fa); -// } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java b/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java deleted file mode 100755 index c008e6cb..00000000 --- a/test/mycompiler/test/notUsedAnymore/AbstractInferenceTestOld.java +++ /dev/null @@ -1,381 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import java.io.File; -import java.util.HashMap; -import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.unify.CSubstitution; -import junit.framework.TestCase; -import mycompiler.mytypereconstruction.CIntersectionType; -import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.BlockExpect; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** Todo: - inheritance - * - exception handling cannot verify correct exception yet - * - generic returntype does not work well - * - cmethodkey-usage? - * - log4j - * - * done: - exception handling - * - commented asserts - * @author Stresing - * last change: 06-04-08 - */ -public abstract class AbstractInferenceTestOld extends TestCase { - - private File javFile=null; - private Expectation expectation=null; - private MyCompilerAPI compiler = MyCompiler.getAPI(); - - private final static String METHODNAMEDELIMITER = "#"; - - protected AbstractInferenceTestOld(String name, String javFilename) { - super(name); - javFile = new File(javFilename); - - //retrieve Expectation object from specific Testcase for comparisons - this.expectation = getExpectations(); - } - - /** - * runs the JUnit-Test, calls all compiler steps - * @throws Throwable - */ - public void testSetup() throws Throwable { - //runs all compiler steps, any exception will cause the Test to fail, if not expected - - try { - parseFile(); - typeReconstruction(); - //codeGeneration(); - } catch (Exception e) { - checkForExpectedException(e); - - } - } - - /** - * calls parse() from Compiler-API - * @throws Throwable - */ - - protected void parseFile() - throws Throwable - { - // Parse file - compiler.parse(javFile); - } - - /** - * calls typeReconstruction() from Compiler-API, checks result against expectations and substitutes all types according to first assumption - * @throws Exception - */ - - protected void typeReconstruction() - throws Exception - { - // Typ-Rekonstruktion - Menge resultSet = compiler.typeReconstruction(); - // Keine Typ-Rekonstruktion erforderlich - if (resultSet == null || resultSet.size() == 0) throw new Exception("Type reconstruction could not be done!"); - - if (this.expectation.getClasses()!=null) - checkResults(resultSet,this.expectation); - - TypeinferenceResultSet onePossibility = resultSet.firstElement(); - Iterator substIt = onePossibility.getSubstitutions().getIterator(); - while(substIt.hasNext()){ - CSubstitution subst = (CSubstitution)substIt.next(); - // Substition machen - subst.execute(); - } - } - - /** - * calls codeGeneration from Compiler-API - * @throws Exception - */ - - protected void codeGeneration() - throws Exception - { - // Code generieren - compiler.codeGeneration(); - } - - /** - * compares resultSet from compiler to expectations - * @param resultSet - * @param expect - */ - - protected void checkResults(Menge resultSet, Expectation expect) { - - //iterates thru all available assumption-sets - for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { - //checks whether all expected classes, methods, members are available - checkClasses(resultSet.get(resIndex),expect); - //-------------- - //Methods - //-------------- - //iterates through all found methods - Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); - while (iter1.hasNext()) { - Menge vecAssumpt = iter1.next().getMethodTypeAssumptions(); - //for (int i=0; i iter2 = resultSet.get(resIndex).getFieldAndLocalVarAssumptions().values().iterator(); - while (iter2.hasNext()) { - CTypeAssumption assumption = iter2.next(); - - // local variable - if (assumption instanceof CLocalVarTypeAssumption) { - - CLocalVarTypeAssumption assu = (CLocalVarTypeAssumption)assumption; - - if (expect.getClasses().containsKey(assu.getClassName())){ - //current method to compare assumption to: - MethodExpect method = expect.getClasses().get(assu.getClassName()).getMethods().get(assu.getMethodName()+ AbstractInferenceTestOld.METHODNAMEDELIMITER + assu.getMethodOverloadedID() + AbstractInferenceTestOld.METHODNAMEDELIMITER + assu.getMethodParaCount()); - AbstractInferenceTest.assertTrue("block variable " + assu.getMethodName()+ " not valid or not found!",checkFoundVariable(assu, method.getBlock())); - } - - } - - // member variable - else if (assumption instanceof CInstVarTypeAssumption) { - - - CInstVarTypeAssumption assu = (CInstVarTypeAssumption)assumption; - if (expect.getClasses().containsKey(assu.getClassName())){ - //current class to compare assumption to: - ClassExpect classexpect = expect.getClasses().get(assu.getClassName()); - checkFoundMembers(assu, classexpect.getMembers()); - } - } - } - } - - //verify that every single type assumption that was expected has been detected by the compiler - AbstractInferenceTest.assertTrue("not all expected types have been found", expectation.verifyTypeExpectationsCompletelyMet()); - } - - /** - * @return returns a Menge of class names of tested file - */ - protected abstract Expectation getExpectations(); - - - /** - * checks the return type of a method comparing it to the expectation - * @param assumpt - * @param expect - */ - protected void checkReturnType(Type assumpt, MethodExpect expect) { - if (!expect.getReturntypes().isEmpty()) { - AbstractInferenceTest.assertTrue("found return type " + assumpt.getName() + " is not in expected list", expect.getReturntypes().contains(assumpt)); - - checkBoundedTypes(assumpt,expect.getReturntypes().get(expect.getReturntypes().indexOf(assumpt))); - //remove this expectation to assure, all expectations have been met at least once - if (expect.getReturntypesCopy().contains(assumpt)) - expect.getReturntypesCopy().remove(assumpt); - } - else if (assumpt instanceof GenericTypeVar) - //expect.addGeneric((GenericTypeVar) assumpt); - System.out.println("assumpt is GenericTypeVar"); - else - AbstractInferenceTest.assertTrue("no return type for " + assumpt.getName() +" has been defined in expectation",assumpt instanceof TypePlaceholder); - } - - /** - * checks for generic methods comparing them to the expectation - * @param assumpt - * @param expect - */ - protected void checkFoundGenerics(Menge assumpt, Menge expect) { - AbstractInferenceTest.assertTrue("amount of generic variables expected != assumed",((assumpt==null || assumpt.size()==0) && (expect==null || expect.size()==0)) || assumpt.size()==expect.size()); - for (GenericTypeVar typ : assumpt) { - //System.out.println("Generics: " + typ.get_Name() + ((BoundedGenericTypeVar)typ).getBounds() + ", " + expect.indexOf(typ)); - AbstractInferenceTest.assertTrue("Generic " + typ.getName() + " has not been expected",expect.contains(typ)); - - checkBoundedTypes(typ,expect.get(expect.indexOf(typ))); - } - } - - private void checkBoundedTypes(Type assumed, Type expected) { - if (assumed instanceof BoundedGenericTypeVar) { - AbstractInferenceTest.assertTrue(expected instanceof BoundedGenericTypeVar); - BoundedGenericTypeVar typBound = (BoundedGenericTypeVar)assumed; - BoundedGenericTypeVar expBound = (BoundedGenericTypeVar)expected; - for (Type t : typBound.getBounds()) { - boolean ret = false; - for (Type e : expBound.getBounds()) { -System.out.println(" here " + t + " -- " + e); - if (e.equals(t)) { - ret=true; - } - } - AbstractInferenceTest.assertTrue("Bounded generic's type is not equal", ret); - } - } - else if (assumed instanceof GenericTypeVar) { - System.out.println("GENERICTYPEVAR"); - } - } - - /** - * searches recursively for the matching block in the expectation set and compares found variables to the expectation - * @param assumpt - * @param expect - * @return - */ - - protected boolean checkFoundVariable(CLocalVarTypeAssumption assumpt, BlockExpect expect) { - //there is an expectation for a variable - AbstractInferenceTest.assertTrue(expect!=null); - boolean ret=false; - if (expect.getBlockID().equals(assumpt.getBlockId())) { - AbstractInferenceTest.assertTrue("Variable "+assumpt.getIdentifier() + " is not defined in expectation",expect.getLocalVar().containsKey(assumpt.getIdentifier())); - Menge expTypes = expect.getLocalVar().get(assumpt.getIdentifier()).getExpectedType(); - //check if a specific type for this variable is expected or whether it should be a typeplaceholder - if (!expTypes.isEmpty()) { - AbstractInferenceTest.assertTrue("Type " + assumpt.getAssumedType() + " for variable " + assumpt.getIdentifier() + " is not found in expectations", expTypes.contains(assumpt.getAssumedType())); - checkBoundedTypes(assumpt.getAssumedType(), expTypes.get(expTypes.indexOf(assumpt.getAssumedType()))); - - //remove this expectation to assure, all expectations have been met at least once - expect.getLocalVar().get(assumpt.getIdentifier()).getExpectedTypeCopy().remove(assumpt.getAssumedType()); - } - else - //check for TypePlaceholder as expected - AbstractInferenceTest.assertTrue("no type for variable "+ assumpt.getIdentifier() + " has been defined", assumpt.getAssumedType() instanceof TypePlaceholder); - - return true; - } - else if (expect.getContainedBlocks()!=null){ - //dig one block deeper in hierarchy - for (BlockExpect exp : expect.getContainedBlocks()) - ret |= checkFoundVariable(assumpt,exp); - return ret; - } - return false; - } - /** - * checks method parameters comparing them to the expectation - * @param assumpt - * @param expect - */ - - protected void checkParameters(CMethodTypeAssumption methodAssumpt, MethodExpect methodExpect) { - Menge assumpt = methodAssumpt.getParaAssumptions(); - HashMap expect = methodExpect.getParameter(); - //amount of parameter - AbstractInferenceTest.assertEquals("amount of parameters not equal!", assumpt.size(),expect.size()); - - for (CParaTypeAssumption paraAssumpt : assumpt) { - //check if variable is expected - AbstractInferenceTest.assertTrue("variable " + paraAssumpt.getIdentifier() + " is not expected!", expect.containsKey(paraAssumpt.getIdentifier())); - Menge expectedTypes = expect.get(paraAssumpt.getIdentifier()).getExpectedType(); - //check if variable's type is expected - - //case of undefined type (generic variable), add generic to generic list - if (!expectedTypes.isEmpty()) { - AbstractInferenceTest.assertTrue("type " + paraAssumpt.getAssumedType() + " for variable " + paraAssumpt.getIdentifier() + " is not expected!", expectedTypes.contains(paraAssumpt.getAssumedType())); - checkBoundedTypes(paraAssumpt.getAssumedType(), expectedTypes.get(expectedTypes.indexOf(paraAssumpt.getAssumedType()))); - - //remove this expectation to assure, all expectations have been met at least once - expect.get(paraAssumpt.getIdentifier()).getExpectedTypeCopy().remove(paraAssumpt.getAssumedType()); - } - else if (paraAssumpt.getAssumedType() instanceof GenericTypeVar) { - if (!methodExpect.getGenerics().contains((GenericTypeVar)paraAssumpt.getAssumedType())) - methodExpect.addGeneric((GenericTypeVar) paraAssumpt.getAssumedType()); - } - else - AbstractInferenceTest.fail("no type for " + paraAssumpt.getIdentifier() +" has been defined in expectation"); - } - } - - /** - * checks every class expected is included in compiler assumption + available generics - * @param assumption - * @param expectation - */ - protected void checkClasses(TypeinferenceResultSet assumption, Expectation expectation) { - - - for (String expect : expectation.getClasses().keySet()) { - //class exists - AbstractInferenceTest.assertTrue("class " + expect + " is not found in assumption!", assumption.getClassNameList().contains(expect)); - //generics - checkFoundGenerics(assumption.getGenerics(expect), expectation.getClasses().get(expect).getGenerics()); - } - } - - /** - * members found are compared to the expectation - * @param assumpt - * @param expect - */ - - protected void checkFoundMembers(CInstVarTypeAssumption assumpt, HashMap expect) { - AbstractInferenceTest.assertTrue("Member " + assumpt.getIdentifier() + " is not found in expectation!", expect.containsKey(assumpt.getIdentifier())); - AbstractInferenceTest.assertTrue("Type " + assumpt.getAssumedType() + " for member " + assumpt.getIdentifier() + " is not found in expectation",expect.get(assumpt.getIdentifier()).getExpectedType().contains(assumpt.getAssumedType())); - // - //remove this expectation to assure, all expectations have been met at least once - if (expect.get(assumpt.getIdentifier()).getExpectedTypeCopy().contains(assumpt.getAssumedType())) - expect.get(assumpt.getIdentifier()).getExpectedTypeCopy().remove(assumpt.getAssumedType()); - } - - /** - * called to verify whether thrown exception from compiler calls is expected - * @param e - * @throws Throwable - */ - protected void checkForExpectedException (Exception e) throws Throwable { - if (!this.expectation.getExceptions().isEmpty()) { - //check if thrown exception has been expected - e.printStackTrace(); - System.out.println(e.getClass()); - //AbstractInferenceTest2.assertTrue("Exception " + e.getMessage() + " is not same as expected", e.getClass().equals(this.expectation.getExceptions().firstElement())); - AbstractInferenceTestOLD_2.assertTrue("Exception " + e.getMessage() + " is not expected", !this.expectation.getExceptions().isEmpty()); - } - else - throw e; - } - - @Deprecated - protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) {} - protected void setUp() {} - protected void tearDown() {} -} diff --git a/test/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.java b/test/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.java deleted file mode 100755 index 4bc8c82c..00000000 --- a/test/mycompiler/test/notUsedAnymore/CTypeAssumptionWrapper.java +++ /dev/null @@ -1,60 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption; - -public class CTypeAssumptionWrapper { - - CTypeAssumption assumption; - - public CTypeAssumptionWrapper(CTypeAssumption assumption) { - this.assumption=assumption; - } - - public final boolean equals(Object obj) - // ino.end - // ino.method.equals.27820.body - { - if(obj instanceof CTypeAssumption){ - CTypeAssumption assum = (CTypeAssumption)obj; - boolean ret = true; - ret &= getClassName().equals(assum.getClassName()); - ret &= getIdentifier().equals(assum.getIdentifier()); - ret &= getAssumedType().equals(assum.getAssumedType()); - ret &= this.equalsAssumption(assum); - return ret; - } - else{ - return false; - } - } - - public boolean equalsAssumption(CTypeAssumption assumpt) { - return assumption.equalsAssumption(assumpt); - } - - public Type getAssumedType() { - return assumption.getAssumedType(); - } - - public String getClassName() { - return assumption.getClassName(); - } - - public String getIdentifier() { - return assumption.getIdentifier(); - } - - public void setAssumedType(Type assumedType) { - assumption.setAssumedType(assumedType); - } - - public void setClassName(String className) { - assumption.setClassName(className); - } - - public String toString() { - return assumption.toString(); - } - -} diff --git a/test/mycompiler/test/notUsedAnymore/IResultValidator.java b/test/mycompiler/test/notUsedAnymore/IResultValidator.java deleted file mode 100755 index ce4ce644..00000000 --- a/test/mycompiler/test/notUsedAnymore/IResultValidator.java +++ /dev/null @@ -1,11 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; - -public interface IResultValidator { - - public void checkResults(Menge resultSet); - -} diff --git a/test/mycompiler/test/notUsedAnymore/TEst_2.java b/test/mycompiler/test/notUsedAnymore/TEst_2.java deleted file mode 100755 index 050919a1..00000000 --- a/test/mycompiler/test/notUsedAnymore/TEst_2.java +++ /dev/null @@ -1,25 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import java.util.ArrayList; - -class A{ - -} - -public class TEst_2{ - ,C> void foo(T a,C b){} - - void m(){ - TEst_2 t = new TEst_2(); - String c = new String(); - A str = new A(); - t.foo(str,c); - } - - public void m2(Object a) { - - ArrayList b= new ArrayList(); - a = b.get(0); - - } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/Test.java b/test/mycompiler/test/notUsedAnymore/Test.java deleted file mode 100755 index c9a32b4a..00000000 --- a/test/mycompiler/test/notUsedAnymore/Test.java +++ /dev/null @@ -1,67 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -interface I1 { - public void m1(); -} - -interface I2 { - public void m2(); -} - -class Implementation implements I1, I2 { - public void m1() {} - - public void m2() {} -} - -class Implementation2 extends Implementation { -} - -class Tester { - T x; - public void m3(Implementation x) { - x.m1(); - x.m2(); - } - public void m4 (T x) { - x.m1(); - x.m2(); - } - - public Long m4(Integer a, Long b) { - return a+b; - } - -} - - -public class Test { - - public static void main(String[] args) { - Implementation x= new Implementation(); - Implementation2 y = new Implementation2(); - - Tester a = new Tester(); - //a.m3(x); - - - Tester b = new Tester(); - b.m3(y); - - Tester c = new Tester(); - c.m3(y); - //c.m4(y); - } -} - -class TestSimpleClassesWithBoundedGenerics1 { - - public T ma(T x) { - return x; - } - - public int mb(T x) { - return x+1; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.jav b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.jav deleted file mode 100755 index df5e707f..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.jav +++ /dev/null @@ -1,20 +0,0 @@ - -class TestAbstractInferenceTest { - - public foo(a, b) { - c; - d; - d = a+ b; - { - i; - i=5; - } - { - i; - i="abc"; - } - c = new TestAbstractInferenceTest(); - return a+b; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java deleted file mode 100755 index f95cb61d..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest.java +++ /dev/null @@ -1,304 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.typeinference.Menge; - -import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption; -import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption; - - -public class TestAbstractInferenceTest extends AbstractInferenceTestOLD_2 { - - private final static String TESTEDCLASSNAME="TestAbstractInferenceTest"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestAbstractInferenceTest(String name) { - super(name,TestAbstractInferenceTest.JAVPATH+TestAbstractInferenceTest.TESTEDCLASSNAME+".jav"); - - } - - protected Menge getTestedClasses(){ - Menge testedclasses = new Menge(); - testedclasses.add(TestAbstractInferenceTest.TESTEDCLASSNAME); - return testedclasses; - } - public void testThisCase() throws Throwable { - - runTest(); - } - - protected void checkForValidClass(Menge testedClass) { - } - - protected void checkForValidMethodTypes(CMethodTypeAssumption assumpt) { - System.out.println("Method "+assumpt.getIdentifier()+ ", &return:" + assumpt.getAssumedType().getName()); - } - - protected void checkForValidLocalVarTypes(CLocalVarTypeAssumption assumpt) { - System.out.println("Local-Variable "+assumpt.getIdentifier()+ "(" + assumpt.getBlockId() + "), Typ:" +assumpt.getAssumedType().getName()+ ", Methode:" + assumpt.getMethodName()); - } - - protected void checkForValidMemberTypes(CInstVarTypeAssumption assumpt) { - System.out.println("Member-Variable "+assumpt.getIdentifier()+", Typ:" +assumpt.getAssumedType().getName()); - } - -// public void checkResults(Menge resultSet) { -// //check valid - implementation -//System.out.println("checkResults called, Länge ResultSet: " + resultSet.size()); -// //for (int resIndex=0; resIndex < resultSet.size(); ++resIndex) { -// for (int resIndex=0; resIndex < resultSet.size(); resIndex++) { -// -// Menge genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); -// System.out.println("Generics: " + genVec); -// // Methoden: -// // --------- -// -// Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); -// while (iter1.hasNext()) { -// -// CMethodTypeAssumption assumpt = iter1.next().getMethodTypeAssumptions().get(0); -// -// // Methode geh�rt zur aktuellen Klasse (ist somit g�ltig) -// //System.out.println("Classname: " + assumpt.getClassName()); -// if (assumpt.getClassName().equals("TestAbstractInferenceTest")) { -// // if (assumpt.getIdentifier().equals("foo")) { -// // Methode holen bzw. anlegen -// String DummyMethodname;//Sonderfall fuer ueberladene Methoden -// if(assumpt.getOverloadedMethodID()<10) -// { -// DummyMethodname=assumpt.getIdentifier()+"0"+new Integer(assumpt.getOverloadedMethodID()).toString(); -// } -// else -// { -// DummyMethodname=assumpt.getIdentifier()+new Integer(assumpt.getOverloadedMethodID()).toString(); -// } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetMenge(),assumpt.getAssumedType().getOffset()); -// //alleMethodenOffsets.addElement(assumpt.getOffset()); -// System.out.println("Method "+assumpt.getIdentifier()+ ", &return:" + assumpt.getAssumedType().getName()); -// -// // R�ckgabewert hinzuf�gen -// //method.addReturnFacility(new TypeFacility(getAssumedTypeName(assumpt.getAssumedType()), resIndex), -// // assumpt.getLineNumber()); -// -// // Parameter hinzuf�gen -// Menge vec = assumpt.getParaAssumptions(); -// for (int j=0; j genTypVec = assumpt.getGenericMethodParameters(); -// // method.setGenericMethodParameters(genTypVec); -// for(GenericTypeVar GTV : genTypVec) -// { -// System.out.println("Generic Method-Parameter "+GTV.getName()+", Methode:" + assumpt.getIdentifier()); -// } -// } -// } -// // Locale und Membervariablen: -// // --------------------------- -// -// Iterator iter2 = resultSet.get(resIndex).getFieldAndLocalVarAssumptions().values().iterator(); -// -// while (iter2.hasNext()) { -// CTypeAssumption assumption = iter2.next(); -// -// // Es ist eine locale Variable -// if (assumption instanceof CLocalVarTypeAssumption) { -// -// CLocalVarTypeAssumption assu = (CLocalVarTypeAssumption)assumption; -// -// -// if (assu.getClassName().equals("TestAbstractInferenceTest")) { -////checks whether assumption deals with focussed class -// // TestAbstractInferenceTest.assertEquals(assu.getClassName(), this.getClass().getName() ); -// -// System.out.println("Local-Variable "+assu.getIdentifier()+ "(" + assu.getBlockId() + "), Typ:" +assu.getAssumedType().getName()+ ", Methode:" + assu.getMethodName()); -// String DummyMethodname;//Sonderfall fuer ueberladene Methoden -// if(assu.getMethodOverloadedID()<10) -// { -// DummyMethodname=assu.getMethodName()+"0"+new Integer(assu.getMethodOverloadedID()).toString(); -// } -// else -// { -// DummyMethodname=assu.getMethodName()+new Integer(assu.getMethodOverloadedID()).toString(); -// } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge(),assu.getOffset()); -// String localVarName = assu.getIdentifier()+ "(" + assu.getBlockId() + ")"; -// -// -// if (assu.isPlaceholderVariable()) { -// -// if (resIndex==0) { -// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// System.out.println("assu is TypePlaceholder:"); -// } -// } -// else { -// //method.addLocalVar(localVarName, -// // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// } -// } -// -// } -// -// // Es ist eine Member-Variable -// else if (assumption instanceof CInstVarTypeAssumption) { -// //System.out.println("eine Membervariable???"); -// -// CInstVarTypeAssumption assu = (CInstVarTypeAssumption)assumption; -// if (assu.getClassName().equals("TestAbstractInferenceTest")) { -// //TestAbstractInferenceTest.assertEquals(assu.getClassName(), this.getClass().getName()); -// System.out.println("Member-Variable "+assu.getIdentifier()+", Typ:" +assu.getAssumedType().getName()); -// //jClass.addMember(assu.getIdentifier(), -// // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// } -// } -// } -// } -// } - -//public void checkResults(Menge resultSet) { -// //check valid - implementation -//System.out.println("checkResults called, Länge ResultSet: " + resultSet.size()); -// //for (int resIndex=0; resIndex < resultSet.size(); ++resIndex) { -// for (int resIndex=0; resIndex < 1; resIndex++) { -// -// Menge genVec = resultSet.get(resIndex).getGenericsTable().get("Test1"); -// -// // Methoden: -// // --------- -// -// Iterator iter1 = resultSet.get(resIndex).getMethodIntersectionTypes().values().iterator(); -// while (iter1.hasNext()) { -// -// CMethodTypeAssumption assumpt = iter1.next().getMethodTypeAssumptions().get(0); -// -// // Methode geh�rt zur aktuellen Klasse (ist somit g�ltig) -// //TestAbstractInferenceTest.assertTrue(1==0); -// //hier muss der Klassenassert hin -// //if (assumpt.getClassName().equals(className)) { -// if (assumpt.getIdentifier().equals("foo")) { -// // Methode holen bzw. anlegen -// String DummyMethodname;//Sonderfall fuer ueberladene Methoden -// if(assumpt.getOverloadedMethodID()<10) -// { -// DummyMethodname=assumpt.getIdentifier()+"0"+new Integer(assumpt.getOverloadedMethodID()).toString(); -// } -// else -// { -// DummyMethodname=assumpt.getIdentifier()+new Integer(assumpt.getOverloadedMethodID()).toString(); -// } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assumpt.getLineNumber(),assumpt.getOffset(),assumpt.getOffsetMenge(),assumpt.getAssumedType().getOffset()); -// //alleMethodenOffsets.addElement(assumpt.getOffset()); -// System.out.println("Method "+assumpt.getIdentifier()+ ", &return:" + assumpt.getAssumedType().getName()); -// -// // R�ckgabewert hinzuf�gen -// //method.addReturnFacility(new TypeFacility(getAssumedTypeName(assumpt.getAssumedType()), resIndex), -// // assumpt.getLineNumber()); -// -// // Parameter hinzuf�gen -// Menge vec = assumpt.getParaAssumptions(); -// for (int j=0; j genTypVec = assumpt.getGenericMethodParameters(); -// // method.setGenericMethodParameters(genTypVec); -// for(GenericTypeVar GTV : genTypVec) -// { -// System.out.println("Generic Method-Parameter "+GTV.getName()+", Methode:" + assumpt.getIdentifier()); -// } -// } -// } -// // Locale und Membervariablen: -// // --------------------------- -// -// Iterator iter2 = resultSet.get(resIndex).getFieldAndLocalVarAssumptions().values().iterator(); -// -// while (iter2.hasNext()) { -// CTypeAssumption assumption = iter2.next(); -// -// // Es ist eine locale Variable -// if (assumption instanceof CLocalVarTypeAssumption) { -// -// CLocalVarTypeAssumption assu = (CLocalVarTypeAssumption)assumption; -// -// -// //if (assu.getClassName().equals(className)) { -////checks whether assumption deals with focussed class -// // TestAbstractInferenceTest.assertEquals(assu.getClassName(), this.getClass().getName() ); -// -// System.out.println("Local-Variable "+assu.getIdentifier()+ "(" + assu.getBlockId() + "), Typ:" +assu.getAssumedType().getName()+ ", Methode:" + assu.getMethodName()); -// String DummyMethodname;//Sonderfall fuer ueberladene Methoden -// if(assu.getMethodOverloadedID()<10) -// { -// DummyMethodname=assu.getMethodName()+"0"+new Integer(assu.getMethodOverloadedID()).toString(); -// } -// else -// { -// DummyMethodname=assu.getMethodName()+new Integer(assu.getMethodOverloadedID()).toString(); -// } -// //JavMethodIdent method = jClass.addMethod(DummyMethodname, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge(),assu.getOffset()); -// String localVarName = assu.getIdentifier()+ "(" + assu.getBlockId() + ")"; -// -// -// if (assu.isPlaceholderVariable()) { -// -// if (resIndex==0) { -// //method.addLocalVar(localVarName, assu, genVec, assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// System.out.println("assu is TypePlaceholder:"); -// } -// } -// else { -// //method.addLocalVar(localVarName, -// // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// } -// -// } -// -// // Es ist eine Member-Variable -// else if (assumption instanceof CInstVarTypeAssumption) { -// System.out.println("eine Membervariable???"); -// -// CInstVarTypeAssumption assu = (CInstVarTypeAssumption)assumption; -// //if (assu.getClassName().equals(className)) { -// //TestAbstractInferenceTest.assertEquals(assu.getClassName(), this.getClass().getName()); -// System.out.println("Member-Variable "+assu.getIdentifier()+", Typ:" +assu.getAssumedType().getName()); -// //jClass.addMember(assu.getIdentifier(), -// // new TypeFacility(getAssumedTypeName(assu.getAssumedType()), resIndex), -// // assu.getLineNumber(),assu.getOffset(),assu.getOffsetMenge()); -// } -// } -// } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.jav b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.jav deleted file mode 100755 index 1f4cef49..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.jav +++ /dev/null @@ -1,21 +0,0 @@ - -public class TestAbstractInferenceTest2 { - - method(Integer a, String s) { - } -} - -class TestAbstractInferenceTest3 extends TestAbstractInferenceTest2 { -/* - method(Integer a) { - c; - }*/ - method2(String s) { - c; - c = new TestAbstractInferenceTest2(); - c.method(2,"abc"); - method(3,"abc"); - } - - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.java b/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.java deleted file mode 100755 index a6486857..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestAbstractInferenceTest2.java +++ /dev/null @@ -1,56 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestAbstractInferenceTest2 extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestAbstractInferenceTest2"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestAbstractInferenceTest2(String name) { - super(name,TestAbstractInferenceTest2.JAVPATH+TestAbstractInferenceTest2.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testAbstractInferenceTest2 = new ClassExpect(TestAbstractInferenceTest2.TESTEDCLASSNAME); - ClassExpect testAbstractInferenceTest3 = new ClassExpect("TestAbstractInferenceTest3"); - - //methods - MethodExpect m1 = new MethodExpect("method",new RefType("void",-1),0); - GenericTypeVar t = new GenericTypeVar("T",-1); - m1.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - m1.addParameter(new VarExpect("s",new RefType("java.lang.String",-1))); - // m1.addGeneric(t); - - // m1.getBlock().addLocalVar(new VarExpect("c",null)); - - testAbstractInferenceTest2.addMethod(m1); - - MethodExpect m2 = new MethodExpect("method2",new RefType("void",-1),0); - m2.addParameter(new VarExpect("s", new RefType("java.lang.String",-1))); - m2.getBlock().addLocalVar(new VarExpect("c",new RefType("TestAbstractInferenceTest2",-1))); - - MethodExpect m3 = new MethodExpect("method",new RefType("void",-1),0); - m3.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - m3.addParameter(new VarExpect("s", new RefType("java.lang.String",-1))); - //m3.getBlock().addLocalVar(new VarExpect("c",null)); - - //testAbstractInferenceTest3.addMethod(m1); - testAbstractInferenceTest3.addMethod(m2); - testAbstractInferenceTest3.addMethod(m3); - - - Expectation ret = new Expectation(testAbstractInferenceTest2); - ret.addClass(testAbstractInferenceTest3); - return ret; - } - -} diff --git a/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.jav b/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.jav deleted file mode 100755 index 249e1d57..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.jav +++ /dev/null @@ -1,5 +0,0 @@ - -public class TestClassMemberWithoutType { - - member; -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.java b/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.java deleted file mode 100755 index 8ef1d5c2..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestClassMemberWithoutType.java +++ /dev/null @@ -1,37 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; - -/** - * 18-04-08 - * @author - * todo: delete this test, cuz it does not make sense - * - * this test checks whether members without types are supported - */ -public class TestClassMemberWithoutType extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestClassMemberWithoutType"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestClassMemberWithoutType(String name) { - super(name,TestClassMemberWithoutType.JAVPATH+TestClassMemberWithoutType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //class--- TestClassMemberWithoutType - ClassExpect testClassMemberWithoutType = new ClassExpect(TestClassMemberWithoutType.TESTEDCLASSNAME); - //member - VarExpect member = new VarExpect("member",new TypePlaceholderExpect("a")); - testClassMemberWithoutType.addMember(member); - //Expectation - return new Expectation(testClassMemberWithoutType); - } - -} diff --git a/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.jav b/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.jav deleted file mode 100755 index e61a2feb..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.jav +++ /dev/null @@ -1,6 +0,0 @@ -public class TestConstantsWithoutType { - public final static B = true; - public final static I = 1; - public final static C = 'A'; - public final static S = "Hello World!"; -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.java b/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.java deleted file mode 100755 index 971aee15..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestConstantsWithoutType.java +++ /dev/null @@ -1,39 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * this test checks correct detection of constants as members - */ -public class TestConstantsWithoutType extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestConstantsWithoutType"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestConstantsWithoutType(String name) { - super(name,TestConstantsWithoutType.JAVPATH+TestConstantsWithoutType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //class--- TestConstantsWithoutType - ClassExpect testConstantsWithoutType = new ClassExpect(TestConstantsWithoutType.TESTEDCLASSNAME); - //member - testConstantsWithoutType.addMember(new VarExpect("B",new RefType("java.lang.Boolean",-1))); - testConstantsWithoutType.addMember(new VarExpect("I",new RefType("java.lang.Integer",-1))); - testConstantsWithoutType.addMember(new VarExpect("C",new RefType("java.lang.Character",-1))); - testConstantsWithoutType.addMember(new VarExpect("S",new RefType("java.lang.String",-1))); - - //Expectation - return new Expectation(testConstantsWithoutType); - } - -} diff --git a/test/mycompiler/test/notUsedAnymore/TestGenerics.jav b/test/mycompiler/test/notUsedAnymore/TestGenerics.jav deleted file mode 100755 index fa01ce32..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestGenerics.jav +++ /dev/null @@ -1,8 +0,0 @@ - - -public class TestGenerics { - - > void foo(T n) {} - void foo(T i) {} - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestGenerics.java b/test/mycompiler/test/notUsedAnymore/TestGenerics.java deleted file mode 100755 index 2e2d5d00..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestGenerics.java +++ /dev/null @@ -1,60 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 01-04-08 - * @author - * - * This test verifies identification of a simple method with returntype void - * - */ - -public class TestGenerics extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestGenerics"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestGenerics(String name) { - super(name,TestGenerics.JAVPATH+TestGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testGenerics = new ClassExpect(TestGenerics.TESTEDCLASSNAME); - - //Methods - MethodExpect m0 = new MethodExpect("foo",new RefType("void",-1),0); - Menge bounds1 = new Menge(); - Menge parameter = new Menge(); - parameter.add(new RefType("java.lang.Integer",-1)); - RefType test = new RefType("Menge",parameter,-1); - bounds1.add(test); - BoundedGenericTypeVar generic1 = new BoundedGenericTypeVar("T",bounds1,-1); - m0.addGeneric(generic1); - m0.addParameter(new VarExpect("n",generic1)); - - MethodExpect m1 = new MethodExpect("foo",new RefType("void",-1),1); - Menge bounds2 = new Menge(); - bounds2.add(new RefType("Number",-1)); - BoundedGenericTypeVar generic2 = new BoundedGenericTypeVar("T",bounds2,-1); - m1.addGeneric(generic2); - m1.addParameter(new VarExpect("i",generic2)); - - - testGenerics.addMethod(m0); - testGenerics.addMethod(m1); - return new Expectation(testGenerics); - } -} diff --git a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.jav b/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.jav deleted file mode 100755 index 127ed26e..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.jav +++ /dev/null @@ -1,7 +0,0 @@ -interface A{ - public m(); -} -class TestInheritanceCheckValidImplementationFromInterface implements A{ - - public void m(){} -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.java b/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.java deleted file mode 100755 index 946001d8..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterface.java +++ /dev/null @@ -1,42 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; - -/* - * Testcase fails, because the interface's method is not inferenced according to its implementation in class - */ -public class TestInheritanceCheckValidImplementationFromInterface extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInheritanceCheckValidImplementationFromInterface"; - private final static String JAVPATH="test/mycompiler/test/javaConcepts/inheritance/"; - - public TestInheritanceCheckValidImplementationFromInterface(String name) { - super(name,TestInheritanceCheckValidImplementationFromInterface.JAVPATH+TestInheritanceCheckValidImplementationFromInterface.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //Interface - ClassExpect a = new ClassExpect("A"); - //Class - ClassExpect testInheritanceCheckValidImplementationFromInterface = new ClassExpect(TestInheritanceCheckValidImplementationFromInterface.TESTEDCLASSNAME); - - //methods - MethodExpect mClass = new MethodExpect("m", new RefType("void",-1)); - MethodExpect mInterface = new MethodExpect("m", new RefType("void",-1)); - a.addMethod(mInterface); - testInheritanceCheckValidImplementationFromInterface.addMethod(mClass); - - //adding classes to Expectation - Expectation ret = new Expectation(testInheritanceCheckValidImplementationFromInterface); - ret.addClass(a); - return ret; - } - -} - diff --git a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative.jav b/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative.jav deleted file mode 100755 index e05fdae6..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative.jav +++ /dev/null @@ -1,7 +0,0 @@ -interface A{ - public m(); -} -class TestInheritanceCheckValidImplementationFromInterfaceNegative implements A{ - - public void m1(){} -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative2.jav b/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative2.jav deleted file mode 100755 index 0dd2a73e..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestInheritanceCheckValidImplementationFromInterfaceNegative2.jav +++ /dev/null @@ -1,14 +0,0 @@ -interface TestInheritanceCheckValidImplementationFromInterfaceNegative2{ - public m(); -} -class A implements TestInheritanceCheckValidImplementationFromInterfaceNegative2{ - - public void m(){} -} - -class B implements TestInheritanceCheckValidImplementationFromInterfaceNegative2 { - - public m() { - return 1; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.jav b/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.jav deleted file mode 100755 index ae4d9c9b..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.jav +++ /dev/null @@ -1,21 +0,0 @@ - -public class TestMethodReturnType { - -/* methodReturnType1(a) { - return a; - } - */ - methodReturnType2(a,b) { - return a+b; - } - - methodReturnType3(String a) { - return a; - } - - Integer methodReturnType4(a) { - return a; - } - - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.java b/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.java deleted file mode 100755 index ff24c613..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnType.java +++ /dev/null @@ -1,64 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestMethodReturnType extends AbstractInferenceTest { - - - private final static String TESTEDCLASSNAME="TestMethodReturnType"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestMethodReturnType(String name) { - super(name,TestMethodReturnType.JAVPATH+TestMethodReturnType.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testMethodReturnType = new ClassExpect(TestMethodReturnType.TESTEDCLASSNAME); - - //methods -// MethodExpect m0 = new MethodExpect("methodReturnType1",null,0); -// m0.addParameter(new VarExpect("a",null)); - - MethodExpect m1 = new MethodExpect("methodReturnType2",new RefType("java.lang.Integer",-1),0); - m1.addReturntype(new RefType("java.lang.Double",-1)); - m1.addReturntype(new RefType("java.lang.Float",-1)); - m1.addReturntype(new RefType("java.lang.Long",-1)); - //m1.addReturntype(new RefType("java.lang.String",-1)); - VarExpect a1 = new VarExpect("a",new RefType("java.lang.Integer",-1)); - VarExpect b1 = new VarExpect("b",new RefType("java.lang.Integer",-1)); - a1.addExpectedType(new RefType("java.lang.Double",-1)); - a1.addExpectedType(new RefType("java.lang.Float",-1)); - a1.addExpectedType(new RefType("java.lang.Long",-1)); - //a1.addExpectedType(new RefType("java.lang.String",-1)); - b1.addExpectedType(new RefType("java.lang.Double",-1)); - b1.addExpectedType(new RefType("java.lang.Float",-1)); - b1.addExpectedType(new RefType("java.lang.Long",-1)); - //b1.addExpectedType(new RefType("java.lang.String",-1)); - m1.addParameter(a1); - m1.addParameter(b1); - - MethodExpect m2 = new MethodExpect("methodReturnType3",new RefType("java.lang.String",-1),0); - m2.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - - MethodExpect m3 = new MethodExpect("methodReturnType4",new RefType("java.lang.Integer",-1),0); - m3.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - - -// testMethodReturnType.addMethod(m0); - testMethodReturnType.addMethod(m1); - testMethodReturnType.addMethod(m2); - testMethodReturnType.addMethod(m3); - return new Expectation(testMethodReturnType); - } - - -} diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeGeneric.jav b/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeGeneric.jav deleted file mode 100755 index c33e753b..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeGeneric.jav +++ /dev/null @@ -1,15 +0,0 @@ - -public class TestMethodReturnTypeGeneric { - - testMethodReturnTypeGeneric() { - return new TestMethodReturnTypeGeneric(); - } - - testMethodReturnTypeGeneric2(T a) { - return a; - } - - - - -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.jav b/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.jav deleted file mode 100755 index 10b5f108..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.jav +++ /dev/null @@ -1,8 +0,0 @@ - -public class TestMethodReturnTypeNegative { - - /*returned String, but must be Integer*/ - Integer m1(String a) { - return a; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.java b/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.java deleted file mode 100755 index 7f333ded..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative.java +++ /dev/null @@ -1,42 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestMethodReturnTypeNegative extends AbstractInferenceTest { - - - private final static String TESTEDCLASSNAME="TestMethodReturnTypeNegative"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestMethodReturnTypeNegative(String name) { - super(name,TestMethodReturnTypeNegative.JAVPATH+TestMethodReturnTypeNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testMethodReturnTypeNegative = new ClassExpect(TestMethodReturnTypeNegative.TESTEDCLASSNAME); - - //methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1)); - m1.addParameter(new VarExpect("a", new RefType("java.lang.String",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Boolean",-1)); - m2.getBlock().addLocalVar(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - - testMethodReturnTypeNegative.addMethod(m1); - testMethodReturnTypeNegative.addMethod(m2); - - - Expectation ret = new Expectation(testMethodReturnTypeNegative); - ret.addException(new Exception()); - return ret; - } - - -} diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.jav b/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.jav deleted file mode 100755 index 15f21075..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.jav +++ /dev/null @@ -1,11 +0,0 @@ - -public class TestMethodReturnTypeNegative2 { - - /*not always boolean returned*/ - public m1() { - a; - if (a) { - return a; - } - } -} \ No newline at end of file diff --git a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.java b/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.java deleted file mode 100755 index da9a797a..00000000 --- a/test/mycompiler/test/notUsedAnymore/TestMethodReturnTypeNegative2.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.notUsedAnymore; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestMethodReturnTypeNegative2 extends AbstractInferenceTest { - - - private final static String TESTEDCLASSNAME="TestMethodReturnTypeNegative2"; - private final static String JAVPATH="test/mycompiler/test/"; - - public TestMethodReturnTypeNegative2(String name) { - super(name,TestMethodReturnTypeNegative2.JAVPATH+TestMethodReturnTypeNegative2.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testMethodReturnTypeNegative2 = new ClassExpect(TestMethodReturnTypeNegative2.TESTEDCLASSNAME); - - //methods - MethodExpect m1 = new MethodExpect("m2",new RefType("java.lang.Boolean",-1)); - m1.getBlock().addLocalVar(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - - testMethodReturnTypeNegative2.addMethod(m1); - - - Expectation ret = new Expectation(testMethodReturnTypeNegative2); - ret.addException(new Exception()); - return ret; - } - - -} diff --git a/test/mycompiler/test/operators/AllTestsOperators.java b/test/mycompiler/test/operators/AllTestsOperators.java deleted file mode 100755 index 88f2a30c..00000000 --- a/test/mycompiler/test/operators/AllTestsOperators.java +++ /dev/null @@ -1,22 +0,0 @@ -package mycompiler.test.operators; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsOperators { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for mycompiler.test.operators"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestOperatorBool.class); - suite.addTestSuite(TestOperatorObjects.class); - suite.addTestSuite(TestOperatorString.class); - suite.addTestSuite(TestOperatorIncrement.class); - suite.addTestSuite(TestOperatorComparison.class); - suite.addTestSuite(TestOperatorArithmetic.class); - suite.addTestSuite(TestOperatorBitwise.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/operators/TestOperatorArithmetic.jav b/test/mycompiler/test/operators/TestOperatorArithmetic.jav deleted file mode 100755 index 7c346c58..00000000 --- a/test/mycompiler/test/operators/TestOperatorArithmetic.jav +++ /dev/null @@ -1,40 +0,0 @@ -public class TestOperatorArithmetic { - - public m1(i,j) { - return i+j; - } - - public m2(i,java.lang.Double j) { - return i-j; - } - - public m3(java.lang.Integer i,j) { - return i*j; - } - - public java.lang.Double m4(i,j) { - return i/j; - } - - public m5(i,j) { - return i%j; - } - - public m6(i) { - return -i; - } - - public m7 (i,j) { - i+=j; - return i; - } - - public m8(i, java.lang.Float j) { - return i/j; - } - - /*public java.lang.Long m9(i, j) { - return i+j; - }*/ - -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorArithmetic.java b/test/mycompiler/test/operators/TestOperatorArithmetic.java deleted file mode 100755 index 1e0cc08c..00000000 --- a/test/mycompiler/test/operators/TestOperatorArithmetic.java +++ /dev/null @@ -1,110 +0,0 @@ -package mycompiler.test.operators; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 12-04-08 -* @author -* -* checks arithmetic operations -*/ - -public class TestOperatorArithmetic extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorArithmetic"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorArithmetic(String name) { - super(name,TestOperatorArithmetic.JAVPATH+TestOperatorArithmetic.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOperatorArithmetic = new ClassExpect(TestOperatorArithmetic.TESTEDCLASSNAME); - - //Methods - VarExpect m1_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m1_i.setExpectedType(createMengeAllNumberTypes()); - VarExpect m1_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createMengeAllNumberTypes()); - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1),0); - m1.setReturntypes(createMengeAllNumberTypes()); - m1.addParameter(m1_i); - m1.addParameter(m1_j); - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Double",-1),0); - m2.addParameter(new VarExpect("i",new RefType("java.lang.Double",-1))); - m2.addParameter(new VarExpect("j",new RefType("java.lang.Double",-1))); - - MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Integer",-1),0); - m3.addParameter(new VarExpect("i",new RefType("java.lang.Integer",-1))); - m3.addParameter(new VarExpect("j",new RefType("java.lang.Integer",-1))); - - MethodExpect m4 = new MethodExpect("m4",new RefType("java.lang.Double",-1),0); - m4.addParameter(new VarExpect("i",new RefType("java.lang.Double",-1))); - m4.addParameter(new VarExpect("j",new RefType("java.lang.Double",-1))); - - - VarExpect m5_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m5_i.setExpectedType(createMengeAllNumberTypes()); - VarExpect m5_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m5_j.setExpectedType(createMengeAllNumberTypes()); - MethodExpect m5 = new MethodExpect("m5",new RefType("java.lang.Integer",-1),0); - m5.setReturntypes(createMengeAllNumberTypes()); - m5.addParameter(m5_i); - m5.addParameter(m5_j); - - MethodExpect m6 = new MethodExpect("m6", new RefType("java.lang.Integer",-1),0); - m6.addParameter(new VarExpect("i", new RefType("java.lang.Integer",-1))); - - VarExpect m7_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m7_i.setExpectedType(createMengeAllNumberTypes()); - VarExpect m7_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m7_j.setExpectedType(createMengeAllNumberTypes()); - MethodExpect m7 = new MethodExpect("m7",new RefType("java.lang.Integer",-1),0); - m7.setReturntypes(createMengeAllNumberTypes()); - m7.addParameter(m7_i); - m7.addParameter(m7_j); - - VarExpect m8_i = new VarExpect("i",new RefType("java.lang.Float",-1)); - m8_i.setExpectedType(createMengeAllNumberTypes()); - VarExpect m8_j = new VarExpect("j",new RefType("java.lang.Float",-1)); - m8_j.setExpectedType(createMengeAllNumberTypes()); - MethodExpect m8 = new MethodExpect("m8",new RefType("java.lang.Float",-1),0); - m8.setReturntypes(createMengeAllNumberTypes()); - m8.addParameter(m8_i); - m8.addParameter(m8_j); - - VarExpect m9_i = new VarExpect("i",new RefType("java.lang.Long",-1)); - m9_i.setExpectedType(createMengeAllNumberTypes()); - VarExpect m9_j = new VarExpect("j",new RefType("java.lang.Long",-1)); - m9_j.setExpectedType(createMengeAllNumberTypes()); - MethodExpect m9 = new MethodExpect("m9",new RefType("java.lang.Long",-1),0); - m9.setReturntypes(createMengeAllNumberTypes()); - m9.addParameter(m9_i); - m9.addParameter(m9_j); - - - testOperatorArithmetic.addMethod(m1); - testOperatorArithmetic.addMethod(m2); - testOperatorArithmetic.addMethod(m3); - testOperatorArithmetic.addMethod(m4); - testOperatorArithmetic.addMethod(m5); - testOperatorArithmetic.addMethod(m6); - testOperatorArithmetic.addMethod(m7); - testOperatorArithmetic.addMethod(m8); - //testOperatorArithmetic.addMethod(m9); -// - return new Expectation(testOperatorArithmetic); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorBitwise.jav b/test/mycompiler/test/operators/TestOperatorBitwise.jav deleted file mode 100755 index 7c7026cc..00000000 --- a/test/mycompiler/test/operators/TestOperatorBitwise.jav +++ /dev/null @@ -1,45 +0,0 @@ -public class TestOperatorBitwise { - - public m1(a,b) { - return a & b; - } - - public m2(a,b) { - return a ^ b; - } - - public m3(a,b) { - return a | b; - } - - public m4(Integer a, b) { - return a & b; - } - - public m5(a, Long b) { - return a & b; - } - - public Integer m6(a,b) { - return a & b; - } - - /* bit-shift not accepted by parser - - public m7(a,b) { - return x << y; - } - - public m8(a,b) { - return x >> y; - } - - public m9(a,b) { - return x >>> y; - } - - public m10(a) { - return ~a; - } - */ -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorBitwise.java b/test/mycompiler/test/operators/TestOperatorBitwise.java deleted file mode 100755 index 337627d0..00000000 --- a/test/mycompiler/test/operators/TestOperatorBitwise.java +++ /dev/null @@ -1,129 +0,0 @@ -package mycompiler.test.operators; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.GenericTypeVarExpect; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 29-05-08 -* @author -* -* checks bit operators -*/ - -public class TestOperatorBitwise extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorBitwise"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorBitwise(String name) { - super(name,TestOperatorBitwise.JAVPATH+TestOperatorBitwise.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOperatorBitwise = new ClassExpect(TestOperatorBitwise.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1)); - m1.addReturntype(new RefType("java.lang.Long",-1)); - VarExpect m1a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m1a.addExpectedType(new RefType("java.lang.Byte",-1)); - m1a.addExpectedType(new RefType("java.lang.Short",-1)); - m1a.addExpectedType(new RefType("java.lang.Character",-1)); - m1a.addExpectedType(new RefType("java.lang.Long",-1)); - VarExpect m1b = new VarExpect("b",new RefType("java.lang.Integer",-1)); - m1b.addExpectedType(new RefType("java.lang.Byte",-1)); - m1b.addExpectedType(new RefType("java.lang.Short",-1)); - m1b.addExpectedType(new RefType("java.lang.Character",-1)); - m1b.addExpectedType(new RefType("java.lang.Long",-1)); - m1.addParameter(m1a); - m1.addParameter(m1b); - - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Integer",-1)); - m2.addReturntype(new RefType("java.lang.Long",-1)); - VarExpect m2a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m2a.addExpectedType(new RefType("java.lang.Byte",-1)); - m2a.addExpectedType(new RefType("java.lang.Short",-1)); - m2a.addExpectedType(new RefType("java.lang.Character",-1)); - m2a.addExpectedType(new RefType("java.lang.Long",-1)); - VarExpect m2b = new VarExpect("b",new RefType("java.lang.Integer",-1)); - m2b.addExpectedType(new RefType("java.lang.Byte",-1)); - m2b.addExpectedType(new RefType("java.lang.Short",-1)); - m2b.addExpectedType(new RefType("java.lang.Character",-1)); - m2b.addExpectedType(new RefType("java.lang.Long",-1)); - m2.addParameter(m2a); - m2.addParameter(m2b); - - MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Integer",-1)); - m3.addReturntype(new RefType("java.lang.Long",-1)); - VarExpect m3a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m3a.addExpectedType(new RefType("java.lang.Byte",-1)); - m3a.addExpectedType(new RefType("java.lang.Short",-1)); - m3a.addExpectedType(new RefType("java.lang.Character",-1)); - m3a.addExpectedType(new RefType("java.lang.Long",-1)); - VarExpect m3b = new VarExpect("b",new RefType("java.lang.Integer",-1)); - m3b.addExpectedType(new RefType("java.lang.Byte",-1)); - m3b.addExpectedType(new RefType("java.lang.Short",-1)); - m3b.addExpectedType(new RefType("java.lang.Character",-1)); - m3b.addExpectedType(new RefType("java.lang.Long",-1)); - m3.addParameter(m3a); - m3.addParameter(m3b); - - MethodExpect m4 = new MethodExpect("m4",new RefType("java.lang.Integer",-1)); - m4.addReturntype(new RefType("java.lang.Long",-1)); - VarExpect m4a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - VarExpect m4b = new VarExpect("b",new RefType("java.lang.Integer",-1)); - m4b.addExpectedType(new RefType("java.lang.Byte",-1)); - m4b.addExpectedType(new RefType("java.lang.Short",-1)); - m4b.addExpectedType(new RefType("java.lang.Character",-1)); - m4b.addExpectedType(new RefType("java.lang.Long",-1)); - m4.addParameter(m4a); - m4.addParameter(m4b); - - MethodExpect m5 = new MethodExpect("m5",new RefType("java.lang.Long",-1)); - VarExpect m5a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m5a.addExpectedType(new RefType("java.lang.Byte",-1)); - m5a.addExpectedType(new RefType("java.lang.Short",-1)); - m5a.addExpectedType(new RefType("java.lang.Character",-1)); - m5a.addExpectedType(new RefType("java.lang.Long",-1)); - VarExpect m5b = new VarExpect("b",new RefType("java.lang.Long",-1)); - m5.addParameter(m5a); - m5.addParameter(m5b); - - MethodExpect m6 = new MethodExpect("m6",new RefType("java.lang.Integer",-1)); - VarExpect m6a = new VarExpect("a",new RefType("java.lang.Integer",-1)); - m6a.addExpectedType(new RefType("java.lang.Byte",-1)); - m6a.addExpectedType(new RefType("java.lang.Short",-1)); - m6a.addExpectedType(new RefType("java.lang.Character",-1)); - VarExpect m6b = new VarExpect("b",new RefType("java.lang.Integer",-1)); - m6b.addExpectedType(new RefType("java.lang.Byte",-1)); - m6b.addExpectedType(new RefType("java.lang.Short",-1)); - m6b.addExpectedType(new RefType("java.lang.Character",-1)); - m6.addParameter(m6a); - m6.addParameter(m6b); - - - - - - - testOperatorBitwise.addMethod(m1); - testOperatorBitwise.addMethod(m2); - testOperatorBitwise.addMethod(m3); - testOperatorBitwise.addMethod(m4); - testOperatorBitwise.addMethod(m5); - testOperatorBitwise.addMethod(m6); - - - return new Expectation(testOperatorBitwise); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorBool.jav b/test/mycompiler/test/operators/TestOperatorBool.jav deleted file mode 100755 index 33c002b1..00000000 --- a/test/mycompiler/test/operators/TestOperatorBool.jav +++ /dev/null @@ -1,19 +0,0 @@ -public class TestOperatorBool { - - public m1(a,b) { - return a && b; - } - - public m2(a,b) { - return a || b; - } - - public m3(a) { - return !a; - } - - public m4( a, b) { - return a==b; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorBool.java b/test/mycompiler/test/operators/TestOperatorBool.java deleted file mode 100755 index 38e10d11..00000000 --- a/test/mycompiler/test/operators/TestOperatorBool.java +++ /dev/null @@ -1,58 +0,0 @@ -package mycompiler.test.operators; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.GenericTypeVarExpect; - - -/** -* 12-04-08 -* @author -* -* checks operators requiring boolean types -*/ - -public class TestOperatorBool extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorBool"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorBool(String name) { - super(name,TestOperatorBool.JAVPATH+TestOperatorBool.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOperatorBool = new ClassExpect(TestOperatorBool.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Boolean",-1),0); - m1.addParameter(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - m1.addParameter(new VarExpect("b",new RefType("java.lang.Boolean",-1))); - - MethodExpect m2 = new MethodExpect("m2",new RefType("java.lang.Boolean",-1),0); - m2.addParameter(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - m2.addParameter(new VarExpect("b",new RefType("java.lang.Boolean",-1))); - - MethodExpect m3 = new MethodExpect("m3",new RefType("java.lang.Boolean",-1),0); - m3.addParameter(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - - MethodExpect m4 = new MethodExpect("m4",new RefType("java.lang.Boolean",-1),0); - m4.addParameter(new VarExpect("a",new GenericTypeVarExpect("a"))); - m4.addParameter(new VarExpect("b",new GenericTypeVarExpect("b"))); - - testOperatorBool.addMethod(m1); - testOperatorBool.addMethod(m2); - testOperatorBool.addMethod(m3); - testOperatorBool.addMethod(m4); - - - return new Expectation(testOperatorBool); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorComparison.jav b/test/mycompiler/test/operators/TestOperatorComparison.jav deleted file mode 100755 index 62aaee58..00000000 --- a/test/mycompiler/test/operators/TestOperatorComparison.jav +++ /dev/null @@ -1,22 +0,0 @@ -public class TestOperatorComparison { - -/* public m1(a,b) { - return a < b; - } - - public m2(a, b) { - return a >= b; - } - */ - public m3(a, b) { - return a==b; - } - - public java.lang.Boolean m4(a,b) { - return a!=b; - } - - public m5(Integer a, b) { - return a createMengeAllDiscreteNumberTypes() { - Menge ret = new Menge(); - ret.add(new RefType("java.lang.Integer",-1)); - // ret.add(new RefType("java.lang.Long",-1)); - // ret.add(new RefType("java.lang.Short",-1)); - // ret.add(new RefType("java.lang.Byte",-1)); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorIncrement.jav b/test/mycompiler/test/operators/TestOperatorIncrement.jav deleted file mode 100755 index dd497c86..00000000 --- a/test/mycompiler/test/operators/TestOperatorIncrement.jav +++ /dev/null @@ -1,11 +0,0 @@ - -public class TestOperatorIncrement { - - public void m(i,j,k,l) { - i++; - j--; - ++k; - --l; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorIncrement.java b/test/mycompiler/test/operators/TestOperatorIncrement.java deleted file mode 100755 index b5980ab8..00000000 --- a/test/mycompiler/test/operators/TestOperatorIncrement.java +++ /dev/null @@ -1,65 +0,0 @@ -package mycompiler.test.operators; -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 12-04-08 -* @author -* checks correct identification of types which the increment operator can be used for -* -*/ - -public class TestOperatorIncrement extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorIncrement"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorIncrement(String name) { - super(name,TestOperatorIncrement.JAVPATH+TestOperatorIncrement.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOperatorIncrement = new ClassExpect(TestOperatorIncrement.TESTEDCLASSNAME); - - //Methods - VarExpect m1_i = new VarExpect("i",new RefType("java.lang.Integer",-1)); - m1_i.setExpectedType(createMengeAllDiscreteNumberTypes()); - VarExpect m1_j = new VarExpect("j",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); - VarExpect m1_k = new VarExpect("k",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); - VarExpect m1_l = new VarExpect("l",new RefType("java.lang.Integer",-1)); - m1_j.setExpectedType(createMengeAllDiscreteNumberTypes()); - - MethodExpect m1 = new MethodExpect("m",new RefType("void",-1),0); - m1.addParameter(m1_i); - m1.addParameter(m1_j); - m1.addParameter(m1_k); - m1.addParameter(m1_l); - - testOperatorIncrement.addMethod(m1); - - return new Expectation(testOperatorIncrement); - } - - private Menge createMengeAllDiscreteNumberTypes() { - Menge ret = new Menge(); - ret.add(new RefType("java.lang.Integer",-1)); - // ret.add(new RefType("java.lang.Long",-1)); - // ret.add(new RefType("java.lang.Short",-1)); - // ret.add(new RefType("java.lang.Byte",-1)); - - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorObjects.jav b/test/mycompiler/test/operators/TestOperatorObjects.jav deleted file mode 100755 index f9564dc0..00000000 --- a/test/mycompiler/test/operators/TestOperatorObjects.jav +++ /dev/null @@ -1,18 +0,0 @@ -class A { - - public java.lang.Integer m(a) { - return a; - } - -} - -public class TestOperatorObjects { - - public static void main() { - b; - b=new A(); - c; - c=b.m(3); - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorObjects.java b/test/mycompiler/test/operators/TestOperatorObjects.java deleted file mode 100755 index f9cccff4..00000000 --- a/test/mycompiler/test/operators/TestOperatorObjects.java +++ /dev/null @@ -1,48 +0,0 @@ -package mycompiler.test.operators; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 12-04-08 -* @author -* -* checks object usage -*/ - -public class TestOperatorObjects extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorObjects"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorObjects(String name) { - super(name,TestOperatorObjects.JAVPATH+TestOperatorObjects.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect a = new ClassExpect("A"); - ClassExpect testOperatorObjects = new ClassExpect(TestOperatorObjects.TESTEDCLASSNAME); - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("java.lang.Integer",-1),0); - m.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - MethodExpect main = new MethodExpect("main",new RefType("void",-1),0); - main.getBlock().addLocalVar(new VarExpect("b",new RefType("A",-1))); - main.getBlock().addLocalVar(new VarExpect("c",new RefType("java.lang.Integer",-1))); - - - testOperatorObjects.addMethod(main); - a.addMethod(m); - - Expectation ret = new Expectation(testOperatorObjects); - ret.addClass(a); - return ret; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorString.jav b/test/mycompiler/test/operators/TestOperatorString.jav deleted file mode 100755 index a209da13..00000000 --- a/test/mycompiler/test/operators/TestOperatorString.jav +++ /dev/null @@ -1,11 +0,0 @@ -public class TestOperatorString { - - public m() { - a; - b; - a="abc"; - b="def"; - return a+b; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/operators/TestOperatorString.java b/test/mycompiler/test/operators/TestOperatorString.java deleted file mode 100755 index 3b778ccc..00000000 --- a/test/mycompiler/test/operators/TestOperatorString.java +++ /dev/null @@ -1,41 +0,0 @@ -package mycompiler.test.operators; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** -* 12-04-08 -* @author -* -* checks whether plus operator can be used on strings -*/ - -public class TestOperatorString extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestOperatorString"; - private final static String JAVPATH="test/mycompiler/test/operators/"; - - public TestOperatorString(String name) { - super(name,TestOperatorString.JAVPATH+TestOperatorString.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - ClassExpect testOperatorString = new ClassExpect(TestOperatorString.TESTEDCLASSNAME); - - //Methods - MethodExpect m = new MethodExpect("m",new RefType("java.lang.String",-1),0); - m.getBlock().addLocalVar(new VarExpect("a",new RefType("java.lang.String",-1))); - m.getBlock().addLocalVar(new VarExpect("b",new RefType("java.lang.String",-1))); - - testOperatorString.addMethod(m); - - return new Expectation(testOperatorString); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.java b/test/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.java deleted file mode 100755 index 9f14501a..00000000 --- a/test/mycompiler/test/primitiveTypes/AllTestsPrimitiveTypes.java +++ /dev/null @@ -1,25 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsPrimitiveTypes { - - public static Test suite() { - TestSuite suite = new TestSuite( - "Test for mycompiler.test.primitiveTypes"); - //$JUnit-BEGIN$ - suite.addTestSuite(StringTest.class); - suite.addTestSuite(IntegerTest.class); - suite.addTestSuite(FloatTest.class); - suite.addTestSuite(BooleanTest.class); - suite.addTestSuite(LongTest.class); - suite.addTestSuite(ByteTest.class); - suite.addTestSuite(TestSimpleTypes.class); - suite.addTestSuite(DoubleTest.class); - suite.addTestSuite(CharTest.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/primitiveTypes/BooleanTest.jav b/test/mycompiler/test/primitiveTypes/BooleanTest.jav deleted file mode 100755 index f04ef412..00000000 --- a/test/mycompiler/test/primitiveTypes/BooleanTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class BooleanTest{ - void booleanTest(b){ - b = true; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/BooleanTest.java b/test/mycompiler/test/primitiveTypes/BooleanTest.java deleted file mode 100755 index ad3f59c3..00000000 --- a/test/mycompiler/test/primitiveTypes/BooleanTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type boolean -*/ -public class BooleanTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="BooleanTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public BooleanTest(String name) { - super(name,BooleanTest.JAVPATH+BooleanTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(BooleanTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("booleanTest",new RefType("void",-1),0); - m0.addParameter(new VarExpect("b",new RefType("java.lang.Boolean",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/ByteTest.jav b/test/mycompiler/test/primitiveTypes/ByteTest.jav deleted file mode 100755 index 156cf51d..00000000 --- a/test/mycompiler/test/primitiveTypes/ByteTest.jav +++ /dev/null @@ -1,6 +0,0 @@ -class ByteTest{ - void byteTest(b){ - byte myByte = -1; - b = myByte; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/ByteTest.java b/test/mycompiler/test/primitiveTypes/ByteTest.java deleted file mode 100755 index a283d6d1..00000000 --- a/test/mycompiler/test/primitiveTypes/ByteTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.BlockExpect; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type byte -*/ -public class ByteTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="ByteTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public ByteTest(String name) { - super(name,ByteTest.JAVPATH+ByteTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(ByteTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("byteTest",new RefType("void",-1),0); - m0.addParameter(new VarExpect("b",new RefType("byte",-1))); - - BlockExpect b0 = new BlockExpect(null,"1"); - VarExpect v0 = new VarExpect("myByte",new RefType("byte",-1)); - b0.addLocalVar(v0); - - m0.setBlock(b0); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/CharTest.jav b/test/mycompiler/test/primitiveTypes/CharTest.jav deleted file mode 100755 index 7c75f675..00000000 --- a/test/mycompiler/test/primitiveTypes/CharTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class CharTest{ - void character(c){ - c = 'c'; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/CharTest.java b/test/mycompiler/test/primitiveTypes/CharTest.java deleted file mode 100755 index 7cd905ce..00000000 --- a/test/mycompiler/test/primitiveTypes/CharTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* chck type character -*/ -public class CharTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="CharTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public CharTest(String name) { - super(name,CharTest.JAVPATH+CharTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(CharTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("character",new RefType("void",-1),0); - m0.addParameter(new VarExpect("c",new RefType("java.lang.Character",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/DoubleTest.jav b/test/mycompiler/test/primitiveTypes/DoubleTest.jav deleted file mode 100755 index a13652f3..00000000 --- a/test/mycompiler/test/primitiveTypes/DoubleTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class DoubleTest{ - void doublePrecision(d){ - d = 1.0; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/DoubleTest.java b/test/mycompiler/test/primitiveTypes/DoubleTest.java deleted file mode 100755 index 597fa8d5..00000000 --- a/test/mycompiler/test/primitiveTypes/DoubleTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type double -*/ -public class DoubleTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="DoubleTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public DoubleTest(String name) { - super(name,DoubleTest.JAVPATH+DoubleTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(DoubleTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("doublePrecision",new RefType("void",-1),0); - m0.addParameter(new VarExpect("d",new RefType("java.lang.Double",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/FloatTest.jav b/test/mycompiler/test/primitiveTypes/FloatTest.jav deleted file mode 100755 index 054e946e..00000000 --- a/test/mycompiler/test/primitiveTypes/FloatTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class FloatTest { - void floatingPoint(f) { - f = 5f; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/FloatTest.java b/test/mycompiler/test/primitiveTypes/FloatTest.java deleted file mode 100755 index a910b829..00000000 --- a/test/mycompiler/test/primitiveTypes/FloatTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type Float -*/ -public class FloatTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="FloatTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public FloatTest(String name) { - super(name,FloatTest.JAVPATH+FloatTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(FloatTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("floatingPoint",new RefType("void",-1),0); - m0.addParameter(new VarExpect("f",new RefType("java.lang.Float",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/IntegerTest.jav b/test/mycompiler/test/primitiveTypes/IntegerTest.jav deleted file mode 100755 index 5b6bc3d2..00000000 --- a/test/mycompiler/test/primitiveTypes/IntegerTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class IntegerTest{ - void integer(i){ - i = 1; /* koennte vielleicht auch short/byte/char sein .. */ - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/IntegerTest.java b/test/mycompiler/test/primitiveTypes/IntegerTest.java deleted file mode 100755 index 42a6559c..00000000 --- a/test/mycompiler/test/primitiveTypes/IntegerTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type Integer -*/ -public class IntegerTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="IntegerTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public IntegerTest(String name) { - super(name,IntegerTest.JAVPATH+IntegerTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(IntegerTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("integer",new RefType("void",-1),0); - VarExpect i_type = new VarExpect("i", new RefType("java.lang.Integer",-1)); -// i_type.addExpectedType(new RefType("java.lang.Short",-1)); -// i_type.addExpectedType(new RefType("java.lang.Character",-1)); -// i_type.addExpectedType(new RefType("java.lang.Long",-1)); -// i_type.addExpectedType(new RefType("java.lang.Byte",-1)); - m0.addParameter(i_type); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/LongTest.jav b/test/mycompiler/test/primitiveTypes/LongTest.jav deleted file mode 100755 index 4bc6590a..00000000 --- a/test/mycompiler/test/primitiveTypes/LongTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class LongTest{ - void longTest(l){ - l = 4L; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/LongTest.java b/test/mycompiler/test/primitiveTypes/LongTest.java deleted file mode 100755 index 8951408c..00000000 --- a/test/mycompiler/test/primitiveTypes/LongTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type Long -*/ -public class LongTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="LongTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public LongTest(String name) { - super(name,LongTest.JAVPATH+LongTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(LongTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("longTest",new RefType("void",-1),0); - m0.addParameter(new VarExpect("l",new RefType("java.lang.Long",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/StringTest.jav b/test/mycompiler/test/primitiveTypes/StringTest.jav deleted file mode 100755 index 72c8f75d..00000000 --- a/test/mycompiler/test/primitiveTypes/StringTest.jav +++ /dev/null @@ -1,5 +0,0 @@ -class StringTest{ - void string(s){ - s = "String"; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/StringTest.java b/test/mycompiler/test/primitiveTypes/StringTest.java deleted file mode 100755 index 4c538aee..00000000 --- a/test/mycompiler/test/primitiveTypes/StringTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -/** -* 02-04-08 -* @author -* -* check type String -*/ -public class StringTest extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="StringTest"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public StringTest(String name) { - super(name,StringTest.JAVPATH+StringTest.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect overloading = new ClassExpect(StringTest.TESTEDCLASSNAME); - //methods - - MethodExpect m0 = new MethodExpect("string",new RefType("void",-1),0); - m0.addParameter(new VarExpect("s",new RefType("java.lang.String",-1))); - - overloading.addMethod(m0); - - - return new Expectation(overloading); - } - -} diff --git a/test/mycompiler/test/primitiveTypes/TestSimpleTypes.jav b/test/mycompiler/test/primitiveTypes/TestSimpleTypes.jav deleted file mode 100755 index 9ddb9526..00000000 --- a/test/mycompiler/test/primitiveTypes/TestSimpleTypes.jav +++ /dev/null @@ -1,22 +0,0 @@ - -class TestSimpleTypes{ - - public m1(int a) { - } - - public int m2(int a) - { - return a; - } - - public m3(char a) {} - -/* not implemented? - public m4(float a) {} - public m5(double a) {}*/ - - /* cast from Integer to int does not work - public int m6() { - return 3; - }*/ -} \ No newline at end of file diff --git a/test/mycompiler/test/primitiveTypes/TestSimpleTypes.java b/test/mycompiler/test/primitiveTypes/TestSimpleTypes.java deleted file mode 100755 index bbdfac28..00000000 --- a/test/mycompiler/test/primitiveTypes/TestSimpleTypes.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.primitiveTypes; - -import de.dhbwstuttgart.syntaxtree.type.CharacterType; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 01-04-08 - * @author - * - * This test verifies identification of a simple method with returntype void - * - */ - -public class TestSimpleTypes extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestSimpleTypes"; - private final static String JAVPATH="test/mycompiler/test/primitiveTypes/"; - - public TestSimpleTypes(String name) { - super(name,TestSimpleTypes.JAVPATH+TestSimpleTypes.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testSimpleType = new ClassExpect(TestSimpleTypes.TESTEDCLASSNAME); - - //Methods - MethodExpect m1 = new MethodExpect("m1",new RefType("void",-1),0); - m1.addParameter(new VarExpect("a",new IntegerType())); - MethodExpect m2 = new MethodExpect("m2",new IntegerType(),0); - m2.addParameter(new VarExpect("a",new IntegerType())); - MethodExpect m3 = new MethodExpect("m3",new RefType("void",-1),0); - m3.addParameter(new VarExpect("a",new CharacterType())); -// MethodExpect m4 = new MethodExpect("m4",new RefType("void",-1),0); -// m4.addParameter(new VarExpect("a",new FloatType())); -// MethodExpect m5 = new MethodExpect("m5",new RefType("void",-1),0); -// m5.addParameter(new VarExpect("a",new DoubleType())); - - - testSimpleType.addMethod(m1); - testSimpleType.addMethod(m2); - testSimpleType.addMethod(m3); - return new Expectation(testSimpleType); - } -} diff --git a/test/mycompiler/test/trivial/AllTestsTrivial.java b/test/mycompiler/test/trivial/AllTestsTrivial.java deleted file mode 100755 index d0400368..00000000 --- a/test/mycompiler/test/trivial/AllTestsTrivial.java +++ /dev/null @@ -1,30 +0,0 @@ -package mycompiler.test.trivial; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class AllTestsTrivial { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for mycompiler.test.trivial"); - //$JUnit-BEGIN$ - suite.addTestSuite(TestInterfaceEmpty.class); - suite.addTestSuite(TestClassMember.class); - suite.addTestSuite(TestClassMemberAssignment.class); - suite.addTestSuite(TestClassEmptyGenerics.class); - suite.addTestSuite(TestConstants.class); - suite.addTestSuite(TestConstructor.class); - suite.addTestSuite(TestInterfaceMethod.class); - suite.addTestSuite(TestClassEmpty.class); - suite.addTestSuite(TestMethodEmptyParameterGenericExtends.class); - suite.addTestSuite(TestConstructorNegative.class); - suite.addTestSuite(TestMethodEmptyParameter.class); - suite.addTestSuite(TestMethodEmptyGeneric.class); - suite.addTestSuite(TestInterfaceNotInferenced.class); - suite.addTestSuite(TestMethodEmpty.class); - suite.addTestSuite(TestInterfaceMember.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/mycompiler/test/trivial/TestClassEmpty.jav b/test/mycompiler/test/trivial/TestClassEmpty.jav deleted file mode 100755 index d7f473a0..00000000 --- a/test/mycompiler/test/trivial/TestClassEmpty.jav +++ /dev/null @@ -1,3 +0,0 @@ - -public class TestClassEmpty { -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassEmpty.java b/test/mycompiler/test/trivial/TestClassEmpty.java deleted file mode 100755 index f7129f96..00000000 --- a/test/mycompiler/test/trivial/TestClassEmpty.java +++ /dev/null @@ -1,34 +0,0 @@ -package mycompiler.test.trivial; - -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; - - -/** - * 01-04-08 - * @author - * - * This tests verifies correct detection of an empty class. - * - */ - -public class TestClassEmpty extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestClassEmpty"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestClassEmpty(String name) { - super(name,TestClassEmpty.JAVPATH+TestClassEmpty.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //classes - ClassExpect testEmptyClass = new ClassExpect(TestClassEmpty.TESTEDCLASSNAME); - - return new Expectation(testEmptyClass); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassEmptyGenerics.jav b/test/mycompiler/test/trivial/TestClassEmptyGenerics.jav deleted file mode 100755 index bb072d4b..00000000 --- a/test/mycompiler/test/trivial/TestClassEmptyGenerics.jav +++ /dev/null @@ -1,4 +0,0 @@ - -public class TestClassEmptyGenerics { - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassEmptyGenerics.java b/test/mycompiler/test/trivial/TestClassEmptyGenerics.java deleted file mode 100755 index 8556a7f5..00000000 --- a/test/mycompiler/test/trivial/TestClassEmptyGenerics.java +++ /dev/null @@ -1,36 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; - -/** - * 01-04-08 - * @author - * - * This tests verifies correct identification of a generic class. - * - */ - -public class TestClassEmptyGenerics extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestClassEmptyGenerics"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestClassEmptyGenerics(String name) { - super(name,TestClassEmptyGenerics.JAVPATH+TestClassEmptyGenerics.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //Classes - ClassExpect testEmptyClassGenerics = new ClassExpect(TestClassEmptyGenerics.TESTEDCLASSNAME); - testEmptyClassGenerics.addGeneric(new GenericTypeVar("E",-1)); - testEmptyClassGenerics.addGeneric(new GenericTypeVar("F",-1)); - - //Expectation - return new Expectation(testEmptyClassGenerics); - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassMember.jav b/test/mycompiler/test/trivial/TestClassMember.jav deleted file mode 100755 index 3fc799e5..00000000 --- a/test/mycompiler/test/trivial/TestClassMember.jav +++ /dev/null @@ -1,6 +0,0 @@ -import de.dhbwstuttgart.typeinference.Menge; -public class TestClassMember { - - Integer member; - Menge member2; -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassMember.java b/test/mycompiler/test/trivial/TestClassMember.java deleted file mode 100755 index 64fae908..00000000 --- a/test/mycompiler/test/trivial/TestClassMember.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 01-04-08 - * @author - * - * This test verifies correct detection of a member variable. - */ -public class TestClassMember extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestClassMember"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestClassMember(String name) { - super(name,TestClassMember.JAVPATH+TestClassMember.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //class--- TestClassMember - ClassExpect testClassMember = new ClassExpect(TestClassMember.TESTEDCLASSNAME); - //member - VarExpect member = new VarExpect("member",new RefType("java.lang.Integer",-1)); - Menge param = new Menge(); - param.add(new RefType("java.lang.String",-1)); - RefType member2Type = new RefType("de.dhbwstuttgart.typeinference.Menge",param,-1); - VarExpect member2 = new VarExpect("member2",member2Type); - testClassMember.addMember(member); - testClassMember.addMember(member2); - - //Expectation - return new Expectation(testClassMember); - } - -} diff --git a/test/mycompiler/test/trivial/TestClassMemberAssignment.jav b/test/mycompiler/test/trivial/TestClassMemberAssignment.jav deleted file mode 100755 index 771ea288..00000000 --- a/test/mycompiler/test/trivial/TestClassMemberAssignment.jav +++ /dev/null @@ -1,22 +0,0 @@ - -public class TestClassMemberAssignment { - - Integer member; - - public m1() { - member=1; - } - - public m2() { - this.member=2; - } - - public m3(a) { - member=a; - } - - public void m(a) { - this.a=a; - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestClassMemberAssignment.java b/test/mycompiler/test/trivial/TestClassMemberAssignment.java deleted file mode 100755 index 25d0caad..00000000 --- a/test/mycompiler/test/trivial/TestClassMemberAssignment.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * This test verifies correct member assignments. - */ -public class TestClassMemberAssignment extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestClassMemberAssignment"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestClassMemberAssignment(String name) { - super(name,TestClassMemberAssignment.JAVPATH+TestClassMemberAssignment.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //class--- TestClassMemberAssignment - ClassExpect testClassMemberAssignment = new ClassExpect(TestClassMemberAssignment.TESTEDCLASSNAME); - //member - VarExpect member = new VarExpect("member",new RefType("java.lang.Integer",-1)); - testClassMemberAssignment.addMember(member); - //methods - MethodExpect m1 = new MethodExpect("m1", new RefType("void",-1)); - MethodExpect m2 = new MethodExpect("m2", new RefType("void",-1)); - MethodExpect m3 = new MethodExpect("m3", new RefType("void",-1)); - m3.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - MethodExpect m4 = new MethodExpect("m3", new RefType("void",-1)); - m3.addParameter(new VarExpect("a", new RefType("java.lang.Integer",-1))); - - testClassMemberAssignment.addMethod(m1); - testClassMemberAssignment.addMethod(m2); - testClassMemberAssignment.addMethod(m3); - testClassMemberAssignment.addMethod(m4); - - //Expectation - return new Expectation(testClassMemberAssignment); - } - -} diff --git a/test/mycompiler/test/trivial/TestConstants.jav b/test/mycompiler/test/trivial/TestConstants.jav deleted file mode 100755 index f9d293ac..00000000 --- a/test/mycompiler/test/trivial/TestConstants.jav +++ /dev/null @@ -1,6 +0,0 @@ -public class TestConstants { - public final static Boolean B = true; - public final static Integer I = 1; - public final static Character C = 'A'; - public final static String S = "Hello World!"; -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestConstants.java b/test/mycompiler/test/trivial/TestConstants.java deleted file mode 100755 index cc6f9852..00000000 --- a/test/mycompiler/test/trivial/TestConstants.java +++ /dev/null @@ -1,39 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - * this test checks correct detection of constants as members - */ -public class TestConstants extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestConstants"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestConstants(String name) { - super(name,TestConstants.JAVPATH+TestConstants.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //class--- TestConstants - ClassExpect testConstants = new ClassExpect(TestConstants.TESTEDCLASSNAME); - //member - testConstants.addMember(new VarExpect("B",new RefType("java.lang.Boolean",-1))); - testConstants.addMember(new VarExpect("I",new RefType("java.lang.Integer",-1))); - testConstants.addMember(new VarExpect("C",new RefType("java.lang.Character",-1))); - testConstants.addMember(new VarExpect("S",new RefType("java.lang.String",-1))); - - //Expectation - return new Expectation(testConstants); - } - -} diff --git a/test/mycompiler/test/trivial/TestConstructor.jav b/test/mycompiler/test/trivial/TestConstructor.jav deleted file mode 100755 index f07566b4..00000000 --- a/test/mycompiler/test/trivial/TestConstructor.jav +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.Stack; - -public class TestConstructor { - Integer i; - Stack s; - - public TestConstructor() { - i=3; - s=new Stack(); - } - - public TestConstructor(a) { - a=4; - } - - public TestConstructor(java.lang.Integer a, Stack b) { - i=a; - s=b; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestConstructor.java b/test/mycompiler/test/trivial/TestConstructor.java deleted file mode 100755 index 8fee9776..00000000 --- a/test/mycompiler/test/trivial/TestConstructor.java +++ /dev/null @@ -1,51 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 13-04-08 - * @author - * - * This test verifies correct identification of a Constructor - * - */ - -public class TestConstructor extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestConstructor"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestConstructor(String name) { - super(name,TestConstructor.JAVPATH+TestConstructor.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testConstructor = new ClassExpect(TestConstructor.TESTEDCLASSNAME); - - //Member - testConstructor.addMember(new VarExpect("i",new RefType("java.lang.Integer",-1))); - testConstructor.addMember(new VarExpect("s",new RefType("java.util.Stack",-1))); - - - //Methods - MethodExpect constructor1 = new MethodExpect("",new RefType("void",-1)); - MethodExpect constructor2 = new MethodExpect("",new RefType("void",-1)); - constructor2.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - MethodExpect constructor3 = new MethodExpect("",new RefType("void",-1)); - constructor3.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - constructor3.addParameter(new VarExpect("b",new RefType("java.util.Stack",-1))); - - testConstructor.addMethod(constructor1); - testConstructor.addMethod(constructor2); - testConstructor.addMethod(constructor3); - return new Expectation(testConstructor); - } -} diff --git a/test/mycompiler/test/trivial/TestConstructorNegative.jav b/test/mycompiler/test/trivial/TestConstructorNegative.jav deleted file mode 100755 index b4bfcf90..00000000 --- a/test/mycompiler/test/trivial/TestConstructorNegative.jav +++ /dev/null @@ -1,8 +0,0 @@ - -public class TestConstructorNegative { - - /*should throw error*/ - public TestConstructorNegative(java.lang.Integer a, String b) { - return a; - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestConstructorNegative.java b/test/mycompiler/test/trivial/TestConstructorNegative.java deleted file mode 100755 index 56e6e299..00000000 --- a/test/mycompiler/test/trivial/TestConstructorNegative.java +++ /dev/null @@ -1,45 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - - -/** - * 13-04-08 - * @author - * - * This test verifies that it's not allowed for a constructor to return a value - * - */ - -public class TestConstructorNegative extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestConstructorNegative"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestConstructorNegative(String name) { - super(name,TestConstructorNegative.JAVPATH+TestConstructorNegative.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testConstructorNegative = new ClassExpect(TestConstructorNegative.TESTEDCLASSNAME); - - //Methods - /*this is as assumed*/ - MethodExpect constructor1 = new MethodExpect("",new RefType("void",-1)); - constructor1.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - constructor1.addParameter(new VarExpect("b",new RefType("java.lang.String",-1))); - /*however, testcase should throw an error*/ - - testConstructorNegative.addMethod(constructor1); - Expectation ret = new Expectation(testConstructorNegative); - ret.addException(new Exception()); - return ret; - } -} diff --git a/test/mycompiler/test/trivial/TestInterfaceEmpty.jav b/test/mycompiler/test/trivial/TestInterfaceEmpty.jav deleted file mode 100755 index 52bfca29..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceEmpty.jav +++ /dev/null @@ -1,4 +0,0 @@ - -interface TestInterfaceEmpty { - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestInterfaceEmpty.java b/test/mycompiler/test/trivial/TestInterfaceEmpty.java deleted file mode 100755 index f227fa45..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceEmpty.java +++ /dev/null @@ -1,33 +0,0 @@ -package mycompiler.test.trivial; - -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; - -/** - * 01-04-08 - * @author - * - *This test verifies correct detection of simple interface - * - */ - -public class TestInterfaceEmpty extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInterfaceEmpty"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestInterfaceEmpty(String name) { - super(name,TestInterfaceEmpty.JAVPATH+TestInterfaceEmpty.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testEmptyInterface = new ClassExpect(TestInterfaceEmpty.TESTEDCLASSNAME); - - //Expectation - return new Expectation(testEmptyInterface); - } -} diff --git a/test/mycompiler/test/trivial/TestInterfaceMember.jav b/test/mycompiler/test/trivial/TestInterfaceMember.jav deleted file mode 100755 index 5e60eb60..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceMember.jav +++ /dev/null @@ -1,5 +0,0 @@ -interface TestInterfaceMember { - - Integer member=3; - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestInterfaceMember.java b/test/mycompiler/test/trivial/TestInterfaceMember.java deleted file mode 100755 index b1a42a20..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceMember.java +++ /dev/null @@ -1,37 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 18-04-08 - * @author - * - *This test verifies correct detection of an interface with a single member - * - */ - -public class TestInterfaceMember extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInterfaceMember"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestInterfaceMember(String name) { - super(name,TestInterfaceMember.JAVPATH+TestInterfaceMember.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testInterfaceMember = new ClassExpect(TestInterfaceMember.TESTEDCLASSNAME); - - testInterfaceMember.addMember(new VarExpect("member", new RefType("java.lang.Integer",-1))); - - //Expectation - return new Expectation(testInterfaceMember); - } -} diff --git a/test/mycompiler/test/trivial/TestInterfaceMethod.jav b/test/mycompiler/test/trivial/TestInterfaceMethod.jav deleted file mode 100755 index 1b416fd0..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceMethod.jav +++ /dev/null @@ -1,10 +0,0 @@ -interface TestInterfaceMethod { - - empty1(); - - void empty2(); - - empty3(Integer a); - - empty4(String a, Integer b); -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestInterfaceMethod.java b/test/mycompiler/test/trivial/TestInterfaceMethod.java deleted file mode 100755 index af58cf8a..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceMethod.java +++ /dev/null @@ -1,50 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; - -/** - * 10-04-08 - * @author - * - *This test verifies correct detection of an interface with a method - * - */ - -public class TestInterfaceMethod extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestInterfaceMethod"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestInterfaceMethod(String name) { - super(name,TestInterfaceMethod.JAVPATH+TestInterfaceMethod.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testInterfaceMethod = new ClassExpect(TestInterfaceMethod.TESTEDCLASSNAME); - - MethodExpect empty1 = new MethodExpect("empty1",new TypePlaceholderExpect("a")); - MethodExpect empty2 = new MethodExpect("empty2",new RefType("void",-1)); - MethodExpect empty3 = new MethodExpect("empty3",new TypePlaceholderExpect("b")); - empty3.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - MethodExpect empty4 = new MethodExpect("empty4",new TypePlaceholderExpect("c")); - empty4.addParameter(new VarExpect("a",new RefType("java.lang.String",-1))); - empty4.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - - testInterfaceMethod.addMethod(empty1); - testInterfaceMethod.addMethod(empty2); - testInterfaceMethod.addMethod(empty3); - testInterfaceMethod.addMethod(empty4); - - //Expectation - return new Expectation(testInterfaceMethod); - } -} diff --git a/test/mycompiler/test/trivial/TestInterfaceNotInferenced.jav b/test/mycompiler/test/trivial/TestInterfaceNotInferenced.jav deleted file mode 100755 index f03d6b18..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceNotInferenced.jav +++ /dev/null @@ -1,10 +0,0 @@ -public interface TestInterfaceNotInferenced { - - public Integer m1(); - - /*should throw error, because not all Types defined*/ - public m2(); - - public void m3(a); - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestInterfaceNotInferenced.java b/test/mycompiler/test/trivial/TestInterfaceNotInferenced.java deleted file mode 100755 index cce9d877..00000000 --- a/test/mycompiler/test/trivial/TestInterfaceNotInferenced.java +++ /dev/null @@ -1,48 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.TypePlaceholderExpect; -import mycompiler.test.expectationTypes.VarExpect; - -/** - * 20-05-08 - * @author - * - * checks that interfaces do not get inferenced according to discussion with M. Plümicke - */ -public class TestInterfaceNotInferenced extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestInterfaceNotInferenced"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestInterfaceNotInferenced(String name) { - super(name,TestInterfaceNotInferenced.JAVPATH+TestInterfaceNotInferenced.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - - //interface--- TestInterfaceNotInferenced - ClassExpect testInterfaceNotInferenced = new ClassExpect(TestInterfaceNotInferenced.TESTEDCLASSNAME); - - //methods - MethodExpect m1 = new MethodExpect("m1",new RefType("java.lang.Integer",-1)); - MethodExpect m2 = new MethodExpect("m2", new TypePlaceholderExpect("a")); - MethodExpect m3 = new MethodExpect("m3", new RefType("void",-1)); - m3.addParameter(new VarExpect("a", new TypePlaceholderExpect("b"))); - - testInterfaceNotInferenced.addMethod(m1); - testInterfaceNotInferenced.addMethod(m2); - testInterfaceNotInferenced.addMethod(m3); - //Expectation - Expectation ret = new Expectation(testInterfaceNotInferenced); - //interfaces should not be inferenceable - ret.addException(new Exception()); - return ret; - } - -} diff --git a/test/mycompiler/test/trivial/TestMethodEmpty.jav b/test/mycompiler/test/trivial/TestMethodEmpty.jav deleted file mode 100755 index c9c21cd5..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmpty.jav +++ /dev/null @@ -1,6 +0,0 @@ - -public class TestMethodEmpty { - - emptyMethod() { - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestMethodEmpty.java b/test/mycompiler/test/trivial/TestMethodEmpty.java deleted file mode 100755 index 05b1f535..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmpty.java +++ /dev/null @@ -1,38 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; - - -/** - * 01-04-08 - * @author - * - * This test verifies identification of a simple method with return type void - * - */ - -public class TestMethodEmpty extends AbstractInferenceTest { - private final static String TESTEDCLASSNAME="TestMethodEmpty"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestMethodEmpty(String name) { - super(name,TestMethodEmpty.JAVPATH+TestMethodEmpty.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // Classes - ClassExpect testEmptyMethod = new ClassExpect(TestMethodEmpty.TESTEDCLASSNAME); - - //Methods - MethodExpect emptyMethod = new MethodExpect("emptyMethod",new RefType("void",-1)); - testEmptyMethod.addMethod(emptyMethod); - - return new Expectation(testEmptyMethod); - } -} diff --git a/test/mycompiler/test/trivial/TestMethodEmptyGeneric.jav b/test/mycompiler/test/trivial/TestMethodEmptyGeneric.jav deleted file mode 100755 index c7043f01..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyGeneric.jav +++ /dev/null @@ -1,10 +0,0 @@ - -public class TestMethodEmptyGeneric{ - - emptyMethodGeneric() { - } - - emptyMethodGeneric2() { - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestMethodEmptyGeneric.java b/test/mycompiler/test/trivial/TestMethodEmptyGeneric.java deleted file mode 100755 index 26325c4e..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyGeneric.java +++ /dev/null @@ -1,46 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; - -/** - * 01-04-08 - * @author - * - * Simply tests recognition of a generic method with return type void - * - */ - -public class TestMethodEmptyGeneric extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestMethodEmptyGeneric"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestMethodEmptyGeneric(String name) { - super(name,TestMethodEmptyGeneric.JAVPATH+TestMethodEmptyGeneric.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - // classes - ClassExpect testEmptyMethodGeneric = new ClassExpect(TestMethodEmptyGeneric.TESTEDCLASSNAME); - - //methods - MethodExpect emptyMethodGeneric = new MethodExpect("emptyMethodGeneric",new RefType("void",-1)); - emptyMethodGeneric.addGeneric(new GenericTypeVar("T",-1)); - MethodExpect emptyMethodGeneric2= new MethodExpect("emptyMethodGeneric2",new RefType("void",-1)); - emptyMethodGeneric2.addGeneric(new GenericTypeVar("T",-1)); - emptyMethodGeneric2.addGeneric(new GenericTypeVar("S",-1)); - - testEmptyMethodGeneric.addMethod(emptyMethodGeneric); - testEmptyMethodGeneric.addMethod(emptyMethodGeneric2); - - return new Expectation(testEmptyMethodGeneric); - } - -} diff --git a/test/mycompiler/test/trivial/TestMethodEmptyParameter.jav b/test/mycompiler/test/trivial/TestMethodEmptyParameter.jav deleted file mode 100755 index 7b5b47ac..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyParameter.jav +++ /dev/null @@ -1,16 +0,0 @@ - -public class TestMethodEmptyParameter{ - - - emptyMethodParameter(Integer a) { - } - - - emptyMethodParameter2(Boolean a, Integer b) { - - } - - emptyMethodParameter3(a,b) { - } - -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestMethodEmptyParameter.java b/test/mycompiler/test/trivial/TestMethodEmptyParameter.java deleted file mode 100755 index e0503619..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyParameter.java +++ /dev/null @@ -1,52 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.syntaxtree.type.RefType; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; -import mycompiler.test.expectationTypes.GenericTypeVarExpect; - -/** - * TODO: - * @author tom - * - * Test simple empty methods with parameters -> parameters will be inference to genericstypevar - */ - -public class TestMethodEmptyParameter extends AbstractInferenceTest { - - private final static String TESTEDCLASSNAME="TestMethodEmptyParameter"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestMethodEmptyParameter(String name) { - super(name,TestMethodEmptyParameter.JAVPATH+TestMethodEmptyParameter.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - //classes - ClassExpect testEmptyMethodParameter = new ClassExpect(TestMethodEmptyParameter.TESTEDCLASSNAME); - - //methods - MethodExpect emptyMethodParameter = new MethodExpect("emptyMethodParameter",new RefType("void",-1)); - emptyMethodParameter.addParameter(new VarExpect("a",new RefType("java.lang.Integer",-1))); - - MethodExpect emptyMethodParameter2 = new MethodExpect("emptyMethodParameter2",new RefType("void",-1)); - emptyMethodParameter2.addParameter(new VarExpect("a",new RefType("java.lang.Boolean",-1))); - emptyMethodParameter2.addParameter(new VarExpect("b",new RefType("java.lang.Integer",-1))); - - MethodExpect emptyMethodParameter3 = new MethodExpect("emptyMethodParameter3",new RefType("void",-1)); - emptyMethodParameter2.addParameter(new VarExpect("a",new GenericTypeVarExpect("a"))); - emptyMethodParameter2.addParameter(new VarExpect("b",new GenericTypeVarExpect("b"))); - - testEmptyMethodParameter.addMethod(emptyMethodParameter); - testEmptyMethodParameter.addMethod(emptyMethodParameter2); - testEmptyMethodParameter.addMethod(emptyMethodParameter3); - - return new Expectation(testEmptyMethodParameter); - } - -} diff --git a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.jav b/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.jav deleted file mode 100755 index 369661ac..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.jav +++ /dev/null @@ -1,9 +0,0 @@ - -public class TestMethodEmptyParameterGenericExtends{ - - emptyMethodGenericExtends2(T a) { - } - - emptyMethodGenericExtends3(T a, S b) { - } -} \ No newline at end of file diff --git a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java b/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java deleted file mode 100755 index cfd0ef82..00000000 --- a/test/mycompiler/test/trivial/TestMethodEmptyParameterGenericExtends.java +++ /dev/null @@ -1,53 +0,0 @@ -package mycompiler.test.trivial; - -import de.dhbwstuttgart.typeinference.Menge; - -import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import mycompiler.test.AbstractInferenceTest; -import mycompiler.test.expectationTypes.ClassExpect; -import mycompiler.test.expectationTypes.Expectation; -import mycompiler.test.expectationTypes.MethodExpect; -import mycompiler.test.expectationTypes.VarExpect; - -public class TestMethodEmptyParameterGenericExtends extends AbstractInferenceTest { - - - private final static String TESTEDCLASSNAME="TestMethodEmptyParameterGenericExtends"; - private final static String JAVPATH="test/mycompiler/test/trivial/"; - - public TestMethodEmptyParameterGenericExtends(String name) { - super(name,TestMethodEmptyParameterGenericExtends.JAVPATH+TestMethodEmptyParameterGenericExtends.TESTEDCLASSNAME + ".jav"); - - } - - @Override - protected Expectation getExpectations() { - ClassExpect testEmptyMethodParameterGenericExtends = new ClassExpect(TestMethodEmptyParameterGenericExtends.TESTEDCLASSNAME); - - //methods - MethodExpect m1 = new MethodExpect("emptyMethodGenericExtends2",new RefType("void",-1)); - Menge bounds1 = new Menge(); - bounds1.add(new RefType("java.lang.Number",-1)); - m1.addGeneric(new BoundedGenericTypeVar("T",bounds1,-1)); - m1.addParameter(new VarExpect("a",new BoundedGenericTypeVar("T",bounds1,-1))); - - MethodExpect m2 = new MethodExpect("emptyMethodGenericExtends3",new RefType("void",-1)); - Menge bounds2 = new Menge(); - bounds2.add(new RefType("java.lang.Number",-1)); - m2.addGeneric(new GenericTypeVar("T",-1)); - m2.addGeneric(new BoundedGenericTypeVar("S",bounds2,-1)); - m2.addParameter(new VarExpect("a",new GenericTypeVar("T",-1))); - m2.addParameter(new VarExpect("b",new BoundedGenericTypeVar("S",bounds2,-1))); - - - testEmptyMethodParameterGenericExtends.addMethod(m1); - testEmptyMethodParameterGenericExtends.addMethod(m2); - - return new Expectation(testEmptyMethodParameterGenericExtends); - } - - -} diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.java deleted file mode 100755 index 25c232c2..00000000 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrAlgorithmTestSuite.java +++ /dev/null @@ -1,26 +0,0 @@ -package mycompiler.test.unittest.typeReconstructionTest; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class TrAlgorithmTestSuite { - /** - * JUnit Tests for main type reconstruction algorithms - */ - - public static Test suite() { - - TestSuite trAlgoSuite = new TestSuite("TR Testsuite"); - - //trMakeFCTest - trAlgoSuite.addTest(new TrMakeFCTest("testAllMakeFC")); - trAlgoSuite.addTest(new TrMakeFCTest("testTrivialMakeFC")); - - //trUnify - trAlgoSuite.addTestSuite(TrSubUnifyTest.class); - //trAlgoSuite.addTest(TrMakeFCTest.suite()); - - return trAlgoSuite; - } - -} diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java deleted file mode 100755 index f516cc97..00000000 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrMakeFCTest.java +++ /dev/null @@ -1,178 +0,0 @@ -package mycompiler.test.unittest.typeReconstructionTest; - -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.logger.xml.DOMConfigurator; - -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.ClassBody; -import de.dhbwstuttgart.syntaxtree.Interface; -import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.Pair; -import de.dhbwstuttgart.typeinference.unify.FC_TTO; - -public class TrMakeFCTest extends TestCase{ - - /* makeFC() is not being tested according to unit test specs -> used objects cannot be mocked*/ - - private static Logger testlog = Logger.getLogger("trtest"); - private SourceFile src=null; - private FC_TTO expected=null; - - public TrMakeFCTest(String name) { - super(name); - DOMConfigurator.configure("log4j.xml"); //maybe subject to asserts -> mocking - DOMConfigurator.configure("test/log4jTesting.xml"); - } - - public void setUp() { - this.src=new SourceFile(); - - } - - public void tearDown() { - this.src=null; - } - - public void testTrivialMakeFC() { - //only classes, no inheritance, no parameters - - testlog.info("----------testTrivilialMakeFC-----------"); - //start environment - //Classes - for (int i=0;i<3;i++) - this.src.addElement(new Class("Test"+i,new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),null)); - //Interfaces - for (int i=0;i<3;i++) - this.src.addElement(new Interface("ITest"+i,new Modifiers())); - - //expected result - Menge fc = new Menge(); - //fc.add(new Pair(new RefType("Test",-1),new RefType("",-1))); - Menge tto=(Menge)fc.clone(); - expected = new FC_TTO(fc,tto,this.src.KlassenVektor); - testlog.debug("Test-Setup: " + this.src.KlassenVektor); - - //call tested method - FC_TTO ret = this.src.makeFC(); - testlog.debug("expected: "+expected.getFC()); - testlog.debug("returned: "+ret.getFC()); - - //compare results - TrMakeFCTest.assertEquals(expected.getFC(), ret.getFC()); - TrMakeFCTest.assertEquals(expected.getTTO(),ret.getTTO()); - TrMakeFCTest.assertEquals(expected.getClasses(),ret.getClasses()); - } - - public void testAllMakeFC() { - //white box: all branches of makeFC are being touched - testlog.info("----------testAllMakeFC----------"); - //start environment - //(1) class AbstractList{} - //(2) class Vektor extends AbstractList{} - //(3) class Matrix extends Vektor>{} - //(4) class ExMatrix extends Matrix{} - - //Interface - //(1) - GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Menge paralist = new Menge(); - paralist.add(gtv_a); - Interface abstractlist = new Interface("AbstractList"); - abstractlist.setParaList(paralist); - this.src.addElement(abstractlist); - - //Classes with superclasses - //(1) -// GenericTypeVar param = new GenericTypeVar("A",20); -// Menge paralist = new Menge(); -// paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); -// this.src.addElement(abstractlist); - //(2) - UsedId superclass = new UsedId(1); - superclass.set_Name(abstractlist.getName()); - Menge paralist2=abstractlist.getParaList(); - superclass.set_ParaList(paralist2); - //implements AbstractList - Menge superif = new Menge(); - superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); - this.src.addElement(vektor); - //(3) - UsedId superclass2 = new UsedId(2); - superclass2.set_Name(vektor.getName()); - RefType param2 = new RefType("Vektor",paralist,20); - Menge paralist3 = new Menge(); - paralist3.add(param2); - superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); - this.src.addElement(matrix); - - //(4) - UsedId superclass3 = new UsedId(3); - superclass3.set_Name(matrix.getName()); - superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); - this.src.addElement(exmatrix); - //Interfaces - - testlog.debug("Test-Setup: " + this.src.KlassenVektor); - - - - //expected Result - GenericTypeVar gtv = new GenericTypeVar("A",20); - Menge gtvparameter = new Menge(); - gtvparameter.add(gtv); - - RefType vektortype = new RefType("Vektor",gtvparameter,-1); - RefType abstractlisttype = new RefType("AbstractList",gtvparameter,-1); - RefType matrixtype = new RefType("Matrix",gtvparameter,-1); - RefType exmatrixtype = new RefType("ExMatrix",gtvparameter,-1); - - Menge vektorparameter = new Menge(); - vektorparameter.add(vektortype); - - Menge fc = new Menge(); - // set "=" - fc.add(new Pair(vektortype,abstractlisttype)); - fc.add(new Pair(matrixtype,new RefType("Vektor",vektorparameter,-1))); - fc.add(new Pair(exmatrixtype,matrixtype)); - - Menge tto=(Menge)fc.clone(); - // set "=*" - fc.add(new Pair(matrixtype,new RefType("AbstractList",vektorparameter,-1))); - fc.add(new Pair(exmatrixtype,new RefType("Vektor",vektorparameter,-1))); - fc.add(new Pair(exmatrixtype,new RefType("AbstractList",vektorparameter,-1))); - - expected = new FC_TTO(fc,tto,this.src.KlassenVektor); - - //call tested method - FC_TTO ret = this.src.makeFC(); - - testlog.debug("expected: "+expected.getFC()); - testlog.debug("returned: "+ret.getFC());; - - //compare results - TrMakeFCTest.assertEquals(expected.getFC(), ret.getFC()); - TrMakeFCTest.assertEquals(expected.getTTO(),ret.getTTO()); - TrMakeFCTest.assertEquals(expected.getClasses(),ret.getClasses()); - } - - /*public static Test suite() { - TestSuite thisch = new TestSuite("TrMakeFCTest"); - - thisch.addTest(new TrMakeFCTest("testTrivialMakeFC")); - thisch.addTest(new TrMakeFCTest("testAllMakeFC")); - return thisch; - }*/ -} diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java deleted file mode 100755 index bdde2e51..00000000 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrSubUnifyTest.java +++ /dev/null @@ -1,636 +0,0 @@ -package mycompiler.test.unittest.typeReconstructionTest; - - -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.logger.xml.DOMConfigurator; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; - -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.ClassBody; -import de.dhbwstuttgart.syntaxtree.Interface; -import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; -import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.Pair; -import de.dhbwstuttgart.typeinference.Pair.PairOperator; -import de.dhbwstuttgart.typeinference.unify.FC_TTO; -import de.dhbwstuttgart.typeinference.unify.Unify; - -/*TODO: - mock makeFC and needs to be relocated (now called for every test) - * - erase2 -> FreshWildcardType?? - * - reduce2 wird niemals verwendet!!! <-> erase3 - * - reduce 1/2,... werfen exceptions, die gefangen werden -> schwer testbar, wäre aber vllt sinnvoll - * - adapts not implemented - */ - -public class TrSubUnifyTest extends TestCase{ - - private static Logger testlog = Logger.getLogger("trtest"); - private FC_TTO fc=null; - private FC_TTO fcWithPara=null; - - public TrSubUnifyTest(String name) { - super(name); - DOMConfigurator.configure("test/log4jTesting.xml"); - DOMConfigurator.configure("log4j.xml"); - this.fcWithPara = constructFCwithParams(); - this.fc=constructFC(); - - } - - private FC_TTO constructFC() { - //constructs FC according to the following Environment - //however uses real makeFC up until now - //environment - //(1) interface A - //(2) class B implements A - //(3) class C extends B - - SourceFile src=new SourceFile(); - - //(1) - Interface a = new Interface("A"); - src.addElement(a); - - //(2) - UsedId superclass = new UsedId(1); - superclass.set_Name(a.getName()); - Menge superif = new Menge(); - superif.add(superclass); - Class b= new Class("B",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,null); - src.addElement(b); - //(3) - UsedId superclass2 = new UsedId(2); - superclass2.set_Name(b.getName()); - Class c = new Class("C",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),null); - src.addElement(c); - FC_TTO fca = src.makeFC(); - testlog.info(fca.getTTO()); - return fca; - - } - - private FC_TTO constructFCwithParams() { - //constructs FC according to the following Environment - //however uses real makeFC up until now - //environment - //(1) interface AbstractList{} - //(2) class Vektor extends AbstractList{} - //(3) class Matrix extends Vektor>{} - //(4) class ExMatrix extends Matrix{} - - SourceFile src=new SourceFile(); - - //Interface - //(1) - GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Menge paralist = new Menge(); - paralist.add(gtv_a); - Interface abstractlist = new Interface("AbstractList"); - abstractlist.setParaList(paralist); - src.addElement(abstractlist); - - //Classes with superclasses - //(1) (either as a class or as an interface -// GenericTypeVar param = new GenericTypeVar("A",20); -// Menge paralist = new Menge(); -// paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); -// this.src.addElement(abstractlist); - //(2) - UsedId superclass = new UsedId(1); - superclass.set_Name(abstractlist.getName()); - Menge paralist2=abstractlist.getParaList(); - superclass.set_ParaList(paralist2); - //implements AbstractList - Menge superif = new Menge(); - superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); - src.addElement(vektor); - //(3) - UsedId superclass2 = new UsedId(2); - superclass2.set_Name(vektor.getName()); - RefType param2 = new RefType("Vektor",paralist,20); - Menge paralist3 = new Menge(); - paralist3.add(param2); - superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); - src.addElement(matrix); - - //(4) - UsedId superclass3 = new UsedId(3); - superclass3.set_Name(matrix.getName()); - superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); - src.addElement(exmatrix); - return src.makeFC(); - } - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - - //erase - -// public void testSubUnifyErase1() { -// //setup - see constructFC() -// //(1){ B <* A} -> {} -// //(2){ C <* A} -> {} -// //(3){ C <* B} -> {} -// testlog.info("-------testSubUnifyErase1---------"); -// //Type 1 -// Type ty1 = new RefType("A",-1); -// -// //Type2 -// Type ty2 = new RefType("B",-1); -// -// //Type3 -// Type ty3 = new RefType("C",-1); -//testlog.debug("Test-Setup: " + ty2 + " -> " + ty1); -//testlog.debug("Test-Setup: " + ty3 + " -> " + ty1); -//testlog.debug("Test-Setup: " + ty3 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -//testlog.debug("expected: " + expected); -// -// //actual -// //(1) -// Menge types1 = new Menge(); -// types1.add(new Pair(ty2,ty1,PairOperator.Smaller)); -// //(2) -// Menge types2 = new Menge(); -// types2.add(new Pair(ty3,ty1,PairOperator.Smaller)); -// //(3) -// Menge types3 = new Menge(); -// types3.add(new Pair(ty3,ty2,PairOperator.Smaller)); -// //execution of tested method -// Menge ret1 = Unify.sub_unify(types1 ,fc); -// Menge ret2 = Unify.sub_unify(types2 ,fc); -// Menge ret3 = Unify.sub_unify(types3 ,fc); -// //comparisons -//testlog.debug("returned: "+ ret1); -//testlog.debug("returned: "+ ret2); -//testlog.debug("returned: "+ ret3); -// TrMakeFCTest.assertEquals("erase1a",expected.toString(), ret1.toString()); -// TrMakeFCTest.assertEquals("erase1b",expected.toString(), ret2.toString()); -// TrMakeFCTest.assertEquals("erase1c",expected.toString(), ret3.toString()); -// } -// -// public void testSubUnifyErase2() { -//testlog.info("-------testSubUnifyErase2---------"); -// //setup - see constructFC() -// //(1){ B <*? extends A} -> {} -// //(2){ C <*? super A} -> {} -// //(3){ C <* B} -> {} <- TODO FreshWildCards???? -// //Type 1 -// Type ty1 = new ExtendsWildcardType(-1, new RefType("A",-1)); -// -// //Type2 -// Type ty2 = new RefType("B",-1); -// -// //Type3 -// Type ty3 = new SuperWildcardType(-1, new RefType("C",-1)); -//testlog.debug("Test-Setup: " + ty2 + " -> extends " + ty1); -//testlog.debug("Test-Setup: " + ty2 + " -> super " + ty3); -////testlog.debug("Test-Setup: " + ty3 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -//testlog.debug("expected: " + expected); -// -// //actual -// //(1) -// Menge types1 = new Menge(); -// types1.add(new Pair(ty2,ty1,PairOperator.SmallerExtends)); -// //(2) -// Menge types2 = new Menge(); -// types2.add(new Pair(ty2,ty3,PairOperator.SmallerExtends)); -// //(3) -//// Menge types3 = new Menge(); -//// types3.add(new Pair(ty3,ty2,PairOperator.SmallerExtends)); -// //execution of tested method -// Menge ret1 = Unify.sub_unify(types1 ,fc); -// Menge ret2 = Unify.sub_unify(types2 ,fc); -//// Menge ret3 = Unify.sub_unify(types3 ,fc); -// //comparisons -//testlog.debug("returned: "+ ret1); -//testlog.debug("returned: "+ ret2); -////testlog.info("returned: "+ ret3); -// TrMakeFCTest.assertEquals("erase2a",expected.toString(), ret1.toString()); -// TrMakeFCTest.assertEquals("erase2b",expected.toString(), ret2.toString()); -//// TrMakeFCTest.assertEquals("erase2c",expected.toString(), ret3.toString()); -// } -// -// public void testSubUnifyErase3() { -// //{ A = B} -> {} -//testlog.info("-------testSubUnifyErase3---------"); -// //Type 1 -// Type ty1 = new RefType("A",-1); -// -// //Type2 -// Type ty2 = new RefType("A",-1); -//testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// //expected.add(new Pair(ty1,ty2,PairOperator.Equal)); -//testlog.debug("expected: " + expected); -// -// //actual -// //execution of tested method -// Menge types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Equal)); -// Menge ret = Unify.sub_unify(types ,fc); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("erase3",expected.toString(), ret.toString()); -// } -// -// //swap -// -// public void testSubUnifySwap() { -// //{ A = TypePlaceholder a} -> {a = A} -// //A can be: RefType, GenericTypeVar, WildcardType -//testlog.info("-------testSubUnifySwap---------"); -// //Type 1 -// Type ty1a = new RefType("A",-1); -// Type ty1b = new GenericTypeVar("B",-1); -// Type ty1c = new SuperWildcardType(-1,new RefType("C",-1)); -// Type ty1d = new ExtendsWildcardType(-1, new RefType("D",-1)); -// -// //Type2 -// Type ty2a = TypePlaceholder.fresh(); -// Type ty2b = TypePlaceholder.fresh(); -// Type ty2c = TypePlaceholder.fresh(); -// Type ty2d = TypePlaceholder.fresh(); -// -//testlog.debug("Test-Setup: " + ty1a + " = " + ty2a + "; "); -//testlog.debug(ty1b + " = " + ty2b + "; "); -//testlog.debug(ty1c + " = " + ty2c + "; "); -//testlog.debug(ty1d + " = " + ty2d + "; "); -// -// //expected -// Menge expected = new Menge(); -// expected.add(new Pair(ty2a,ty1a,PairOperator.Equal)); -// expected.add(new Pair(ty2b,ty1b,PairOperator.Equal)); -// expected.add(new Pair(ty2c,ty1c,PairOperator.Equal)); -// expected.add(new Pair(ty2d,ty1d,PairOperator.Equal)); -//testlog.debug("expected: " + expected); -// -// //actual -// //execution of tested method -// Menge types = new Menge(); -// types.add(new Pair(ty1a,ty2a,PairOperator.Equal)); -// types.add(new Pair(ty1b,ty2b,PairOperator.Equal)); -// types.add(new Pair(ty1c,ty2c,PairOperator.Equal)); -// types.add(new Pair(ty1d,ty2d,PairOperator.Equal)); -// Menge ret = Unify.sub_unify(types ,fc); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("swap",expected.toString(), ret.toString()); -// } -// -// //adapt -// public void testSubUnifyAdapt() { -// //adapt-meaning of test unclear -// // -//testlog.info("-------testSubUnifyAdapt---------"); -// //Type 1 -// //Parameter -// Menge paramAa = new Menge(); -// paramAa.add(new RefType("java.lang.Integer",-1)); -// paramAa.add(TypePlaceholder.fresh()); -// //paramAa.add(TypePlaceholder.fresh()); -// Menge paramAb = new Menge(); -// paramAb.add(new RefType("Vektor",paramAa,-1)); -// Type ty1 = new RefType("Vektor",paramAa,-1); -// -// //Type2 -// Menge paramB = new Menge(); -// //paramB.add(new RefType("java.lang.Number",-1)); -// paramB.add(TypePlaceholder.fresh()); -// Type ty2 = new RefType("AbstractList",paramB,-1); -// -// testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -//// for (int i = 0;i types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Menge ret = Unify.sub_unify(types ,fcWithPara); -// testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("adapt",expected.toString(), ret.toString()); -//// fail("not correctly implemented"); -// } -// -// -// //reduce -// -// public void testSubUnfiyReduceLow() { -// //{?extends A < B} -> {A < B} -// //setup - unification of two types -//testlog.info("-------testSubUnifyReduceLow---------"); -// //Type 1 -// Type ty1 = new ExtendsWildcardType(-1,new RefType("A",-1)); -// -// //Type2 -// Type ty2 = new RefType("B",-1); -//testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// expected.add(new Pair(((ExtendsWildcardType)ty1).get_ExtendsType(),ty2,PairOperator.Smaller)); -//testlog.debug("expected: " + expected); -// -// //actual -// //execution of tested method -// Menge types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Menge ret = Unify.sub_unify(types ,fc); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("reduceLow",expected.toString(), ret.toString()); -// } -// -// public void testSubUnifyReduceUp() { -// //{A {A < B} -// //setup - unification of two types -//testlog.info("-------testSubUnifyReduceUp---------"); -// //Type 1 -// Type ty1 = new RefType("A",-1); -// -// //Type2 -// Type ty2 = new SuperWildcardType(-1, new RefType("B",-1)); -//testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// expected.add(new Pair(ty1,((SuperWildcardType)ty2).get_SuperType(),PairOperator.Smaller)); -//testlog.debug("expected: " + expected); -////ReduceU -// //actual -// //execution of tested method -// Menge types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Menge ret = Unify.sub_unify(types ,fc); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("reduceUp",expected.toString(), ret.toString()); -// } -// -// public void testSubUnifyReduceUpLow() { -// //{?extends A {A < B} -// //setup - unification of two types -//testlog.info("-------testSubUnifyReduceUpLow---------"); -// //Type 1 -// Type ty1 = new ExtendsWildcardType(-1,new RefType("A",-1)); -// -// //Type2 -// Type ty2 = new SuperWildcardType(-1, new RefType("B",-1)); -//testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// expected.add(new Pair(((ExtendsWildcardType)ty1).get_ExtendsType(),((SuperWildcardType)ty2).get_SuperType(),PairOperator.Smaller)); -//testlog.debug("expected: " + expected); -// -// //actual -// //execution of tested method -// Menge types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Menge ret = Unify.sub_unify(types ,fc); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("reduceUpLow",expected.toString(), ret.toString()); -// } -// -// public void testSubUnifyReduce1() { -// //{Vektor < AbstractList -> {a paramA = new Menge(); -// paramA.add(TypePlaceholder.fresh()); -// Type ty1 = new RefType("Vektor",paramA,-1); -// -// //Type2 -// Menge paramB = new Menge(); -// paramB.add(TypePlaceholder.fresh()); -// Type ty2 = new RefType("AbstractList",paramB,-1); -// -//testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// for (int i = 0;i types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.Smaller)); -// Menge ret = Unify.sub_unify(types ,fcWithPara); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("reduce1",expected.toString(), ret.toString()); -// } -// - public void testSubUnifyReduce2() { - - //!!!! Fall tritt niemals ein - //Vor: type1 = type2 wird vorher schon gefangen - - //{A = A -> {a=d,b=e,c=f} - //setup - unification of two types -testlog.info("-------testSubUnifyReduce2---------"); - //Type 1 - //Parameter - Menge paramA = new Menge(); - paramA.add(new GenericTypeVar("a",-1)); - paramA.add(new GenericTypeVar("b",-1)); - paramA.add(new GenericTypeVar("c",-1)); - Type ty1 = new RefType("A",paramA,-1); - - //Type2 - Menge paramB = new Menge(); - paramB.add(new GenericTypeVar("d",-1)); - paramB.add(new GenericTypeVar("e",-1)); - paramB.add(new GenericTypeVar("f",-1)); - Type ty2 = new RefType("A",paramB,-1); - -testlog.debug("Test-Setup: " + ty1 + " -> " + ty2); - - //expected - Menge expected = new Menge(); - for (int i = 0;i types = new Menge(); - types.add(new Pair(ty1,ty2,PairOperator.Equal)); - Menge ret = Unify.sub_unify(types ,fc); -testlog.debug("returned: "+ ret); - //comparison - TrMakeFCTest.assertEquals("reduce2",expected.toString(), ret.toString()); - } -// -// public void testSubUnifyReduceExt() { -// //a: {Vektor -> {a -> {a paramA = new Menge(); -// paramA.add(TypePlaceholder.fresh()); -// Type ty1a = new RefType("Vektor",paramA,-1); -// Type ty1b = new ExtendsWildcardType(-1, new RefType("Vektor",paramA,-1)); -// -// //Type2 -// Menge paramB = new Menge(); -// paramB.add(TypePlaceholder.fresh()); -// Type ty2 = new ExtendsWildcardType(-1,new RefType("AbstractList",paramB,-1)); -// -//testlog.debug("Test-Setup: " + ty1a + " -> " + ty2 + "; " + ty1b + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// for (int i = 0;i typesa = new Menge(); -// typesa.add(new Pair(ty1a,ty2,PairOperator.SmallerExtends)); -// Menge reta = Unify.sub_unify(typesa ,fcWithPara); -// //b -// Menge typesb = new Menge(); -// typesb.add(new Pair(ty1b,ty2,PairOperator.SmallerExtends)); -// Menge retb = Unify.sub_unify(typesb ,fcWithPara); -// -//testlog.debug("returned: "+ reta); -//testlog.debug("returned: "+ retb); -// //comparison -// TrMakeFCTest.assertEquals("reduceExt",expected.toString(), reta.toString()); -// TrMakeFCTest.assertEquals("reduceExt",expected.toString(), retb.toString()); -// } -// -// public void testSubUnifyReduceSup() { -// //a: {Vektor -> {a -> {a paramA = new Menge(); -// paramA.add(TypePlaceholder.fresh()); -// Type ty1a = new RefType("AbstractList",paramA,-1); -// Type ty1b = new SuperWildcardType(-1, new RefType("AbstractList",paramA,-1)); -// -// //Type2 -// Menge paramB = new Menge(); -// paramB.add(TypePlaceholder.fresh()); -// Type ty2 = new SuperWildcardType(-1,new RefType("Vektor",paramB,-1)); -// -//testlog.debug("Test-Setup: " + ty1a + " -> " + ty2 + "; " + ty1b + " -> " + ty2); -// -// //expected -// Menge expected = new Menge(); -// for (int i = 0;i typesa = new Menge(); -// typesa.add(new Pair(ty1a,ty2,PairOperator.SmallerExtends)); -// Menge reta = Unify.sub_unify(typesa ,fcWithPara); -// //b -// Menge typesb = new Menge(); -// typesb.add(new Pair(ty1b,ty2,PairOperator.SmallerExtends)); -// Menge retb = Unify.sub_unify(typesb ,fcWithPara); -// -//testlog.debug("returned: "+ reta); -//testlog.debug("returned: "+ retb); -// //comparison -// TrMakeFCTest.assertEquals("reduceSup",expected.toString(), reta.toString()); -// TrMakeFCTest.assertEquals("reduceSup",expected.toString(), retb.toString()); -// } -// -// public void testSubUnfiyReduceEq() { -// //{Vektor -> {a=d, b=e, c=f} -//System.out.println("-------testSubUnifyReduceEq---------"); -// //Type 1 -// //Parameter -// Menge paramA = new Menge(); -// paramA.add(TypePlaceholder.fresh()); -// paramA.add(TypePlaceholder.fresh()); -// paramA.add(TypePlaceholder.fresh()); -// Type ty1 = new RefType("Vektor",paramA,-1); -// -// //Type2 -// Menge paramB = new Menge(); -// paramB.add(TypePlaceholder.fresh()); -// paramB.add(TypePlaceholder.fresh()); -// paramB.add(TypePlaceholder.fresh()); -// Type ty2 = new RefType("Vektor",paramB,-1); -// -//testlog.debug("Test-Setup: " + ty1 + " ->? " + ty2); -// -// //expected -// Menge expected = new Menge(); -// for (int i = 0;i types = new Menge(); -// types.add(new Pair(ty1,ty2,PairOperator.SmallerExtends)); -// Menge ret = Unify.sub_unify(types ,fcWithPara); -//testlog.debug("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals("reduceEq",expected.toString(), ret.toString()); -// } - -} diff --git a/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java b/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java deleted file mode 100755 index 01b948e8..00000000 --- a/test/mycompiler/test/unittest/typeReconstructionTest/TrUnifyTest.java +++ /dev/null @@ -1,177 +0,0 @@ -package mycompiler.test.unittest.typeReconstructionTest; - -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import de.dhbwstuttgart.logger.xml.DOMConfigurator; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.ClassBody; -import de.dhbwstuttgart.syntaxtree.Interface; -import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.Pair; -import de.dhbwstuttgart.typeinference.Pair.PairOperator; -import de.dhbwstuttgart.typeinference.unify.FC_TTO; -import de.dhbwstuttgart.typeinference.unify.Unify; - -public class TrUnifyTest extends TestCase { - - FC_TTO fc=null; - - public TrUnifyTest(String name) { - super(name); - DOMConfigurator.configure("log4j.xml"); //maybe subject to asserts -> mocking - this.fc = constructFC(); - - } - public void setUpBeforeClass() { - System.out.println("test"); - } - - private FC_TTO constructFC() { - SourceFile src=new SourceFile(); - - //environment - //(1) interface AbstractList{} - //(2) class Vektor extends AbstractList{} - //(3) class Matrix extends Vektor>{} - //(4) class ExMatrix extends Matrix{} - - //Interface - //(1) - GenericTypeVar gtv_a = new GenericTypeVar("A",20); - Menge paralist = new Menge(); - paralist.add(gtv_a); - Interface abstractlist = new Interface("AbstractList"); - abstractlist.setParaList(paralist); - src.addElement(abstractlist); - - //Classes with superclasses - //(1) (either as a class or as an interface -// GenericTypeVar param = new GenericTypeVar("A",20); -// Menge paralist = new Menge(); -// paralist.add(param); -// Class abstractlist = new Class("AbstractList",new Modifiers(),new ClassBody(),new Menge(),null,null,new Menge(),paralist); -// this.src.addElement(abstractlist); - //(2) - UsedId superclass = new UsedId(1); - superclass.set_Name(abstractlist.getName()); - Menge paralist2=abstractlist.getParaList(); - superclass.set_ParaList(paralist2); - //implements AbstractList - Menge superif = new Menge(); - superif.add(superclass); - Class vektor= new Class("Vektor",new Modifiers(),new ClassBody(),new Menge(),null,null,superif,paralist); - src.addElement(vektor); - //(3) - UsedId superclass2 = new UsedId(2); - superclass2.set_Name(vektor.getName()); - RefType param2 = new RefType("Vektor",paralist,20); - Menge paralist3 = new Menge(); - paralist3.add(param2); - superclass2.set_ParaList(paralist3); - Class matrix = new Class("Matrix",new Modifiers(), new ClassBody(), new Menge(),null,superclass2,new Menge(),paralist); - src.addElement(matrix); - - //(4) - UsedId superclass3 = new UsedId(3); - superclass3.set_Name(matrix.getName()); - superclass3.set_ParaList(matrix.get_ParaList()); - Class exmatrix = new Class("ExMatrix", new Modifiers(), new ClassBody(), new Menge(),null,superclass3, new Menge(),paralist); - src.addElement(exmatrix); - return src.makeFC(); - } - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - //Java-Types without respect to FC (java types) - public void testUnifytesting() { - //setup - unification of two types - //Type 1 - TypePlaceholder th1 = TypePlaceholder.fresh(); - // TypePlaceholder ty2 = TypePlaceholder.fresh(); - Menge param = new Menge(); - //param.add(new GenericTypeVar("A",-1)); - param.add(th1); - - Menge param2 = new Menge(); - param2.add(new RefType("B",-1)); - Menge param1 = new Menge(); - param1.add(new RefType("Vektor",param2,-1)); - Type ty1 = new RefType("Vektor",param,-1); - // ty1.replaceWithType(ty3); - // Type ty1 = new RefType("java.lang.Number",-1); - Type ty2 = new RefType("Matrix",param1,-1); - - //expected - Menge> expected = new Menge>(); - Menge result1 = new Menge(); - result1.add(new Pair(ty1,ty2,PairOperator.Equal)); - expected.add(result1); -System.out.println("expected: " + expected); - - //actual - //execution of tested method - // Menge> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Menge(),new Menge(),new Menge())); - Menge> ret = Unify.unify(ty1, ty2 ,fc); -System.out.println("returned: "+ ret); - //comparison - //TrMakeFCTest.assertEquals(expected, ret); - } - - //Java-Types with respect to FC -// public void testUnifyWithFC() { -// //setup - unification of two types -// //Type 1 -// Type ty1 = TypePlaceholder.fresh(); -// Type ty2 = new RefType("java.lang.Boolean",-1); -// -// //expected -// Menge> expected = new Menge>(); -// Menge result1 = new Menge(); -// result1.add(new Pair(ty1,ty2,PairOperator.Equal)); -// expected.add(result1); -//System.out.println("expected: " + expected); -// -// //actual -// //execution of tested method -// Menge> ret = Unify.unify(ty1, ty2 ,new FC_TTO(new Menge(),new Menge(),new Menge())); -//System.out.println("returned: "+ ret); -// //comparison -// TrMakeFCTest.assertEquals(expected, ret); -// //fail("Not yet implemented"); -// } -// - - - - - public void testUnifyReduce1() { - fail("Not yet implemented"); - } - - - public void testUnifyErase1() { - //löscht "A extends B" - - } - -} diff --git a/test/parser/GeneralParserTest.java b/test/parser/GeneralParserTest.java index 6432d850..59f8a07b 100644 --- a/test/parser/GeneralParserTest.java +++ b/test/parser/GeneralParserTest.java @@ -8,8 +8,10 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.typeinference.Menge; import junit.framework.TestCase; import org.junit.Test; @@ -18,7 +20,7 @@ import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; /** - * Dieser Test prüft nur, ob .java-Dateien fehlerfrei geparst werden. + * Dieser Test pr�ft nur, ob .java-Dateien fehlerfrei geparst werden. * Der dabei erstellte Syntaxbaum wird nicht kontrolliert. * @author janulrich * @@ -28,13 +30,17 @@ public class GeneralParserTest{ @Test public void run(){ + + LoggerConfiguration config = new LoggerConfiguration(); + config.setOutput(Section.PARSER, System.out); + Menge filenames = new Menge(); filenames.add("FieldInitializationTest.jav"); filenames.add("ImportTest.jav"); filenames.add("BoundedParameter.jav"); filenames.add("GenericFieldVarTest.jav"); filenames.add("FieldVarTest.jav"); - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(config); try{ for(String filename : filenames) compiler.parse(new File(rootDirectory + filename)); diff --git a/test/plugindevelopment/InsertSingleTypeTest.java b/test/plugindevelopment/InsertSingleTypeTest.java index d09a2a1f..ac88cdd9 100644 --- a/test/plugindevelopment/InsertSingleTypeTest.java +++ b/test/plugindevelopment/InsertSingleTypeTest.java @@ -6,12 +6,15 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; + import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; @@ -36,12 +39,13 @@ public class InsertSingleTypeTest { static final String rootDirectory = System.getProperty("user.dir")+"/test/plugindevelopment/"; public static TypeinferenceResultSet test(String sourceFileToInfere){ + String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); - TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); + TestCase.assertTrue("Es darf nicht mehr als eine L�sungsm�glichkeit geben und nicht "+results.size(), results.size()==1); return results.firstElement(); } catch (IOException | yyException e) { e.printStackTrace(); @@ -51,7 +55,7 @@ public class InsertSingleTypeTest { } //Source: https://stackoverflow.com/questions/326390/how-to-create-a-java-string-from-the-contents-of-a-file - //PS: benötigt Java 7 + //PS: ben�tigt Java 7 public static String getFileContent(String path)throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); diff --git a/test/plugindevelopment/KarthesischesProduktTest.java b/test/plugindevelopment/KarthesischesProduktTest.java deleted file mode 100644 index 0828b165..00000000 --- a/test/plugindevelopment/KarthesischesProduktTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package plugindevelopment; - -import de.dhbwstuttgart.typeinference.Menge; - -import org.junit.Test; - -import de.dhbwstuttgart.typeinference.ConstraintPair; -import de.dhbwstuttgart.typeinference.ConstraintType; -import de.dhbwstuttgart.typeinference.ConstraintsSet; -import de.dhbwstuttgart.typeinference.KarthesischesProdukt; -import de.dhbwstuttgart.typeinference.OderConstraint; -import de.dhbwstuttgart.typeinference.SingleConstraint; - -public class KarthesischesProduktTest { - - @Test - public void test(){ - Menge> testV = new Menge<>(); - Menge dummy = new Menge<>(); - dummy.add("1"); - dummy.add("2"); - dummy.add("3"); - testV.add(dummy); - testV.add(dummy); - - ConstraintsSet cs = new ConstraintsSet(); - OderConstraint oc = new OderConstraint(); - //oc.addConstraint(new SingleConstraint(new RefType(""))); - cs.add(oc); - - Menge out = new KarthesischesProdukt().berechneKarthesischesProdukt(testV); - System.out.println(out); - } - -} -class TestConstraintPair extends ConstraintPair{ - - public TestConstraintPair(ConstraintType t1, ConstraintType t2) { - super(t1, t2); - // TODO Auto-generated constructor stub - } - -} \ No newline at end of file diff --git a/test/plugindevelopment/MartinTestCases/Tester.java b/test/plugindevelopment/MartinTestCases/Tester.java index 3e9efc8f..66488c7a 100644 --- a/test/plugindevelopment/MartinTestCases/Tester.java +++ b/test/plugindevelopment/MartinTestCases/Tester.java @@ -2,12 +2,15 @@ package plugindevelopment.MartinTestCases; import java.io.File; import java.io.IOException; + import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; @@ -22,11 +25,11 @@ public class Tester extends TypeInsertTester{ public static void test(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); + MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); - //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); + //TestCase.assertTrue("Es darf nicht mehr als eine L�sungsm�glichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); //TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); @@ -45,7 +48,7 @@ public class Tester extends TypeInsertTester{ TestCase.fail(); } for(String containString : mustContain){ - TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); + TestCase.assertTrue("\""+containString+"\" muss in den inferierten L�sungen vorkommen",gesamterSrc.contains(containString)); } } diff --git a/test/plugindevelopment/SyntaxTreeTests.java b/test/plugindevelopment/SyntaxTreeTests.java index 105897a1..09966163 100644 --- a/test/plugindevelopment/SyntaxTreeTests.java +++ b/test/plugindevelopment/SyntaxTreeTests.java @@ -2,6 +2,6 @@ package plugindevelopment; public class SyntaxTreeTests { - //TODO: Hier tests für getChildren anfügen. + //TODO: Hier tests für getChildren anfügen. } diff --git a/test/plugindevelopment/TRMEqualTest.java b/test/plugindevelopment/TRMEqualTest.java deleted file mode 100644 index 375b3da1..00000000 --- a/test/plugindevelopment/TRMEqualTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package plugindevelopment; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; - -import org.junit.Test; - -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.Pair; -import de.dhbwstuttgart.typeinference.ResultSet; -import de.dhbwstuttgart.typeinference.TypeInsertable; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.Pair.PairOperator; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; -import junit.framework.TestCase; -import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; - -public class TRMEqualTest { - Menge replaceSet = new Menge(); - TestNode node; - TypePlaceholder tph; - - - public void initTRMEqualTest(){ - node = new TestNode(); - tph = TypePlaceholder.fresh(node); - node.setType(tph); - } - - @Test - public void test(){ - initTRMEqualTest(); - assertTrue("Zu Beginn ist das Set leer",replaceSet.size()==0); - addTestNode("Typ1"); - assertTrue("Nach dem Anfügen eines Type muss das Set 1 Element enthalten",replaceSet.size()==1); - addTestNode("Typ2"); - assertTrue("Nach dem Anfügen eines weiteren Typs muss das Set 2 Elemente enthalten und nicht "+replaceSet.size(),replaceSet.size()==2); - addTestNode("Typ1"); - assertTrue("Nach dem Anfügen des selben Typs wie zuvor muss das Set immer noch 2 Element enthalten. Und nicht "+replaceSet.size(),replaceSet.size()==2); - } - - private void addTestNode(String type){ - Menge resultContent = new Menge(); - Pair pair = new Pair(tph,new RefType(type,0)); - pair.SetOperator(PairOperator.Equal); - resultContent.add(pair); - ResultSet resultSet = new ResultSet(resultContent); - Menge tphs = tph.getTypeInsertPoints(resultSet); - TypeInsertSet toAdd = new TypeInsertSet(resultSet); - for(TypeInsertPoint tip : tphs){ - toAdd.add(tip); - } - System.out.println("Füge hinzu: "+toAdd); - if(!replaceSet.contains(toAdd))replaceSet.add(toAdd); - } -} - -class TestNode extends SyntaxTreeNode implements TypeInsertable{ - - @Override - public void replaceType(CReplaceTypeEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public int getTypeLineNumber() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void setType(Type typ) { - // TODO Auto-generated method stub - - } - - @Override - public Type getType() { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getOffset() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void setOffset(int offset) { - // TODO Auto-generated method stub - - } - - @Override - public String getIdentifier() { - // TODO Auto-generated method stub - return null; - } - - @Override - public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, - ResultSet resultSet) { - return new TypeInsertPoint( this, this, resultSet.getTypeEqualTo(tph), resultSet); - } - - @Override - public int getVariableLength() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public Menge getChildren() { - // TODO Auto-generated method stub - return new Menge<>(); - } - -} - diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.java b/test/plugindevelopment/TypeInsertSetEqualTest.java deleted file mode 100644 index a3d70056..00000000 --- a/test/plugindevelopment/TypeInsertSetEqualTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package plugindevelopment; - -import java.io.File; -import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; - -import junit.framework.TestCase; - -import org.junit.Test; - -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; - -public class TypeInsertSetEqualTest { - - - private static final String TEST_FILE = "TypeInsertSetEqualTest.jav"; - - @Test - public void run(){ - String inferedSource = ""; - MyCompilerAPI compiler = MyCompiler.getAPI(); - try { - compiler.parse(new File(TypeInsertTester.rootDirectory + TEST_FILE)); - Menge results = compiler.typeReconstruction(); - //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); - Menge insertSets = new Menge(); - for(TypeinferenceResultSet result : results){ - TypeInsertSet point = result.getTypeInsertionPoints(); - if(!insertSets.contains(point))insertSets.add(point); - //TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); - - } - if(insertSets.size()!=1){ - TestCase.fail("Es darf nur ein TypeInsertSet geben und nicht "+insertSets.size()); - } - - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } - - } - -} diff --git a/test/plugindevelopment/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java index 27154bb2..25f8676a 100755 --- a/test/plugindevelopment/TypeInsertTester.java +++ b/test/plugindevelopment/TypeInsertTester.java @@ -46,7 +46,7 @@ public class TypeInsertTester{ try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); - TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); + TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); //TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); @@ -65,7 +65,7 @@ public class TypeInsertTester{ } //Source: https://stackoverflow.com/questions/326390/how-to-create-a-java-string-from-the-contents-of-a-file - //PS: benötigt Java 7 + //PS: benötigt Java 7 public static String getFileContent(String path)throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index 79dce804..29331173 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -42,8 +42,8 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); - System.out.println("Typinferenz ausgeführt!"); - //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); + System.out.println("Typinferenz ausgeführt!"); + //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); //TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); @@ -62,7 +62,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ TestCase.fail(); } for(String containString : mustContain){ - TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); + TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } } @@ -73,7 +73,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Menge results = compiler.typeReconstruction(); - //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); + //TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben und nicht "+results.size(), results.size()==1); for(TypeinferenceResultSet result : results){ TypeInsertSet point = result.getTypeInsertionPoints(); //TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); @@ -93,7 +93,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ TestCase.fail(); } for(String containString : mustContain){ - TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); + TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } } } From 6fc412d949d6d68857fd58a27d41efd34b2315f2 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 12 May 2015 19:54:34 +0200 Subject: [PATCH 089/186] Revert "Merge branch 'bytecode'" This reverts commit 711c0d2f79aa9543d66e99ca0ac4c4412c24c8e4, reversing changes made to 2b47b8e5bf66687f5b3da23fefe70e364881792f. --- .gitignore | 0 .../parser/BoundedClassIdentifierList.java | 0 .../parser/GenericVarDeclarationList.java | 0 src/de/dhbwstuttgart/parser/JavaLexer.java | 0 src/de/dhbwstuttgart/parser/JavaParser.java | 0 .../dhbwstuttgart/syntaxtree/Constructor.java | 0 src/de/dhbwstuttgart/syntaxtree/Field.java | 0 .../syntaxtree/FieldDeclaration.java | 0 src/de/dhbwstuttgart/syntaxtree/Generic.java | 0 .../syntaxtree/SyntaxTreeNode.java | 0 .../syntaxtree/statement/LambdaParameter.java | 0 .../typeinference/FunNInterface.java | 0 .../typeinference/GenericTypeInsertable.java | 0 .../typeinference/TIPConstraints.java | 0 .../typeinference/TypeInsertable.java | 0 .../assumptions/ClassAssumption.java | 0 .../assumptions/ConstructorAssumption.java | 0 .../assumptions/FieldAssumption.java | 0 .../assumptions/GenericVarAssumption.java | 0 .../assumptions/LocalVarAssumption.java | 0 .../assumptions/MethodAssumption.java | 0 .../assumptions/ParameterAssumption.java | 0 .../exceptions/DebugException.java | 0 .../typeinference/exceptions/ParserError.java | 0 .../typedeployment/GenericTypeInsertPoint.java | 0 .../typedeployment/SourcePatchPoint.java | 0 .../typedeployment/TypeInsertPoint.java | 0 .../typedeployment/TypeInsertSet.java | 0 test/parser/BoundedParameter.jav | 0 test/parser/FieldInitializationTest.jav | 0 test/parser/GeneralParserTest.java | 0 test/parser/GenericFieldVarTest.jav | 0 test/parser/ImportTest.jav | 0 .../plugindevelopment/InsertSingleTypeTest.java | 0 test/plugindevelopment/MartinTestCases/Id.jav | 0 .../MartinTestCases/MatrixVectorMul.jav | 0 .../MartinTestCases/MatrixWhile.jav | 0 .../MartinTestCases/Matrix_lambda.jav | 0 .../MartinTestCases/MethodId.jav | 0 .../MartinTestCases/MethodIntegerUse.jav | 0 .../MartinTestCases/MethodUse.jav | 0 test/plugindevelopment/MartinTestCases/OL3.jav | 0 .../plugindevelopment/MartinTestCases/Plus1.jav | 0 .../MartinTestCases/Plus1_Float_Double.jav | 0 .../MartinTestCases/Tester.java | 0 .../jav/Lambda_usecases/Fehler Report | 0 .../MartinTestCases/jav/Lambda_usecases/Id.jav | 0 .../jav/Lambda_usecases/MatrixVectorMul.jav | 0 .../jav/Lambda_usecases/Matrix_lambda.jav | 0 .../jav/Lambda_usecases/MethodId.jav | 0 .../jav/Lambda_usecases/MethodIntegerUse.jav | 0 .../jav/Lambda_usecases/MethodUse.jav | 0 .../MartinTestCases/jav/Lambda_usecases/OL.jav | 0 .../jav/Lambda_usecases/Plus1.jav | 0 .../jav/Lambda_usecases/Plus1_Float_Double.jav | 0 test/plugindevelopment/MethodTypeInsertTest.jav | 0 .../plugindevelopment/MethodTypeInsertTest.java | 0 .../MethodTypeInsertTestSolution.jav | 0 test/plugindevelopment/ParameterInsertTest.java | 0 .../ParameterTypeInsertTest.jav | 0 .../ParameterTypeInsertTestSolution.jav | 0 test/plugindevelopment/SingleTypeInsertTest.jav | 0 test/plugindevelopment/SyntaxTreeTests.java | 0 .../TypeInsertSetEqualTest.jav | 0 .../TypeInsertTests/BoundedGenericsTest.java | 0 .../TypeInsertTests/FunNInsertTest.jav | 0 .../TypeInsertTests/FunNInsertTest.java | 0 .../GenericParaListInsertTest.jav | 0 .../GenericParaListInsertTest.java | 0 .../TypeInsertTests/GenericTypeVarTest.jav | 0 .../TypeInsertTests/GenericTypeVarTest.java | 0 .../TypeInsertTests/GenericTypeVarTest2.jav | 0 .../TypeInsertTests/GenericVarInsertTest.jav | 0 .../TypeInsertTests/GenericVarInsertTest.java | 0 .../TypeInsertTests/ImportTest.java | 0 .../TypeInsertTests/ImportTest2.java | 0 .../TypeInsertTests/IntTest.java | 0 .../TypeInsertTests/LambdaTest1.jav | 0 .../TypeInsertTests/LambdaTest1.java | 0 .../TypeInsertTests/LambdaTest10.java | 0 .../TypeInsertTests/LambdaTest11.java | 0 .../TypeInsertTests/LambdaTest12.jav | 0 .../TypeInsertTests/LambdaTest12.java | 0 .../TypeInsertTests/LambdaTest13.jav | 0 .../TypeInsertTests/LambdaTest13.java | 0 .../TypeInsertTests/LambdaTest14.jav | 0 .../TypeInsertTests/LambdaTest14.java | 0 .../TypeInsertTests/LambdaTest15.jav | 0 .../TypeInsertTests/LambdaTest15.java | 0 .../TypeInsertTests/LambdaTest3.jav | 0 .../TypeInsertTests/LambdaTest3.java | 0 .../TypeInsertTests/LambdaTest5.java | 0 .../TypeInsertTests/LambdaTest6.jav | 0 .../TypeInsertTests/LambdaTest6.java | 0 .../TypeInsertTests/LambdaTest7.jav | 0 .../TypeInsertTests/LambdaTest7.java | 0 .../TypeInsertTests/LambdaTest8.jav | 0 .../TypeInsertTests/LambdaTest8.java | 0 .../TypeInsertTests/LambdaTest9.jav | 0 .../TypeInsertTests/LambdaTest9.java | 0 .../TypeInsertTests/MutlitpleTestCases.java | 0 .../TypeInsertTests/OverloadingInsertTest.java | 0 .../TypeInsertTests/Recursive.jav | 0 .../TypeInsertTests/Recursive2.jav | 0 .../TypeInsertTests/ReursiveTest.java | 0 .../TypeInsertTests/ReursiveTest2.java | 0 .../plugindevelopment/TypeInsertTests/Test1.jav | 0 .../plugindevelopment/TypeInsertTests/Test2.jav | 0 .../VariableTypeInsertTest.jav | 0 .../VariableTypeInsertTest.java | 0 .../VariableTypeInsertTestSolution.jav | 0 test/syntaxTree/NodeEqualTest.jav | 0 test/syntaxTree/NodeEqualTest.java | 0 tools/JLex_neu.jar | Bin 0 -> 53587 bytes 114 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 .gitignore mode change 100755 => 100644 src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java mode change 100755 => 100644 src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java mode change 100755 => 100644 src/de/dhbwstuttgart/parser/JavaLexer.java mode change 100755 => 100644 src/de/dhbwstuttgart/parser/JavaParser.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/Constructor.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/Field.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/Generic.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java mode change 100755 => 100644 src/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/FunNInterface.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/GenericTypeInsertable.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/TIPConstraints.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/TypeInsertable.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/exceptions/DebugException.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/exceptions/ParserError.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java mode change 100755 => 100644 src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java mode change 100755 => 100644 test/parser/BoundedParameter.jav mode change 100755 => 100644 test/parser/FieldInitializationTest.jav mode change 100755 => 100644 test/parser/GeneralParserTest.java mode change 100755 => 100644 test/parser/GenericFieldVarTest.jav mode change 100755 => 100644 test/parser/ImportTest.jav mode change 100755 => 100644 test/plugindevelopment/InsertSingleTypeTest.java mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/Id.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/MatrixWhile.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/Matrix_lambda.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/MethodId.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/MethodUse.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/OL3.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/Plus1.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/Tester.java mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav mode change 100755 => 100644 test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav mode change 100755 => 100644 test/plugindevelopment/MethodTypeInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/MethodTypeInsertTest.java mode change 100755 => 100644 test/plugindevelopment/MethodTypeInsertTestSolution.jav mode change 100755 => 100644 test/plugindevelopment/ParameterInsertTest.java mode change 100755 => 100644 test/plugindevelopment/ParameterTypeInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/ParameterTypeInsertTestSolution.jav mode change 100755 => 100644 test/plugindevelopment/SingleTypeInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/SyntaxTreeTests.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertSetEqualTest.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/FunNInsertTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/ImportTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/ImportTest2.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/IntTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest1.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest1.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest10.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest11.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest12.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest12.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest13.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest13.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest14.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest14.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest15.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest15.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest3.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest3.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest5.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest6.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest6.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest7.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest7.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest8.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest8.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest9.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/LambdaTest9.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/Recursive.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/Recursive2.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/ReursiveTest.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/ReursiveTest2.java mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/Test1.jav mode change 100755 => 100644 test/plugindevelopment/TypeInsertTests/Test2.jav mode change 100755 => 100644 test/plugindevelopment/VariableTypeInsertTest.jav mode change 100755 => 100644 test/plugindevelopment/VariableTypeInsertTest.java mode change 100755 => 100644 test/plugindevelopment/VariableTypeInsertTestSolution.jav mode change 100755 => 100644 test/syntaxTree/NodeEqualTest.jav mode change 100755 => 100644 test/syntaxTree/NodeEqualTest.java create mode 100755 tools/JLex_neu.jar diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java b/src/de/dhbwstuttgart/parser/BoundedClassIdentifierList.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java b/src/de/dhbwstuttgart/parser/GenericVarDeclarationList.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/parser/JavaLexer.java b/src/de/dhbwstuttgart/parser/JavaLexer.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/Generic.java b/src/de/dhbwstuttgart/syntaxtree/Generic.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/FunNInterface.java b/src/de/dhbwstuttgart/typeinference/FunNInterface.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/GenericTypeInsertable.java b/src/de/dhbwstuttgart/typeinference/GenericTypeInsertable.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/TIPConstraints.java b/src/de/dhbwstuttgart/typeinference/TIPConstraints.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/TypeInsertable.java b/src/de/dhbwstuttgart/typeinference/TypeInsertable.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/exceptions/DebugException.java b/src/de/dhbwstuttgart/typeinference/exceptions/DebugException.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/exceptions/ParserError.java b/src/de/dhbwstuttgart/typeinference/exceptions/ParserError.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.java old mode 100755 new mode 100644 diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java old mode 100755 new mode 100644 diff --git a/test/parser/BoundedParameter.jav b/test/parser/BoundedParameter.jav old mode 100755 new mode 100644 diff --git a/test/parser/FieldInitializationTest.jav b/test/parser/FieldInitializationTest.jav old mode 100755 new mode 100644 diff --git a/test/parser/GeneralParserTest.java b/test/parser/GeneralParserTest.java old mode 100755 new mode 100644 diff --git a/test/parser/GenericFieldVarTest.jav b/test/parser/GenericFieldVarTest.jav old mode 100755 new mode 100644 diff --git a/test/parser/ImportTest.jav b/test/parser/ImportTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/InsertSingleTypeTest.java b/test/plugindevelopment/InsertSingleTypeTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/Id.jav b/test/plugindevelopment/MartinTestCases/Id.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/MatrixVectorMul.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/MatrixWhile.jav b/test/plugindevelopment/MartinTestCases/MatrixWhile.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/MethodId.jav b/test/plugindevelopment/MartinTestCases/MethodId.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav b/test/plugindevelopment/MartinTestCases/MethodIntegerUse.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/MethodUse.jav b/test/plugindevelopment/MartinTestCases/MethodUse.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/OL3.jav b/test/plugindevelopment/MartinTestCases/OL3.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/Plus1.jav b/test/plugindevelopment/MartinTestCases/Plus1.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav b/test/plugindevelopment/MartinTestCases/Plus1_Float_Double.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/Tester.java b/test/plugindevelopment/MartinTestCases/Tester.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Fehler Report old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Id.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MatrixVectorMul.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Matrix_lambda.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodId.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodIntegerUse.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/MethodUse.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/OL.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav b/test/plugindevelopment/MartinTestCases/jav/Lambda_usecases/Plus1_Float_Double.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MethodTypeInsertTest.jav b/test/plugindevelopment/MethodTypeInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MethodTypeInsertTest.java b/test/plugindevelopment/MethodTypeInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/MethodTypeInsertTestSolution.jav b/test/plugindevelopment/MethodTypeInsertTestSolution.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/ParameterInsertTest.java b/test/plugindevelopment/ParameterInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/ParameterTypeInsertTest.jav b/test/plugindevelopment/ParameterTypeInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/ParameterTypeInsertTestSolution.jav b/test/plugindevelopment/ParameterTypeInsertTestSolution.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/SingleTypeInsertTest.jav b/test/plugindevelopment/SingleTypeInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/SyntaxTreeTests.java b/test/plugindevelopment/SyntaxTreeTests.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertSetEqualTest.jav b/test/plugindevelopment/TypeInsertSetEqualTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java b/test/plugindevelopment/TypeInsertTests/BoundedGenericsTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java b/test/plugindevelopment/TypeInsertTests/FunNInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java b/test/plugindevelopment/TypeInsertTests/GenericVarInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest.java b/test/plugindevelopment/TypeInsertTests/ImportTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/ImportTest2.java b/test/plugindevelopment/TypeInsertTests/ImportTest2.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.java b/test/plugindevelopment/TypeInsertTests/IntTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest1.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest1.java b/test/plugindevelopment/TypeInsertTests/LambdaTest1.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest10.java b/test/plugindevelopment/TypeInsertTests/LambdaTest10.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest11.java b/test/plugindevelopment/TypeInsertTests/LambdaTest11.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest12.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest12.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest12.java b/test/plugindevelopment/TypeInsertTests/LambdaTest12.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest13.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest13.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest13.java b/test/plugindevelopment/TypeInsertTests/LambdaTest13.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest14.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest14.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest14.java b/test/plugindevelopment/TypeInsertTests/LambdaTest14.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest15.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest15.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest15.java b/test/plugindevelopment/TypeInsertTests/LambdaTest15.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest3.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest3.java b/test/plugindevelopment/TypeInsertTests/LambdaTest3.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest5.java b/test/plugindevelopment/TypeInsertTests/LambdaTest5.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest6.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest6.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest6.java b/test/plugindevelopment/TypeInsertTests/LambdaTest6.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest7.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest7.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest7.java b/test/plugindevelopment/TypeInsertTests/LambdaTest7.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest8.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest8.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest8.java b/test/plugindevelopment/TypeInsertTests/LambdaTest8.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest9.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest9.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest9.java b/test/plugindevelopment/TypeInsertTests/LambdaTest9.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java b/test/plugindevelopment/TypeInsertTests/MutlitpleTestCases.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java b/test/plugindevelopment/TypeInsertTests/OverloadingInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/Recursive.jav b/test/plugindevelopment/TypeInsertTests/Recursive.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/Recursive2.jav b/test/plugindevelopment/TypeInsertTests/Recursive2.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java b/test/plugindevelopment/TypeInsertTests/ReursiveTest2.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/Test1.jav b/test/plugindevelopment/TypeInsertTests/Test1.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/TypeInsertTests/Test2.jav b/test/plugindevelopment/TypeInsertTests/Test2.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/VariableTypeInsertTest.jav b/test/plugindevelopment/VariableTypeInsertTest.jav old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/VariableTypeInsertTest.java b/test/plugindevelopment/VariableTypeInsertTest.java old mode 100755 new mode 100644 diff --git a/test/plugindevelopment/VariableTypeInsertTestSolution.jav b/test/plugindevelopment/VariableTypeInsertTestSolution.jav old mode 100755 new mode 100644 diff --git a/test/syntaxTree/NodeEqualTest.jav b/test/syntaxTree/NodeEqualTest.jav old mode 100755 new mode 100644 diff --git a/test/syntaxTree/NodeEqualTest.java b/test/syntaxTree/NodeEqualTest.java old mode 100755 new mode 100644 diff --git a/tools/JLex_neu.jar b/tools/JLex_neu.jar new file mode 100755 index 0000000000000000000000000000000000000000..df8053ff7a66c08c287218533ee37706aa3de244 GIT binary patch literal 53587 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 Date: Tue, 12 May 2015 19:57:14 +0200 Subject: [PATCH 090/186] =?UTF-8?q?Javadoc=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KarthesischesProduktTest.html | 323 ++ .../KomplexeMenge/KeineDoppeltenVerweise.html | 299 ++ .../KomplexeMenge/TestKlasse.html | 337 ++ .../class-use/KarthesischesProduktTest.html | 124 + .../class-use/KeineDoppeltenVerweise.html | 124 + .../KomplexeMenge/class-use/TestKlasse.html | 124 + .../KomplexeMenge/package-frame.html | 22 + .../KomplexeMenge/package-summary.html | 150 + .../KomplexeMenge/package-tree.html | 139 + .../KomplexeMenge/package-use.html | 124 + doc/LambdaJavadoc/allclasses-frame.html | 318 ++ doc/LambdaJavadoc/allclasses-noframe.html | 318 ++ doc/LambdaJavadoc/constant-values.html | 2404 ++++++++++++ .../JvmDisassembler/GenericsTest.html | 352 ++ .../class-use/GenericsTest.html | 164 + .../class-use/jvmDisassembler.html | 124 + .../JvmDisassembler/jvmDisassembler.html | 361 ++ .../JvmDisassembler/package-frame.html | 21 + .../JvmDisassembler/package-summary.html | 146 + .../JvmDisassembler/package-tree.html | 138 + .../JvmDisassembler/package-use.html | 157 + .../dhbwstuttgart/core/AClassOrInterface.html | 257 ++ .../dhbwstuttgart/core/ConsoleInterface.html | 337 ++ .../dhbwstuttgart/core/IItemWithOffset.html | 242 ++ .../de/dhbwstuttgart/core/MyCompiler.html | 686 ++++ .../de/dhbwstuttgart/core/MyCompilerAPI.html | 382 ++ .../core/class-use/AClassOrInterface.html | 213 + .../core/class-use/ConsoleInterface.html | 124 + .../core/class-use/IItemWithOffset.html | 780 ++++ .../core/class-use/MyCompiler.html | 124 + .../core/class-use/MyCompilerAPI.html | 180 + .../de/dhbwstuttgart/core/package-frame.html | 27 + .../dhbwstuttgart/core/package-summary.html | 173 + .../de/dhbwstuttgart/core/package-tree.html | 144 + .../de/dhbwstuttgart/core/package-use.html | 321 ++ .../logger/ConfigurationEvaluater.html | 223 ++ .../de/dhbwstuttgart/logger/Logger.html | 461 +++ .../logger/LoggerConfiguration.html | 335 ++ .../dhbwstuttgart/logger/OutputHandler.html | 360 ++ .../de/dhbwstuttgart/logger/Section.html | 389 ++ .../dhbwstuttgart/logger/SectionLogger.html | 355 ++ .../class-use/ConfigurationEvaluater.html | 164 + .../logger/class-use/Logger.html | 620 +++ .../logger/class-use/LoggerConfiguration.html | 293 ++ .../logger/class-use/OutputHandler.html | 124 + .../logger/class-use/Section.html | 262 ++ .../logger/class-use/SectionLogger.html | 187 + .../dhbwstuttgart/logger/package-frame.html | 31 + .../dhbwstuttgart/logger/package-summary.html | 186 + .../de/dhbwstuttgart/logger/package-tree.html | 160 + .../de/dhbwstuttgart/logger/package-use.html | 407 ++ .../CTypeReconstructionException.html | 452 +++ .../myexception/JVMCodeException.html | 302 ++ .../myexception/MatchException.html | 302 ++ .../myexception/SCClassBodyException.html | 362 ++ .../myexception/SCClassException.html | 388 ++ .../dhbwstuttgart/myexception/SCExcept.html | 450 +++ .../myexception/SCException.html | 375 ++ .../myexception/SCMethodException.html | 362 ++ .../myexception/SCStatementException.html | 362 ++ .../CTypeReconstructionException.html | 277 ++ .../class-use/JVMCodeException.html | 164 + .../myexception/class-use/MatchException.html | 166 + .../class-use/SCClassBodyException.html | 165 + .../class-use/SCClassException.html | 177 + .../myexception/class-use/SCExcept.html | 231 ++ .../myexception/class-use/SCException.html | 235 ++ .../class-use/SCMethodException.html | 124 + .../class-use/SCStatementException.html | 174 + .../myexception/package-frame.html | 31 + .../myexception/package-summary.html | 185 + .../myexception/package-tree.html | 157 + .../myexception/package-use.html | 270 ++ .../parser/BoundedClassIdentifierList.html | 391 ++ .../parser/ClassAndParameter.html | 394 ++ .../parser/GenericVarDeclarationList.html | 333 ++ .../parser/InterfaceAndParameter.html | 394 ++ .../dhbwstuttgart/parser/InterfaceList.html | 327 ++ .../dhbwstuttgart/parser/JavaClassName.html | 367 ++ .../de/dhbwstuttgart/parser/JavaLexer.html | 970 +++++ .../de/dhbwstuttgart/parser/JavaParser.html | 1979 ++++++++++ .../parser/JavaParser.yyException.html | 305 ++ .../parser/JavaParser.yyInput.html | 282 ++ .../de/dhbwstuttgart/parser/PackageName.html | 357 ++ .../de/dhbwstuttgart/parser/Scanner.html | 364 ++ .../de/dhbwstuttgart/parser/Token.html | 533 +++ .../class-use/BoundedClassIdentifierList.html | 124 + .../parser/class-use/ClassAndParameter.html | 124 + .../class-use/GenericVarDeclarationList.html | 124 + .../class-use/InterfaceAndParameter.html | 124 + .../parser/class-use/InterfaceList.html | 124 + .../parser/class-use/JavaClassName.html | 470 +++ .../parser/class-use/JavaLexer.html | 164 + .../parser/class-use/JavaParser.html | 124 + .../class-use/JavaParser.yyException.html | 231 ++ .../parser/class-use/JavaParser.yyInput.html | 186 + .../parser/class-use/PackageName.html | 164 + .../parser/class-use/Scanner.html | 124 + .../dhbwstuttgart/parser/class-use/Token.html | 180 + .../parser/class-use/yyCheck0.html | 124 + .../parser/class-use/yyCheck1.html | 124 + .../parser/class-use/yyCheck2.html | 124 + .../parser/class-use/yyCheck3.html | 124 + .../parser/class-use/yyCheckInit.html | 124 + .../dhbwstuttgart/parser/package-frame.html | 43 + .../dhbwstuttgart/parser/package-summary.html | 247 ++ .../de/dhbwstuttgart/parser/package-tree.html | 184 + .../de/dhbwstuttgart/parser/package-use.html | 325 ++ .../de/dhbwstuttgart/parser/yyCheck0.html | 273 ++ .../de/dhbwstuttgart/parser/yyCheck1.html | 273 ++ .../de/dhbwstuttgart/parser/yyCheck2.html | 273 ++ .../de/dhbwstuttgart/parser/yyCheck3.html | 273 ++ .../de/dhbwstuttgart/parser/yyCheckInit.html | 307 ++ .../syntaxtree/BasicAssumptionClass.html | 306 ++ .../de/dhbwstuttgart/syntaxtree/Class.html | 1618 ++++++++ .../dhbwstuttgart/syntaxtree/ClassBody.html | 447 +++ .../dhbwstuttgart/syntaxtree/ClassHelper.html | 290 ++ .../de/dhbwstuttgart/syntaxtree/Constant.html | 676 ++++ .../dhbwstuttgart/syntaxtree/Constructor.html | 438 +++ .../syntaxtree/ExceptionList.html | 307 ++ .../de/dhbwstuttgart/syntaxtree/Field.html | 766 ++++ .../syntaxtree/FieldDeclaration.html | 569 +++ .../syntaxtree/FormalParameter.html | 689 ++++ .../syntaxtree/GTVDeclarationContext.html | 332 ++ .../de/dhbwstuttgart/syntaxtree/Generic.html | 243 ++ .../syntaxtree/GenericDeclarationList.html | 479 +++ .../syntaxtree/ImportDeclarations.html | 337 ++ .../dhbwstuttgart/syntaxtree/Interface.html | 375 ++ .../syntaxtree/InterfaceBody.html | 383 ++ .../de/dhbwstuttgart/syntaxtree/Method.html | 1108 ++++++ .../syntaxtree/ParameterList.html | 516 +++ .../dhbwstuttgart/syntaxtree/SourceFile.html | 972 +++++ .../syntaxtree/SyntaxTreeNode.html | 468 +++ .../class-use/BasicAssumptionClass.html | 124 + .../syntaxtree/class-use/Class.html | 532 +++ .../syntaxtree/class-use/ClassBody.html | 225 ++ .../syntaxtree/class-use/ClassHelper.html | 124 + .../syntaxtree/class-use/Constant.html | 190 + .../syntaxtree/class-use/Constructor.html | 124 + .../syntaxtree/class-use/ExceptionList.html | 190 + .../syntaxtree/class-use/Field.html | 297 ++ .../class-use/FieldDeclaration.html | 124 + .../syntaxtree/class-use/FormalParameter.html | 262 ++ .../class-use/GTVDeclarationContext.html | 268 ++ .../syntaxtree/class-use/Generic.html | 229 ++ .../class-use/GenericDeclarationList.html | 218 ++ .../class-use/ImportDeclarations.html | 198 + .../syntaxtree/class-use/Interface.html | 177 + .../syntaxtree/class-use/InterfaceBody.html | 164 + .../syntaxtree/class-use/Method.html | 327 ++ .../syntaxtree/class-use/ParameterList.html | 241 ++ .../syntaxtree/class-use/SourceFile.html | 206 + .../syntaxtree/class-use/SyntaxTreeNode.html | 1434 +++++++ .../syntaxtree/misc/ConstructorCall.html | 399 ++ .../dhbwstuttgart/syntaxtree/misc/DeclId.html | 587 +++ .../dhbwstuttgart/syntaxtree/misc/Status.html | 311 ++ .../dhbwstuttgart/syntaxtree/misc/UsedId.html | 656 ++++ .../syntaxtree/misc/UserDef.html | 264 ++ .../misc/class-use/ConstructorCall.html | 124 + .../syntaxtree/misc/class-use/DeclId.html | 309 ++ .../syntaxtree/misc/class-use/Status.html | 164 + .../syntaxtree/misc/class-use/UsedId.html | 540 +++ .../syntaxtree/misc/class-use/UserDef.html | 177 + .../syntaxtree/misc/package-frame.html | 24 + .../syntaxtree/misc/package-summary.html | 160 + .../syntaxtree/misc/package-tree.html | 164 + .../syntaxtree/misc/package-use.html | 245 ++ .../syntaxtree/modifier/Abstract.html | 304 ++ .../syntaxtree/modifier/Final.html | 304 ++ .../modifier/InterfaceModifier.html | 307 ++ .../syntaxtree/modifier/Modifier.html | 293 ++ .../syntaxtree/modifier/Modifiers.html | 416 ++ .../syntaxtree/modifier/Private.html | 303 ++ .../syntaxtree/modifier/Protected.html | 303 ++ .../syntaxtree/modifier/Public.html | 303 ++ .../syntaxtree/modifier/Static.html | 303 ++ .../syntaxtree/modifier/Super.html | 307 ++ .../modifier/class-use/Abstract.html | 124 + .../syntaxtree/modifier/class-use/Final.html | 124 + .../modifier/class-use/InterfaceModifier.html | 124 + .../modifier/class-use/Modifier.html | 256 ++ .../modifier/class-use/Modifiers.html | 338 ++ .../modifier/class-use/Private.html | 124 + .../modifier/class-use/Protected.html | 124 + .../syntaxtree/modifier/class-use/Public.html | 124 + .../syntaxtree/modifier/class-use/Static.html | 124 + .../syntaxtree/modifier/class-use/Super.html | 124 + .../syntaxtree/modifier/package-frame.html | 29 + .../syntaxtree/modifier/package-summary.html | 185 + .../syntaxtree/modifier/package-tree.html | 149 + .../syntaxtree/modifier/package-use.html | 201 + .../syntaxtree/operator/AddOp.html | 348 ++ .../syntaxtree/operator/AndOp.html | 294 ++ .../syntaxtree/operator/DivideOp.html | 294 ++ .../syntaxtree/operator/EqualOp.html | 294 ++ .../syntaxtree/operator/GreaterEquOp.html | 294 ++ .../syntaxtree/operator/GreaterOp.html | 294 ++ .../syntaxtree/operator/LessEquOp.html | 294 ++ .../syntaxtree/operator/LessOp.html | 294 ++ .../syntaxtree/operator/LogOp.html | 348 ++ .../syntaxtree/operator/MinusOp.html | 294 ++ .../syntaxtree/operator/ModuloOp.html | 294 ++ .../syntaxtree/operator/MulOp.html | 348 ++ .../syntaxtree/operator/NotEqualOp.html | 294 ++ .../syntaxtree/operator/Operator.html | 417 ++ .../syntaxtree/operator/OrOp.html | 294 ++ .../syntaxtree/operator/PlusOp.html | 294 ++ .../syntaxtree/operator/RelOp.html | 348 ++ .../syntaxtree/operator/TimesOp.html | 294 ++ .../syntaxtree/operator/class-use/AddOp.html | 168 + .../syntaxtree/operator/class-use/AndOp.html | 124 + .../operator/class-use/DivideOp.html | 124 + .../operator/class-use/EqualOp.html | 124 + .../operator/class-use/GreaterEquOp.html | 124 + .../operator/class-use/GreaterOp.html | 124 + .../operator/class-use/LessEquOp.html | 124 + .../syntaxtree/operator/class-use/LessOp.html | 124 + .../syntaxtree/operator/class-use/LogOp.html | 168 + .../operator/class-use/MinusOp.html | 124 + .../operator/class-use/ModuloOp.html | 124 + .../syntaxtree/operator/class-use/MulOp.html | 172 + .../operator/class-use/NotEqualOp.html | 124 + .../operator/class-use/Operator.html | 276 ++ .../syntaxtree/operator/class-use/OrOp.html | 124 + .../syntaxtree/operator/class-use/PlusOp.html | 124 + .../syntaxtree/operator/class-use/RelOp.html | 184 + .../operator/class-use/TimesOp.html | 124 + .../syntaxtree/operator/package-frame.html | 37 + .../syntaxtree/operator/package-summary.html | 210 + .../syntaxtree/operator/package-tree.html | 173 + .../syntaxtree/operator/package-use.html | 188 + .../syntaxtree/package-frame.html | 42 + .../syntaxtree/package-summary.html | 253 ++ .../syntaxtree/package-tree.html | 190 + .../dhbwstuttgart/syntaxtree/package-use.html | 480 +++ .../syntaxtree/statement/ArgumentList.html | 439 +++ .../syntaxtree/statement/Assign.html | 572 +++ .../syntaxtree/statement/Binary.html | 588 +++ .../syntaxtree/statement/BinaryExpr.html | 331 ++ .../syntaxtree/statement/Block.html | 567 +++ .../syntaxtree/statement/BoolLiteral.html | 499 +++ .../syntaxtree/statement/CastExpr.html | 531 +++ .../syntaxtree/statement/CharLiteral.html | 499 +++ .../syntaxtree/statement/DoubleLiteral.html | 533 +++ .../syntaxtree/statement/EmptyStmt.html | 419 ++ .../syntaxtree/statement/Expr.html | 469 +++ .../syntaxtree/statement/ExprStmt.html | 374 ++ .../syntaxtree/statement/FloatLiteral.html | 533 +++ .../syntaxtree/statement/ForStmt.html | 596 +++ .../syntaxtree/statement/IfStmt.html | 512 +++ .../syntaxtree/statement/InstVar.html | 598 +++ .../syntaxtree/statement/InstanceOf.html | 520 +++ .../syntaxtree/statement/IntLiteral.html | 533 +++ .../statement/LambdaExpression.html | 598 +++ .../syntaxtree/statement/LambdaParameter.html | 341 ++ .../syntaxtree/statement/Literal.html | 406 ++ .../syntaxtree/statement/LocalOrFieldVar.html | 533 +++ .../syntaxtree/statement/LocalVarDecl.html | 783 ++++ .../syntaxtree/statement/LongLiteral.html | 533 +++ .../syntaxtree/statement/MethodCall.html | 768 ++++ .../syntaxtree/statement/NegativeExpr.html | 527 +++ .../syntaxtree/statement/NewArray.html | 555 +++ .../syntaxtree/statement/NewClass.html | 566 +++ .../syntaxtree/statement/NotExpr.html | 540 +++ .../syntaxtree/statement/Null.html | 473 +++ .../syntaxtree/statement/PositivExpr.html | 527 +++ .../syntaxtree/statement/PostDecExpr.html | 478 +++ .../syntaxtree/statement/PostIncExpr.html | 478 +++ .../syntaxtree/statement/PreDecExpr.html | 478 +++ .../syntaxtree/statement/PreIncExpr.html | 478 +++ .../syntaxtree/statement/Receiver.html | 387 ++ .../syntaxtree/statement/Return.html | 529 +++ .../syntaxtree/statement/Statement.html | 525 +++ .../syntaxtree/statement/StringLiteral.html | 499 +++ .../syntaxtree/statement/SuperCall.html | 473 +++ .../syntaxtree/statement/This.html | 565 +++ .../syntaxtree/statement/ThisCall.html | 554 +++ .../syntaxtree/statement/UnaryExpr.html | 427 ++ .../syntaxtree/statement/UnaryMinus.html | 237 ++ .../syntaxtree/statement/UnaryNot.html | 237 ++ .../syntaxtree/statement/UnaryPlus.html | 237 ++ .../syntaxtree/statement/WhileStmt.html | 494 +++ .../statement/class-use/ArgumentList.html | 263 ++ .../statement/class-use/Assign.html | 124 + .../statement/class-use/Binary.html | 124 + .../statement/class-use/BinaryExpr.html | 168 + .../syntaxtree/statement/class-use/Block.html | 257 ++ .../statement/class-use/BoolLiteral.html | 124 + .../statement/class-use/CastExpr.html | 124 + .../statement/class-use/CharLiteral.html | 124 + .../statement/class-use/DoubleLiteral.html | 124 + .../statement/class-use/EmptyStmt.html | 124 + .../syntaxtree/statement/class-use/Expr.html | 650 ++++ .../statement/class-use/ExprStmt.html | 351 ++ .../statement/class-use/FloatLiteral.html | 124 + .../statement/class-use/ForStmt.html | 124 + .../statement/class-use/IfStmt.html | 124 + .../statement/class-use/InstVar.html | 124 + .../statement/class-use/InstanceOf.html | 124 + .../statement/class-use/IntLiteral.html | 124 + .../statement/class-use/LambdaExpression.html | 124 + .../statement/class-use/LambdaParameter.html | 124 + .../statement/class-use/Literal.html | 192 + .../statement/class-use/LocalOrFieldVar.html | 124 + .../statement/class-use/LocalVarDecl.html | 176 + .../statement/class-use/LongLiteral.html | 124 + .../statement/class-use/MethodCall.html | 192 + .../statement/class-use/NegativeExpr.html | 124 + .../statement/class-use/NewArray.html | 124 + .../statement/class-use/NewClass.html | 124 + .../statement/class-use/NotExpr.html | 124 + .../syntaxtree/statement/class-use/Null.html | 124 + .../statement/class-use/PositivExpr.html | 124 + .../statement/class-use/PostDecExpr.html | 124 + .../statement/class-use/PostIncExpr.html | 124 + .../statement/class-use/PreDecExpr.html | 124 + .../statement/class-use/PreIncExpr.html | 124 + .../statement/class-use/Receiver.html | 229 ++ .../statement/class-use/Return.html | 164 + .../statement/class-use/Statement.html | 437 +++ .../statement/class-use/StringLiteral.html | 124 + .../statement/class-use/SuperCall.html | 124 + .../syntaxtree/statement/class-use/This.html | 124 + .../statement/class-use/ThisCall.html | 164 + .../statement/class-use/UnaryExpr.html | 192 + .../statement/class-use/UnaryMinus.html | 177 + .../statement/class-use/UnaryNot.html | 177 + .../statement/class-use/UnaryPlus.html | 177 + .../statement/class-use/WhileStmt.html | 124 + .../syntaxtree/statement/package-frame.html | 66 + .../syntaxtree/statement/package-summary.html | 328 ++ .../syntaxtree/statement/package-tree.html | 215 ++ .../syntaxtree/statement/package-use.html | 274 ++ .../syntaxtree/type/BaseType.html | 502 +++ .../syntaxtree/type/BooleanType.html | 381 ++ .../type/BoundedGenericTypeVar.html | 527 +++ .../syntaxtree/type/CharacterType.html | 381 ++ .../syntaxtree/type/DoubleType.html | 381 ++ .../syntaxtree/type/ExtendsWildcardType.html | 665 ++++ .../syntaxtree/type/FloatType.html | 381 ++ .../type/FreshExtendsWildcardType.html | 525 +++ .../type/FreshSuperWildcardType.html | 525 +++ .../syntaxtree/type/FreshWildcardType.html | 590 +++ .../syntaxtree/type/GenericTypeVar.html | 685 ++++ .../syntaxtree/type/IMatchable.html | 237 ++ .../syntaxtree/type/ITypeContainer.html | 237 ++ .../syntaxtree/type/IntegerType.html | 381 ++ .../syntaxtree/type/LongType.html | 381 ++ .../syntaxtree/type/ObjectType.html | 361 ++ .../syntaxtree/type/ParaList.html | 427 ++ .../syntaxtree/type/RefType.html | 1193 ++++++ .../syntaxtree/type/ReturnType.html | 369 ++ .../syntaxtree/type/SuperWildcardType.html | 665 ++++ .../dhbwstuttgart/syntaxtree/type/Type.html | 761 ++++ .../syntaxtree/type/TypePlaceholder.html | 838 ++++ .../dhbwstuttgart/syntaxtree/type/Void.html | 423 ++ .../syntaxtree/type/WildcardType.html | 539 +++ .../syntaxtree/type/class-use/BaseType.html | 197 + .../type/class-use/BooleanType.html | 166 + .../type/class-use/BoundedGenericTypeVar.html | 164 + .../type/class-use/CharacterType.html | 166 + .../syntaxtree/type/class-use/DoubleType.html | 166 + .../type/class-use/ExtendsWildcardType.html | 174 + .../syntaxtree/type/class-use/FloatType.html | 166 + .../class-use/FreshExtendsWildcardType.html | 174 + .../class-use/FreshSuperWildcardType.html | 174 + .../type/class-use/FreshWildcardType.html | 191 + .../type/class-use/GenericTypeVar.html | 686 ++++ .../syntaxtree/type/class-use/IMatchable.html | 210 + .../type/class-use/ITypeContainer.html | 172 + .../type/class-use/IntegerType.html | 166 + .../syntaxtree/type/class-use/LongType.html | 166 + .../syntaxtree/type/class-use/ObjectType.html | 670 ++++ .../syntaxtree/type/class-use/ParaList.html | 218 ++ .../syntaxtree/type/class-use/RefType.html | 646 ++++ .../syntaxtree/type/class-use/ReturnType.html | 166 + .../type/class-use/SuperWildcardType.html | 195 + .../syntaxtree/type/class-use/Type.html | 2099 ++++++++++ .../type/class-use/TypePlaceholder.html | 642 +++ .../syntaxtree/type/class-use/Void.html | 166 + .../type/class-use/WildcardType.html | 215 ++ .../syntaxtree/type/package-frame.html | 46 + .../syntaxtree/type/package-summary.html | 267 ++ .../syntaxtree/type/package-tree.html | 204 + .../syntaxtree/type/package-use.html | 536 +++ .../typeinference/ConstraintPair.html | 309 ++ .../typeinference/ConstraintType.html | 343 ++ .../typeinference/ConstraintsSet.html | 404 ++ .../typeinference/EinzelElement.html | 409 ++ .../de/dhbwstuttgart/typeinference/FunN.html | 462 +++ .../typeinference/FunNInterface.html | 381 ++ .../typeinference/FunNMethod.html | 378 ++ .../typeinference/GenericTypeInsertable.html | 239 ++ .../typeinference/JavaCodeResult.html | 425 ++ .../typeinference/KarthesischesProdukt.html | 301 ++ .../typeinference/KomplexeMenge.html | 292 ++ .../de/dhbwstuttgart/typeinference/Menge.html | 300 ++ .../typeinference/OderConstraint.html | 421 ++ .../typeinference/OderMenge.html | 407 ++ .../typeinference/Pair.PairOperator.html | 357 ++ .../de/dhbwstuttgart/typeinference/Pair.html | 690 ++++ .../typeinference/ResultSet.html | 490 +++ .../typeinference/SingleConstraint.html | 323 ++ .../typeinference/TIPConstraints.html | 241 ++ .../typeinference/TypeInsertable.html | 300 ++ .../dhbwstuttgart/typeinference/Typeable.html | 246 ++ .../typeinference/TypeinferenceResultSet.html | 466 +++ .../typeinference/UndConstraint.html | 378 ++ .../dhbwstuttgart/typeinference/UndMenge.html | 424 ++ .../typeinference/assumptions/Assumption.html | 342 ++ .../assumptions/ClassAssumption.html | 347 ++ .../assumptions/ConstructorAssumption.html | 355 ++ .../assumptions/FieldAssumption.html | 389 ++ .../assumptions/GenericVarAssumption.html | 350 ++ .../assumptions/LocalVarAssumption.html | 338 ++ .../assumptions/MethodAssumption.html | 444 +++ .../assumptions/ParameterAssumption.html | 254 ++ .../assumptions/TypeAssumptions.html | 818 ++++ .../assumptions/class-use/Assumption.html | 225 ++ .../class-use/ClassAssumption.html | 192 + .../class-use/ConstructorAssumption.html | 178 + .../class-use/FieldAssumption.html | 202 + .../class-use/GenericVarAssumption.html | 164 + .../class-use/LocalVarAssumption.html | 164 + .../class-use/MethodAssumption.html | 235 ++ .../class-use/ParameterAssumption.html | 164 + .../class-use/TypeAssumptions.html | 796 ++++ .../assumptions/package-frame.html | 28 + .../assumptions/package-summary.html | 180 + .../assumptions/package-tree.html | 154 + .../assumptions/package-use.html | 358 ++ .../class-use/ConstraintPair.html | 185 + .../class-use/ConstraintType.html | 350 ++ .../class-use/ConstraintsSet.html | 515 +++ .../class-use/EinzelElement.html | 168 + .../typeinference/class-use/FunN.html | 124 + .../class-use/FunNInterface.html | 124 + .../typeinference/class-use/FunNMethod.html | 166 + .../class-use/GenericTypeInsertable.html | 277 ++ .../class-use/JavaCodeResult.html | 596 +++ .../class-use/KarthesischesProdukt.html | 124 + .../class-use/KomplexeMenge.html | 262 ++ .../typeinference/class-use/Menge.html | 3429 +++++++++++++++++ .../class-use/OderConstraint.html | 124 + .../typeinference/class-use/OderMenge.html | 189 + .../class-use/Pair.PairOperator.html | 228 ++ .../typeinference/class-use/Pair.html | 889 +++++ .../typeinference/class-use/ResultSet.html | 726 ++++ .../class-use/SingleConstraint.html | 124 + .../class-use/TIPConstraints.html | 124 + .../class-use/TypeInsertable.html | 338 ++ .../typeinference/class-use/Typeable.html | 438 +++ .../class-use/TypeinferenceResultSet.html | 235 ++ .../class-use/UndConstraint.html | 221 ++ .../typeinference/class-use/UndMenge.html | 217 ++ .../exceptions/DebugException.html | 267 ++ .../exceptions/NotImplementedException.html | 267 ++ .../typeinference/exceptions/ParserError.html | 279 ++ .../exceptions/TypeinferenceException.html | 398 ++ .../exceptions/class-use/DebugException.html | 124 + .../class-use/NotImplementedException.html | 124 + .../exceptions/class-use/ParserError.html | 184 + .../class-use/TypeinferenceException.html | 189 + .../exceptions/package-frame.html | 23 + .../exceptions/package-summary.html | 156 + .../exceptions/package-tree.html | 155 + .../typeinference/exceptions/package-use.html | 183 + .../typeinference/package-frame.html | 49 + .../typeinference/package-summary.html | 271 ++ .../typeinference/package-tree.html | 235 ++ .../typeinference/package-use.html | 700 ++++ .../GenericTypeInsertPoint.html | 466 +++ .../GenericVarDeclarationPatch.html | 346 ++ .../GenericVarExtendsDeclarationPatch.html | 367 ++ .../typedeployment/GenericVarPatch.html | 410 ++ .../typedeployment/SourcePatchPoint.html | 374 ++ .../typedeployment/TypeInsertPoint.html | 550 +++ .../typedeployment/TypeInsertSet.html | 505 +++ .../typedeployment/TypePatchJob.html | 321 ++ .../class-use/GenericTypeInsertPoint.html | 124 + .../class-use/GenericVarDeclarationPatch.html | 164 + .../GenericVarExtendsDeclarationPatch.html | 164 + .../class-use/GenericVarPatch.html | 177 + .../class-use/SourcePatchPoint.html | 207 + .../class-use/TypeInsertPoint.html | 331 ++ .../class-use/TypeInsertSet.html | 192 + .../class-use/TypePatchJob.html | 167 + .../typedeployment/package-frame.html | 27 + .../typedeployment/package-summary.html | 185 + .../typedeployment/package-tree.html | 147 + .../typedeployment/package-use.html | 276 ++ .../typeinference/unify/CSet.html | 437 +++ .../typeinference/unify/CSubstitution.html | 556 +++ .../unify/CSubstitutionGenVar.html | 376 ++ .../typeinference/unify/CSubstitutionSet.html | 397 ++ .../typeinference/unify/CVectorSet.html | 514 +++ .../typeinference/unify/CartesianProduct.html | 237 ++ .../typeinference/unify/FC_TTO.html | 400 ++ .../typeinference/unify/MUB.html | 335 ++ .../unify/ParallelConstraintSet.html | 299 ++ .../typeinference/unify/ParallelUnify.html | 299 ++ .../typeinference/unify/Unifier.html | 221 ++ .../typeinference/unify/Unify.html | 1571 ++++++++ .../typeinference/unify/UnifyResult.html | 237 ++ .../typeinference/unify/class-use/CSet.html | 212 + .../unify/class-use/CSubstitution.html | 208 + .../unify/class-use/CSubstitutionGenVar.html | 124 + .../unify/class-use/CSubstitutionSet.html | 213 + .../unify/class-use/CVectorSet.html | 177 + .../unify/class-use/CartesianProduct.html | 164 + .../typeinference/unify/class-use/FC_TTO.html | 409 ++ .../typeinference/unify/class-use/MUB.html | 166 + .../class-use/ParallelConstraintSet.html | 124 + .../unify/class-use/ParallelUnify.html | 124 + .../unify/class-use/Unifier.html | 176 + .../typeinference/unify/class-use/Unify.html | 124 + .../unify/class-use/UnifyResult.html | 169 + .../typeinference/unify/package-frame.html | 35 + .../typeinference/unify/package-summary.html | 209 + .../typeinference/unify/package-tree.html | 169 + .../typeinference/unify/package-use.html | 241 ++ doc/LambdaJavadoc/deprecated-list.html | 177 + doc/LambdaJavadoc/help-doc.html | 229 ++ doc/LambdaJavadoc/index-files/index-1.html | 358 ++ doc/LambdaJavadoc/index-files/index-10.html | 173 + doc/LambdaJavadoc/index-files/index-11.html | 151 + doc/LambdaJavadoc/index-files/index-12.html | 335 ++ doc/LambdaJavadoc/index-files/index-13.html | 333 ++ doc/LambdaJavadoc/index-files/index-14.html | 193 + doc/LambdaJavadoc/index-files/index-15.html | 249 ++ doc/LambdaJavadoc/index-files/index-16.html | 618 +++ doc/LambdaJavadoc/index-files/index-17.html | 406 ++ doc/LambdaJavadoc/index-files/index-18.html | 764 ++++ doc/LambdaJavadoc/index-files/index-19.html | 864 +++++ doc/LambdaJavadoc/index-files/index-2.html | 228 ++ doc/LambdaJavadoc/index-files/index-20.html | 241 ++ doc/LambdaJavadoc/index-files/index-21.html | 169 + doc/LambdaJavadoc/index-files/index-22.html | 241 ++ doc/LambdaJavadoc/index-files/index-23.html | 129 + doc/LambdaJavadoc/index-files/index-24.html | 297 ++ doc/LambdaJavadoc/index-files/index-3.html | 560 +++ doc/LambdaJavadoc/index-files/index-4.html | 225 ++ doc/LambdaJavadoc/index-files/index-5.html | 370 ++ doc/LambdaJavadoc/index-files/index-6.html | 300 ++ doc/LambdaJavadoc/index-files/index-7.html | 1447 +++++++ doc/LambdaJavadoc/index-files/index-8.html | 153 + doc/LambdaJavadoc/index-files/index-9.html | 427 ++ doc/LambdaJavadoc/index.html | 74 + doc/LambdaJavadoc/overview-frame.html | 43 + doc/LambdaJavadoc/overview-summary.html | 223 ++ doc/LambdaJavadoc/overview-tree.html | 644 ++++ doc/LambdaJavadoc/package-list | 23 + .../parser/GeneralParserTest.html | 313 ++ .../parser/class-use/GeneralParserTest.html | 124 + doc/LambdaJavadoc/parser/package-frame.html | 20 + doc/LambdaJavadoc/parser/package-summary.html | 144 + doc/LambdaJavadoc/parser/package-tree.html | 137 + doc/LambdaJavadoc/parser/package-use.html | 124 + .../InsertSingleTypeTest.html | 355 ++ .../MartinTestCases/Tester.html | 334 ++ .../MartinTestCases/class-use/Tester.html | 124 + .../MartinTestCases/package-frame.html | 20 + .../MartinTestCases/package-summary.html | 142 + .../MartinTestCases/package-tree.html | 141 + .../MartinTestCases/package-use.html | 124 + .../MethodTypeInsertTest.html | 328 ++ .../ParameterInsertTest.html | 328 ++ .../plugindevelopment/SyntaxTreeTests.html | 237 ++ .../plugindevelopment/TypeInsertTester.html | 344 ++ .../TypeInsertTests/Add.html | 311 ++ .../TypeInsertTests/BoundedGenericsTest.html | 311 ++ .../TypeInsertTests/ConstructorTest.html | 311 ++ .../TypeInsertTests/FunNInsertTest.html | 311 ++ .../TypeInsertTests/GenTypeTest.html | 311 ++ .../GenericParaListInsertTest.html | 311 ++ .../GenericParaListInsertTest2.html | 311 ++ .../TypeInsertTests/GenericTypeVarTest.html | 311 ++ .../TypeInsertTests/GenericTypeVarTest2.html | 311 ++ .../TypeInsertTests/GenericVarInsertTest.html | 311 ++ .../TypeInsertTests/GenericVarTest.html | 311 ++ .../TypeInsertTests/GenericVarTest2.html | 311 ++ .../TypeInsertTests/GenericVarTest3.html | 311 ++ .../plugindevelopment/TypeInsertTests/Id.html | 311 ++ .../TypeInsertTests/ImportSubClassTest.html | 311 ++ .../TypeInsertTests/ImportTest.html | 311 ++ .../TypeInsertTests/ImportTest2.html | 311 ++ .../TypeInsertTests/IntTest.html | 311 ++ .../TypeInsertTests/LambdaTest1.html | 311 ++ .../TypeInsertTests/LambdaTest10.html | 311 ++ .../TypeInsertTests/LambdaTest11.html | 311 ++ .../TypeInsertTests/LambdaTest12.html | 311 ++ .../TypeInsertTests/LambdaTest13.html | 311 ++ .../TypeInsertTests/LambdaTest14.html | 311 ++ .../TypeInsertTests/LambdaTest15.html | 311 ++ .../TypeInsertTests/LambdaTest16.html | 311 ++ .../TypeInsertTests/LambdaTest17.html | 311 ++ .../TypeInsertTests/LambdaTest18.html | 311 ++ .../TypeInsertTests/LambdaTest19.html | 311 ++ .../TypeInsertTests/LambdaTest2.html | 311 ++ .../TypeInsertTests/LambdaTest20.html | 311 ++ .../TypeInsertTests/LambdaTest23.html | 311 ++ .../TypeInsertTests/LambdaTest24.html | 311 ++ .../TypeInsertTests/LambdaTest25.html | 311 ++ .../TypeInsertTests/LambdaTest26.html | 311 ++ .../TypeInsertTests/LambdaTest27.html | 311 ++ .../TypeInsertTests/LambdaTest2_2.html | 311 ++ .../TypeInsertTests/LambdaTest3.html | 311 ++ .../TypeInsertTests/LambdaTest4.html | 311 ++ .../TypeInsertTests/LambdaTest5.html | 311 ++ .../TypeInsertTests/LambdaTest6.html | 311 ++ .../TypeInsertTests/LambdaTest7.html | 311 ++ .../TypeInsertTests/LambdaTest8.html | 311 ++ .../TypeInsertTests/LambdaTest9.html | 311 ++ .../LargeSourceCodeTests/LambdaTest22.html | 311 ++ .../LargeSourceCodeTests/Matrix.html | 311 ++ .../TypedMatrixSimpleTest.html | 311 ++ .../LargeSourceCodeTests/TypedMatrixTest.html | 311 ++ .../class-use/LambdaTest22.html | 124 + .../class-use/Matrix.html | 124 + .../class-use/TypedMatrixSimpleTest.html | 124 + .../class-use/TypedMatrixTest.html | 124 + .../LargeSourceCodeTests/package-frame.html | 23 + .../LargeSourceCodeTests/package-summary.html | 154 + .../LargeSourceCodeTests/package-tree.html | 140 + .../LargeSourceCodeTests/package-use.html | 124 + .../TypeInsertTests/Matrix_simple.html | 311 ++ .../MultipleTypesInsertTester.html | 366 ++ .../TypeInsertTests/MutlitpleTestCases.html | 341 ++ .../plugindevelopment/TypeInsertTests/OL.html | 311 ++ .../TypeInsertTests/OperatorTest.html | 311 ++ .../TypeInsertTests/OverloadingExample.html | 311 ++ .../TypeInsertTests/OverloadingInMethod.html | 311 ++ .../TypeInsertTests/OverloadingInMethod2.html | 311 ++ .../OverloadingInMethod2Simple.html | 311 ++ .../OverloadingInsertTest.html | 311 ++ .../TypeInsertTests/OverloadingRecursive.html | 311 ++ .../TypeInsertTests/RelOpTest.html | 311 ++ .../TypeInsertTests/ReursiveTest.html | 311 ++ .../TypeInsertTests/ReursiveTest2.html | 311 ++ .../TypeInsertTests/SuperTest.html | 311 ++ .../TypeInsertTests/ThisTest.html | 311 ++ .../WildcardTestForLambda.html | 311 ++ .../WildcardTestForLambda2.html | 311 ++ .../TypeInsertTests/class-use/Add.html | 124 + .../class-use/BoundedGenericsTest.html | 124 + .../class-use/ConstructorTest.html | 124 + .../class-use/FunNInsertTest.html | 124 + .../class-use/GenTypeTest.html | 124 + .../class-use/GenericParaListInsertTest.html | 124 + .../class-use/GenericParaListInsertTest2.html | 124 + .../class-use/GenericTypeVarTest.html | 124 + .../class-use/GenericTypeVarTest2.html | 124 + .../class-use/GenericVarInsertTest.html | 124 + .../class-use/GenericVarTest.html | 124 + .../class-use/GenericVarTest2.html | 124 + .../class-use/GenericVarTest3.html | 124 + .../TypeInsertTests/class-use/Id.html | 124 + .../class-use/ImportSubClassTest.html | 124 + .../TypeInsertTests/class-use/ImportTest.html | 124 + .../class-use/ImportTest2.html | 124 + .../TypeInsertTests/class-use/IntTest.html | 124 + .../class-use/LambdaTest1.html | 124 + .../class-use/LambdaTest10.html | 124 + .../class-use/LambdaTest11.html | 124 + .../class-use/LambdaTest12.html | 124 + .../class-use/LambdaTest13.html | 124 + .../class-use/LambdaTest14.html | 124 + .../class-use/LambdaTest15.html | 124 + .../class-use/LambdaTest16.html | 124 + .../class-use/LambdaTest17.html | 124 + .../class-use/LambdaTest18.html | 124 + .../class-use/LambdaTest19.html | 124 + .../class-use/LambdaTest2.html | 124 + .../class-use/LambdaTest20.html | 124 + .../class-use/LambdaTest23.html | 124 + .../class-use/LambdaTest24.html | 124 + .../class-use/LambdaTest25.html | 124 + .../class-use/LambdaTest26.html | 124 + .../class-use/LambdaTest27.html | 124 + .../class-use/LambdaTest2_2.html | 124 + .../class-use/LambdaTest3.html | 124 + .../class-use/LambdaTest4.html | 124 + .../class-use/LambdaTest5.html | 124 + .../class-use/LambdaTest6.html | 124 + .../class-use/LambdaTest7.html | 124 + .../class-use/LambdaTest8.html | 124 + .../class-use/LambdaTest9.html | 124 + .../class-use/Matrix_simple.html | 124 + .../class-use/MultipleTypesInsertTester.html | 124 + .../class-use/MutlitpleTestCases.html | 124 + .../TypeInsertTests/class-use/OL.html | 124 + .../class-use/OperatorTest.html | 124 + .../class-use/OverloadingExample.html | 124 + .../class-use/OverloadingInMethod.html | 124 + .../class-use/OverloadingInMethod2.html | 124 + .../class-use/OverloadingInMethod2Simple.html | 124 + .../class-use/OverloadingInsertTest.html | 124 + .../class-use/OverloadingRecursive.html | 124 + .../TypeInsertTests/class-use/RelOpTest.html | 124 + .../class-use/ReursiveTest.html | 124 + .../class-use/ReursiveTest2.html | 124 + .../TypeInsertTests/class-use/SuperTest.html | 124 + .../TypeInsertTests/class-use/ThisTest.html | 124 + .../class-use/WildcardTestForLambda.html | 124 + .../class-use/WildcardTestForLambda2.html | 124 + .../TypeInsertTests/package-frame.html | 81 + .../TypeInsertTests/package-summary.html | 386 ++ .../TypeInsertTests/package-tree.html | 202 + .../TypeInsertTests/package-use.html | 124 + .../VariableTypeInsertTest.html | 328 ++ .../class-use/InsertSingleTypeTest.html | 124 + .../class-use/MethodTypeInsertTest.html | 124 + .../class-use/ParameterInsertTest.html | 124 + .../class-use/SyntaxTreeTests.html | 124 + .../class-use/TypeInsertTester.html | 186 + .../class-use/VariableTypeInsertTest.html | 124 + .../plugindevelopment/package-frame.html | 25 + .../plugindevelopment/package-summary.html | 162 + .../plugindevelopment/package-tree.html | 142 + .../plugindevelopment/package-use.html | 176 + doc/LambdaJavadoc/script.js | 30 + doc/LambdaJavadoc/serialized-form.html | 395 ++ doc/LambdaJavadoc/stylesheet.css | 574 +++ .../syntaxTree/NodeEqualTest.html | 367 ++ .../syntaxTree/class-use/NodeEqualTest.html | 124 + .../syntaxTree/package-frame.html | 20 + .../syntaxTree/package-summary.html | 142 + .../syntaxTree/package-tree.html | 145 + doc/LambdaJavadoc/syntaxTree/package-use.html | 124 + 729 files changed, 213808 insertions(+) create mode 100644 doc/LambdaJavadoc/KomplexeMenge/KarthesischesProduktTest.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/KeineDoppeltenVerweise.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/TestKlasse.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/class-use/KarthesischesProduktTest.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/class-use/KeineDoppeltenVerweise.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/class-use/TestKlasse.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/package-frame.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/package-summary.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/package-tree.html create mode 100644 doc/LambdaJavadoc/KomplexeMenge/package-use.html create mode 100644 doc/LambdaJavadoc/allclasses-frame.html create mode 100644 doc/LambdaJavadoc/allclasses-noframe.html create mode 100644 doc/LambdaJavadoc/constant-values.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/GenericsTest.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/GenericsTest.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/jvmDisassembler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/AClassOrInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/ConsoleInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/IItemWithOffset.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompiler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompilerAPI.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/AClassOrInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/ConsoleInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/IItemWithOffset.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompiler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompilerAPI.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/core/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/ConfigurationEvaluater.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/Logger.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/LoggerConfiguration.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/OutputHandler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/Section.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/SectionLogger.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/ConfigurationEvaluater.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Logger.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/LoggerConfiguration.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/OutputHandler.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Section.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/SectionLogger.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/CTypeReconstructionException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/JVMCodeException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/MatchException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassBodyException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCExcept.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCMethodException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCStatementException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/CTypeReconstructionException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/JVMCodeException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/MatchException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassBodyException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCExcept.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCMethodException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCStatementException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/BoundedClassIdentifierList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/ClassAndParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/GenericVarDeclarationList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceAndParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaClassName.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaLexer.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyInput.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/PackageName.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/Scanner.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/Token.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/BoundedClassIdentifierList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/ClassAndParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/GenericVarDeclarationList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceAndParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaClassName.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaLexer.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyInput.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/PackageName.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Scanner.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Token.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck0.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck1.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck2.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck3.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheckInit.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck0.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck1.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck2.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck3.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheckInit.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/BasicAssumptionClass.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Class.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassBody.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassHelper.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constant.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constructor.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ExceptionList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Field.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FieldDeclaration.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FormalParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Generic.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ImportDeclarations.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Interface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/InterfaceBody.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Method.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ParameterList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SourceFile.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/BasicAssumptionClass.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Class.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassBody.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassHelper.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constant.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constructor.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ExceptionList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Field.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FieldDeclaration.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FormalParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GTVDeclarationContext.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Generic.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GenericDeclarationList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ImportDeclarations.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Interface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/InterfaceBody.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Method.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ParameterList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SourceFile.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SyntaxTreeNode.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/DeclId.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/Status.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UsedId.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UserDef.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/ConstructorCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/DeclId.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/Status.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UsedId.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UserDef.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Abstract.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Final.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/InterfaceModifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Private.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Protected.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Public.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Static.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Super.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Abstract.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Final.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/InterfaceModifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifiers.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Private.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Protected.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Public.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Static.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Super.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AddOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AndOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/DivideOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/EqualOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LogOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MinusOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MulOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/Operator.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/OrOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/PlusOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/RelOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/TimesOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AddOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AndOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/DivideOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/EqualOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterEquOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessEquOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LogOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MinusOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/ModuloOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MulOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/NotEqualOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/Operator.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/OrOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/PlusOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/RelOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/TimesOp.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Assign.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Binary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BinaryExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Block.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CastExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Expr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ForStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IfStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Literal.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/MethodCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewArray.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewClass.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NotExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Null.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Receiver.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Return.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Statement.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/SuperCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/This.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ThisCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryPlus.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ArgumentList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Assign.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Binary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BinaryExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Block.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BoolLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CastExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CharLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/DoubleLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/EmptyStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Expr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ExprStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/FloatLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ForStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IfStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstanceOf.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IntLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaExpression.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaParameter.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Literal.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalOrFieldVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalVarDecl.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LongLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/MethodCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NegativeExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewArray.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewClass.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NotExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Null.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PositivExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostDecExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostIncExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreDecExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreIncExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Receiver.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Return.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Statement.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/StringLiteral.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/SuperCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/This.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ThisCall.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryExpr.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryMinus.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryNot.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryPlus.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/WhileStmt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BaseType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BooleanType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/CharacterType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/DoubleType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FloatType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IMatchable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IntegerType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/LongType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ObjectType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ParaList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/RefType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ReturnType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Type.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Void.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/WildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BaseType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BooleanType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BoundedGenericTypeVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/CharacterType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/DoubleType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ExtendsWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FloatType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshExtendsWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshSuperWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/GenericTypeVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IMatchable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ITypeContainer.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IntegerType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/LongType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ObjectType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ParaList.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/RefType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ReturnType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/SuperWildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Type.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/TypePlaceholder.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Void.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/WildcardType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintPair.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintsSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/EinzelElement.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunN.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNMethod.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/GenericTypeInsertable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/JavaCodeResult.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KarthesischesProdukt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KomplexeMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Menge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.PairOperator.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ResultSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/SingleConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TIPConstraints.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeInsertable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Typeable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/Assumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/Assumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ClassAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ConstructorAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/FieldAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/GenericVarAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/LocalVarAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/MethodAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ParameterAssumption.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/TypeAssumptions.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintPair.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintType.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintsSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/EinzelElement.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunN.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNInterface.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNMethod.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/GenericTypeInsertable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/JavaCodeResult.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KarthesischesProdukt.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KomplexeMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.PairOperator.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ResultSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/SingleConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TIPConstraints.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeInsertable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Typeable.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeinferenceResultSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndConstraint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndMenge.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/DebugException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/NotImplementedException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/ParserError.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/DebugException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/NotImplementedException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/ParserError.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/TypeinferenceException.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarDeclarationPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarExtendsDeclarationPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypePatchJob.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericTypeInsertPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarDeclarationPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarExtendsDeclarationPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarPatch.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/SourcePatchPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertPoint.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypePatchJob.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-use.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitution.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CVectorSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CartesianProduct.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/FC_TTO.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelConstraintSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelUnify.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unify.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/UnifyResult.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitution.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionGenVar.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CVectorSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CartesianProduct.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/FC_TTO.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/MUB.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelConstraintSet.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelUnify.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unifier.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unify.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/UnifyResult.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-frame.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-summary.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-tree.html create mode 100644 doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-use.html create mode 100644 doc/LambdaJavadoc/deprecated-list.html create mode 100644 doc/LambdaJavadoc/help-doc.html create mode 100644 doc/LambdaJavadoc/index-files/index-1.html create mode 100644 doc/LambdaJavadoc/index-files/index-10.html create mode 100644 doc/LambdaJavadoc/index-files/index-11.html create mode 100644 doc/LambdaJavadoc/index-files/index-12.html create mode 100644 doc/LambdaJavadoc/index-files/index-13.html create mode 100644 doc/LambdaJavadoc/index-files/index-14.html create mode 100644 doc/LambdaJavadoc/index-files/index-15.html create mode 100644 doc/LambdaJavadoc/index-files/index-16.html create mode 100644 doc/LambdaJavadoc/index-files/index-17.html create mode 100644 doc/LambdaJavadoc/index-files/index-18.html create mode 100644 doc/LambdaJavadoc/index-files/index-19.html create mode 100644 doc/LambdaJavadoc/index-files/index-2.html create mode 100644 doc/LambdaJavadoc/index-files/index-20.html create mode 100644 doc/LambdaJavadoc/index-files/index-21.html create mode 100644 doc/LambdaJavadoc/index-files/index-22.html create mode 100644 doc/LambdaJavadoc/index-files/index-23.html create mode 100644 doc/LambdaJavadoc/index-files/index-24.html create mode 100644 doc/LambdaJavadoc/index-files/index-3.html create mode 100644 doc/LambdaJavadoc/index-files/index-4.html create mode 100644 doc/LambdaJavadoc/index-files/index-5.html create mode 100644 doc/LambdaJavadoc/index-files/index-6.html create mode 100644 doc/LambdaJavadoc/index-files/index-7.html create mode 100644 doc/LambdaJavadoc/index-files/index-8.html create mode 100644 doc/LambdaJavadoc/index-files/index-9.html create mode 100644 doc/LambdaJavadoc/index.html create mode 100644 doc/LambdaJavadoc/overview-frame.html create mode 100644 doc/LambdaJavadoc/overview-summary.html create mode 100644 doc/LambdaJavadoc/overview-tree.html create mode 100644 doc/LambdaJavadoc/package-list create mode 100644 doc/LambdaJavadoc/parser/GeneralParserTest.html create mode 100644 doc/LambdaJavadoc/parser/class-use/GeneralParserTest.html create mode 100644 doc/LambdaJavadoc/parser/package-frame.html create mode 100644 doc/LambdaJavadoc/parser/package-summary.html create mode 100644 doc/LambdaJavadoc/parser/package-tree.html create mode 100644 doc/LambdaJavadoc/parser/package-use.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/InsertSingleTypeTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/Tester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/class-use/Tester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-frame.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-summary.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-tree.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-use.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/MethodTypeInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/ParameterInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/SyntaxTreeTests.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Add.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/BoundedGenericsTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ConstructorTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/FunNInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenTypeTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest3.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Id.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportSubClassTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/IntTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest1.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest10.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest11.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest12.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest13.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest14.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest15.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest16.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest17.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest18.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest19.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest20.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest23.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest24.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest25.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest26.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest27.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2_2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest3.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest4.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest5.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest6.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest7.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest8.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest9.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/LambdaTest22.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/Matrix.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixSimpleTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-frame.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-summary.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-tree.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-use.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Matrix_simple.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MutlitpleTestCases.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OL.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OperatorTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingExample.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingRecursive.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/RelOpTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/SuperTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ThisTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Add.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/BoundedGenericsTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ConstructorTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/FunNInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenTypeTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest3.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Id.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportSubClassTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/IntTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest1.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest10.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest11.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest12.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest13.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest14.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest15.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest16.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest17.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest18.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest19.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest20.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest23.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest24.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest25.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest26.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest27.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2_2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest3.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest4.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest5.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest6.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest7.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest8.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest9.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Matrix_simple.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MultipleTypesInsertTester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MutlitpleTestCases.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OL.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OperatorTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingExample.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2Simple.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingRecursive.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/RelOpTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/SuperTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ThisTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda2.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-frame.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-summary.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-tree.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-use.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/VariableTypeInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/InsertSingleTypeTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/MethodTypeInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/ParameterInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/SyntaxTreeTests.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/TypeInsertTester.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/class-use/VariableTypeInsertTest.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/package-frame.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/package-summary.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/package-tree.html create mode 100644 doc/LambdaJavadoc/plugindevelopment/package-use.html create mode 100644 doc/LambdaJavadoc/script.js create mode 100644 doc/LambdaJavadoc/serialized-form.html create mode 100644 doc/LambdaJavadoc/stylesheet.css create mode 100644 doc/LambdaJavadoc/syntaxTree/NodeEqualTest.html create mode 100644 doc/LambdaJavadoc/syntaxTree/class-use/NodeEqualTest.html create mode 100644 doc/LambdaJavadoc/syntaxTree/package-frame.html create mode 100644 doc/LambdaJavadoc/syntaxTree/package-summary.html create mode 100644 doc/LambdaJavadoc/syntaxTree/package-tree.html create mode 100644 doc/LambdaJavadoc/syntaxTree/package-use.html diff --git a/doc/LambdaJavadoc/KomplexeMenge/KarthesischesProduktTest.html b/doc/LambdaJavadoc/KomplexeMenge/KarthesischesProduktTest.html new file mode 100644 index 00000000..03d7d8e8 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/KarthesischesProduktTest.html @@ -0,0 +1,323 @@ + + + + + +KarthesischesProduktTest + + + + + + + + + + + + +
    +
    KomplexeMenge
    +

    Class KarthesischesProduktTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • KomplexeMenge.KarthesischesProduktTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class KarthesischesProduktTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidtest() 
        voidtest2() 
        voidtest3() 
        voidtest4() 
        voidtest5() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          KarthesischesProduktTest

          +
          public KarthesischesProduktTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test

          +
          public void test()
          +
        • +
        + + + +
          +
        • +

          test2

          +
          public void test2()
          +
        • +
        + + + +
          +
        • +

          test3

          +
          public void test3()
          +
        • +
        + + + +
          +
        • +

          test4

          +
          public void test4()
          +
        • +
        + + + +
          +
        • +

          test5

          +
          public void test5()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/KeineDoppeltenVerweise.html b/doc/LambdaJavadoc/KomplexeMenge/KeineDoppeltenVerweise.html new file mode 100644 index 00000000..e255fd42 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/KeineDoppeltenVerweise.html @@ -0,0 +1,299 @@ + + + + + +KeineDoppeltenVerweise + + + + + + + + + + + + +
    +
    KomplexeMenge
    +

    Class KeineDoppeltenVerweise

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • KomplexeMenge.KeineDoppeltenVerweise
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class KeineDoppeltenVerweise
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        private <A> voidcheck(Menge<Menge<A>> cP) 
        private java.lang.ObjectcontainsRef(Menge v, + java.lang.Object i) 
        voidtest() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          KeineDoppeltenVerweise

          +
          public KeineDoppeltenVerweise()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test

          +
          public void test()
          +
        • +
        + + + +
          +
        • +

          check

          +
          private <A> void check(Menge<Menge<A>> cP)
          +
        • +
        + + + +
          +
        • +

          containsRef

          +
          private java.lang.Object containsRef(Menge v,
          +                                     java.lang.Object i)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/TestKlasse.html b/doc/LambdaJavadoc/KomplexeMenge/TestKlasse.html new file mode 100644 index 00000000..c1277f89 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/TestKlasse.html @@ -0,0 +1,337 @@ + + + + + +TestKlasse + + + + + + + + + + + + +
    +
    KomplexeMenge
    +

    Class TestKlasse

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • KomplexeMenge.TestKlasse
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class TestKlasse
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) intid 
        (package private) static intidentifier 
        java.lang.Stringname 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TestKlasse(java.lang.String name) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        java.lang.StringtoString() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          identifier

          +
          static int identifier
          +
        • +
        + + + +
          +
        • +

          name

          +
          public java.lang.String name
          +
        • +
        + + + +
          +
        • +

          id

          +
          int id
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TestKlasse

          +
          TestKlasse(java.lang.String name)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/class-use/KarthesischesProduktTest.html b/doc/LambdaJavadoc/KomplexeMenge/class-use/KarthesischesProduktTest.html new file mode 100644 index 00000000..63ad8405 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/class-use/KarthesischesProduktTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class KomplexeMenge.KarthesischesProduktTest + + + + + + + + + + + +
    +

    Uses of Class
    KomplexeMenge.KarthesischesProduktTest

    +
    +
    No usage of KomplexeMenge.KarthesischesProduktTest
    + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/class-use/KeineDoppeltenVerweise.html b/doc/LambdaJavadoc/KomplexeMenge/class-use/KeineDoppeltenVerweise.html new file mode 100644 index 00000000..9840f79b --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/class-use/KeineDoppeltenVerweise.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class KomplexeMenge.KeineDoppeltenVerweise + + + + + + + + + + + +
    +

    Uses of Class
    KomplexeMenge.KeineDoppeltenVerweise

    +
    +
    No usage of KomplexeMenge.KeineDoppeltenVerweise
    + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/class-use/TestKlasse.html b/doc/LambdaJavadoc/KomplexeMenge/class-use/TestKlasse.html new file mode 100644 index 00000000..3ea2124f --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/class-use/TestKlasse.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class KomplexeMenge.TestKlasse + + + + + + + + + + + +
    +

    Uses of Class
    KomplexeMenge.TestKlasse

    +
    +
    No usage of KomplexeMenge.TestKlasse
    + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/package-frame.html b/doc/LambdaJavadoc/KomplexeMenge/package-frame.html new file mode 100644 index 00000000..f2d79901 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/package-frame.html @@ -0,0 +1,22 @@ + + + + + +KomplexeMenge + + + + + +

    KomplexeMenge

    + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/package-summary.html b/doc/LambdaJavadoc/KomplexeMenge/package-summary.html new file mode 100644 index 00000000..91320be4 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/package-summary.html @@ -0,0 +1,150 @@ + + + + + +KomplexeMenge + + + + + + + + + + + +
    +

    Package KomplexeMenge

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/package-tree.html b/doc/LambdaJavadoc/KomplexeMenge/package-tree.html new file mode 100644 index 00000000..1f4cd26c --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/package-tree.html @@ -0,0 +1,139 @@ + + + + + +KomplexeMenge Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package KomplexeMenge

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/KomplexeMenge/package-use.html b/doc/LambdaJavadoc/KomplexeMenge/package-use.html new file mode 100644 index 00000000..67350891 --- /dev/null +++ b/doc/LambdaJavadoc/KomplexeMenge/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package KomplexeMenge + + + + + + + + + + + +
    +

    Uses of Package
    KomplexeMenge

    +
    +
    No usage of KomplexeMenge
    + + + + + + diff --git a/doc/LambdaJavadoc/allclasses-frame.html b/doc/LambdaJavadoc/allclasses-frame.html new file mode 100644 index 00000000..1564fc38 --- /dev/null +++ b/doc/LambdaJavadoc/allclasses-frame.html @@ -0,0 +1,318 @@ + + + + + +All Classes + + + + + +

    All Classes

    +
    + +
    + + diff --git a/doc/LambdaJavadoc/allclasses-noframe.html b/doc/LambdaJavadoc/allclasses-noframe.html new file mode 100644 index 00000000..7e5b721c --- /dev/null +++ b/doc/LambdaJavadoc/allclasses-noframe.html @@ -0,0 +1,318 @@ + + + + + +All Classes + + + + + +

    All Classes

    +
    + +
    + + diff --git a/doc/LambdaJavadoc/constant-values.html b/doc/LambdaJavadoc/constant-values.html new file mode 100644 index 00000000..2bf0ef01 --- /dev/null +++ b/doc/LambdaJavadoc/constant-values.html @@ -0,0 +1,2404 @@ + + + + + +Constant Field Values + + + + + + + + +
    + + + + + + + +
    + + +
    +

    Constant Field Values

    +

    Contents

    + +
    +
    + + +

    de.dhbwstuttgart.*

    +
      +
    • + + + + + + + + + + + + + + +
      de.dhbwstuttgart.core.MyCompiler 
      Modifier and TypeConstant FieldValue
      + +public static final intNO_LINENUMBER-1
      +
    • +
    + + + + + + +

    plugindevelopment.*

    +
      +
    • + + + + + + + + + + + + + + +
      plugindevelopment.InsertSingleTypeTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringtestFile"SingleTypeInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + + + + + + +
      plugindevelopment.MethodTypeInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringSOLUTION_FILE"MethodTypeInsertTestSolution.jav"
      + +private static final java.lang.StringTEST_FILE"MethodTypeInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + + + + + + +
      plugindevelopment.ParameterInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringSOLUTION_FILE"ParameterTypeInsertTestSolution.jav"
      + +private static final java.lang.StringTEST_FILE"ParameterTypeInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + + + + + + +
      plugindevelopment.VariableTypeInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringSOLUTION_FILE"VariableTypeInsertTestSolution.jav"
      + +private static final java.lang.StringTEST_FILE"VariableTypeInsertTest.jav"
      +
    • +
    + + + +

    plugindevelopment.TypeInsertTests.*

    +
      +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.Add 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Add.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.BoundedGenericsTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"BoundedGenericTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ConstructorTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"ConstructorTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.FunNInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"FunNInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericParaListInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericParaListInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericParaListInsertTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericParaListInsertTest2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericTypeVarTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericTypeVarTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericTypeVarTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE2"GenericTypeVarTest2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericVarInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericVarInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericVarTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericVarTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericVarTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericVarTest2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenericVarTest3 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenericVarTest3.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.GenTypeTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"GenTypeTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.Id 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Id.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ImportSubClassTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"ImportSubClassTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ImportTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"ImportTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ImportTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"ImportTest2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.IntTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"IntTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest1 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest1.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest10 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest10.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest11 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest11.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest12 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest12.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest13 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest13.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest14 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest14.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest15 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest15.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest16 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest16.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest17 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest17.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest18 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest18.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest19 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest19.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest2_2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest2_2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest20 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest21.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest23 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest23.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest24 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest24.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest25 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest25.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest26 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest26.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest27 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest27.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest3 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest3.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest4 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest4.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest5 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest5.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest6 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest6.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest7 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest7.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest8 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest8.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LambdaTest9 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest9.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.Matrix_simple 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Matrix_simple.jav"
      +
    • +
    • + + + + + + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.MutlitpleTestCases 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Test1.jav"
      + +private static final java.lang.StringTEST_FILE2"Test2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OL 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OL.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OperatorTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OperatorTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingExample 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingExample.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingInMethod 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingInMethod.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingInMethod2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingInMethod2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingInMethod2Simple.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingInsertTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingInsertTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.OverloadingRecursive 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"OverloadingRecursive.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.RelOpTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"RelOpTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ReursiveTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Recursive.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ReursiveTest2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Recursive2.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.SuperTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"SuperTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.ThisTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"ThisTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.WildcardTestForLambda 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"WildcardTestForLambda.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.WildcardTestForLambda2 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"WildcardTestForLambda2.jav"
      +
    • +
    +
      +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"LambdaTest22.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"Matrix.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"TypedMatrixSimpleTest.jav"
      +
    • +
    • + + + + + + + + + + + + + + +
      plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringTEST_FILE"TypedMatrixTest.jav"
      +
    • +
    + + + +

    syntaxTree.*

    +
      +
    • + + + + + + + + + + + + + + +
      syntaxTree.NodeEqualTest 
      Modifier and TypeConstant FieldValue
      + +private static final java.lang.StringtestFile"NodeEqualTest.jav"
      +
    • +
    +
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/GenericsTest.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/GenericsTest.html new file mode 100644 index 00000000..65f71d59 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/GenericsTest.html @@ -0,0 +1,352 @@ + + + + + +GenericsTest + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.JvmDisassembler
    +

    Class GenericsTest<a,b>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.JvmDisassembler.GenericsTest<a,b>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class GenericsTest<a,b>
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) java.lang.Objectj 
        (package private) java.lang.Integerk 
        (package private) GenericsTest<java.lang.Integer,java.lang.Integer>pp 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenericsTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        (package private) ameth(a arg) 
        (package private) <t extends java.lang.Integer>
        t
        meth2(b arg, + t arg2) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          k

          +
          java.lang.Integer k
          +
        • +
        + + + +
          +
        • +

          pp

          +
          GenericsTest<java.lang.Integer,java.lang.Integer> pp
          +
        • +
        + + + +
          +
        • +

          j

          +
          java.lang.Object j
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericsTest

          +
          GenericsTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          meth

          +
          a meth(a arg)
          +
        • +
        + + + + + +
          +
        • +

          meth2

          +
          <t extends java.lang.Integer> t meth2(b arg,
          +                                      t arg2)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/GenericsTest.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/GenericsTest.html new file mode 100644 index 00000000..5fd967c7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/GenericsTest.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.JvmDisassembler.GenericsTest + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.JvmDisassembler.GenericsTest

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/jvmDisassembler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/jvmDisassembler.html new file mode 100644 index 00000000..cf9d65ce --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/class-use/jvmDisassembler.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.JvmDisassembler.jvmDisassembler

    +
    +
    No usage of de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.html new file mode 100644 index 00000000..1c2b2059 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/jvmDisassembler.html @@ -0,0 +1,361 @@ + + + + + +jvmDisassembler + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.JvmDisassembler
    +

    Class jvmDisassembler

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class jvmDisassembler
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        jvmDisassembler() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        (package private) static intmakePosByte(int code) 
        (package private) static longmakePosInt(long code) 
        (package private) static intmakePosShort(int code) 
        (package private) static voidparse_attribute(java.io.DataInputStream d, + Menge<java.lang.String> const_pool) 
        (package private) static voidparse_code(java.io.DataInputStream d, + Menge<java.lang.String> const_pool) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          jvmDisassembler

          +
          jvmDisassembler()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          makePosByte

          +
          static int makePosByte(int code)
          +
        • +
        + + + +
          +
        • +

          makePosShort

          +
          static int makePosShort(int code)
          +
        • +
        + + + +
          +
        • +

          makePosInt

          +
          static long makePosInt(long code)
          +
        • +
        + + + +
          +
        • +

          parse_attribute

          +
          static void parse_attribute(java.io.DataInputStream d,
          +                            Menge<java.lang.String> const_pool)
          +                     throws java.io.IOException,
          +                            java.lang.Exception
          +
          +
          Throws:
          +
          java.io.IOException
          +
          java.lang.Exception
          +
          +
        • +
        + + + +
          +
        • +

          parse_code

          +
          static void parse_code(java.io.DataInputStream d,
          +                       Menge<java.lang.String> const_pool)
          +                throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        + + + +
          +
        • +

          main

          +
          public static void main(java.lang.String[] args)
          +                 throws java.io.FileNotFoundException,
          +                        java.io.IOException,
          +                        java.lang.Exception
          +
          +
          Throws:
          +
          java.io.FileNotFoundException
          +
          java.io.IOException
          +
          java.lang.Exception
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-frame.html new file mode 100644 index 00000000..507b6d36 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-frame.html @@ -0,0 +1,21 @@ + + + + + +de.dhbwstuttgart.JvmDisassembler + + + + + +

    de.dhbwstuttgart.JvmDisassembler

    +
    +

    Classes

    + +
    + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-summary.html new file mode 100644 index 00000000..978fcb67 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-summary.html @@ -0,0 +1,146 @@ + + + + + +de.dhbwstuttgart.JvmDisassembler + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.JvmDisassembler

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-tree.html new file mode 100644 index 00000000..f7045ee3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-tree.html @@ -0,0 +1,138 @@ + + + + + +de.dhbwstuttgart.JvmDisassembler Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.JvmDisassembler

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-use.html new file mode 100644 index 00000000..fce637a2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/JvmDisassembler/package-use.html @@ -0,0 +1,157 @@ + + + + + +Uses of Package de.dhbwstuttgart.JvmDisassembler + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.JvmDisassembler

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/AClassOrInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/AClassOrInterface.html new file mode 100644 index 00000000..19f6977d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/AClassOrInterface.html @@ -0,0 +1,257 @@ + + + + + +AClassOrInterface + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.core
    +

    Interface AClassOrInterface

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      BasicAssumptionClass, Class, FunNInterface, Interface
      +
      +
      +
      +
      public interface AClassOrInterface
      +
      Superklasse von Class und Interface. Beinhaltet gemeinsame Attribute + der beiden Objekte.
      +
      +
      Author:
      +
      Juergen Schmiing
      +
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/ConsoleInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/ConsoleInterface.html new file mode 100644 index 00000000..65142a01 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/ConsoleInterface.html @@ -0,0 +1,337 @@ + + + + + +ConsoleInterface + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.core
    +

    Class ConsoleInterface

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.core.ConsoleInterface
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ConsoleInterface
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.Stringdirectory 
        private static Loggerlog 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ConsoleInterface() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static voidmain(java.lang.String[] args) 
        static voidrun(Menge<java.lang.String> filenames) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          directory

          +
          private static final java.lang.String directory
          +
        • +
        + + + +
          +
        • +

          log

          +
          private static final Logger log
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConsoleInterface

          +
          public ConsoleInterface()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main(java.lang.String[] args)
          +
          +
          Parameters:
          +
          args -
          +
          +
        • +
        + + + +
          +
        • +

          run

          +
          public static void run(Menge<java.lang.String> filenames)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/IItemWithOffset.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/IItemWithOffset.html new file mode 100644 index 00000000..05eb0bf1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/IItemWithOffset.html @@ -0,0 +1,242 @@ + + + + + +IItemWithOffset + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.core
    +

    Interface IItemWithOffset

    +
    +
    + +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getOffset

          +
          int getOffset()
          +
        • +
        + + + +
          +
        • +

          getVariableLength

          +
          int getVariableLength()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompiler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompiler.html new file mode 100644 index 00000000..89179bc3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompiler.html @@ -0,0 +1,686 @@ + + + + + +MyCompiler + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.core
    +

    Class MyCompiler

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.core.MyCompiler
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      MyCompilerAPI
      +
      +
      +
      +
      public class MyCompiler
      +extends java.lang.Object
      +implements MyCompilerAPI
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ModifierConstructor and Description
        private MyCompiler() +
        Author: J�rg B�uerle
        + Der private Konstruktor.
        +
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static MyCompilerAPIgetAPI(LoggerConfiguration loggerConfig) +
        Author: Jörg Bäuerle
        + Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
        +
        java.lang.StringgetOutputDir() +
        Author: Juergen Schmiing
        + Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
        +
        voidinit() +
        Author: J�rg B�uerle
        + Initialisiert den Compiler
        +
        static voidmain(java.lang.String[] args) +
        Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet + werden kann.
        +
        private TypeAssumptionsmakeFunNAssumptions() +
        Erstellt die FunN-Assumptions + Fun0-FunN (momentan für N = 6)
        +
        static TypemakeGenericTypeVars2TypePlaceHolders(Type T) 
        private voidparse_backup(java.io.Reader reader) +
        Parst den Quellcode und baut den abstrakten Syntaxbaum auf.
        +
        SourceFileparse(java.io.File file) +
        Author: J�rg B�uerle
        + Ruft die Parse-Methode.
        +
        voidparse(Menge<java.lang.String> filenames) +
        Diese Funktion nimmt einen Menge von Dateinamen.
        +
        SourceFileparse(java.lang.String sourceCode) +
        Parst den SourceCode einer Datei.
        +
        private SourceFileparse2SyntaxTree(java.io.Reader fileContent) +
        Parst den Inhalt einer Datei zu einem Syntaxbaum.
        +
        voidsetOutputDir(java.lang.String dir) +
        Author: Juergen Schmiing
        + Legt das Ausgabeverzeichnis fuer die class-Files fest.
        +
        Menge<TypeinferenceResultSet>typeReconstruction() +
        Author: J�rg B�uerle
        + Ruft den Typrekonstruktionsalgorithmus auf.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        + + + +
          +
        • +

          OutputDir

          +
          protected java.lang.String OutputDir
          +
        • +
        + + + +
          +
        • +

          m_AbstractSyntaxTree

          +
          private Menge<SourceFile> m_AbstractSyntaxTree
          +
          Der abstrake Syntaxbaum +
          Autor: J�rg B�uerle
          +
        • +
        + + + +
          +
        • +

          testPair

          +
          public Menge<Pair> testPair
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MyCompiler

          +
          private MyCompiler()
          +
          Author: J�rg B�uerle
          + Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden + k�nnen, sondern nur eine API zur Verf�gung gestellt werden.
          +
          +
          Parameters:
          +
          logger - Konfiguration für Debug Ausgabe TODO
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAPI

          +
          public static MyCompilerAPI getAPI(LoggerConfiguration loggerConfig)
          +
          Author: Jörg Bäuerle
          + Stellt eine neue Instanz der CompilerAPI zur Verf�gung. + Diese Methode sollte von der IDE aus aufgerufen werden, + um eine Quellcode-Datei zu kompilieren.
          +
          +
          Returns:
          +
          Die Compiler-API
          +
          +
        • +
        + + + +
          +
        • +

          parse_backup

          +
          private void parse_backup(java.io.Reader reader)
          +                   throws java.io.IOException,
          +                          JavaParser.yyException
          +
          Parst den Quellcode und baut den abstrakten Syntaxbaum auf. Danach wird + automatisch der von Thomas Ott implementierte Algorithmus + NewTVar(jclass) (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) + aufgerufen. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          reader -
          +
          Throws:
          +
          java.io.IOException
          +
          JavaParser.yyException
          +
          +
        • +
        + + + +
          +
        • +

          init

          +
          public void init()
          +
          Author: J�rg B�uerle
          + Initialisiert den Compiler
          +
          +
          Specified by:
          +
          init in interface MyCompilerAPI
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          public SourceFile parse(java.io.File file)
          +                 throws java.io.FileNotFoundException,
          +                        java.io.IOException,
          +                        JavaParser.yyException
          +
          Author: J�rg B�uerle
          + Ruft die Parse-Methode.
          +
          +
          Specified by:
          +
          parse in interface MyCompilerAPI
          +
          Parameters:
          +
          file - Die Quellcode-Datei
          +
          Throws:
          +
          java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert.
          +
          java.io.IOException - Wenn was schief l�uft.
          +
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          +
          +
        • +
        + + + +
          +
        • +

          typeReconstruction

          +
          public Menge<TypeinferenceResultSet> typeReconstruction()
          +                                                 throws java.lang.NullPointerException,
          +                                                        CTypeReconstructionException
          +
          Author: J�rg B�uerle
          + Ruft den Typrekonstruktionsalgorithmus auf.
          +
          +
          Specified by:
          +
          typeReconstruction in interface MyCompilerAPI
          +
          Returns:
          +
          Die Menge aller m�glichen Typkombinationen
          +
          Throws:
          +
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden + ist. @throws CTypeReconstructionException Wenn ein Fehler bei der + Typrekonstruktion auftritt.
          +
          CTypeReconstructionException
          +
          +
        • +
        + + + +
          +
        • +

          makeFunNAssumptions

          +
          private TypeAssumptions makeFunNAssumptions()
          +
          Erstellt die FunN-Assumptions + Fun0-FunN (momentan für N = 6)
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          main

          +
          public static void main(java.lang.String[] args)
          +
          Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet + werden kann.
          +
          +
          Parameters:
          +
          args - Klassendatei
          +
          +
        • +
        + + + +
          +
        • +

          setOutputDir

          +
          public void setOutputDir(java.lang.String dir)
          +
          Description copied from interface: MyCompilerAPI
          +
          Author: Juergen Schmiing
          + Legt das Ausgabeverzeichnis fuer die class-Files fest.
          +
          +
          Specified by:
          +
          setOutputDir in interface MyCompilerAPI
          +
          +
        • +
        + + + +
          +
        • +

          getOutputDir

          +
          public java.lang.String getOutputDir()
          +
          Description copied from interface: MyCompilerAPI
          +
          Author: Juergen Schmiing
          + Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
          +
          +
          Specified by:
          +
          getOutputDir in interface MyCompilerAPI
          +
          +
        • +
        + + + +
          +
        • +

          makeGenericTypeVars2TypePlaceHolders

          +
          public static Type makeGenericTypeVars2TypePlaceHolders(Type T)
          +
          +
          Parameters:
          +
          T - - Typ, bei welchem die GTVs ersetzt werden sollen.
          +
          +
        • +
        + + + +
          +
        • +

          parse2SyntaxTree

          +
          private SourceFile parse2SyntaxTree(java.io.Reader fileContent)
          +                             throws ParserError
          +
          Parst den Inhalt einer Datei zu einem Syntaxbaum.
          +
          +
          Throws:
          +
          ParserError
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          public void parse(Menge<java.lang.String> filenames)
          +           throws ParserError
          +
          Diese Funktion nimmt einen Menge von Dateinamen. Alle diese Dateien werden zu einem SyntaxBaum geparst.
          +
          +
          Specified by:
          +
          parse in interface MyCompilerAPI
          +
          Parameters:
          +
          filenames - - Eine Liste von Quellcodedateien, welche gseparst werden sollen
          +
          Throws:
          +
          ParserError
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          public SourceFile parse(java.lang.String sourceCode)
          +
          Description copied from interface: MyCompilerAPI
          +
          Parst den SourceCode einer Datei.
          +
          +
          Specified by:
          +
          parse in interface MyCompilerAPI
          +
          Parameters:
          +
          sourceCode - - SourceCode einer Java-Quellcodedatei
          +
          Returns:
          +
          den aus dem sourceCode generierten Syntaxbaum
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompilerAPI.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompilerAPI.html new file mode 100644 index 00000000..fe71ae10 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/MyCompilerAPI.html @@ -0,0 +1,382 @@ + + + + + +MyCompilerAPI + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.core
    +

    Interface MyCompilerAPI

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      MyCompiler
      +
      +
      +
      +
      public interface MyCompilerAPI
      +
      Schnittstellen-Klasse zum Compiler. Diese Klasse soll der + IDE als Compiler-API zum Kompilieren einer Quellcode-Datei + dienen und stellt somit die Schnittstelle zur Studienarbeit + von Markus Melzer (Eclipse-Plugin) dar.
      +
      +
      Version:
      +
      $Date: 2013/09/09 11:04:24 $
      +
      Author:
      +
      Jörg Bäuerle
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetOutputDir() +
        Author: Juergen Schmiing
        + Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
        +
        voidinit() +
        Author: Jörg Bäuerle
        + Initialisiert den Compiler
        +
        SourceFileparse(java.io.File file) +
        Author: Jörg Bäuerle
        + Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
        +
        voidparse(Menge<java.lang.String> filenames) +
        Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
        +
        SourceFileparse(java.lang.String sourceCode) +
        Parst den SourceCode einer Datei.
        +
        voidsetOutputDir(java.lang.String dir) +
        Author: Juergen Schmiing
        + Legt das Ausgabeverzeichnis fuer die class-Files fest.
        +
        Menge<TypeinferenceResultSet>typeReconstruction() +
        Author: Jörg Bäuerle
        + Ruft den Typrekonstruktionsalgorithmus auf.
        +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          init

          +
          void init()
          +
          Author: Jörg Bäuerle
          + Initialisiert den Compiler
          +
        • +
        + + + +
          +
        • +

          parse

          +
          SourceFile parse(java.io.File file)
          +          throws java.io.FileNotFoundException,
          +                 java.io.IOException,
          +                 JavaParser.yyException
          +
          Author: Jörg Bäuerle
          + Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
          +
          +
          Parameters:
          +
          file - Die Quellcode-Datei
          +
          Throws:
          +
          java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert.
          +
          java.io.IOException - Wenn was schief läuft.
          +
          JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
          +
          +
        • +
        + + + +
          +
        • +

          typeReconstruction

          +
          Menge<TypeinferenceResultSet> typeReconstruction()
          +                                          throws java.lang.NullPointerException,
          +                                                 TypeinferenceException
          +
          Author: Jörg Bäuerle
          + Ruft den Typrekonstruktionsalgorithmus auf.
          +
          +
          Returns:
          +
          Die Menge aller möglichen Typkombinationen
          +
          Throws:
          +
          java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden + ist. @throws CTypeReconstructionException Wenn ein Fehler bei der + Typrekonstruktion auftritt.
          +
          TypeinferenceException
          +
          +
        • +
        + + + +
          +
        • +

          setOutputDir

          +
          void setOutputDir(java.lang.String dir)
          +
          Author: Juergen Schmiing
          + Legt das Ausgabeverzeichnis fuer die class-Files fest.
          +
        • +
        + + + +
          +
        • +

          getOutputDir

          +
          java.lang.String getOutputDir()
          +
          Author: Juergen Schmiing
          + Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
          +
        • +
        + + + +
          +
        • +

          parse

          +
          void parse(Menge<java.lang.String> filenames)
          +    throws ParserError
          +
          Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
          +
          +
          Parameters:
          +
          filenames - - Eine Liste von Quellcodedateien, welche gseparst werden sollen
          +
          Throws:
          +
          ParserError
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          SourceFile parse(java.lang.String sourceCode)
          +          throws ParserError
          +
          Parst den SourceCode einer Datei.
          +
          +
          Parameters:
          +
          sourceCode - - SourceCode einer Java-Quellcodedatei
          +
          Returns:
          +
          den aus dem sourceCode generierten Syntaxbaum
          +
          Throws:
          +
          ParserError
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/AClassOrInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/AClassOrInterface.html new file mode 100644 index 00000000..38190f44 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/AClassOrInterface.html @@ -0,0 +1,213 @@ + + + + + +Uses of Interface de.dhbwstuttgart.core.AClassOrInterface + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.core.AClassOrInterface

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/ConsoleInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/ConsoleInterface.html new file mode 100644 index 00000000..15528f22 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/ConsoleInterface.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.core.ConsoleInterface + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.core.ConsoleInterface

    +
    +
    No usage of de.dhbwstuttgart.core.ConsoleInterface
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/IItemWithOffset.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/IItemWithOffset.html new file mode 100644 index 00000000..77f78a58 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/IItemWithOffset.html @@ -0,0 +1,780 @@ + + + + + +Uses of Interface de.dhbwstuttgart.core.IItemWithOffset + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.core.IItemWithOffset

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompiler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompiler.html new file mode 100644 index 00000000..5e40656c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompiler.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.core.MyCompiler + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.core.MyCompiler

    +
    +
    No usage of de.dhbwstuttgart.core.MyCompiler
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompilerAPI.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompilerAPI.html new file mode 100644 index 00000000..15f216b2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/class-use/MyCompilerAPI.html @@ -0,0 +1,180 @@ + + + + + +Uses of Interface de.dhbwstuttgart.core.MyCompilerAPI + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.core.MyCompilerAPI

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-frame.html new file mode 100644 index 00000000..3ae46b55 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-frame.html @@ -0,0 +1,27 @@ + + + + + +de.dhbwstuttgart.core + + + + + +

    de.dhbwstuttgart.core

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-summary.html new file mode 100644 index 00000000..e62c2f91 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-summary.html @@ -0,0 +1,173 @@ + + + + + +de.dhbwstuttgart.core + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.core

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-tree.html new file mode 100644 index 00000000..855d3d99 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-tree.html @@ -0,0 +1,144 @@ + + + + + +de.dhbwstuttgart.core Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.core

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-use.html new file mode 100644 index 00000000..6c3f725e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/core/package-use.html @@ -0,0 +1,321 @@ + + + + + +Uses of Package de.dhbwstuttgart.core + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.core

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/ConfigurationEvaluater.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/ConfigurationEvaluater.html new file mode 100644 index 00000000..f20cfdf3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/ConfigurationEvaluater.html @@ -0,0 +1,223 @@ + + + + + +ConfigurationEvaluater + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Interface ConfigurationEvaluater

    +
    +
    +
    +
      +
    • +
      +
      +
      interface ConfigurationEvaluater
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          apply

          +
          void apply(Section s,
          +           java.io.PrintStream o)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Logger.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Logger.html new file mode 100644 index 00000000..1d355297 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Logger.html @@ -0,0 +1,461 @@ + + + + + +Logger + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Class Logger

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.logger.Logger
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Logger
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ModifierConstructor and Description
        protected Logger(java.lang.String name, + LoggerConfiguration config) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voiddebug(java.lang.String message, + Section section) +
        Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
        +
        voiderror(java.lang.String message, + Section s) 
        static LoggergetLogger(java.lang.String name) +
        Liefert den Logger mit dem angegebenen Namen.
        +
        static SectionLoggergetSectionLogger(java.lang.String name, + Section s) 
        voidinfo(java.lang.String message, + Section s) 
        protected voidoutput(java.lang.String msg, + java.util.logging.Level logLevel, + Section section) 
        static voidsetStandardConfiguration(LoggerConfiguration config) +
        wird hier null übergeben, so wird sämtliches Logging unterdrückt.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          LOGGER_DIRECTORY

          +
          private static final java.util.HashMap<java.lang.String,Logger> LOGGER_DIRECTORY
          +
        • +
        + + + +
          +
        • +

          name

          +
          private java.lang.String name
          +
        • +
        + + + +
          +
        • +

          logger

          +
          private final java.util.HashMap<Section,java.util.logging.Logger> logger
          +
        • +
        +
      • +
      + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          debug

          +
          public void debug(java.lang.String message,
          +                  Section section)
          +
          Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. + Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten.
          +
          +
          Parameters:
          +
          message -
          +
          section -
          +
          +
        • +
        + + + +
          +
        • +

          getLogger

          +
          public static Logger getLogger(java.lang.String name)
          +
          Liefert den Logger mit dem angegebenen Namen. + Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist.
          +
          +
          Parameters:
          +
          name - - Name der Klasse ( Ermittelbar mittels .class.getName() )
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getSectionLogger

          +
          public static SectionLogger getSectionLogger(java.lang.String name,
          +                                             Section s)
          +
        • +
        + + + +
          +
        • +

          output

          +
          protected void output(java.lang.String msg,
          +                      java.util.logging.Level logLevel,
          +                      Section section)
          +
        • +
        + + + +
          +
        • +

          info

          +
          public void info(java.lang.String message,
          +                 Section s)
          +
        • +
        + + + +
          +
        • +

          error

          +
          public void error(java.lang.String message,
          +                  Section s)
          +
        • +
        + + + +
          +
        • +

          setStandardConfiguration

          +
          public static void setStandardConfiguration(LoggerConfiguration config)
          +
          wird hier null übergeben, so wird sämtliches Logging unterdrückt.
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/LoggerConfiguration.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/LoggerConfiguration.html new file mode 100644 index 00000000..0d1d7f95 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/LoggerConfiguration.html @@ -0,0 +1,335 @@ + + + + + +LoggerConfiguration + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Class LoggerConfiguration

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.logger.LoggerConfiguration
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LoggerConfiguration
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          outputs

          +
          private final java.util.HashMap<Section,Menge<java.io.PrintStream>> outputs
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LoggerConfiguration

          +
          public LoggerConfiguration()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/OutputHandler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/OutputHandler.html new file mode 100644 index 00000000..2bd08658 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/OutputHandler.html @@ -0,0 +1,360 @@ + + + + + +OutputHandler + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Class OutputHandler

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.util.logging.Handler
      • +
      • +
          +
        • de.dhbwstuttgart.logger.OutputHandler
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class OutputHandler
      +extends java.util.logging.Handler
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private java.io.PrintStreamoutput 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        OutputHandler(java.io.PrintStream output) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidclose() 
        voidflush() 
        voidpublish(java.util.logging.LogRecord record) 
        +
          +
        • + + +

          Methods inherited from class java.util.logging.Handler

          +getEncoding, getErrorManager, getFilter, getFormatter, getLevel, isLoggable, reportError, setEncoding, setErrorManager, setFilter, setFormatter, setLevel
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          output

          +
          private java.io.PrintStream output
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OutputHandler

          +
          public OutputHandler(java.io.PrintStream output)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          publish

          +
          public void publish(java.util.logging.LogRecord record)
          +
          +
          Specified by:
          +
          publish in class java.util.logging.Handler
          +
          +
        • +
        + + + +
          +
        • +

          flush

          +
          public void flush()
          +
          +
          Specified by:
          +
          flush in class java.util.logging.Handler
          +
          +
        • +
        + + + +
          +
        • +

          close

          +
          public void close()
          +           throws java.lang.SecurityException
          +
          +
          Specified by:
          +
          close in class java.util.logging.Handler
          +
          Throws:
          +
          java.lang.SecurityException
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Section.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Section.html new file mode 100644 index 00000000..be5566d5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/Section.html @@ -0,0 +1,389 @@ + + + + + +Section + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Enum Section

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Enum<Section>
      • +
      • +
          +
        • de.dhbwstuttgart.logger.Section
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Comparable<Section>
      +
      +
      +
      +
      public enum Section
      +extends java.lang.Enum<Section>
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static SectionvalueOf(java.lang.String name) +
        Returns the enum constant of this type with the specified name.
        +
        static Section[]values() +
        Returns an array containing the constants of this enum type, in +the order they are declared.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Enum

          +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          TYPEINFERENCE

          +
          public static final Section TYPEINFERENCE
          +
        • +
        + + + +
          +
        • +

          PARSER

          +
          public static final Section PARSER
          +
        • +
        + + + +
          +
        • +

          CODEGEN

          +
          public static final Section CODEGEN
          +
        • +
        + + + +
          +
        • +

          UNIFY

          +
          public static final Section UNIFY
          +
        • +
        + + + +
          +
        • +

          FINITECLOSURE

          +
          public static final Section FINITECLOSURE
          +
        • +
        + + + +
          +
        • +

          ASSUMPTIONS

          +
          public static final Section ASSUMPTIONS
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Section[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Section c : Section.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Section valueOf(java.lang.String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
          +
          java.lang.NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/SectionLogger.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/SectionLogger.html new file mode 100644 index 00000000..536214a5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/SectionLogger.html @@ -0,0 +1,355 @@ + + + + + +SectionLogger + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.logger
    +

    Class SectionLogger

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.logger.SectionLogger
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class SectionLogger
      +extends java.lang.Object
      +
      Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private Loggerlog 
        private Sectionsection 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ModifierConstructor and Description
        protected SectionLogger(Logger logger, + Section s) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voiddebug(java.lang.String message) 
        voiderror(java.lang.String string) 
        voidinfo(java.lang.String string) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SectionLogger

          +
          protected SectionLogger(Logger logger,
          +                        Section s)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          debug

          +
          public void debug(java.lang.String message)
          +
        • +
        + + + +
          +
        • +

          info

          +
          public void info(java.lang.String string)
          +
        • +
        + + + +
          +
        • +

          error

          +
          public void error(java.lang.String string)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/ConfigurationEvaluater.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/ConfigurationEvaluater.html new file mode 100644 index 00000000..888ca1c0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/ConfigurationEvaluater.html @@ -0,0 +1,164 @@ + + + + + +Uses of Interface de.dhbwstuttgart.logger.ConfigurationEvaluater + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.logger.ConfigurationEvaluater

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Logger.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Logger.html new file mode 100644 index 00000000..a38815c9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Logger.html @@ -0,0 +1,620 @@ + + + + + +Uses of Class de.dhbwstuttgart.logger.Logger + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.logger.Logger

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/LoggerConfiguration.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/LoggerConfiguration.html new file mode 100644 index 00000000..1c19c4df --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/LoggerConfiguration.html @@ -0,0 +1,293 @@ + + + + + +Uses of Class de.dhbwstuttgart.logger.LoggerConfiguration + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.logger.LoggerConfiguration

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/OutputHandler.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/OutputHandler.html new file mode 100644 index 00000000..674c01b3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/OutputHandler.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.logger.OutputHandler + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.logger.OutputHandler

    +
    +
    No usage of de.dhbwstuttgart.logger.OutputHandler
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Section.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Section.html new file mode 100644 index 00000000..e42d3628 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/Section.html @@ -0,0 +1,262 @@ + + + + + +Uses of Class de.dhbwstuttgart.logger.Section + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.logger.Section

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/SectionLogger.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/SectionLogger.html new file mode 100644 index 00000000..047b7d2f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/class-use/SectionLogger.html @@ -0,0 +1,187 @@ + + + + + +Uses of Class de.dhbwstuttgart.logger.SectionLogger + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.logger.SectionLogger

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-frame.html new file mode 100644 index 00000000..8a0eb094 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-frame.html @@ -0,0 +1,31 @@ + + + + + +de.dhbwstuttgart.logger + + + + + +

    de.dhbwstuttgart.logger

    +
    +

    Interfaces

    + +

    Classes

    + +

    Enums

    + +
    + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-summary.html new file mode 100644 index 00000000..76450b32 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-summary.html @@ -0,0 +1,186 @@ + + + + + +de.dhbwstuttgart.logger + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.logger

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      ConfigurationEvaluater 
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      Logger 
      LoggerConfiguration 
      OutputHandler 
      SectionLogger +
      Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt
      +
      +
    • +
    • + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      Section 
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-tree.html new file mode 100644 index 00000000..5030afc6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-tree.html @@ -0,0 +1,160 @@ + + + + + +de.dhbwstuttgart.logger Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.logger

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +

    Enum Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) +
          +
        • de.dhbwstuttgart.logger.Section
        • +
        +
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-use.html new file mode 100644 index 00000000..fc3783c7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/logger/package-use.html @@ -0,0 +1,407 @@ + + + + + +Uses of Package de.dhbwstuttgart.logger + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.logger

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/CTypeReconstructionException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/CTypeReconstructionException.html new file mode 100644 index 00000000..6f04e130 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/CTypeReconstructionException.html @@ -0,0 +1,452 @@ + + + + + +CTypeReconstructionException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class CTypeReconstructionException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • java.lang.RuntimeException
          • +
          • +
              +
            • de.dhbwstuttgart.myexception.CTypeReconstructionException
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class CTypeReconstructionException
      +extends java.lang.RuntimeException
      +
      +
      Version:
      +
      $Date: 2006/06/13 10:37:31 $
      +
      Author:
      +
      J�rg B�uerle
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          getMessage

          +
          public java.lang.String getMessage()
          +
          +
          Overrides:
          +
          getMessage in class java.lang.Throwable
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Throwable
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/JVMCodeException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/JVMCodeException.html new file mode 100644 index 00000000..ba684423 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/JVMCodeException.html @@ -0,0 +1,302 @@ + + + + + +JVMCodeException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class JVMCodeException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.JVMCodeException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class JVMCodeException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static longserialVersionUID 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        JVMCodeException(java.lang.String s) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          JVMCodeException

          +
          public JVMCodeException(java.lang.String s)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/MatchException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/MatchException.html new file mode 100644 index 00000000..6b8861d9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/MatchException.html @@ -0,0 +1,302 @@ + + + + + +MatchException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class MatchException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.MatchException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class MatchException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static longserialVersionUID 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        MatchException(java.lang.String m) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MatchException

          +
          public MatchException(java.lang.String m)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassBodyException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassBodyException.html new file mode 100644 index 00000000..3e9d0570 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassBodyException.html @@ -0,0 +1,362 @@ + + + + + +SCClassBodyException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCClassBodyException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.SCClassBodyException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class SCClassBodyException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidaddException(SCExcept ex) 
        Menge<SCExcept>get_exlist() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCClassBodyException

          +
          public SCClassBodyException()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassException.html new file mode 100644 index 00000000..ea892085 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCClassException.html @@ -0,0 +1,388 @@ + + + + + +SCClassException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCClassException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.SCClassException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class SCClassException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SCClassException() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidaddClassname(java.lang.String cn) 
        voidaddException(Menge<SCExcept> v) 
        voidfehlerausgabe() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCClassException

          +
          public SCClassException()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addException

          +
          public void addException(Menge<SCExcept> v)
          +
        • +
        + + + +
          +
        • +

          addClassname

          +
          public void addClassname(java.lang.String cn)
          +
        • +
        + + + +
          +
        • +

          fehlerausgabe

          +
          public void fehlerausgabe()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCExcept.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCExcept.html new file mode 100644 index 00000000..b7ada236 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCExcept.html @@ -0,0 +1,450 @@ + + + + + +SCExcept + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCExcept

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.myexception.SCExcept
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class SCExcept
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private java.lang.Stringclassname 
        private java.lang.Stringerror 
        private java.lang.Stringfunction 
        protected static Loggerparserlog 
        private java.lang.Stringstatement 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SCExcept() 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          classname

          +
          private java.lang.String classname
          +
        • +
        + + + +
          +
        • +

          error

          +
          private java.lang.String error
          +
        • +
        + + + +
          +
        • +

          function

          +
          private java.lang.String function
          +
        • +
        + + + +
          +
        • +

          statement

          +
          private java.lang.String statement
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCExcept

          +
          public SCExcept()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_classname

          +
          public void set_classname(java.lang.String cn)
          +
        • +
        + + + +
          +
        • +

          set_error

          +
          public void set_error(java.lang.String e)
          +
        • +
        + + + +
          +
        • +

          set_function

          +
          public void set_function(java.lang.String fct)
          +
        • +
        + + + +
          +
        • +

          set_statement

          +
          public void set_statement(java.lang.String s)
          +
        • +
        + + + +
          +
        • +

          fehlerausgabe

          +
          public void fehlerausgabe()
          +
        • +
        + + + +
          +
        • +

          get_classname

          +
          public java.lang.String get_classname()
          +
        • +
        + + + +
          +
        • +

          get_statement

          +
          public java.lang.String get_statement()
          +
        • +
        + + + +
          +
        • +

          get_function

          +
          public java.lang.String get_function()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCException.html new file mode 100644 index 00000000..277a3cfc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCException.html @@ -0,0 +1,375 @@ + + + + + +SCException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.SCException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class SCException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SCException() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidadd_classexceptions(SCClassException ex) 
        voidfehlerausgabe() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCException

          +
          public SCException()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          add_classexceptions

          +
          public void add_classexceptions(SCClassException ex)
          +
        • +
        + + + +
          +
        • +

          fehlerausgabe

          +
          public void fehlerausgabe()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCMethodException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCMethodException.html new file mode 100644 index 00000000..86aba016 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCMethodException.html @@ -0,0 +1,362 @@ + + + + + +SCMethodException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCMethodException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.SCMethodException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class SCMethodException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SCMethodException() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        Menge<SCExcept>get_exlist() 
        voidset_exlist(Menge<SCExcept> list) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCMethodException

          +
          public SCMethodException()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCStatementException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCStatementException.html new file mode 100644 index 00000000..afdfd79e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/SCStatementException.html @@ -0,0 +1,362 @@ + + + + + +SCStatementException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.myexception
    +

    Class SCStatementException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.myexception.SCStatementException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class SCStatementException
      +extends java.lang.Exception
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidaddException(SCExcept ex) 
        Menge<SCExcept>get_exlist() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SCStatementException

          +
          public SCStatementException()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/CTypeReconstructionException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/CTypeReconstructionException.html new file mode 100644 index 00000000..0231d872 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/CTypeReconstructionException.html @@ -0,0 +1,277 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.CTypeReconstructionException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.CTypeReconstructionException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/JVMCodeException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/JVMCodeException.html new file mode 100644 index 00000000..61ab81c2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/JVMCodeException.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.JVMCodeException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.JVMCodeException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/MatchException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/MatchException.html new file mode 100644 index 00000000..d4747d9c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/MatchException.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.MatchException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.MatchException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassBodyException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassBodyException.html new file mode 100644 index 00000000..a68d8378 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassBodyException.html @@ -0,0 +1,165 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCClassBodyException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCClassBodyException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassException.html new file mode 100644 index 00000000..3003483b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCClassException.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCClassException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCClassException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCExcept.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCExcept.html new file mode 100644 index 00000000..3e592bd6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCExcept.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCExcept + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCExcept

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCException.html new file mode 100644 index 00000000..a3a2a3fc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCException.html @@ -0,0 +1,235 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCMethodException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCMethodException.html new file mode 100644 index 00000000..25be9419 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCMethodException.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCMethodException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCMethodException

    +
    +
    No usage of de.dhbwstuttgart.myexception.SCMethodException
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCStatementException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCStatementException.html new file mode 100644 index 00000000..1cc2f568 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/class-use/SCStatementException.html @@ -0,0 +1,174 @@ + + + + + +Uses of Class de.dhbwstuttgart.myexception.SCStatementException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.myexception.SCStatementException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-frame.html new file mode 100644 index 00000000..0c537cd2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-frame.html @@ -0,0 +1,31 @@ + + + + + +de.dhbwstuttgart.myexception + + + + + +

    de.dhbwstuttgart.myexception

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-summary.html new file mode 100644 index 00000000..da6dbdc8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-summary.html @@ -0,0 +1,185 @@ + + + + + +de.dhbwstuttgart.myexception + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.myexception

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-tree.html new file mode 100644 index 00000000..9c1615ae --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-tree.html @@ -0,0 +1,157 @@ + + + + + +de.dhbwstuttgart.myexception Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.myexception

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-use.html new file mode 100644 index 00000000..a0ba5357 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/myexception/package-use.html @@ -0,0 +1,270 @@ + + + + + +Uses of Package de.dhbwstuttgart.myexception + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.myexception

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/BoundedClassIdentifierList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/BoundedClassIdentifierList.html new file mode 100644 index 00000000..e8c09b12 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/BoundedClassIdentifierList.html @@ -0,0 +1,391 @@ + + + + + +BoundedClassIdentifierList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class BoundedClassIdentifierList

    +
    +
    +
      +
    • java.lang.Object
    • +
    • + +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<ObjectType>, java.util.Collection<ObjectType>, java.util.List<ObjectType>, java.util.RandomAccess
      +
      +
      +
      +
      public class BoundedClassIdentifierList
      +extends Menge<ObjectType>
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private intendOffset 
        private Menge<ObjectType>list 
        +
          +
        • + + +

          Fields inherited from class java.util.Vector

          +capacityIncrement, elementCount, elementData
        • +
        +
          +
        • + + +

          Fields inherited from class java.util.AbstractList

          +modCount
        • +
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidaddOffsetOff(RefType refType) 
        intgetEndOffset() 
        +
          +
        • + + +

          Methods inherited from class java.util.Vector

          +add, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, forEach, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, removeIf, removeRange, replaceAll, retainAll, set, setElementAt, setSize, size, sort, spliterator, subList, toArray, toArray, toString, trimToSize
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
          +
        • + + +

          Methods inherited from interface java.util.Collection

          +parallelStream, stream
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BoundedClassIdentifierList

          +
          public BoundedClassIdentifierList(Menge<ObjectType> list,
          +                                  int endOffset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getEndOffset

          +
          public int getEndOffset()
          +
        • +
        + + + +
          +
        • +

          addOffsetOff

          +
          public void addOffsetOff(RefType refType)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/ClassAndParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/ClassAndParameter.html new file mode 100644 index 00000000..1b69352f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/ClassAndParameter.html @@ -0,0 +1,394 @@ + + + + + +ClassAndParameter + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class ClassAndParameter

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.ClassAndParameter
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ClassAndParameter
      +extends java.lang.Object
      +
      Hilfskonstrukt, um die Grammatik fuer einen Klassenheader + ueberschaubar zu halten. Klassenname und optionale Generics + werden hiermit kombiniert und sofort nach dem Parsen in der + Klasse Class zueruck aufgeloest.
      +
      +
      Author:
      +
      SCJU
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          name

          +
          private java.lang.String name
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ClassAndParameter

          +
          public ClassAndParameter(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          ClassAndParameter

          +
          public ClassAndParameter(java.lang.String name,
          +                         ParaList plist)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getParaMenge

          +
          public Menge<Type> getParaMenge()
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public java.lang.String getName()
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          getParalist

          +
          public ParaList getParalist()
          +
        • +
        + + + +
          +
        • +

          setParalist

          +
          public void setParalist(ParaList plist)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/GenericVarDeclarationList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/GenericVarDeclarationList.html new file mode 100644 index 00000000..1b196de4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/GenericVarDeclarationList.html @@ -0,0 +1,333 @@ + + + + + +GenericVarDeclarationList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class GenericVarDeclarationList

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.GenericVarDeclarationList
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericVarDeclarationList
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarDeclarationList

          +
          public GenericVarDeclarationList()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceAndParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceAndParameter.html new file mode 100644 index 00000000..629b5a47 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceAndParameter.html @@ -0,0 +1,394 @@ + + + + + +InterfaceAndParameter + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class InterfaceAndParameter

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.InterfaceAndParameter
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class InterfaceAndParameter
      +extends java.lang.Object
      +
      Hilfskonstrukt, um die Grammatik fuer einen Interfaceheader + ueberschaubar zu halten. Interface und optionale Generics + werden hiermit kombiniert und sofort nach dem Parsen in der + Klasse Interface zueruck aufgeloest.
      +
      +
      Author:
      +
      HOTI
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          name

          +
          private java.lang.String name
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InterfaceAndParameter

          +
          public InterfaceAndParameter(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          InterfaceAndParameter

          +
          public InterfaceAndParameter(java.lang.String name,
          +                             ParaList plist)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getParaMenge

          +
          public Menge<Type> getParaMenge()
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public java.lang.String getName()
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          getParalist

          +
          public ParaList getParalist()
          +
        • +
        + + + +
          +
        • +

          setParalist

          +
          public void setParalist(ParaList plist)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceList.html new file mode 100644 index 00000000..11b608d1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/InterfaceList.html @@ -0,0 +1,327 @@ + + + + + +InterfaceList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class InterfaceList

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.InterfaceList
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class InterfaceList
      +extends java.lang.Object
      +
      Hilfskonstrukt fuer die Grammatik, um ungepruefte + Typcasts fuer Mengeen zu umgehen. Wird nuer fuer den + Parser benoetigt.
      +
      +
      Author:
      +
      SCJU
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private Menge<UsedId>superif 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        InterfaceList() 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InterfaceList

          +
          public InterfaceList()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addInterface

          +
          public void addInterface(UsedId uid)
          +
        • +
        + + + +
          +
        • +

          getTypeMenge

          +
          public Menge<Type> getTypeMenge()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaClassName.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaClassName.html new file mode 100644 index 00000000..97aaa791 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaClassName.html @@ -0,0 +1,367 @@ + + + + + +JavaClassName + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class JavaClassName

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.JavaClassName
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class JavaClassName
      +extends java.lang.Object
      +
      Stellt den Namen einer Java Klasse dar. + Dieser kann auch den Packagenamen mit beinhalten: de.dhbwstuttgart.typeinference.Menge
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private java.lang.Stringname 
        private PackageNamepackageName 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        JavaClassName(java.lang.String name) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        booleanequals(java.lang.Object obj) +
        Namen sind nur gleich, wenn bei den beiden zu vergleichenden JavaClassNames auch das Package angegeben ist
        +
        inthashCode() 
        java.lang.StringtoString() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          name

          +
          private java.lang.String name
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          JavaClassName

          +
          public JavaClassName(java.lang.String name)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Namen sind nur gleich, wenn bei den beiden zu vergleichenden JavaClassNames auch das Package angegeben ist
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaLexer.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaLexer.html new file mode 100644 index 00000000..f5cd3cf3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaLexer.html @@ -0,0 +1,970 @@ + + + + + +JavaLexer + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class JavaLexer

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.JavaLexer
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Direct Known Subclasses:
      +
      Scanner
      +
      +
      +
      +
      public class JavaLexer
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          token

          +
          Token token
          +
        • +
        + + + +
          +
        • +

          yy_reader

          +
          private java.io.BufferedReader yy_reader
          +
        • +
        + + + +
          +
        • +

          yy_buffer_index

          +
          private int yy_buffer_index
          +
        • +
        + + + +
          +
        • +

          yy_buffer_read

          +
          private int yy_buffer_read
          +
        • +
        + + + +
          +
        • +

          yy_buffer_start

          +
          private int yy_buffer_start
          +
        • +
        + + + +
          +
        • +

          yy_buffer_end

          +
          private int yy_buffer_end
          +
        • +
        + + + +
          +
        • +

          yy_buffer

          +
          private char[] yy_buffer
          +
        • +
        + + + +
          +
        • +

          yychar

          +
          private int yychar
          +
        • +
        + + + +
          +
        • +

          yyline

          +
          private int yyline
          +
        • +
        + + + +
          +
        • +

          yy_at_bol

          +
          private boolean yy_at_bol
          +
        • +
        + + + +
          +
        • +

          yy_lexical_state

          +
          private int yy_lexical_state
          +
        • +
        + + + +
          +
        • +

          yy_eof_done

          +
          private boolean yy_eof_done
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          yy_state_dtrans

          +
          private final int[] yy_state_dtrans
          +
        • +
        + + + +
          +
        • +

          yy_last_was_cr

          +
          private boolean yy_last_was_cr
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          yy_error_string

          +
          private java.lang.String[] yy_error_string
          +
        • +
        + + + +
          +
        • +

          yy_acpt

          +
          private int[] yy_acpt
          +
        • +
        + + + +
          +
        • +

          yy_cmap

          +
          private int[] yy_cmap
          +
        • +
        + + + +
          +
        • +

          yy_rmap

          +
          private int[] yy_rmap
          +
        • +
        + + + +
          +
        • +

          yy_nxt

          +
          private int[][] yy_nxt
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          JavaLexer

          +
          public JavaLexer(java.io.Reader reader)
          +
        • +
        + + + +
          +
        • +

          JavaLexer

          +
          public JavaLexer(java.io.InputStream instream)
          +
        • +
        + + + +
          +
        • +

          JavaLexer

          +
          private JavaLexer()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          yybegin

          +
          private void yybegin(int state)
          +
        • +
        + + + +
          +
        • +

          yy_advance

          +
          private int yy_advance()
          +                throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        + + + +
          +
        • +

          yy_move_end

          +
          private void yy_move_end()
          +
        • +
        + + + +
          +
        • +

          yy_mark_start

          +
          private void yy_mark_start()
          +
        • +
        + + + +
          +
        • +

          yy_mark_end

          +
          private void yy_mark_end()
          +
        • +
        + + + +
          +
        • +

          yy_to_mark

          +
          private void yy_to_mark()
          +
        • +
        + + + +
          +
        • +

          yytext

          +
          private java.lang.String yytext()
          +
        • +
        + + + +
          +
        • +

          yylength

          +
          private int yylength()
          +
        • +
        + + + +
          +
        • +

          yy_double

          +
          private char[] yy_double(char[] buf)
          +
        • +
        + + + +
          +
        • +

          yy_error

          +
          private void yy_error(int code,
          +                      boolean fatal)
          +
        • +
        + + + +
          +
        • +

          unpackFromString

          +
          private int[][] unpackFromString(int size1,
          +                                 int size2,
          +                                 java.lang.String st)
          +
        • +
        + + + +
          +
        • +

          yylex

          +
          public boolean yylex()
          +              throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.html new file mode 100644 index 00000000..5239433a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.html @@ -0,0 +1,1979 @@ + + + + + +JavaParser + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class JavaParser

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.JavaParser
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class JavaParser
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyException.html new file mode 100644 index 00000000..02d1de5c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyException.html @@ -0,0 +1,305 @@ + + + + + +JavaParser.yyException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class JavaParser.yyException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • de.dhbwstuttgart.parser.JavaParser.yyException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      Enclosing class:
      +
      JavaParser
      +
      +
      +
      +
      public static class JavaParser.yyException
      +extends java.lang.Exception
      +
      thrown for irrecoverable syntax errors and stack overflow.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        Tokentoken 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyException(java.lang.String message, + Token token) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          token

          +
          public Token token
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyException

          +
          public yyException(java.lang.String message,
          +                   Token token)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyInput.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyInput.html new file mode 100644 index 00000000..efa26bd8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/JavaParser.yyInput.html @@ -0,0 +1,282 @@ + + + + + +JavaParser.yyInput + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Interface JavaParser.yyInput

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      Scanner
      +
      +
      +
      Enclosing class:
      +
      JavaParser
      +
      +
      +
      +
      public static interface JavaParser.yyInput
      +
      must be implemented by a scanner object to supply input to the parser.
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethod and Description
        booleanadvance() +
        move on to next token.
        +
        inttoken() +
        classifies current token.
        +
        java.lang.Objectvalue() +
        associated with current token.
        +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          advance

          +
          boolean advance()
          +         throws java.io.IOException
          +
          move on to next token.
          +
          +
          Returns:
          +
          false if positioned beyond tokens.
          +
          Throws:
          +
          IOException - on input error.
          +
          +
        • +
        + + + +
          +
        • +

          token

          +
          int token()
          +
          classifies current token. + Should not be called if advance() returned false.
          +
          +
          Returns:
          +
          current %token or single character.
          +
          +
        • +
        + + + +
          +
        • +

          value

          +
          java.lang.Object value()
          +
          associated with current token. + Should not be called if advance() returned false.
          +
          +
          Returns:
          +
          value for token().
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/PackageName.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/PackageName.html new file mode 100644 index 00000000..638d0820 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/PackageName.html @@ -0,0 +1,357 @@ + + + + + +PackageName + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class PackageName

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.PackageName
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class PackageName
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) Menge<java.lang.String>names 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + +
        Constructors 
        Constructor and Description
        PackageName() 
        PackageName(Menge<java.lang.String> packageNames) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        booleanequals(java.lang.Object obj) 
        inthashCode() 
        java.lang.StringtoString() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          names

          +
          Menge<java.lang.String> names
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PackageName

          +
          public PackageName(Menge<java.lang.String> packageNames)
          +
        • +
        + + + +
          +
        • +

          PackageName

          +
          public PackageName()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Scanner.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Scanner.html new file mode 100644 index 00000000..12607dd8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Scanner.html @@ -0,0 +1,364 @@ + + + + + +Scanner + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class Scanner

    +
    +
    + +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Scanner(java.io.Reader reader) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        booleanadvance() +
        move on to next token.
        +
        inttoken() +
        classifies current token.
        +
        java.lang.Objectvalue() +
        associated with current token.
        +
        + +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Scanner

          +
          public Scanner(java.io.Reader reader)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          token

          +
          public int token()
          +
          Description copied from interface: JavaParser.yyInput
          +
          classifies current token. + Should not be called if advance() returned false.
          +
          +
          Specified by:
          +
          token in interface JavaParser.yyInput
          +
          Returns:
          +
          current %token or single character.
          +
          +
        • +
        + + + +
          +
        • +

          advance

          +
          public boolean advance()
          +                throws java.io.IOException
          +
          Description copied from interface: JavaParser.yyInput
          +
          move on to next token.
          +
          +
          Specified by:
          +
          advance in interface JavaParser.yyInput
          +
          Returns:
          +
          false if positioned beyond tokens.
          +
          Throws:
          +
          IOException - on input error.
          +
          +
        • +
        + + + +
          +
        • +

          value

          +
          public java.lang.Object value()
          +
          Description copied from interface: JavaParser.yyInput
          +
          associated with current token. + Should not be called if advance() returned false.
          +
          +
          Specified by:
          +
          value in interface JavaParser.yyInput
          +
          Returns:
          +
          value for token().
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Token.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Token.html new file mode 100644 index 00000000..cacf770a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/Token.html @@ -0,0 +1,533 @@ + + + + + +Token + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class Token

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.Token
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Token
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private java.lang.Stringlexem 
        private intm_LineNumber 
        private intm_Offset 
        java.lang.Objecttoken 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        Constructor and Description
        Token(int tok, + char c, + int lineNumber) 
        Token(int tok, + char c, + int lineNumber, + int charOffset) 
        Token(int tok, + int lineNumber) 
        Token(int tok, + java.lang.String s, + int lineNumber) 
        Token(int tok, + java.lang.String s, + int lineNumber, + int charOffset) 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          token

          +
          public java.lang.Object token
          +
        • +
        + + + +
          +
        • +

          lexem

          +
          private java.lang.String lexem
          +
        • +
        + + + +
          +
        • +

          m_LineNumber

          +
          private int m_LineNumber
          +
        • +
        + + + +
          +
        • +

          m_Offset

          +
          private int m_Offset
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Token

          +
          Token(int tok,
          +      int lineNumber)
          +
        • +
        + + + +
          +
        • +

          Token

          +
          Token(int tok,
          +      java.lang.String s,
          +      int lineNumber)
          +
        • +
        + + + +
          +
        • +

          Token

          +
          Token(int tok,
          +      char c,
          +      int lineNumber)
          +
        • +
        + + + +
          +
        • +

          Token

          +
          Token(int tok,
          +      java.lang.String s,
          +      int lineNumber,
          +      int charOffset)
          +
        • +
        + + + +
          +
        • +

          Token

          +
          Token(int tok,
          +      char c,
          +      int lineNumber,
          +      int charOffset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getLineNumber

          +
          public int getLineNumber()
          +
        • +
        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
        • +
        + + + +
          +
        • +

          getLexem

          +
          public java.lang.String getLexem()
          +
        • +
        + + + +
          +
        • +

          String2Int

          +
          public int String2Int()
          +
        • +
        + + + +
          +
        • +

          String2Long

          +
          public long String2Long()
          +
        • +
        + + + +
          +
        • +

          String2Float

          +
          public float String2Float()
          +
        • +
        + + + +
          +
        • +

          String2Double

          +
          public double String2Double()
          +
        • +
        + + + +
          +
        • +

          CharInString

          +
          public char CharInString()
          +
        • +
        + + + +
          +
        • +

          String2Bool

          +
          public boolean String2Bool()
          +
        • +
        + + + +
          +
        • +

          get_String

          +
          public java.lang.String get_String()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/BoundedClassIdentifierList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/BoundedClassIdentifierList.html new file mode 100644 index 00000000..780d0178 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/BoundedClassIdentifierList.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.BoundedClassIdentifierList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.BoundedClassIdentifierList

    +
    +
    No usage of de.dhbwstuttgart.parser.BoundedClassIdentifierList
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/ClassAndParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/ClassAndParameter.html new file mode 100644 index 00000000..847cbc48 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/ClassAndParameter.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.ClassAndParameter + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.ClassAndParameter

    +
    +
    No usage of de.dhbwstuttgart.parser.ClassAndParameter
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/GenericVarDeclarationList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/GenericVarDeclarationList.html new file mode 100644 index 00000000..71a259b0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/GenericVarDeclarationList.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.GenericVarDeclarationList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.GenericVarDeclarationList

    +
    +
    No usage of de.dhbwstuttgart.parser.GenericVarDeclarationList
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceAndParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceAndParameter.html new file mode 100644 index 00000000..66f8b29b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceAndParameter.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.InterfaceAndParameter + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.InterfaceAndParameter

    +
    +
    No usage of de.dhbwstuttgart.parser.InterfaceAndParameter
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceList.html new file mode 100644 index 00000000..68526b94 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/InterfaceList.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.InterfaceList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.InterfaceList

    +
    +
    No usage of de.dhbwstuttgart.parser.InterfaceList
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaClassName.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaClassName.html new file mode 100644 index 00000000..71ba8f6f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaClassName.html @@ -0,0 +1,470 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.JavaClassName + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.JavaClassName

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaLexer.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaLexer.html new file mode 100644 index 00000000..6a63bbdf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaLexer.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.JavaLexer + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.JavaLexer

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.html new file mode 100644 index 00000000..05ac6f46 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.JavaParser + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.JavaParser

    +
    +
    No usage of de.dhbwstuttgart.parser.JavaParser
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyException.html new file mode 100644 index 00000000..ebb0c399 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyException.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.JavaParser.yyException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.JavaParser.yyException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyInput.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyInput.html new file mode 100644 index 00000000..55266ccc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/JavaParser.yyInput.html @@ -0,0 +1,186 @@ + + + + + +Uses of Interface de.dhbwstuttgart.parser.JavaParser.yyInput + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.parser.JavaParser.yyInput

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/PackageName.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/PackageName.html new file mode 100644 index 00000000..f30c1dbf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/PackageName.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.PackageName + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.PackageName

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Scanner.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Scanner.html new file mode 100644 index 00000000..8979ad57 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Scanner.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.Scanner + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.Scanner

    +
    +
    No usage of de.dhbwstuttgart.parser.Scanner
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Token.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Token.html new file mode 100644 index 00000000..700aaf6a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/Token.html @@ -0,0 +1,180 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.Token + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.Token

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck0.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck0.html new file mode 100644 index 00000000..5b7b5fbc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck0.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.yyCheck0 + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.yyCheck0

    +
    +
    No usage of de.dhbwstuttgart.parser.yyCheck0
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck1.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck1.html new file mode 100644 index 00000000..15ac0360 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck1.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.yyCheck1 + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.yyCheck1

    +
    +
    No usage of de.dhbwstuttgart.parser.yyCheck1
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck2.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck2.html new file mode 100644 index 00000000..20cfe91a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.yyCheck2 + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.yyCheck2

    +
    +
    No usage of de.dhbwstuttgart.parser.yyCheck2
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck3.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck3.html new file mode 100644 index 00000000..d00a8b4f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheck3.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.yyCheck3 + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.yyCheck3

    +
    +
    No usage of de.dhbwstuttgart.parser.yyCheck3
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheckInit.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheckInit.html new file mode 100644 index 00000000..762826f9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/class-use/yyCheckInit.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.parser.yyCheckInit + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.parser.yyCheckInit

    +
    +
    No usage of de.dhbwstuttgart.parser.yyCheckInit
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-frame.html new file mode 100644 index 00000000..e1ed3fbc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-frame.html @@ -0,0 +1,43 @@ + + + + + +de.dhbwstuttgart.parser + + + + + +

    de.dhbwstuttgart.parser

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-summary.html new file mode 100644 index 00000000..e2b4aec7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-summary.html @@ -0,0 +1,247 @@ + + + + + +de.dhbwstuttgart.parser + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.parser

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-tree.html new file mode 100644 index 00000000..38ecddbc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-tree.html @@ -0,0 +1,184 @@ + + + + + +de.dhbwstuttgart.parser Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.parser

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-use.html new file mode 100644 index 00000000..0fe646c4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/package-use.html @@ -0,0 +1,325 @@ + + + + + +Uses of Package de.dhbwstuttgart.parser + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.parser

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck0.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck0.html new file mode 100644 index 00000000..45514444 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck0.html @@ -0,0 +1,273 @@ + + + + + +yyCheck0 + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class yyCheck0

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.yyCheck0
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class yyCheck0
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected static short[]yyCheck0 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyCheck0() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          yyCheck0

          +
          protected static final short[] yyCheck0
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyCheck0

          +
          yyCheck0()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck1.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck1.html new file mode 100644 index 00000000..9b20a5db --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck1.html @@ -0,0 +1,273 @@ + + + + + +yyCheck1 + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class yyCheck1

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.yyCheck1
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class yyCheck1
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected static short[]yyCheck1 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyCheck1() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          yyCheck1

          +
          protected static final short[] yyCheck1
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyCheck1

          +
          yyCheck1()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck2.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck2.html new file mode 100644 index 00000000..5e2bf010 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck2.html @@ -0,0 +1,273 @@ + + + + + +yyCheck2 + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class yyCheck2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.yyCheck2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class yyCheck2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected static short[]yyCheck2 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyCheck2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          yyCheck2

          +
          protected static final short[] yyCheck2
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyCheck2

          +
          yyCheck2()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck3.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck3.html new file mode 100644 index 00000000..e28228c5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheck3.html @@ -0,0 +1,273 @@ + + + + + +yyCheck3 + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class yyCheck3

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.yyCheck3
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class yyCheck3
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected static short[]yyCheck3 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyCheck3() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          yyCheck3

          +
          protected static final short[] yyCheck3
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyCheck3

          +
          yyCheck3()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheckInit.html b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheckInit.html new file mode 100644 index 00000000..b6c72c33 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/parser/yyCheckInit.html @@ -0,0 +1,307 @@ + + + + + +yyCheckInit + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.parser
    +

    Class yyCheckInit

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.parser.yyCheckInit
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class yyCheckInit
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) static short[]yyCheck 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        yyCheckInit() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        protected static voidyyCheckInit() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          yyCheck

          +
          static short[] yyCheck
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          yyCheckInit

          +
          yyCheckInit()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          yyCheckInit

          +
          protected static void yyCheckInit()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/BasicAssumptionClass.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/BasicAssumptionClass.html new file mode 100644 index 00000000..ffe47a09 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/BasicAssumptionClass.html @@ -0,0 +1,306 @@ + + + + + +BasicAssumptionClass + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class BasicAssumptionClass

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BasicAssumptionClass

          +
          public BasicAssumptionClass(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          BasicAssumptionClass

          +
          public BasicAssumptionClass(java.lang.String name,
          +                            Modifiers mod)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Class.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Class.html new file mode 100644 index 00000000..0512f0ca --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Class.html @@ -0,0 +1,1618 @@ + + + + + +Class + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Class

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
          Log4j - Loggerinstanzen
          +
        • +
        + + + +
          +
        • +

          pkgName

          +
          protected UsedId pkgName
          +
        • +
        + + + +
          +
        • +

          modifiers

          +
          protected Modifiers modifiers
          +
        • +
        + + + +
          +
        • +

          name

          +
          protected java.lang.String name
          +
        • +
        + + + +
          +
        • +

          superif

          +
          private Menge<Type> superif
          +
        • +
        + + + +
          +
        • +

          superclassid

          +
          public UsedId superclassid
          +
        • +
        + + + +
          +
        • +

          class_block

          +
          private Block class_block
          +
        • +
        + + + +
          +
        • +

          parahash

          +
          private java.util.Hashtable<java.lang.String,java.lang.String> parahash
          +
        • +
        + + + +
          +
        • +

          isFirstLocalVarDecl

          +
          public static boolean isFirstLocalVarDecl
          +
        • +
        + + + +
          +
        • +

          containedTypes

          +
          private Menge<Type> containedTypes
          +
        • +
        + + + +
          +
        • +

          usedIdsToCheck

          +
          private Menge<UsedId> usedIdsToCheck
          +
        • +
        + + + + + + + +
          +
        • +

          typinferenzLog

          +
          protected Logger typinferenzLog
          +
        • +
        + + + + + + + +
          +
        • +

          fielddecl

          +
          private Menge<Field> fielddecl
          +
        • +
        + + + + + + + +
          +
        • +

          offset

          +
          private int offset
          +
        • +
        + + + +
          +
        • +

          superClass

          +
          private Type superClass
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Class

          +
          public Class(java.lang.String name,
          +             int offset)
          +
        • +
        + + + +
          +
        • +

          Class

          +
          public Class(java.lang.String name,
          +             RefType superClass,
          +             Modifiers modifiers,
          +             Menge<java.lang.String> supertypeGenPara)
          +
          Erstellt eine Klasse, welche nur für die Assumptions verwendet wird. + Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody.
          +
          +
          Parameters:
          +
          name -
          +
          superClass -
          +
          modifiers -
          +
          supertypeGenPara - - Eine Liste von Namen, welche die Generischen Parameter der Klasse darstellen.
          +
          +
        • +
        + + + +
          +
        • +

          Class

          +
          public Class(java.lang.String name,
          +             RefType superClass,
          +             Modifiers mod,
          +             int offset)
          +
        • +
        + + + +
          +
        • +

          Class

          +
          public Class(java.lang.String name,
          +             Modifiers mod,
          +             int offset)
          +
        • +
        + + + + + + + + + + + + + + + + + + + +
          +
        • +

          Class

          +
          public Class(java.lang.String name,
          +             Modifiers mod,
          +             ClassBody cb,
          +             Menge<Type> ct,
          +             Type superclass,
          +             Menge<Type> Menge,
          +             Menge<? extends Type> paralist,
          +             int offset)
          +
          Konstruktor, der die Angabe aller Parameter ermoeglicht. + Zur Uebersichtlichkeit in der Grammatik.
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPackageName

          +
          public UsedId getPackageName()
          +
        • +
        + + + +
          +
        • +

          setPackageName

          +
          public void setPackageName(UsedId pkgName)
          +
        • +
        + + + + + + + +
          +
        • +

          setName

          +
          public void setName(java.lang.String strName)
          +
        • +
        + + + +
          +
        • +

          setModifiers

          +
          public void setModifiers(Modifiers mod)
          +
        • +
        + + + +
          +
        • +

          getModifiers

          +
          public Modifiers getModifiers()
          +
        • +
        + + + +
          +
        • +

          getAccessFlags

          +
          public short getAccessFlags()
          +
          Liefert die AccessFlags fuer den Bytecode zurueck.
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          usedIdToRefType

          +
          private static Type usedIdToRefType(UsedId superclass2)
          +
        • +
        + + + +
          +
        • +

          getFields

          +
          public Menge<Field> getFields()
          +
        • +
        + + + +
          +
        • +

          addField

          +
          public void addField(Field i)
          +
          +
          Parameters:
          +
          feld -
          +
          +
        • +
        + + + +
          +
        • +

          getUsedIdsToCheck

          +
          public Menge<UsedId> getUsedIdsToCheck()
          +
        • +
        + + + +
          +
        • +

          setContainedTypes

          +
          public void setContainedTypes(Menge<Type> containedTypes)
          +
        • +
        + + + +
          +
        • +

          getContainedTypes

          +
          public Menge<Type> getContainedTypes()
          +
        • +
        + + + +
          +
        • +

          set_UsedId

          +
          public void set_UsedId(UsedId uid)
          +
          Generiert die ClassFile für diese Klasse.
          +
          +
          Parameters:
          +
          typeinferenceResult - - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen.
          +
          Throws:
          +
          JVMCodeException - // ino.method.codegen.23071.definition + public ClassFile codegen(ResultSet typeinferenceResult) + throws JVMCodeException + // ino.end + // ino.method.codegen.23071.body + { + ClassFile classfile = new ClassFile(); + String superClass; + + // Handling der Superklasse + if(superclassid != null) { + superClass = superclassid.get_codegen_UsedId(); + } else { + superClass = "java/lang/Object"; + } + + // Handling der Package + //String pkgName = ""; + //if (sf.getPackageName() != null) { + // pkgName = sf.getPackageName().get_codegen_UsedId() + "/"; + //} + + //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: + String packageName = ""; + if(pkgName != null) packageName = pkgName.get_Name_1Element(); + classfile.add_class(getName(), superClass, getAccessFlags()); + + // Handling fuer Superinterfaces + classfile.addSuperInterfaces(getSuperInterfaces()); + + // Generics hinzufuegen - falls erforderlich + classfile.addGenerics(this.paralist,superclassid, this.getSuperInterfaces()); + + // Body der Classfile generieren + //if(body != null) { + this.codegen(classfile, this.paralist); + //} + + // Ueberpruefung, ob Konstruktor generiert + // Falls nicht, default-Konstruktor erzeugen + if(!classfile.get_constructor_founded()) { + classfile.add_method("", "()V", null, null, null, (short)0, this.paralist, false); + } + + //classfile.codegen(); + + codegenlog.info("Compilierung erfolgreich abgeschlossen, "+ getName() + ".class erstellt."); + return classfile; + }
          +
          +
        • +
        + + + +
          +
        • +

          set_ClassBody

          +
          public void set_ClassBody(ClassBody body)
          +
          Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt. + Der ClassBody enthält sämtliche Felder dieser Klasse. + Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen. + (Nur einmal während des Parsens aufrufen!)
          +
        • +
        + + + +
          +
        • +

          set_class_block

          +
          public void set_class_block(Block block)
          +
        • +
        + + + +
          +
        • +

          get_Superclass_Name

          +
          public JavaClassName get_Superclass_Name()
          +
        • +
        + + + +
          +
        • +

          get_class_block

          +
          public Block get_class_block()
          +
        • +
        + + + +
          +
        • +

          does_Class_extend

          +
          public boolean does_Class_extend()
          +
        • +
        + + + +
          +
        • +

          get_ParaList

          +
          public Menge<? extends Type> get_ParaList()
          +
        • +
        + + + +
          +
        • +

          set_ParaHash

          +
          public void set_ParaHash(java.util.Hashtable<java.lang.String,java.lang.String> hash)
          +
        • +
        + + + +
          +
        • +

          get_ParaHash

          +
          public java.util.Hashtable<java.lang.String,java.lang.String> get_ParaHash()
          +
        • +
        + + + +
          +
        • +

          typeReconstruction

          +
          public ConstraintsSet typeReconstruction(FC_TTO supportData,
          +                                         TypeAssumptions globalAssumptions)
          +
          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst + die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe + f�r den Algorithmus dienen.
          + (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          supportData -
          +
          globalAssumptions -
          +
          Returns:
          +
          Liste aller bisher berechneten, m�glichen Typkombinationen
          +
          Throws:
          +
          CTypeReconstructionException
          +
          +
        • +
        + + + +
          +
        • +

          getPrivateFieldAssumptions

          +
          private TypeAssumptions getPrivateFieldAssumptions()
          +
          Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese. + Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben.
          +
          +
          Returns:
          +
          Die erstellten TypeAssumptions
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          wandleRefTypeAttributes2GenericAttributes

          +
          public void wandleRefTypeAttributes2GenericAttributes()
          +
          Alle Methoden der Klassen überprüfen, ob sie als + RefType deklarierte Attribute haben, die aber GenericTypeVars sind + und ggf. ersetzen + + Bsp.: + bei public E elementAt(i){...} wird E vorerst als RefType erkannt
          +
        • +
        + + + +
          +
        • +

          getSimpleName

          +
          public java.lang.String getSimpleName()
          +
          HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation(Menge<Method> methodList,
          +                                           Menge<Expr> fieldList)
          +
        • +
        + + + +
          +
        • +

          printJavaCode

          +
          public java.lang.String printJavaCode(TypeinferenceResultSet reconstructionResult)
          +
          Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet. + Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt.
          +
          +
          Returns:
          +
          Java-Sourcefile
          +
          +
        • +
        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
          Errechnet die Generischen Parameter der Klasse für diese Klasse. + Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
          +
          +
          Specified by:
          +
          getOffset in interface IItemWithOffset
          +
          Parameters:
          +
          reconstructionResult - public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){ + this.genericClassParameters = new Menge(); + for(Pair pair : reconstructionResult.getUnifiedConstraints()){ + if(pair.TA2 instanceof TypePlaceholder && pair.TA1 instanceof TypePlaceholder){// if(pair.OperatorSmallerExtends() || pair.OperatorSmaller()){ + Type ta1=reconstructionResult.getUnifiedConstraints().getTypeEqualTo(pair.TA1); + Type ta2=reconstructionResult.getUnifiedConstraints().getTypeEqualTo(pair.TA2); + this.genericClassParameters.add(new GenericTypeVar(new Pair(ta1,ta2),this.getOffset())); + } + } + + for(Pair pair : reconstructionResult.getConstraints()){ + if( ! reconstructionResult.getUnifiedConstraints().contains(pair.TA1)){ + this.genericClassParameters.add(new GenericTypeVar(pair.TA1,this.getOffset())); + } + if( ! reconstructionResult.getUnifiedConstraints().contains(pair.TA2)){ + this.genericClassParameters.add(new GenericTypeVar(pair.TA2, this.getOffset())); + } + } + }
          +
          +
        • +
        + + + +
          +
        • +

          getType

          +
          public RefType getType()
          +
          Erstellt einen RefType, welcher auf diese Klasse verweist + Ersetzt alle Generischen Variablen in der Parameterliste mit TPH
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getPublicFieldAssumptions

          +
          public TypeAssumptions getPublicFieldAssumptions()
          +
          Ermittelt die Sichtbaren Felder und Methoden der Klasse. + (Momentan sind im Projekt alle Felder und Methoden "package private", da der Parser keine Access-Modifier einlesen kann.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getDescription

          +
          public java.lang.String getDescription()
          +
          Description copied from class: SyntaxTreeNode
          +
          Eine Beschreibung/Name des SyntaxTree-Nodes
          +
          +
          Overrides:
          +
          getDescription in class SyntaxTreeNode
          +
          Returns:
          +
          +
        • +
        + + + + + + + + + + + + + + + + + + + +
          +
        • +

          getSuperClass

          +
          public Type getSuperClass()
          +
          Die Super Klasse dieser Klasse.
          +
          +
          Returns:
          +
          null für Klasse Object
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassBody.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassBody.html new file mode 100644 index 00000000..08f91930 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassBody.html @@ -0,0 +1,447 @@ + + + + + +ClassBody + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class ClassBody

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.ClassBody
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ClassBody
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          fielddecl

          +
          private Menge<Field> fielddecl
          +
        • +
        + + + +
          +
        • +

          kill

          +
          public java.util.Hashtable<Type,Type> kill
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ClassBody

          +
          public ClassBody()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getFields

          +
          public Menge<Field> getFields()
          +
        • +
        + + + +
          +
        • +

          addField

          +
          public void addField(Field i)
          +
          +
          Parameters:
          +
          feld -
          +
          +
        • +
        + + + + + + + +
          +
        • +

          string_rec

          +
          static java.lang.String string_rec(java.util.Hashtable ht)
          +
        • +
        + + + +
          +
        • +

          string_rec

          +
          static java.lang.String string_rec(java.lang.String st,
          +                                   java.util.Hashtable ht)
          +
        • +
        + + + +
          +
        • +

          string_rec

          +
          static java.lang.String string_rec(java.lang.String st,
          +                                   Menge v)
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassHelper.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassHelper.html new file mode 100644 index 00000000..1d9213b4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ClassHelper.html @@ -0,0 +1,290 @@ + + + + + +ClassHelper + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class ClassHelper

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.ClassHelper
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ClassHelper
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ClassHelper

          +
          public ClassHelper()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          findGenericType

          +
          @Deprecated
          +public static GenericTypeVar findGenericType(Type type,
          +                                                         Menge<Type> paralist,
          +                                                         Menge<GenericTypeVar> methodParaList)
          +
          Deprecated. 
          +
          HOTI + Diese Methode sucht in der Klassendefinition nach einen GTV, die + so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert + die Methode null.
          +
          +
          Parameters:
          +
          type -
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constant.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constant.html new file mode 100644 index 00000000..3147fcd6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constant.html @@ -0,0 +1,676 @@ + + + + + +Constant + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Constant

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          name

          +
          protected java.lang.String name
          +
        • +
        + + + + + + + +
          +
        • +

          exp

          +
          protected Expr exp
          +
        • +
        + + + +
          +
        • +

          typ

          +
          protected Type typ
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Constant

          +
          @Deprecated
          +public Constant(java.lang.String name,
          +                            Modifiers mod)
          +
          Deprecated. 
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constructor.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constructor.html new file mode 100644 index 00000000..f78a2b2a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Constructor.html @@ -0,0 +1,438 @@ + + + + + +Constructor + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Constructor

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          methode

          +
          private Method methode
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Constructor

          +
          public Constructor(Method methode)
          +
          Parser kann nicht zwischen einem Konstruktor und einer Methode unterscheiden. + Diese Klasse beherbegt den als Methode geparsten Konstruktor und wandelt sein verhalten zu dem eines Konstruktors ab.
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ExceptionList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ExceptionList.html new file mode 100644 index 00000000..ed6746fe --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ExceptionList.html @@ -0,0 +1,307 @@ + + + + + +ExceptionList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class ExceptionList

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.ExceptionList
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ExceptionList
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private Menge<RefType>reftype 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ExceptionList() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidset_addElem(RefType rety) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ExceptionList

          +
          public ExceptionList()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_addElem

          +
          public void set_addElem(RefType rety)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Field.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Field.html new file mode 100644 index 00000000..d04324d1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Field.html @@ -0,0 +1,766 @@ + + + + + +Field + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Field

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FieldDeclaration.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FieldDeclaration.html new file mode 100644 index 00000000..bf7c53b4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FieldDeclaration.html @@ -0,0 +1,569 @@ + + + + + +FieldDeclaration + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class FieldDeclaration

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          wert

          +
          private Expr wert
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FieldDeclaration

          +
          public FieldDeclaration(java.lang.String name,
          +                        Type typ)
          +
          Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig. + Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
          +
        • +
        + + + +
          +
        • +

          FieldDeclaration

          +
          public FieldDeclaration(int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setWert

          +
          public void setWert(Expr initialExpression)
          +
        • +
        + + + +
          +
        • +

          getWert

          +
          public Expr getWert()
          +
        • +
        + + + + + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + + + + + +
          +
        • +

          createTypeAssumptions

          +
          public TypeAssumptions createTypeAssumptions(Class classmember)
          +
          Description copied from class: Field
          +
          Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember
          +
          +
          Specified by:
          +
          createTypeAssumptions in class Field
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getVariableLength

          +
          public int getVariableLength()
          +
        • +
        + + + + + + + +
          +
        • +

          wandleRefTypeAttributes2GenericAttributes

          +
          public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist)
          +
          Description copied from class: Field
          +
          Wird im Zuge des ParserPostProcessing aufgerufen. + Der Parser kann den Unterschied zwischen einem RefType und einer GTV nicht erkennen. + Diese Methode ersetzt die RefTypes gegebenenfalls durch eine GTV.
          +
          +
          Overrides:
          +
          wandleRefTypeAttributes2GenericAttributes in class Field
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FormalParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FormalParameter.html new file mode 100644 index 00000000..dd3e2857 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/FormalParameter.html @@ -0,0 +1,689 @@ + + + + + +FormalParameter + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class FormalParameter

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          type

          +
          private Type type
          +
        • +
        + + + +
          +
        • +

          declid

          +
          private DeclId declid
          +
        • +
        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FormalParameter

          +
          public FormalParameter(DeclId name)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object object)
          +
          +
          Overrides:
          +
          equals in class SyntaxTreeNode
          +
          +
        • +
        + + + +
          +
        • +

          setType

          +
          public void setType(Type t)
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          setType in interface Typeable
          +
          Parameters:
          +
          t -
          +
          +
        • +
        + + + +
          +
        • +

          set_DeclId

          +
          public void set_DeclId(DeclId did)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getTypeName

          +
          public java.lang.String getTypeName()
          +
        • +
        + + + + + + + +
          +
        • +

          getLineNumber

          +
          public int getLineNumber()
          +

          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypeLineNumber

          +
          public int getTypeLineNumber()
          +

          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation()
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + + + + + +
          +
        • +

          setOffset

          +
          public void setOffset(int offset)
          +
          +
          Specified by:
          +
          setOffset in interface TypeInsertable
          +
          +
        • +
        + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getDeclId

          +
          public DeclId getDeclId()
          +
        • +
        + + + +
          +
        • +

          getDescription

          +
          public java.lang.String getDescription()
          +
          Description copied from class: SyntaxTreeNode
          +
          Eine Beschreibung/Name des SyntaxTree-Nodes
          +
          +
          Overrides:
          +
          getDescription in class SyntaxTreeNode
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.html new file mode 100644 index 00000000..275271ee --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GTVDeclarationContext.html @@ -0,0 +1,332 @@ + + + + + +GTVDeclarationContext + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class GTVDeclarationContext

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      Direct Known Subclasses:
      +
      Class, Field
      +
      +
      +
      +
      public abstract class GTVDeclarationContext
      +extends SyntaxTreeNode
      +
      Beischreibt eine SyntaxTreeNode, welcher die Eigenschaft besitzt, + dass bei seiner Deklaration auch Generische Typvariablen deklariert wurden.
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Generic.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Generic.html new file mode 100644 index 00000000..ea51ae32 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Generic.html @@ -0,0 +1,243 @@ + + + + + +Generic + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Interface Generic

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.html new file mode 100644 index 00000000..12c909b6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.html @@ -0,0 +1,479 @@ + + + + + +GenericDeclarationList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class GenericDeclarationList

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset, java.lang.Iterable<GenericTypeVar>
      +
      +
      +
      +
      public class GenericDeclarationList
      +extends SyntaxTreeNode
      +implements java.lang.Iterable<GenericTypeVar>
      +
      Stellt eine Deklarations-Liste von Generischen Variablen dar. + Kann vor Methoden und Klassen auftauchen. (<....>)
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ImportDeclarations.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ImportDeclarations.html new file mode 100644 index 00000000..59924b37 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ImportDeclarations.html @@ -0,0 +1,337 @@ + + + + + +ImportDeclarations + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class ImportDeclarations

    +
    +
    +
      +
    • java.lang.Object
    • +
    • + +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<UsedId>, java.util.Collection<UsedId>, java.util.List<UsedId>, java.util.RandomAccess
      +
      +
      +
      +
      public class ImportDeclarations
      +extends Menge<UsedId>
      +
      HOTI 4.5.06 + Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) + Der Parser kann keine Generischen Typen darstellen, damit trotzdem + an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung...
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static longserialVersionUID 
        +
          +
        • + + +

          Fields inherited from class java.util.Vector

          +capacityIncrement, elementCount, elementData
        • +
        +
          +
        • + + +

          Fields inherited from class java.util.AbstractList

          +modCount
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ImportDeclarations() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.util.Vector

          +add, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, forEach, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, removeIf, removeRange, replaceAll, retainAll, set, setElementAt, setSize, size, sort, spliterator, subList, toArray, toArray, toString, trimToSize
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
          +
        • + + +

          Methods inherited from interface java.util.Collection

          +parallelStream, stream
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ImportDeclarations

          +
          public ImportDeclarations()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Interface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Interface.html new file mode 100644 index 00000000..4604aaee --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Interface.html @@ -0,0 +1,375 @@ + + + + + +Interface + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Interface

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Interface

          +
          public Interface(java.lang.String name,
          +                 int offset)
          +
        • +
        + + + +
          +
        • +

          Interface

          +
          public Interface(java.lang.String name,
          +                 Modifiers modifiers,
          +                 int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getParaList

          +
          public Menge getParaList()
          +
        • +
        + + + +
          +
        • +

          setInterfaceBody

          +
          public void setInterfaceBody(InterfaceBody interfaceBody)
          +
        • +
        + + + +
          +
        • +

          setParaList

          +
          public void setParaList(Menge<Type> paraMenge)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/InterfaceBody.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/InterfaceBody.html new file mode 100644 index 00000000..fa29a455 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/InterfaceBody.html @@ -0,0 +1,383 @@ + + + + + +InterfaceBody + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class InterfaceBody

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.InterfaceBody
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class InterfaceBody
      +extends java.lang.Object
      +
      Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- + und Mehtodendefinitionen.
      +
      +
      Author:
      +
      SCJU
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InterfaceBody

          +
          public InterfaceBody()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addElement

          +
          public void addElement(Field fd)
          +
          Fuegt ein neues Element (Konstantendefinition oder abstrakte + Methode) ein.
          +
        • +
        + + + +
          +
        • +

          getConstantVektor

          +
          public Menge<Constant> getConstantVektor()
          +
        • +
        + + + +
          +
        • +

          setConstantVektor

          +
          public void setConstantVektor(Menge<Constant> constantVektor)
          +
        • +
        + + + +
          +
        • +

          getMethodVektor

          +
          public Menge<Method> getMethodVektor()
          +
        • +
        + + + +
          +
        • +

          setMethodVektor

          +
          public void setMethodVektor(Menge<Method> methodVektor)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Method.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Method.html new file mode 100644 index 00000000..54ea762e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/Method.html @@ -0,0 +1,1108 @@ + + + + + +Method + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class Method

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          block

          +
          private Block block
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          returntype

          +
          private Type returntype
          +
        • +
        + + + +
          +
        • +

          overloadedID

          +
          private int overloadedID
          +
          HOTI 4.5.06 + Dieser Vektor beinhaltet alle Generischen Typen und v.a. die + F-Bounded-Generics, die die Methode besitzt + size()==0, falls es keine gibt
          +
        • +
        + + + +
          +
        • +

          isAbstract

          +
          private boolean isAbstract
          +
        • +
        + + + +
          +
        • +

          types_in_parameterlist

          +
          private Menge<java.lang.String> types_in_parameterlist
          +
        • +
        + + + +
          +
        • +

          m_LineNumber

          +
          private int m_LineNumber
          +
        • +
        + + + +
          +
        • +

          m_Offset

          +
          private int m_Offset
          +
        • +
        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + + + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          get_Block

          +
          public Block get_Block()
          +
        • +
        + + + +
          +
        • +

          setReturnType

          +
          private void setReturnType(Type type)
          +

          Author: Jrg Buerle
          +
          +
          Parameters:
          +
          type -
          +
          +
        • +
        + + + +
          +
        • +

          set_Block

          +
          public void set_Block(Block blo)
          +
        • +
        + + + +
          +
        • +

          set_Modifiers

          +
          public void set_Modifiers(Modifiers modif)
          +
        • +
        + + + +
          +
        • +

          set_ExceptionList

          +
          public void set_ExceptionList(ExceptionList exlist)
          +
        • +
        + + + +
          +
        • +

          setParameterList

          +
          public void setParameterList(ParameterList paralist)
          +
        • +
        + + + +
          +
        • +

          getParameterList

          +
          public ParameterList getParameterList()
          +
        • +
        + + + +
          +
        • +

          getParameterCount

          +
          public int getParameterCount()
          +
          Author: Jrg Buerle
          +
          +
          Returns:
          +
          Die Anzahl der Methoden-Paramater
          +
          +
        • +
        + + + +
          +
        • +

          get_ExceptionList

          +
          public ExceptionList get_ExceptionList()
          +
        • +
        + + + +
          +
        • +

          getOverloadedID

          +
          public int getOverloadedID()
          +
        • +
        + + + +
          +
        • +

          setOverloadedID

          +
          public void setOverloadedID(int overloadedID)
          +
        • +
        + + + +
          +
        • +

          get_Method_Name

          +
          public java.lang.String get_Method_Name()
          +
        • +
        + + + +
          +
        • +

          get_Type_Paralist

          +
          public Menge get_Type_Paralist()
          +
        • +
        + + + +
          +
        • +

          getLineNumber

          +
          public int getLineNumber()
          +
        • +
        + + + +
          +
        • +

          setLineNumber

          +
          public void setLineNumber(int lineNumber)
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          getTypeLineNumber

          +
          public int getTypeLineNumber()
          +

          Author: Jrg Buerle
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          setAbstract

          +
          public void setAbstract(boolean b)
          +
          Legt fuer die ByteCodeGen fest, ob Bytecode + innerhalb der Methode generiert wird.
          +
        • +
        + + + +
          +
        • +

          isAbstract

          +
          public boolean isAbstract()
          +
          Gibt zurueck, ob ByteCode innerhabl der Methode + generiert wird.
          +
        • +
        + + + +
          +
        • +

          wandleRefTypeAttributes2GenericAttributes

          +
          public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> classParalist)
          +
          Description copied from class: Field
          +
          Wird im Zuge des ParserPostProcessing aufgerufen. + Der Parser kann den Unterschied zwischen einem RefType und einer GTV nicht erkennen. + Diese Methode ersetzt die RefTypes gegebenenfalls durch eine GTV.
          +
          +
          Overrides:
          +
          wandleRefTypeAttributes2GenericAttributes in class Field
          +
          +
        • +
        + + + +
          +
        • +

          set_Method_Name

          +
          public void set_Method_Name(java.lang.String string)
          +
        • +
        + + + + + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation()
          +
          +
          Returns:
          +
          die TypInformationen der Statements dieser Methode.
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + +
          +
        • +

          setType

          +
          public void setType(Type t)
          +
          +
          Specified by:
          +
          setType in interface Typeable
          +
          Overrides:
          +
          setType in class Field
          +
          Parameters:
          +
          t - Der Typ der Typable-Expression/Statement
          +
          +
        • +
        + + + +
          +
        • +

          getType

          +
          public Type getType()
          +
          Der Typ einer Methode ist ihr Returntype
          +
          +
          Specified by:
          +
          getType in interface Typeable
          +
          Overrides:
          +
          getType in class Field
          +
          +
        • +
        + + + +
          +
        • +

          createEmptyMethod

          +
          public static Method createEmptyMethod(java.lang.String withSignature,
          +                                       Class parent)
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class SyntaxTreeNode
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ParameterList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ParameterList.html new file mode 100644 index 00000000..7eaff319 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/ParameterList.html @@ -0,0 +1,516 @@ + + + + + +ParameterList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class ParameterList

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ParameterList

          +
          public ParameterList()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_AddParameter

          +
          public void set_AddParameter(FormalParameter fp)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getParameterCount

          +
          public int getParameterCount()
          +
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Die Anzahl der Parameter
          +
          +
        • +
        + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation()
          +
          +
          Returns:
          +
          Die Typinformationen der Parameter in der Parameterliste
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + + + + + +
          +
        • +

          iterator

          +
          public java.util.Iterator<FormalParameter> iterator()
          +
          +
          Specified by:
          +
          iterator in interface java.lang.Iterable<FormalParameter>
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SourceFile.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SourceFile.html new file mode 100644 index 00000000..64a776e5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SourceFile.html @@ -0,0 +1,972 @@ + + + + + +SourceFile + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class SourceFile

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          LOAD_BASIC_ASSUMPTIONS_FROM_JRE

          +
          private static final boolean LOAD_BASIC_ASSUMPTIONS_FROM_JRE
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          READ_OBJECT_SUPERCLASSES_FROM_JRE

          +
          public static final boolean READ_OBJECT_SUPERCLASSES_FROM_JRE
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          READ_BASE_TYPE_SUPERCLASSES_FROM_JRE

          +
          private static final boolean READ_BASE_TYPE_SUPERCLASSES_FROM_JRE
          +
          Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert + durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen. D.h. + Integer hat bspw. nicht die Superklasse Number sondern OBJECT. + Dies verursacht bei den Int-Operationen ein Problem + (+,-,*,/,<,>,...)
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          READ_IMPORTED_SUPERCLASSES_FROM_JRE

          +
          private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          codegenlog

          +
          protected static Logger codegenlog
          +
        • +
        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        + + + +
          +
        • +

          pkgName

          +
          private UsedId pkgName
          +
        • +
        + + + +
          +
        • +

          KlassenVektor

          +
          public Menge<Class> KlassenVektor
          +
        • +
        + + + + + + + +
          +
        • +

          imports

          +
          private ImportDeclarations imports
          +
          HOTI 4.5.06 + Beinhaltet alle Imports des aktuell geparsten Files + in Form einer UsedId
          +
        • +
        + + + +
          +
        • +

          baseTypeTranslationTable

          +
          private java.util.Hashtable<java.lang.String,java.lang.String> baseTypeTranslationTable
          +
          Table zum Übersetzen der nicht implementierten Base-Types: + Überall im Compiler wird statt bspw. int Integer verwendet + d.h. 1+2 liefert ein Integer + Deshalb benötigen wir hier eine Tabelle, mit der man die von + der JRE gelieferten Base-Typen (int,char, etc) und die Objekt- + Typen umwandeln können
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SourceFile

          +
          public SourceFile()
          +
          Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. + SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar.
          +
        • +
        + + + +
          +
        • +

          SourceFile

          +
          public SourceFile(Menge<Class> classDefinitions)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addElement

          +
          public void addElement(AClassOrInterface e)
          +
          Fuegt ein neues Element (Interface oder Klasse) hinzu.
          +
          +
          Parameters:
          +
          c -
          +
          +
        • +
        + + + +
          +
        • +

          createPairFromClassAndSuperclass

          +
          private Pair createPairFromClassAndSuperclass(Class baseClass,
          +                                              Type superclass,
          +                                              Menge classParaOrg,
          +                                              Menge superclassParaOrg,
          +                                              TypeAssumptions ass)
          +
          Erstellt ein Typ-Paar, welches im 1. Durchlauf in die Menge der Finite Closure + aufgenommen wird Input: Klassenname, Name der Superklasse, ParameterDerKlasse, + Parameter der Superklasse
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          makeFC

          +
          public FC_TTO makeFC(TypeAssumptions ass)
          +
          Erstellt die Finite Closure
          +
          +
          Returns:
          +
          FC_TTO-Object, welches die Finite Closure repräsentiert
          +
          +
        • +
        + + + +
          +
        • +

          getPublicFieldAssumptions

          +
          public TypeAssumptions getPublicFieldAssumptions()
          +
        • +
        + + + +
          +
        • +

          typeReconstruction

          +
          public Menge<TypeinferenceResultSet> typeReconstruction(TypeAssumptions globalAssumptions)
          +                                                 throws CTypeReconstructionException
          +
          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. + Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als + Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen + Typkombinationen f�r alle Klassen zusammen. +
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Liste aller m�glichen Typkombinationen
          +
          Throws:
          +
          CTypeReconstructionException - Wenn was schief l�uft
          +
          +
        • +
        + + + +
          +
        • +

          makeBasicAssumptionsFromJRE

          +
          private TypeAssumptions makeBasicAssumptionsFromJRE(Menge<UsedId> imports,
          +                                                    boolean withSubtypes)
          +
          Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen.
          +
          +
          Parameters:
          +
          imports -
          +
          withSuptypes - - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen.
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getSuperClassOfJREClass

          +
          private Class getSuperClassOfJREClass(java.lang.Class<?> x,
          +                                      TypeAssumptions ass)
          +
        • +
        + + + +
          +
        • +

          isBaseType

          +
          private boolean isBaseType(java.lang.String type)
          +
        • +
        + + + +
          +
        • +

          containsString

          +
          private boolean containsString(Menge<UsedId> searchMenge,
          +                               java.lang.String searchString)
          +
        • +
        + + + +
          +
        • +

          createTypeFromJavaGenericType

          +
          private Type createTypeFromJavaGenericType(java.lang.reflect.Type type,
          +                                           java.lang.Class<?> cl,
          +                                           java.util.Hashtable<java.lang.String,GenericTypeVar> jreSpiderRegistry,
          +                                           Class parentClass)
          +
        • +
        + + + +
          +
        • +

          makeBasicAssumptions

          +
          private TypeAssumptions makeBasicAssumptions()
          +
          Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen. +
          Achtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes + ersetzt werden.
          + Author: J�rg B�uerle
          +
          +
          Returns:
          +
          A priori Typinformationen
          +
          Throws:
          +
          java.lang.ClassNotFoundException
          +
          +
        • +
        + + + + + + + +
          +
        • +

          removeBasicAssumptions

          +
          private void removeBasicAssumptions()
          +
          L�scht die Anfangsinformation wieder aus dem Klassenvektor +
          Author: J�rg B�uerle
          +
        • +
        + + + +
          +
        • +

          getPackageName

          +
          public UsedId getPackageName()
          +
          Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars + dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen + in der + Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          res - / + /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){ + Iterator it = this.getClassIterator(); + while(it.hasNext()){ + Class cl = it.next(); + res.addClassName(cl.get_classname()); + Menge genericsList = new Menge(); + + for(int i =0; i +
          +
        • +
        + + + +
          +
        • +

          setPackageName

          +
          public void setPackageName(UsedId pkgName)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getClassIterator

          +
          public java.util.Iterator<Class> getClassIterator()
          +
        • +
        + + + +
          +
        • +

          getInterfaceIterator

          +
          public java.util.Iterator<Interface> getInterfaceIterator()
          +
        • +
        + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          setFileName

          +
          @Deprecated
          +public void setFileName(java.lang.String filename)
          +
          Deprecated. 
          +
          SourceFile stellt eine geparste Java-Datei dar. Mit dieser Methode wird der Name der eingelesenen Datei gesetzt.
          +
          +
          Parameters:
          +
          filename - - Der Name der eingelesenen JavaDatei
          +
          +
        • +
        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
        • +
        + + + +
          +
        • +

          getVariableLength

          +
          public int getVariableLength()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.html new file mode 100644 index 00000000..5ac5d288 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.html @@ -0,0 +1,468 @@ + + + + + +SyntaxTreeNode + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree
    +

    Class SyntaxTreeNode

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SyntaxTreeNode

          +
          public SyntaxTreeNode()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getParentClass

          +
          public Class getParentClass()
          +
        • +
        + + + +
          +
        • +

          getDescription

          +
          public java.lang.String getDescription()
          +
          Eine Beschreibung/Name des SyntaxTree-Nodes
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object object)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          addTypeInsertPoints

          +
          public void addTypeInsertPoints(TypeInsertSet insertSet,
          +                                ResultSet result)
          +
          Methode zur Generierung der TypeInsertPoints
          +
          +
          Parameters:
          +
          insertSet - - Generierte InsertPoints werden dem insertSet angefügt
          +
          result - - Das ResultSet auf dessen Basis die InsertPoints generiert werden
          +
          +
        • +
        + + + +
          +
        • +

          seesType

          +
          public boolean seesType(Type tA2)
          +
        • +
        + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/BasicAssumptionClass.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/BasicAssumptionClass.html new file mode 100644 index 00000000..8d2b20e8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/BasicAssumptionClass.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.BasicAssumptionClass + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.BasicAssumptionClass

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.BasicAssumptionClass
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Class.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Class.html new file mode 100644 index 00000000..293eb433 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Class.html @@ -0,0 +1,532 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Class + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Class

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassBody.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassBody.html new file mode 100644 index 00000000..c9562d15 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassBody.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.ClassBody + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.ClassBody

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassHelper.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassHelper.html new file mode 100644 index 00000000..98f17e71 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ClassHelper.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.ClassHelper + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.ClassHelper

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.ClassHelper
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constant.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constant.html new file mode 100644 index 00000000..eaf1c418 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constant.html @@ -0,0 +1,190 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Constant + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Constant

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constructor.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constructor.html new file mode 100644 index 00000000..e1ef537f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Constructor.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Constructor + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Constructor

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.Constructor
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ExceptionList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ExceptionList.html new file mode 100644 index 00000000..c09451d0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ExceptionList.html @@ -0,0 +1,190 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.ExceptionList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.ExceptionList

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Field.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Field.html new file mode 100644 index 00000000..945a78cf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Field.html @@ -0,0 +1,297 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Field + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Field

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FieldDeclaration.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FieldDeclaration.html new file mode 100644 index 00000000..212f5f55 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FieldDeclaration.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.FieldDeclaration + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.FieldDeclaration

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.FieldDeclaration
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FormalParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FormalParameter.html new file mode 100644 index 00000000..a4bab7e3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/FormalParameter.html @@ -0,0 +1,262 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.FormalParameter + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.FormalParameter

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GTVDeclarationContext.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GTVDeclarationContext.html new file mode 100644 index 00000000..f465fed8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GTVDeclarationContext.html @@ -0,0 +1,268 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.GTVDeclarationContext + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.GTVDeclarationContext

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Generic.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Generic.html new file mode 100644 index 00000000..c546af5c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Generic.html @@ -0,0 +1,229 @@ + + + + + +Uses of Interface de.dhbwstuttgart.syntaxtree.Generic + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.syntaxtree.Generic

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GenericDeclarationList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GenericDeclarationList.html new file mode 100644 index 00000000..65ce5c91 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/GenericDeclarationList.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.GenericDeclarationList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.GenericDeclarationList

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ImportDeclarations.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ImportDeclarations.html new file mode 100644 index 00000000..fc24c502 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ImportDeclarations.html @@ -0,0 +1,198 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.ImportDeclarations + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.ImportDeclarations

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Interface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Interface.html new file mode 100644 index 00000000..a5e354ec --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Interface.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Interface + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Interface

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/InterfaceBody.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/InterfaceBody.html new file mode 100644 index 00000000..a5077161 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/InterfaceBody.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.InterfaceBody + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.InterfaceBody

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Method.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Method.html new file mode 100644 index 00000000..d3b1c14e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/Method.html @@ -0,0 +1,327 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.Method + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.Method

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ParameterList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ParameterList.html new file mode 100644 index 00000000..a6181949 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/ParameterList.html @@ -0,0 +1,241 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.ParameterList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.ParameterList

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SourceFile.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SourceFile.html new file mode 100644 index 00000000..486c59dd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SourceFile.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.SourceFile + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.SourceFile

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SyntaxTreeNode.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SyntaxTreeNode.html new file mode 100644 index 00000000..5cd82bb1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/class-use/SyntaxTreeNode.html @@ -0,0 +1,1434 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.SyntaxTreeNode

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.html new file mode 100644 index 00000000..721308ee --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.html @@ -0,0 +1,399 @@ + + + + + +ConstructorCall + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.misc
    +

    Class ConstructorCall

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset, Typeable
      +
      +
      +
      +
      public class ConstructorCall
      +extends MethodCall
      +
      Diese Klasse stellt den this()-Aufruf dar.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConstructorCall

          +
          public ConstructorCall(Receiver receiver,
          +                       java.lang.String methodName,
          +                       ArgumentList argumentList,
          +                       int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          overloading

          +
          public ConstraintsSet overloading(TypeAssumptions assumptions)
          +
          Description copied from class: MethodCall
          +
          Erstellt die Constraints für den eigentlichen Methodenaufruf. + Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet.
          +
          +
          Overrides:
          +
          overloading in class MethodCall
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/DeclId.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/DeclId.html new file mode 100644 index 00000000..fbf11034 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/DeclId.html @@ -0,0 +1,587 @@ + + + + + +DeclId + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.misc
    +

    Class DeclId

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.misc.DeclId
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class DeclId
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          modifiers

          +
          public Modifiers modifiers
          +
        • +
        + + + +
          +
        • +

          name

          +
          public java.lang.String name
          +
        • +
        + + + + + + + +
          +
        • +

          paratyp

          +
          public Menge paratyp
          +
        • +
        + + + +
          +
        • +

          m_LineNumber

          +
          private int m_LineNumber
          +
        • +
        + + + +
          +
        • +

          m_Offset

          +
          private int m_Offset
          +
        • +
        + + + +
          +
        • +

          codegenlog

          +
          protected static Logger codegenlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DeclId

          +
          public DeclId()
          +
        • +
        + + + +
          +
        • +

          DeclId

          +
          public DeclId(java.lang.String name)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_Paratyp

          +
          public void set_Paratyp(Menge p)
          +
        • +
        + + + +
          +
        • +

          get_Paratyp

          +
          public Menge get_Paratyp()
          +
        • +
        + + + +
          +
        • +

          set_Name

          +
          public void set_Name(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          set_Wert

          +
          public void set_Wert(ExprStmt w)
          +
        • +
        + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
        • +
        + + + +
          +
        • +

          get_Wert

          +
          public ExprStmt get_Wert()
          +
        • +
        + + + +
          +
        • +

          set_Modifiers

          +
          public void set_Modifiers(Modifiers mod)
          +
        • +
        + + + +
          +
        • +

          get_Modifiers

          +
          public Modifiers get_Modifiers()
          +
        • +
        + + + +
          +
        • +

          get_access_flags

          +
          public short get_access_flags()
          +
        • +
        + + + +
          +
        • +

          set_ListType

          +
          public void set_ListType(Type t)
          +
        • +
        + + + +
          +
        • +

          getLineNumber

          +
          public int getLineNumber()
          +
        • +
        + + + +
          +
        • +

          setLineNumber

          +
          public void setLineNumber(int lineNumber)
          +
        • +
        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
        • +
        + + + +
          +
        • +

          setOffset

          +
          public void setOffset(int Offset)
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/Status.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/Status.html new file mode 100644 index 00000000..47042246 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/Status.html @@ -0,0 +1,311 @@ + + + + + +Status + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.misc
    +

    Class Status

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.misc.Status
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Direct Known Subclasses:
      +
      UserDef
      +
      +
      +
      +
      public abstract class Status
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected UserDefuserdef 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Status() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidset_UserDef(UserDef userdef) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          userdef

          +
          protected UserDef userdef
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Status

          +
          public Status()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_UserDef

          +
          public void set_UserDef(UserDef userdef)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UsedId.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UsedId.html new file mode 100644 index 00000000..bc08d88b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UsedId.html @@ -0,0 +1,656 @@ + + + + + +UsedId + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.misc
    +

    Class UsedId

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.misc.UsedId
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          name

          +
          public Menge<java.lang.String> name
          +
        • +
        + + + +
          +
        • +

          typen

          +
          private Menge typen
          +
        • +
        + + + +
          +
        • +

          paralist

          +
          private Menge<Type> paralist
          +
        • +
        + + + +
          +
        • +

          vParaOrg

          +
          public Menge<Type> vParaOrg
          +
        • +
        + + + +
          +
        • +

          m_Offset

          +
          private int m_Offset
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UsedId

          +
          public UsedId(int offset)
          +
        • +
        + + + +
          +
        • +

          UsedId

          +
          public UsedId(java.lang.String name,
          +              int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + +
          +
        • +

          setOffset

          +
          public void setOffset(int Offset)
          +
        • +
        + + + +
          +
        • +

          set_Name

          +
          public void set_Name(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          get_Name

          +
          public Menge get_Name()
          +
        • +
        + + + +
          +
        • +

          get_Name_1Element

          +
          public java.lang.String get_Name_1Element()
          +
        • +
        + + + +
          +
        • +

          set_Typen

          +
          public void set_Typen(Menge t)
          +
        • +
        + + + +
          +
        • +

          set_ParaList

          +
          public void set_ParaList(Menge<Type> pl)
          +
        • +
        + + + +
          +
        • +

          get_RealParaList

          +
          public Menge<Type> get_RealParaList()
          +
        • +
        + + + +
          +
        • +

          get_ParaList

          +
          public Menge<Type> get_ParaList()
          +
        • +
        + + + +
          +
        • +

          get_vParaOrg

          +
          public Menge<Type> get_vParaOrg()
          +
        • +
        + + + +
          +
        • +

          get_Typen

          +
          public Menge get_Typen()
          +
        • +
        + + + +
          +
        • +

          get_codegen_UsedId

          +
          public java.lang.String get_codegen_UsedId()
          +
        • +
        + + + +
          +
        • +

          removeLast

          +
          public void removeLast()
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getQualifiedName

          +
          public JavaClassName getQualifiedName()
          +
        • +
        + + + +
          +
        • +

          createFromQualifiedName

          +
          public static UsedId createFromQualifiedName(java.lang.String qualifiedName,
          +                                             int offset)
          +
        • +
        + + + +
          +
        • +

          hasWildCard

          +
          public boolean hasWildCard()
          +
        • +
        + + + +
          +
        • +

          getPackageName

          +
          public UsedId getPackageName()
          +
        • +
        + + + +
          +
        • +

          getSimpleName

          +
          public java.lang.String getSimpleName()
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UserDef.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UserDef.html new file mode 100644 index 00000000..00f5b600 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/UserDef.html @@ -0,0 +1,264 @@ + + + + + +UserDef + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.misc
    +

    Class UserDef

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class UserDef
      +extends Status
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class de.dhbwstuttgart.syntaxtree.misc.Status

          +userdef
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        UserDef() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UserDef

          +
          public UserDef()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/ConstructorCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/ConstructorCall.html new file mode 100644 index 00000000..8b57f0cf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/ConstructorCall.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.misc.ConstructorCall + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.misc.ConstructorCall

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.misc.ConstructorCall
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/DeclId.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/DeclId.html new file mode 100644 index 00000000..7238e356 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/DeclId.html @@ -0,0 +1,309 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.misc.DeclId + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.misc.DeclId

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/Status.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/Status.html new file mode 100644 index 00000000..2d6adb49 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/Status.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.misc.Status + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.misc.Status

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UsedId.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UsedId.html new file mode 100644 index 00000000..41b957c0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UsedId.html @@ -0,0 +1,540 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.misc.UsedId + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.misc.UsedId

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UserDef.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UserDef.html new file mode 100644 index 00000000..077f8ed5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/class-use/UserDef.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.misc.UserDef + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.misc.UserDef

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-frame.html new file mode 100644 index 00000000..58beb892 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-frame.html @@ -0,0 +1,24 @@ + + + + + +de.dhbwstuttgart.syntaxtree.misc + + + + + +

    de.dhbwstuttgart.syntaxtree.misc

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-summary.html new file mode 100644 index 00000000..4c7d02ee --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-summary.html @@ -0,0 +1,160 @@ + + + + + +de.dhbwstuttgart.syntaxtree.misc + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree.misc

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-tree.html new file mode 100644 index 00000000..07cd9ce2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-tree.html @@ -0,0 +1,164 @@ + + + + + +de.dhbwstuttgart.syntaxtree.misc Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree.misc

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object + +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-use.html new file mode 100644 index 00000000..5af7f12d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/misc/package-use.html @@ -0,0 +1,245 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree.misc + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree.misc

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Abstract.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Abstract.html new file mode 100644 index 00000000..a5b4e711 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Abstract.html @@ -0,0 +1,304 @@ + + + + + +Abstract + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Abstract

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Abstract
      +extends Modifier
      +
      Stellt den Modifier Abstract dar.
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Abstract() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Abstract

          +
          public Abstract()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Final.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Final.html new file mode 100644 index 00000000..5380502f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Final.html @@ -0,0 +1,304 @@ + + + + + +Final + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Final

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Final
      +extends Modifier
      +
      Stellt den Modifier Final dar.
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Final() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Final

          +
          public Final()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/InterfaceModifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/InterfaceModifier.html new file mode 100644 index 00000000..5ef8467f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/InterfaceModifier.html @@ -0,0 +1,307 @@ + + + + + +InterfaceModifier + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class InterfaceModifier

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class InterfaceModifier
      +extends Modifier
      +
      +
      Author:
      +
      Daniel
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        InterfaceModifier() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InterfaceModifier

          +
          public InterfaceModifier()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifier.html new file mode 100644 index 00000000..094ddf5b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifier.html @@ -0,0 +1,293 @@ + + + + + +Modifier + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Modifier

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.modifier.Modifier
      • +
      +
    • +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Modifier() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethod and Description
        abstract shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        abstract JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Modifier

          +
          public Modifier()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getBitmask

          +
          public abstract short getBitmask()
          +
          Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.html new file mode 100644 index 00000000..693832f6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.html @@ -0,0 +1,416 @@ + + + + + +Modifiers + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Modifiers

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.modifier.Modifiers
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Modifiers
      +extends java.lang.Object
      +
      Die Klasse beinhaltet die Liste der Access-Modifier fuer eine Klasse, + Methode usw.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Modifiers

          +
          public Modifiers()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setModifier

          +
          public void setModifier(Menge<Modifier> modifier)
          +
        • +
        + + + +
          +
        • +

          addModifier

          +
          public void addModifier(Modifier mod)
          +
          Fuegt den angegebenen Modifier zur Auflistung hinzu.
          +
        • +
        + + + +
          +
        • +

          includesModifier

          +
          public boolean includesModifier(Modifier mod)
          +
          Gibt zurueck, ob der angegebene Modifier enthalten ist.
          +
        • +
        + + + +
          +
        • +

          ensureAbstract

          +
          public void ensureAbstract()
          +
          Stellt sicher, dass ABSTRACT in der Modifierliste + vorkommt. Wird u.a. bei Interfaces benoetigt.
          +
        • +
        + + + +
          +
        • +

          ensurePublic

          +
          public void ensurePublic()
          +
        • +
        + + + +
          +
        • +

          calculate_access_flags

          +
          public short calculate_access_flags()
          +
          Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier + zurueck.
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Private.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Private.html new file mode 100644 index 00000000..ffa78eaa --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Private.html @@ -0,0 +1,303 @@ + + + + + +Private + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Private

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Private
      +extends Modifier
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Private() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Private

          +
          public Private()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Protected.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Protected.html new file mode 100644 index 00000000..6c5057f8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Protected.html @@ -0,0 +1,303 @@ + + + + + +Protected + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Protected

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Protected
      +extends Modifier
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Protected() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Protected

          +
          public Protected()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Public.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Public.html new file mode 100644 index 00000000..93521fee --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Public.html @@ -0,0 +1,303 @@ + + + + + +Public + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Public

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Public
      +extends Modifier
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Public() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Public

          +
          public Public()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Static.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Static.html new file mode 100644 index 00000000..c5e60700 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Static.html @@ -0,0 +1,303 @@ + + + + + +Static + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Static

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Static
      +extends Modifier
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Static() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Static

          +
          public Static()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Super.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Super.html new file mode 100644 index 00000000..594425f8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/Super.html @@ -0,0 +1,307 @@ + + + + + +Super + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.modifier
    +

    Class Super

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class Super
      +extends Modifier
      +
      +
      Author:
      +
      Daniel
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Super() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        shortgetBitmask() +
        Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
        +
        JavaCodeResultprintJavaCode(ResultSet resultSet) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Super

          +
          public Super()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Abstract.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Abstract.html new file mode 100644 index 00000000..9fc6612d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Abstract.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Abstract + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Abstract

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Abstract
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Final.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Final.html new file mode 100644 index 00000000..01f84a3b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Final.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Final + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Final

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Final
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/InterfaceModifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/InterfaceModifier.html new file mode 100644 index 00000000..46e6f847 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/InterfaceModifier.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifier.html new file mode 100644 index 00000000..3b2dc1df --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifier.html @@ -0,0 +1,256 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Modifier + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Modifier

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifiers.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifiers.html new file mode 100644 index 00000000..24013992 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Modifiers.html @@ -0,0 +1,338 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Modifiers + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Modifiers

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Private.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Private.html new file mode 100644 index 00000000..27eabfcc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Private.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Private + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Private

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Private
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Protected.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Protected.html new file mode 100644 index 00000000..c58bdc9f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Protected.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Protected + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Protected

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Protected
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Public.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Public.html new file mode 100644 index 00000000..6a1b45a2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Public.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Public + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Public

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Public
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Static.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Static.html new file mode 100644 index 00000000..a5a4c1f7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Static.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Static + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Static

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Static
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Super.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Super.html new file mode 100644 index 00000000..766a7a15 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/class-use/Super.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.modifier.Super + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.modifier.Super

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.modifier.Super
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-frame.html new file mode 100644 index 00000000..b396b6de --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-frame.html @@ -0,0 +1,29 @@ + + + + + +de.dhbwstuttgart.syntaxtree.modifier + + + + + +

    de.dhbwstuttgart.syntaxtree.modifier

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-summary.html new file mode 100644 index 00000000..0c831fd6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-summary.html @@ -0,0 +1,185 @@ + + + + + +de.dhbwstuttgart.syntaxtree.modifier + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree.modifier

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-tree.html new file mode 100644 index 00000000..3782db72 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-tree.html @@ -0,0 +1,149 @@ + + + + + +de.dhbwstuttgart.syntaxtree.modifier Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree.modifier

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • de.dhbwstuttgart.syntaxtree.modifier.Modifier +
          +
        • de.dhbwstuttgart.syntaxtree.modifier.Abstract
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Final
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Private
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Protected
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Public
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Static
        • +
        • de.dhbwstuttgart.syntaxtree.modifier.Super
        • +
        +
      • +
      • de.dhbwstuttgart.syntaxtree.modifier.Modifiers
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-use.html new file mode 100644 index 00000000..dfebb257 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/modifier/package-use.html @@ -0,0 +1,201 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree.modifier + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree.modifier

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AddOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AddOp.html new file mode 100644 index 00000000..a88a59e7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AddOp.html @@ -0,0 +1,348 @@ + + + + + +AddOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class AddOp

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AndOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AndOp.html new file mode 100644 index 00000000..98470924 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/AndOp.html @@ -0,0 +1,294 @@ + + + + + +AndOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class AndOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AndOp

          +
          public AndOp(int offset,
          +             int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/DivideOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/DivideOp.html new file mode 100644 index 00000000..ca2f9154 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/DivideOp.html @@ -0,0 +1,294 @@ + + + + + +DivideOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class DivideOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DivideOp

          +
          public DivideOp(int offset,
          +                int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/EqualOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/EqualOp.html new file mode 100644 index 00000000..acd476e3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/EqualOp.html @@ -0,0 +1,294 @@ + + + + + +EqualOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class EqualOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          EqualOp

          +
          public EqualOp(int offset,
          +               int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.html new file mode 100644 index 00000000..500dc6cc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterEquOp.html @@ -0,0 +1,294 @@ + + + + + +GreaterEquOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class GreaterEquOp

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      +
      public class GreaterEquOp
      +extends RelOp
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GreaterEquOp

          +
          public GreaterEquOp(int offset,
          +                    int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.html new file mode 100644 index 00000000..01130367 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/GreaterOp.html @@ -0,0 +1,294 @@ + + + + + +GreaterOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class GreaterOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GreaterOp

          +
          public GreaterOp(int offset,
          +                 int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.html new file mode 100644 index 00000000..6644656c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessEquOp.html @@ -0,0 +1,294 @@ + + + + + +LessEquOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class LessEquOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LessEquOp

          +
          public LessEquOp(int offset,
          +                 int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessOp.html new file mode 100644 index 00000000..49030288 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LessOp.html @@ -0,0 +1,294 @@ + + + + + +LessOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class LessOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LessOp

          +
          public LessOp(int offset,
          +              int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LogOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LogOp.html new file mode 100644 index 00000000..c1412733 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/LogOp.html @@ -0,0 +1,348 @@ + + + + + +LogOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class LogOp

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MinusOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MinusOp.html new file mode 100644 index 00000000..fe4a855e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MinusOp.html @@ -0,0 +1,294 @@ + + + + + +MinusOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class MinusOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MinusOp

          +
          public MinusOp(int offset,
          +               int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.html new file mode 100644 index 00000000..c208c2b3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/ModuloOp.html @@ -0,0 +1,294 @@ + + + + + +ModuloOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class ModuloOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ModuloOp

          +
          public ModuloOp(int offset,
          +                int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MulOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MulOp.html new file mode 100644 index 00000000..eeaf75a0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/MulOp.html @@ -0,0 +1,348 @@ + + + + + +MulOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class MulOp

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.html new file mode 100644 index 00000000..76dc14c8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/NotEqualOp.html @@ -0,0 +1,294 @@ + + + + + +NotEqualOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class NotEqualOp

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      +
      public class NotEqualOp
      +extends RelOp
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          NotEqualOp

          +
          public NotEqualOp(int offset,
          +                  int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/Operator.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/Operator.html new file mode 100644 index 00000000..54197838 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/Operator.html @@ -0,0 +1,417 @@ + + + + + +Operator + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class Operator

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          offset

          +
          private int offset
          +
        • +
        + + + +
          +
        • +

          variableLength

          +
          private int variableLength
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Operator

          +
          public Operator(int offset,
          +                int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
        • +
        + + + +
          +
        • +

          getVariableLength

          +
          public int getVariableLength()
          +
        • +
        + + + +
          +
        • +

          getOperatorTypes

          +
          protected abstract java.util.Hashtable<RefType,RefType> getOperatorTypes()
          +
          +
          See Also:
          +
          Pattern: Template Method
          +
          +
        • +
        + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/OrOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/OrOp.html new file mode 100644 index 00000000..a8ee7472 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/OrOp.html @@ -0,0 +1,294 @@ + + + + + +OrOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class OrOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OrOp

          +
          public OrOp(int offset,
          +            int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/PlusOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/PlusOp.html new file mode 100644 index 00000000..e102d84c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/PlusOp.html @@ -0,0 +1,294 @@ + + + + + +PlusOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class PlusOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PlusOp

          +
          public PlusOp(int offset,
          +              int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/RelOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/RelOp.html new file mode 100644 index 00000000..7d83bfb4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/RelOp.html @@ -0,0 +1,348 @@ + + + + + +RelOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class RelOp

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/TimesOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/TimesOp.html new file mode 100644 index 00000000..2663929b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/TimesOp.html @@ -0,0 +1,294 @@ + + + + + +TimesOp + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.operator
    +

    Class TimesOp

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TimesOp

          +
          public TimesOp(int offset,
          +               int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AddOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AddOp.html new file mode 100644 index 00000000..f950bdd5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AddOp.html @@ -0,0 +1,168 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.AddOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.AddOp

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AndOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AndOp.html new file mode 100644 index 00000000..94333c00 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/AndOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.AndOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.AndOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.AndOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/DivideOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/DivideOp.html new file mode 100644 index 00000000..eda49f09 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/DivideOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.DivideOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.DivideOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.DivideOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/EqualOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/EqualOp.html new file mode 100644 index 00000000..12863428 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/EqualOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.EqualOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.EqualOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.EqualOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterEquOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterEquOp.html new file mode 100644 index 00000000..80c10fa4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterEquOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.GreaterEquOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.GreaterEquOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.GreaterEquOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterOp.html new file mode 100644 index 00000000..9306773c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/GreaterOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.GreaterOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.GreaterOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.GreaterOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessEquOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessEquOp.html new file mode 100644 index 00000000..24ff2185 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessEquOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.LessEquOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.LessEquOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.LessEquOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessOp.html new file mode 100644 index 00000000..dbfd8f48 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LessOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.LessOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.LessOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.LessOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LogOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LogOp.html new file mode 100644 index 00000000..f998dc86 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/LogOp.html @@ -0,0 +1,168 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.LogOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.LogOp

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MinusOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MinusOp.html new file mode 100644 index 00000000..f0fc1d0b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MinusOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.MinusOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.MinusOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.MinusOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/ModuloOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/ModuloOp.html new file mode 100644 index 00000000..7a293543 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/ModuloOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.ModuloOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.ModuloOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.ModuloOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MulOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MulOp.html new file mode 100644 index 00000000..43156808 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/MulOp.html @@ -0,0 +1,172 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.MulOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.MulOp

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/NotEqualOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/NotEqualOp.html new file mode 100644 index 00000000..df8ade0d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/NotEqualOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.NotEqualOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.NotEqualOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.NotEqualOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/Operator.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/Operator.html new file mode 100644 index 00000000..6137b872 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/Operator.html @@ -0,0 +1,276 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.Operator + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.Operator

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/OrOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/OrOp.html new file mode 100644 index 00000000..31b0a5ac --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/OrOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.OrOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.OrOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.OrOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/PlusOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/PlusOp.html new file mode 100644 index 00000000..9f418758 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/PlusOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.PlusOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.PlusOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.PlusOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/RelOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/RelOp.html new file mode 100644 index 00000000..5167023a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/RelOp.html @@ -0,0 +1,184 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.RelOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.RelOp

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/TimesOp.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/TimesOp.html new file mode 100644 index 00000000..e75cecf4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/class-use/TimesOp.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.operator.TimesOp + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.operator.TimesOp

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.operator.TimesOp
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-frame.html new file mode 100644 index 00000000..a2fd24c3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-frame.html @@ -0,0 +1,37 @@ + + + + + +de.dhbwstuttgart.syntaxtree.operator + + + + + +

    de.dhbwstuttgart.syntaxtree.operator

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-summary.html new file mode 100644 index 00000000..124e0369 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-summary.html @@ -0,0 +1,210 @@ + + + + + +de.dhbwstuttgart.syntaxtree.operator + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree.operator

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-tree.html new file mode 100644 index 00000000..fe3ebe3a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-tree.html @@ -0,0 +1,173 @@ + + + + + +de.dhbwstuttgart.syntaxtree.operator Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree.operator

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • de.dhbwstuttgart.syntaxtree.SyntaxTreeNode (implements de.dhbwstuttgart.core.IItemWithOffset) +
          +
        • de.dhbwstuttgart.syntaxtree.operator.Operator +
            +
          • de.dhbwstuttgart.syntaxtree.operator.AddOp +
              +
            • de.dhbwstuttgart.syntaxtree.operator.MinusOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.PlusOp
            • +
            +
          • +
          • de.dhbwstuttgart.syntaxtree.operator.LogOp +
              +
            • de.dhbwstuttgart.syntaxtree.operator.AndOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.OrOp
            • +
            +
          • +
          • de.dhbwstuttgart.syntaxtree.operator.MulOp +
              +
            • de.dhbwstuttgart.syntaxtree.operator.DivideOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.ModuloOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.TimesOp
            • +
            +
          • +
          • de.dhbwstuttgart.syntaxtree.operator.RelOp +
              +
            • de.dhbwstuttgart.syntaxtree.operator.EqualOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.GreaterEquOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.GreaterOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.LessEquOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.LessOp
            • +
            • de.dhbwstuttgart.syntaxtree.operator.NotEqualOp
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-use.html new file mode 100644 index 00000000..0740101b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/operator/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree.operator + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree.operator

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-frame.html new file mode 100644 index 00000000..8fe82b12 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-frame.html @@ -0,0 +1,42 @@ + + + + + +de.dhbwstuttgart.syntaxtree + + + + + +

    de.dhbwstuttgart.syntaxtree

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-summary.html new file mode 100644 index 00000000..4f11c195 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-summary.html @@ -0,0 +1,253 @@ + + + + + +de.dhbwstuttgart.syntaxtree + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Generic +
      Wird von allen Klassen implementiert, welche generische Parameter halten können.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      BasicAssumptionClass 
      Class 
      ClassBody 
      ClassHelper 
      Constant +
      Enthaelt die Eigenschaften einer Konstante (Name, Typ, Modifier, Wert)
      +
      Constructor 
      ExceptionList 
      Field 
      FieldDeclaration +
      Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung + Beispiel: 'public Feld FeldVar = FeldWert;'
      +
      FormalParameter 
      GenericDeclarationList +
      Stellt eine Deklarations-Liste von Generischen Variablen dar.
      +
      GTVDeclarationContext +
      Beischreibt eine SyntaxTreeNode, welcher die Eigenschaft besitzt, + dass bei seiner Deklaration auch Generische Typvariablen deklariert wurden.
      +
      ImportDeclarations +
      HOTI 4.5.06 + Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) + Der Parser kann keine Generischen Typen darstellen, damit trotzdem + an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung...
      +
      Interface +
      Ein Interface ist eine abstrakte Klasse, erbt daher von Class
      +
      InterfaceBody +
      Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- + und Mehtodendefinitionen.
      +
      Method +
      Stellt eine Methode dar.
      +
      ParameterList 
      SourceFile 
      SyntaxTreeNode 
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-tree.html new file mode 100644 index 00000000..732bed7f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-tree.html @@ -0,0 +1,190 @@ + + + + + +de.dhbwstuttgart.syntaxtree Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    +
      +
    • de.dhbwstuttgart.syntaxtree.Generic
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-use.html new file mode 100644 index 00000000..8dfed61d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/package-use.html @@ -0,0 +1,480 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.html new file mode 100644 index 00000000..f5c3e463 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.html @@ -0,0 +1,439 @@ + + + + + +ArgumentList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class ArgumentList

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ArgumentList

          +
          public ArgumentList()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get_firstElement

          +
          public java.lang.Object get_firstElement()
          +
        • +
        + + + +
          +
        • +

          size

          +
          public int size()
          +
          +
          Returns:
          +
          Anzahl der Argumente in der ArgumentList
          +
          +
        • +
        + + + +
          +
        • +

          argumentAt

          +
          public Expr argumentAt(int n)
          +
          +
          Parameters:
          +
          n -
          +
          Returns:
          +
          Das Element (Expr) in der Argumentliste an der Stelle n
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
        • +
        + + + +
          +
        • +

          getVariableLength

          +
          public int getVariableLength()
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Assign.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Assign.html new file mode 100644 index 00000000..93e31a3e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Assign.html @@ -0,0 +1,572 @@ + + + + + +Assign + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Assign

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Binary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Binary.html new file mode 100644 index 00000000..0ecabaf2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Binary.html @@ -0,0 +1,588 @@ + + + + + +Binary + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Binary

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BinaryExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BinaryExpr.html new file mode 100644 index 00000000..3ae61a2b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BinaryExpr.html @@ -0,0 +1,331 @@ + + + + + +BinaryExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class BinaryExpr

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BinaryExpr

          +
          public BinaryExpr(int offset,
          +                  int variableLength)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Block.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Block.html new file mode 100644 index 00000000..76c323e8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Block.html @@ -0,0 +1,567 @@ + + + + + +Block + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Block

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.html new file mode 100644 index 00000000..cd82cfe1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.html @@ -0,0 +1,499 @@ + + + + + +BoolLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class BoolLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CastExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CastExpr.html new file mode 100644 index 00000000..29d8855a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CastExpr.html @@ -0,0 +1,531 @@ + + + + + +CastExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class CastExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.html new file mode 100644 index 00000000..374bfc7e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.html @@ -0,0 +1,499 @@ + + + + + +CharLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class CharLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.html new file mode 100644 index 00000000..48c2985c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.html @@ -0,0 +1,533 @@ + + + + + +DoubleLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class DoubleLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.html new file mode 100644 index 00000000..5d7c896d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.html @@ -0,0 +1,419 @@ + + + + + +EmptyStmt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class EmptyStmt

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Expr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Expr.html new file mode 100644 index 00000000..b0f21424 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Expr.html @@ -0,0 +1,469 @@ + + + + + +Expr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Expr

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Expr

          +
          public Expr(int offset,
          +            int variableLength)
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.html new file mode 100644 index 00000000..a512baf2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.html @@ -0,0 +1,374 @@ + + + + + +ExprStmt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class ExprStmt

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ExprStmt

          +
          public ExprStmt(int offset,
          +                int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTypeName

          +
          public java.lang.String getTypeName()
          +
        • +
        + + + +
          +
        • +

          getTypeLineNumber

          +
          public int getTypeLineNumber()
          +

          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.html new file mode 100644 index 00000000..ca837e20 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.html @@ -0,0 +1,533 @@ + + + + + +FloatLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class FloatLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ForStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ForStmt.html new file mode 100644 index 00000000..52fa7758 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ForStmt.html @@ -0,0 +1,596 @@ + + + + + +ForStmt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class ForStmt

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          head_Initializer_1

          +
          private Expr head_Initializer_1
          +
        • +
        + + + +
          +
        • +

          head_Condition_1

          +
          private Expr head_Condition_1
          +
        • +
        + + + +
          +
        • +

          head_Loop_expr_1

          +
          private Expr head_Loop_expr_1
          +
        • +
        + + + +
          +
        • +

          head_Initializer

          +
          private Expr head_Initializer
          +
        • +
        + + + +
          +
        • +

          head_Condition

          +
          private Expr head_Condition
          +
        • +
        + + + +
          +
        • +

          head_Loop_expr

          +
          private Expr head_Loop_expr
          +
        • +
        + + + +
          +
        • +

          body_Loop_block

          +
          private Statement body_Loop_block
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ForStmt

          +
          public ForStmt(int offset,
          +               int variableLength)
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IfStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IfStmt.html new file mode 100644 index 00000000..c6890df6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IfStmt.html @@ -0,0 +1,512 @@ + + + + + +IfStmt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class IfStmt

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstVar.html new file mode 100644 index 00000000..b25fafa0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstVar.html @@ -0,0 +1,598 @@ + + + + + +InstVar + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class InstVar

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          expr

          +
          private Expr expr
          +
        • +
        + + + +
          +
        • +

          usedid

          +
          private UsedId usedid
          +
        • +
        + + + +
          +
        • +

          type

          +
          protected java.lang.String type
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InstVar

          +
          public InstVar(Expr e,
          +               java.lang.String n,
          +               int offset)
          +
        • +
        + + + +
          +
        • +

          InstVar

          +
          public InstVar(java.lang.String n,
          +               java.lang.String t,
          +               int offset)
          +
        • +
        + + + +
          +
        • +

          InstVar

          +
          public InstVar(UsedId ui,
          +               int offset,
          +               int variableLength)
          +
          macht aus einem UsedId mit einem Menge von Strings eine InstVar +
          Author: Martin Pl�micke PL 05-08-17
          +
          +
          Parameters:
          +
          ui -
          +
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.html new file mode 100644 index 00000000..8e1347c9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.html @@ -0,0 +1,520 @@ + + + + + +InstanceOf + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class InstanceOf

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.html new file mode 100644 index 00000000..e7c975f1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.html @@ -0,0 +1,533 @@ + + + + + +IntLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class IntLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.html new file mode 100644 index 00000000..f8f5b7aa --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.html @@ -0,0 +1,598 @@ + + + + + +LambdaExpression + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class LambdaExpression

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset, Typeable
      +
      +
      +
      +
      public class LambdaExpression
      +extends Expr
      +
      +
      Author:
      +
      A10023 - Andreas Stadelmeier + Momentan erweitert LambdaExpression noch Expr und erbt dadurch auch von ExprStatement ist also auch ein Statement + + LambdaExpression Aufbau: + ( ParameterList ) -> { method_body };
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaExpression

          +
          public LambdaExpression(int offset,
          +                        int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBody

          +
          public void setBody(Block block)
          +
        • +
        + + + +
          +
        • +

          setExpr

          +
          public void setExpr(Expr expression)
          +
        • +
        + + + +
          +
        • +

          setParameterList

          +
          public void setParameterList(ParameterList params)
          +
        • +
        + + + + + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
          +
          Specified by:
          +
          get_Name in class Expr
          +
          +
        • +
        + + + +
          +
        • +

          TYPEExpr

          +
          public ConstraintsSet TYPEExpr(TypeAssumptions assumptions)
          +
          Spezifikation: + + TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) = + let + AssArgs = { xi : ai | ai fresh type variables } + (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) + | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt ) + in + (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a, + ConS ∪ { (FunN a) }), + where a is a fresh type variable
          +
          +
          Specified by:
          +
          TYPEExpr in class Expr
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation()
          +
          +
          Overrides:
          +
          getTypeInformation in class Statement
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.html new file mode 100644 index 00000000..21ad63af --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LambdaParameter.html @@ -0,0 +1,341 @@ + + + + + +LambdaParameter + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class LambdaParameter

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Literal.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Literal.html new file mode 100644 index 00000000..8fdde516 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Literal.html @@ -0,0 +1,406 @@ + + + + + +Literal + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Literal

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          primitiveFlag

          +
          private boolean primitiveFlag
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Literal

          +
          public Literal(int offset,
          +               int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setPrimitiveFlag

          +
          public void setPrimitiveFlag(boolean b)
          +
        • +
        + + + +
          +
        • +

          getPrimitiveFlag

          +
          public boolean getPrimitiveFlag()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.html new file mode 100644 index 00000000..ca565e83 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.html @@ -0,0 +1,533 @@ + + + + + +LocalOrFieldVar + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class LocalOrFieldVar

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.html new file mode 100644 index 00000000..ef0eefa1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.html @@ -0,0 +1,783 @@ + + + + + +LocalVarDecl + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class LocalVarDecl

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          paralist

          +
          private Menge paralist
          +
        • +
        + + + +
          +
        • +

          parahash

          +
          private java.util.Hashtable<java.lang.String,Type> parahash
          +
        • +
        + + + +
          +
        • +

          inferencelog

          +
          protected static Logger inferencelog
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        + + + +
          +
        • +

          block

          +
          public Block block
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LocalVarDecl

          +
          public LocalVarDecl(int offset,
          +                    int variableLength)
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.html new file mode 100644 index 00000000..ba044487 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.html @@ -0,0 +1,533 @@ + + + + + +LongLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class LongLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/MethodCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/MethodCall.html new file mode 100644 index 00000000..9d719990 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/MethodCall.html @@ -0,0 +1,768 @@ + + + + + +MethodCall + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class MethodCall

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          receiver

          +
          private Receiver receiver
          +
          Diese Variable speichert die Expression, welche die Klasse von welcher die Methode aufgerufen wird darstellt.
          +
        • +
        + + + + + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MethodCall

          +
          public MethodCall(Receiver receiver,
          +                  java.lang.String methodName,
          +                  ArgumentList argumentList,
          +                  int offset)
          +
        • +
        + + + +
          +
        • +

          MethodCall

          +
          public MethodCall(int offset,
          +                  int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          set_ArgumentList

          +
          public void set_ArgumentList(ArgumentList al)
          +
        • +
        + + + +
          +
        • +

          getArgumentList

          +
          public ArgumentList getArgumentList()
          +
        • +
        + + + +
          +
        • +

          get_Receiver

          +
          public Receiver get_Receiver()
          +
        • +
        + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
          +
          Specified by:
          +
          get_Name in class Expr
          +
          +
        • +
        + + + +
          +
        • +

          set_Name

          +
          public void set_Name(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          set_Receiver

          +
          public void set_Receiver(Receiver rec)
          +
        • +
        + + + + + + + +
          +
        • +

          set_Expr_Menge

          +
          public void set_Expr_Menge(Menge<Expr> v)
          +
        • +
        + + + +
          +
        • +

          add_Expr

          +
          public void add_Expr(Expr e)
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getName

          +
          public java.lang.String getName()
          +
          +
          Returns:
          +
          der Name der Methode, welcher dieser MethodCall aufruft.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          overloading

          +
          public ConstraintsSet overloading(TypeAssumptions assumptions)
          +
          Erstellt die Constraints für den eigentlichen Methodenaufruf. + Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet.
          +
          +
          Parameters:
          +
          assumptions -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          constraintsFromMethodAssumption

          +
          public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption,
          +                                                     TypeAssumptions assumptions)
          +
          Spezifikation: + overloading determines for all possible overloadings and overridings + of a method the constraints, where constraints itself forms + the constraints from the receiver type, the argument types, the return + type and a given type assumption for the method. If it is a + method from a class, which is not the actual class (this), all type + variables are replaced by fresh type variables (fresh), as different + instances can occur. sargs determines all type assumptions of a + method, where the argument types are supertypes of a minimal type + assumption.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          TYPEStmt

          +
          public ConstraintsSet TYPEStmt(TypeAssumptions assumptions)
          +
          Spezifikation: + TYPEStmt( Ass, stmt ) = + let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) + in (stmt : Void, ConS)
          +
          +
          Overrides:
          +
          TYPEStmt in class Expr
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.html new file mode 100644 index 00000000..274fb17d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.html @@ -0,0 +1,527 @@ + + + + + +NegativeExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class NegativeExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewArray.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewArray.html new file mode 100644 index 00000000..bb210b95 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewArray.html @@ -0,0 +1,555 @@ + + + + + +NewArray + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class NewArray

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewClass.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewClass.html new file mode 100644 index 00000000..04f92b42 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NewClass.html @@ -0,0 +1,566 @@ + + + + + +NewClass + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class NewClass

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NotExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NotExpr.html new file mode 100644 index 00000000..d59ab82b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/NotExpr.html @@ -0,0 +1,540 @@ + + + + + +NotExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class NotExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Null.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Null.html new file mode 100644 index 00000000..04629f8a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Null.html @@ -0,0 +1,473 @@ + + + + + +Null + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Null

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.html new file mode 100644 index 00000000..6dfdb37b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.html @@ -0,0 +1,527 @@ + + + + + +PositivExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class PositivExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.html new file mode 100644 index 00000000..86c5a8fa --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.html @@ -0,0 +1,478 @@ + + + + + +PostDecExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class PostDecExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.html new file mode 100644 index 00000000..94b06b12 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.html @@ -0,0 +1,478 @@ + + + + + +PostIncExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class PostIncExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.html new file mode 100644 index 00000000..47989bf2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.html @@ -0,0 +1,478 @@ + + + + + +PreDecExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class PreDecExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.html new file mode 100644 index 00000000..437a143f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.html @@ -0,0 +1,478 @@ + + + + + +PreIncExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class PreIncExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Receiver.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Receiver.html new file mode 100644 index 00000000..96c36988 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Receiver.html @@ -0,0 +1,387 @@ + + + + + +Receiver + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Receiver

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.statement.Receiver
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Receiver
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private Exprexpr 
        protected static Loggerparserlog 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Receiver(Expr expr) +
        Autor: J�rg B�uerle
        +
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          expr

          +
          private Expr expr
          +
        • +
        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Receiver

          +
          public Receiver(Expr expr)
          +
          Autor: J�rg B�uerle
          +
          +
          Parameters:
          +
          expr -
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get_Type

          +
          public java.lang.String get_Type()
          +
        • +
        + + + +
          +
        • +

          set_Expr

          +
          public void set_Expr(Expr express)
          +
        • +
        + + + +
          +
        • +

          get_Expr

          +
          public Expr get_Expr()
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: Martin Pl�micke
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Return.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Return.html new file mode 100644 index 00000000..923af7a6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Return.html @@ -0,0 +1,529 @@ + + + + + +Return + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Return

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Statement.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Statement.html new file mode 100644 index 00000000..75f35e8c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/Statement.html @@ -0,0 +1,525 @@ + + + + + +Statement + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class Statement

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          offset

          +
          protected int offset
          +
        • +
        + + + +
          +
        • +

          variableLength

          +
          private int variableLength
          +
        • +
        + + + +
          +
        • +

          type

          +
          protected Type type
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Statement

          +
          public Statement(int offset,
          +                 int variableLength)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + +
          +
        • +

          wandleRefTypeAttributes2GenericAttributes

          +
          public abstract void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist,
          +                                                               Menge<GenericTypeVar> genericMethodParameters)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getTypeInformation

          +
          public java.lang.String getTypeInformation()
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          setType

          +
          public void setType(Type t)
          +
          +
          Specified by:
          +
          setType in interface Typeable
          +
          Parameters:
          +
          t - Der Typ der Typable-Expression/Statement
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getDescription

          +
          public java.lang.String getDescription()
          +
          Description copied from class: SyntaxTreeNode
          +
          Eine Beschreibung/Name des SyntaxTree-Nodes
          +
          +
          Overrides:
          +
          getDescription in class SyntaxTreeNode
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          setReturnType

          +
          public void setReturnType(Type t)
          +
        • +
        + + + +
          +
        • +

          getReturnType

          +
          public Type getReturnType()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.html new file mode 100644 index 00000000..7a07d450 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.html @@ -0,0 +1,499 @@ + + + + + +StringLiteral + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class StringLiteral

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/SuperCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/SuperCall.html new file mode 100644 index 00000000..2d9e960d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/SuperCall.html @@ -0,0 +1,473 @@ + + + + + +SuperCall + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class SuperCall

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/This.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/This.html new file mode 100644 index 00000000..ef46e32a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/This.html @@ -0,0 +1,565 @@ + + + + + +This + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class This

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ThisCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ThisCall.html new file mode 100644 index 00000000..4b1e8d69 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/ThisCall.html @@ -0,0 +1,554 @@ + + + + + +ThisCall + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class ThisCall

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.html new file mode 100644 index 00000000..1e7b1400 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.html @@ -0,0 +1,427 @@ + + + + + +UnaryExpr + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class UnaryExpr

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.html new file mode 100644 index 00000000..169862b8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryMinus.html @@ -0,0 +1,237 @@ + + + + + +UnaryMinus + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class UnaryMinus

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryMinus
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class UnaryMinus
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        UnaryMinus() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnaryMinus

          +
          public UnaryMinus()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.html new file mode 100644 index 00000000..173d5de5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryNot.html @@ -0,0 +1,237 @@ + + + + + +UnaryNot + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class UnaryNot

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryNot
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class UnaryNot
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        UnaryNot() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnaryNot

          +
          public UnaryNot()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryPlus.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryPlus.html new file mode 100644 index 00000000..066ffb3e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/UnaryPlus.html @@ -0,0 +1,237 @@ + + + + + +UnaryPlus + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class UnaryPlus

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryPlus
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class UnaryPlus
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        UnaryPlus() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnaryPlus

          +
          public UnaryPlus()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.html new file mode 100644 index 00000000..6bf83192 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.html @@ -0,0 +1,494 @@ + + + + + +WhileStmt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.statement
    +

    Class WhileStmt

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ArgumentList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ArgumentList.html new file mode 100644 index 00000000..ea63413c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ArgumentList.html @@ -0,0 +1,263 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.ArgumentList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.ArgumentList

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Assign.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Assign.html new file mode 100644 index 00000000..3c928843 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Assign.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Assign + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Assign

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.Assign
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Binary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Binary.html new file mode 100644 index 00000000..3d80ec12 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Binary.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Binary + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Binary

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.Binary
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BinaryExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BinaryExpr.html new file mode 100644 index 00000000..3a9bad17 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BinaryExpr.html @@ -0,0 +1,168 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.BinaryExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.BinaryExpr

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Block.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Block.html new file mode 100644 index 00000000..cbf35459 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Block.html @@ -0,0 +1,257 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Block + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Block

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BoolLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BoolLiteral.html new file mode 100644 index 00000000..9ee5b804 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/BoolLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.BoolLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CastExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CastExpr.html new file mode 100644 index 00000000..6c542e64 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CastExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.CastExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.CastExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.CastExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CharLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CharLiteral.html new file mode 100644 index 00000000..3853755b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/CharLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.CharLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.CharLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/DoubleLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/DoubleLiteral.html new file mode 100644 index 00000000..a9cce495 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/DoubleLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/EmptyStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/EmptyStmt.html new file mode 100644 index 00000000..c73a7fce --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/EmptyStmt.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.EmptyStmt

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Expr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Expr.html new file mode 100644 index 00000000..e0e4cb29 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Expr.html @@ -0,0 +1,650 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Expr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Expr

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ExprStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ExprStmt.html new file mode 100644 index 00000000..9f7aaa47 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ExprStmt.html @@ -0,0 +1,351 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.ExprStmt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.ExprStmt

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/FloatLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/FloatLiteral.html new file mode 100644 index 00000000..94df6d30 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/FloatLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.FloatLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ForStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ForStmt.html new file mode 100644 index 00000000..592a7342 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ForStmt.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.ForStmt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.ForStmt

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.ForStmt
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IfStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IfStmt.html new file mode 100644 index 00000000..0272b0aa --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IfStmt.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.IfStmt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.IfStmt

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.IfStmt
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstVar.html new file mode 100644 index 00000000..44c8c234 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstVar.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.InstVar + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.InstVar

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.InstVar
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstanceOf.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstanceOf.html new file mode 100644 index 00000000..a2b96fb2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/InstanceOf.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.InstanceOf + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.InstanceOf

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IntLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IntLiteral.html new file mode 100644 index 00000000..dd5c69a5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/IntLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.IntLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.IntLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaExpression.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaExpression.html new file mode 100644 index 00000000..503da362 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaExpression.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.LambdaExpression

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaParameter.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaParameter.html new file mode 100644 index 00000000..f5ac70ea --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LambdaParameter.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.LambdaParameter + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.LambdaParameter

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.LambdaParameter
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Literal.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Literal.html new file mode 100644 index 00000000..33eabfbd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Literal.html @@ -0,0 +1,192 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Literal + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Literal

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalOrFieldVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalOrFieldVar.html new file mode 100644 index 00000000..06ed2e83 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalOrFieldVar.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalVarDecl.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalVarDecl.html new file mode 100644 index 00000000..f4eca5a4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LocalVarDecl.html @@ -0,0 +1,176 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LongLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LongLiteral.html new file mode 100644 index 00000000..0b2f3e34 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/LongLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.LongLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.LongLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/MethodCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/MethodCall.html new file mode 100644 index 00000000..efdb3bd3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/MethodCall.html @@ -0,0 +1,192 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.MethodCall + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.MethodCall

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NegativeExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NegativeExpr.html new file mode 100644 index 00000000..beb55c1f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NegativeExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.NegativeExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewArray.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewArray.html new file mode 100644 index 00000000..10d3b306 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewArray.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.NewArray + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.NewArray

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.NewArray
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewClass.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewClass.html new file mode 100644 index 00000000..718da133 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NewClass.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.NewClass + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.NewClass

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.NewClass
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NotExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NotExpr.html new file mode 100644 index 00000000..0ebf9584 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/NotExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.NotExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.NotExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.NotExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Null.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Null.html new file mode 100644 index 00000000..58ad9e25 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Null.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Null + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Null

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.Null
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PositivExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PositivExpr.html new file mode 100644 index 00000000..6694e69d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PositivExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.PositivExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.PositivExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostDecExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostDecExpr.html new file mode 100644 index 00000000..d6af3f57 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostDecExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.PostDecExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostIncExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostIncExpr.html new file mode 100644 index 00000000..73f60a52 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PostIncExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.PostIncExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreDecExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreDecExpr.html new file mode 100644 index 00000000..d6106964 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreDecExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.PreDecExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreIncExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreIncExpr.html new file mode 100644 index 00000000..310db4d9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/PreIncExpr.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.PreIncExpr

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Receiver.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Receiver.html new file mode 100644 index 00000000..8d231036 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Receiver.html @@ -0,0 +1,229 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Receiver + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Receiver

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Return.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Return.html new file mode 100644 index 00000000..75d3295c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Return.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Return + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Return

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Statement.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Statement.html new file mode 100644 index 00000000..16ad2072 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/Statement.html @@ -0,0 +1,437 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.Statement + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.Statement

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/StringLiteral.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/StringLiteral.html new file mode 100644 index 00000000..9937eaf6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/StringLiteral.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.StringLiteral + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.StringLiteral

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/SuperCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/SuperCall.html new file mode 100644 index 00000000..822d009f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/SuperCall.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.SuperCall + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.SuperCall

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.SuperCall
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/This.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/This.html new file mode 100644 index 00000000..4c81d938 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/This.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.This + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.This

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.This
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ThisCall.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ThisCall.html new file mode 100644 index 00000000..db203559 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/ThisCall.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.ThisCall + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.ThisCall

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryExpr.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryExpr.html new file mode 100644 index 00000000..4502f6db --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryExpr.html @@ -0,0 +1,192 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.UnaryExpr

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryMinus.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryMinus.html new file mode 100644 index 00000000..9156a749 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryMinus.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.UnaryMinus + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.UnaryMinus

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryNot.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryNot.html new file mode 100644 index 00000000..57064d8a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryNot.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.UnaryNot + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.UnaryNot

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryPlus.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryPlus.html new file mode 100644 index 00000000..a0f92456 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/UnaryPlus.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.UnaryPlus + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.UnaryPlus

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/WhileStmt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/WhileStmt.html new file mode 100644 index 00000000..fc1f01bf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/class-use/WhileStmt.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.statement.WhileStmt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.statement.WhileStmt

    +
    +
    No usage of de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-frame.html new file mode 100644 index 00000000..b6d37333 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-frame.html @@ -0,0 +1,66 @@ + + + + + +de.dhbwstuttgart.syntaxtree.statement + + + + + +

    de.dhbwstuttgart.syntaxtree.statement

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-summary.html new file mode 100644 index 00000000..1dcd9b7e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-summary.html @@ -0,0 +1,328 @@ + + + + + +de.dhbwstuttgart.syntaxtree.statement + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree.statement

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-tree.html new file mode 100644 index 00000000..449bd780 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-tree.html @@ -0,0 +1,215 @@ + + + + + +de.dhbwstuttgart.syntaxtree.statement Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree.statement

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • de.dhbwstuttgart.syntaxtree.statement.Receiver
      • +
      • de.dhbwstuttgart.syntaxtree.SyntaxTreeNode (implements de.dhbwstuttgart.core.IItemWithOffset) +
          +
        • de.dhbwstuttgart.syntaxtree.statement.ArgumentList
        • +
        • de.dhbwstuttgart.syntaxtree.FormalParameter (implements de.dhbwstuttgart.typeinference.Typeable, de.dhbwstuttgart.typeinference.TypeInsertable) + +
        • +
        • de.dhbwstuttgart.syntaxtree.statement.Statement (implements de.dhbwstuttgart.core.IItemWithOffset, de.dhbwstuttgart.typeinference.Typeable) +
            +
          • de.dhbwstuttgart.syntaxtree.statement.Block
          • +
          • de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
          • +
          • de.dhbwstuttgart.syntaxtree.statement.ExprStmt +
              +
            • de.dhbwstuttgart.syntaxtree.statement.Expr +
                +
              • de.dhbwstuttgart.syntaxtree.statement.Assign
              • +
              • de.dhbwstuttgart.syntaxtree.statement.BinaryExpr +
                  +
                • de.dhbwstuttgart.syntaxtree.statement.Binary
                • +
                • de.dhbwstuttgart.syntaxtree.statement.InstanceOf
                • +
                +
              • +
              • de.dhbwstuttgart.syntaxtree.statement.InstVar
              • +
              • de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
              • +
              • de.dhbwstuttgart.syntaxtree.statement.Literal + +
              • +
              • de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
              • +
              • de.dhbwstuttgart.syntaxtree.statement.MethodCall +
                  +
                • de.dhbwstuttgart.syntaxtree.statement.ThisCall +
                    +
                  • de.dhbwstuttgart.syntaxtree.statement.SuperCall
                  • +
                  +
                • +
                +
              • +
              • de.dhbwstuttgart.syntaxtree.statement.NewArray
              • +
              • de.dhbwstuttgart.syntaxtree.statement.NewClass
              • +
              • de.dhbwstuttgart.syntaxtree.statement.This
              • +
              • de.dhbwstuttgart.syntaxtree.statement.UnaryExpr +
                  +
                • de.dhbwstuttgart.syntaxtree.statement.CastExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.NotExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.PositivExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
                • +
                • de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
                • +
                +
              • +
              +
            • +
            +
          • +
          • de.dhbwstuttgart.syntaxtree.statement.ForStmt
          • +
          • de.dhbwstuttgart.syntaxtree.statement.IfStmt
          • +
          • de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl (implements de.dhbwstuttgart.typeinference.TypeInsertable)
          • +
          • de.dhbwstuttgart.syntaxtree.statement.Return
          • +
          • de.dhbwstuttgart.syntaxtree.statement.WhileStmt
          • +
          +
        • +
        +
      • +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryMinus
      • +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryNot
      • +
      • de.dhbwstuttgart.syntaxtree.statement.UnaryPlus
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-use.html new file mode 100644 index 00000000..2464556b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/statement/package-use.html @@ -0,0 +1,274 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree.statement + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree.statement

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BaseType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BaseType.html new file mode 100644 index 00000000..83adf546 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BaseType.html @@ -0,0 +1,502 @@ + + + + + +BaseType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class BaseType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          IsArray

          +
          private boolean IsArray
          +
          Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V + Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BaseType

          +
          public BaseType(SyntaxTreeNode parent,
          +                int offset)
          +
        • +
        + + + +
          +
        • +

          BaseType

          +
          public BaseType(java.lang.String name,
          +                SyntaxTreeNode parent,
          +                int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public abstract BaseType clone()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class Type
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          IsArray

          +
          public boolean IsArray()
          +
          Author: Daniel Feinler
          + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          +
          +
          Returns:
          +
          the IsArray
          +
          +
        • +
        + + + +
          +
        • +

          setArray

          +
          public void setArray(boolean IsArray)
          +
          Author: Daniel Feinler
          + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          +
          +
          Parameters:
          +
          IsArray - the IsArray to set
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class Type
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BooleanType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BooleanType.html new file mode 100644 index 00000000..2e7f1b7a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BooleanType.html @@ -0,0 +1,381 @@ + + + + + +BooleanType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class BooleanType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public BooleanType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.html new file mode 100644 index 00000000..fcdf2197 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/BoundedGenericTypeVar.html @@ -0,0 +1,527 @@ + + + + + +BoundedGenericTypeVar + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class BoundedGenericTypeVar

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      +
      public class BoundedGenericTypeVar
      +extends GenericTypeVar
      +
      Entspricht einem GenericTypeVar, jedoch mit Bounds + (d.h. vorgaben, von welchem Typ die Typevar sein darf + => extends Class x + => implements Interface y + ...
      +
      +
      Author:
      +
      hoti 4.5.06
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          bounds

          +
          Menge<ObjectType> bounds
          +
          Hier sind die Bounds in Form von Type-Objekten abgespeichert
          +
        • +
        + + + +
          +
        • +

          endOffset

          +
          private int endOffset
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BoundedGenericTypeVar

          +
          public BoundedGenericTypeVar(java.lang.String s,
          +                             Menge<ObjectType> bounds,
          +                             SyntaxTreeNode parentClass,
          +                             int offset,
          +                             int endOffset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + + + + + +
          +
        • +

          addBound

          +
          public void addBound(ObjectType bound)
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public BoundedGenericTypeVar clone()
          +
          Description copied from class: GenericTypeVar
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          clone in class GenericTypeVar
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          toString in class GenericTypeVar
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/CharacterType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/CharacterType.html new file mode 100644 index 00000000..97033e3d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/CharacterType.html @@ -0,0 +1,381 @@ + + + + + +CharacterType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class CharacterType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public CharacterType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/DoubleType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/DoubleType.html new file mode 100644 index 00000000..24313afe --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/DoubleType.html @@ -0,0 +1,381 @@ + + + + + +DoubleType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class DoubleType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public DoubleType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.html new file mode 100644 index 00000000..7bb2489a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.html @@ -0,0 +1,665 @@ + + + + + +ExtendsWildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class ExtendsWildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ExtendsWildcardType

          +
          public ExtendsWildcardType(int offset,
          +                           ObjectType extendsType)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine ExtendsWildcard
          +
        • +
        + + + +
          +
        • +

          ExtendsWildcardType

          +
          public ExtendsWildcardType(ObjectType extendsType)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get_ExtendsType

          +
          public ObjectType get_ExtendsType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen in der Wildcard zurück. + Beispiel: ? extends Integer. + Integer wird zurückgegeben.
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public ExtendsWildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück. + Der Innere Typ wird auch geklont
          +
          +
          Overrides:
          +
          clone in class WildcardType
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Vergleicht mit einem anderen Objekt.
          +
          +
          Overrides:
          +
          equals in class WildcardType
          +
          Parameters:
          +
          obj - - Object to compare.
          +
          +
        • +
        + + + +
          +
        • +

          GetFreshWildcardType

          +
          public FreshExtendsWildcardType GetFreshWildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende FreshWildcardType Klasse zurück. + Wird für CaptureConversion verwendet
          +
          +
          Overrides:
          +
          GetFreshWildcardType in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          GetWildcardType

          +
          public Type GetWildcardType()
          +
          Author: Arne Lüdtke
          + Das gleiche wie get_ExtendsType(). + Überschreibt die Methode der Superklasse.
          +
          +
          Overrides:
          +
          GetWildcardType in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          SetWildcardType

          +
          public void SetWildcardType(ObjectType T)
          +
          Author: Arne Lüdtke
          + Setzt den Typ in der Wildcard
          +
          +
          Parameters:
          +
          T - - Type to be set
          +
          +
        • +
        + + + +
          +
        • +

          getContainedType

          +
          public ObjectType getContainedType()
          +
          Author: Arne Lüdtke
          + Das gleiche wie get_ExtendsType(). + Implementiert ITypeContainer
          +
          +
          Specified by:
          +
          getContainedType in interface ITypeContainer
          +
          +
        • +
        + + + +
          +
        • +

          getMatchType

          +
          public ObjectType getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
          +
          Specified by:
          +
          getMatchType in interface IMatchable
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class WildcardType
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FloatType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FloatType.html new file mode 100644 index 00000000..bd71a948 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FloatType.html @@ -0,0 +1,381 @@ + + + + + +FloatType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class FloatType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public FloatType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.html new file mode 100644 index 00000000..bf2846bc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.html @@ -0,0 +1,525 @@ + + + + + +FreshExtendsWildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class FreshExtendsWildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          extendsBoundType

          +
          private ObjectType extendsBoundType
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FreshExtendsWildcardType

          +
          public FreshExtendsWildcardType(ObjectType extendsBound,
          +                                SyntaxTreeNode parent,
          +                                int offset)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine FreshExtendsWildcard
          +
        • +
        + + + +
          +
        • +

          FreshExtendsWildcardType

          +
          private FreshExtendsWildcardType(ObjectType extendsBound,
          +                                 SyntaxTreeNode parent,
          +                                 int offset,
          +                                 java.lang.String name)
          +
          Author: Arne Lüdtke
          + Privater Konstruktor für clone
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public FreshExtendsWildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück. + Der Innere Typ wird auch geklont
          +
          +
          Overrides:
          +
          clone in class FreshWildcardType
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          get_ExtendsBound

          +
          public ObjectType get_ExtendsBound()
          +
          Author: Arne Lüdtke
          + Gibt die Grenze der Wildcard zurück
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          +
          +
          Overrides:
          +
          equals in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          get_WildcardType

          +
          public ExtendsWildcardType get_WildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende ExtendsWildcardType Klasse zurück. + Wird für smaller4 verwendet
          +
          +
          Overrides:
          +
          get_WildcardType in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          getMatchType

          +
          public Type getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
          +
          Specified by:
          +
          getMatchType in interface IMatchable
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.html new file mode 100644 index 00000000..4706a4b9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshSuperWildcardType.html @@ -0,0 +1,525 @@ + + + + + +FreshSuperWildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class FreshSuperWildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          superBoundType

          +
          private ObjectType superBoundType
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FreshSuperWildcardType

          +
          public FreshSuperWildcardType(ObjectType superBound,
          +                              SyntaxTreeNode parent,
          +                              int offset)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine FreshSuperWildcard
          +
        • +
        + + + +
          +
        • +

          FreshSuperWildcardType

          +
          private FreshSuperWildcardType(ObjectType superBound,
          +                               SyntaxTreeNode parent,
          +                               int offset,
          +                               java.lang.String name)
          +
          Author: Arne Lüdtke
          + Privater Konstruktor für clone
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public FreshSuperWildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück. + Der Innere Typ wird auch geklont
          +
          +
          Overrides:
          +
          clone in class FreshWildcardType
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          get_SuperBound

          +
          public ObjectType get_SuperBound()
          +
          Author: Arne Lüdtke
          + Gibt die Grenze der Wildcard zurück
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          +
          +
          Overrides:
          +
          equals in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          get_WildcardType

          +
          public SuperWildcardType get_WildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende SuperWildcardType Klasse zurück. + Wird für smaller4 verwendet
          +
          +
          Overrides:
          +
          get_WildcardType in class FreshWildcardType
          +
          +
        • +
        + + + +
          +
        • +

          getMatchType

          +
          public Type getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
          +
          Specified by:
          +
          getMatchType in interface IMatchable
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.html new file mode 100644 index 00000000..c1433c25 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/FreshWildcardType.html @@ -0,0 +1,590 @@ + + + + + +FreshWildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class FreshWildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          strNextName

          +
          private static java.lang.String strNextName
          +
        • +
        + + + +
          +
        • +

          upperBounds

          +
          private Menge<Type> upperBounds
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FreshWildcardType

          +
          public FreshWildcardType(SyntaxTreeNode parent,
          +                         int offset)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine FreshWildcard
          +
        • +
        + + + +
          +
        • +

          FreshWildcardType

          +
          protected FreshWildcardType(SyntaxTreeNode parent,
          +                            int offset,
          +                            java.lang.String name)
          +
          Author: Arne Lüdtke
          + Protected Konstruktor für clone. + Protected, da vererbte Klassen ihn verwenden müssen.
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class Type
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public FreshWildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück. + Der Innere Typ wird auch geklont
          +
          +
          Specified by:
          +
          clone in class Type
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
          +
          +
          Overrides:
          +
          equals in class Type
          +
          +
        • +
        + + + +
          +
        • +

          makeNewName

          +
          private static JavaClassName makeNewName()
          +
          Erzeugt einen neuen Namen, und gibt diesen zurück + Methode aus TypePlaceholder kopiert
          +
        • +
        + + + +
          +
        • +

          inc

          +
          private static void inc(int i)
          +
          Hilfsmethode für makeNewName + Methode aus TypePlaceholder kopiert
          +
        • +
        + + + +
          +
        • +

          manipulate

          +
          private static void manipulate(int nStelle,
          +                               char nWert)
          +
          Hilfsmethode für makeNewName + Methode aus TypePlaceholder kopiert
          +
        • +
        + + + +
          +
        • +

          get_WildcardType

          +
          public WildcardType get_WildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende WildcardType Klasse zurück. + Wird für smaller4 verwendet
          +
        • +
        + + + +
          +
        • +

          get_UpperBounds

          +
          public Menge<Type> get_UpperBounds()
          +
          Author: Arne Lüdtke
          + Gibt den Menge der oberen Grenzen zurück
          +
        • +
        + + + +
          +
        • +

          set_UpperBounds

          +
          public void set_UpperBounds(Menge<Type> bounds)
          +
          Author: Arne Lüdtke
          + Setzt den Menge der oberen Grenzen
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.html new file mode 100644 index 00000000..5b88a66a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.html @@ -0,0 +1,685 @@ + + + + + +GenericTypeVar + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class GenericTypeVar

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      Direct Known Subclasses:
      +
      BoundedGenericTypeVar
      +
      +
      +
      +
      public class GenericTypeVar
      +extends ObjectType
      +
      TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert.
      +
      +
      Version:
      +
      $Date: 2013/09/22 20:12:53 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          genericConstraint

          +
          protected Pair genericConstraint
          +
        • +
        + + + +
          +
        • +

          tph

          +
          private static java.util.HashMap<java.lang.String,TypePlaceholder> tph
          +
          Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch + Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation. +
          Autor: J�rg B�uerle
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericTypeVar

          +
          public GenericTypeVar(java.lang.String s,
          +                      SyntaxTreeNode parentClass,
          +                      int offset)
          +
          +
          Parameters:
          +
          genericTypeVarExtendsVar - public GenericTypeVar(Pair genericTypeVarExtendsVar, int offset){ + super(offset); + genericTypeVar = genericTypeVarExtendsVar.TA1; + if(genericTypeVarExtendsVar.TA2!=null)this.extendVars.add(genericTypeVarExtendsVar.TA2); + else{ + this.genericConstraint = genericTypeVarExtendsVar; + } + this.name = genericTypeVar.toString(); + }
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          clone

          +
          public GenericTypeVar clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class ObjectType
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          Parameters:
          +
          obj -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          toString in class Type
          +
          +
        • +
        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          get_codegen_Type

          +
          public java.lang.String get_codegen_Type(Menge paralist)
          +
          hoti 4.5.06 + Generische Typen werden im Bytecode + aus Abwaertskompatiblitaet wie Object dargestellt
          +
        • +
        + + + +
          +
        • +

          getSignatureType

          +
          public java.lang.String getSignatureType(Menge paralist)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
          +
          Overrides:
          +
          get_Name in class Type
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          TYPE

          +
          public ConstraintsSet TYPE(TypeAssumptions ass)
          +
          Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
          +
          +
          Parameters:
          +
          ass -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class Type
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + +
          +
        • +

          getEndOffset

          +
          public int getEndOffset()
          +
        • +
        + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IMatchable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IMatchable.html new file mode 100644 index 00000000..a516858f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IMatchable.html @@ -0,0 +1,237 @@ + + + + + +IMatchable + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Interface IMatchable

    +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethod and Description
        TypegetMatchType() +
        Author: Arne Lüdtke
        + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
        +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getMatchType

          +
          Type getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.html new file mode 100644 index 00000000..5805d29e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ITypeContainer.html @@ -0,0 +1,237 @@ + + + + + +ITypeContainer + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Interface ITypeContainer

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      ExtendsWildcardType, SuperWildcardType
      +
      +
      +
      +
      public interface ITypeContainer
      +
      Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten. + Wird für diverse Hilfsmethoden verwendet.
      +
      +
      Author:
      +
      Arne Lüdtke
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getContainedType

          +
          Type getContainedType()
          +
          Author: Arne Lüdtke
          + Das gleiche wie get_ExtendsType(). + Implementiert ITypeContainer
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IntegerType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IntegerType.html new file mode 100644 index 00000000..28ee34a9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/IntegerType.html @@ -0,0 +1,381 @@ + + + + + +IntegerType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class IntegerType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public IntegerType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/LongType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/LongType.html new file mode 100644 index 00000000..79a9d2f8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/LongType.html @@ -0,0 +1,381 @@ + + + + + +LongType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class LongType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class BaseType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public LongType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class BaseType
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ObjectType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ObjectType.html new file mode 100644 index 00000000..c5bb2410 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ObjectType.html @@ -0,0 +1,361 @@ + + + + + +ObjectType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class ObjectType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ObjectType

          +
          public ObjectType(java.lang.String s,
          +                  SyntaxTreeNode parent,
          +                  int offset)
          +
        • +
        + + + +
          +
        • +

          ObjectType

          +
          public ObjectType(SyntaxTreeNode parent,
          +                  int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          clone

          +
          public abstract ObjectType clone()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class Type
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ParaList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ParaList.html new file mode 100644 index 00000000..f0f6d27e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ParaList.html @@ -0,0 +1,427 @@ + + + + + +ParaList + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class ParaList

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.util.AbstractCollection<E>
      • +
      • + +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<Type>, java.util.Collection<Type>, java.util.List<Type>, java.util.RandomAccess
      +
      +
      +
      +
      public class ParaList
      +extends Menge<Type>
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        protected static Loggerparserlog 
        +
          +
        • + + +

          Fields inherited from class java.util.Vector

          +capacityIncrement, elementCount, elementData
        • +
        +
          +
        • + + +

          Fields inherited from class java.util.AbstractList

          +modCount
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + +
        Constructors 
        Constructor and Description
        ParaList() 
        ParaList(Type t) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidadd_ParaList(Type obj) 
        java.lang.Objectget_firstElement() 
        Menge<Type>get_ParaList() 
        Menge<Type>getParalist() 
        voidsetParalist(Menge<Type> paralist) 
        +
          +
        • + + +

          Methods inherited from class java.util.Vector

          +add, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, forEach, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, removeIf, removeRange, replaceAll, retainAll, set, setElementAt, setSize, size, sort, spliterator, subList, toArray, toArray, toString, trimToSize
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
          +
        • + + +

          Methods inherited from interface java.util.Collection

          +parallelStream, stream
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          parserlog

          +
          protected static Logger parserlog
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ParaList

          +
          public ParaList()
          +
        • +
        + + + +
          +
        • +

          ParaList

          +
          ParaList(Type t)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get_ParaList

          +
          public Menge<Type> get_ParaList()
          +
        • +
        + + + +
          +
        • +

          add_ParaList

          +
          public void add_ParaList(Type obj)
          +
        • +
        + + + +
          +
        • +

          get_firstElement

          +
          public java.lang.Object get_firstElement()
          +
        • +
        + + + +
          +
        • +

          getParalist

          +
          public Menge<Type> getParalist()
          +
        • +
        + + + +
          +
        • +

          setParalist

          +
          public void setParalist(Menge<Type> paralist)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/RefType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/RefType.html new file mode 100644 index 00000000..03ee4415 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/RefType.html @@ -0,0 +1,1193 @@ + + + + + +RefType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class RefType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          IsArray

          +
          private boolean IsArray
          +
          Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V + Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
          +
        • +
        + + + +
          +
        • +

          parameter

          +
          private Menge<Type> parameter
          +
        • +
        + + + +
          +
        • +

          primitiveFlag

          +
          private boolean primitiveFlag
          +
          Ist primitiveFlag auf true, muss beim Codegen dieser Reftype durch + den primitiven Datentyp ersetzt werden + + Bsp: java.lang.Integer mit Flag wird dann zu [int]
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RefType

          +
          protected RefType(SyntaxTreeNode parent,
          +                  int offset)
          +
        • +
        + + + +
          +
        • +

          RefType

          +
          public RefType(java.lang.String fullyQualifiedName,
          +               SyntaxTreeNode parent,
          +               int offset)
          +
        • +
        + + + +
          +
        • +

          RefType

          +
          public RefType(java.lang.String fullyQualifiedName,
          +               Menge parameter,
          +               SyntaxTreeNode parent,
          +               int offset)
          +
        • +
        + + + + + + + +
          +
        • +

          RefType

          +
          public RefType(Type baseType)
          +
          Erstellt einen Referenztyp aus dem übergebenen Type. + Dabei wird der Name und der Offset des baseType's übernommen.
          +
          +
          Parameters:
          +
          baseType -
          +
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          Type2Key

          +
          public java.lang.String Type2Key()
          +
          +
          Overrides:
          +
          Type2Key in class Type
          +
          +
        • +
        + + + +
          +
        • +

          Type2String

          +
          public java.lang.String Type2String()
          +
          +
          Overrides:
          +
          Type2String in class Type
          +
          +
        • +
        + + + +
          +
        • +

          GenericTypeVar2TypePlaceholder

          +
          public CSubstitutionSet GenericTypeVar2TypePlaceholder()
          +
          Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          GTV2TPH

          +
          public void GTV2TPH(SyntaxTreeNode environment)
          +
          Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
          +
        • +
        + + + +
          +
        • +

          findGenericType

          +
          public GenericTypeVar findGenericType(Menge<Type> paralist,
          +                                      Menge<GenericTypeVar> methodParaList)
          +
          HOTI + Diese Methode sucht in der Klassendefinition nach einen GTV, die + so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden + hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls + angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert + die Methode null.
          +
          +
          Parameters:
          +
          type -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName(java.lang.String name)
          +
        • +
        + + + + + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
          +
          Overrides:
          +
          get_Name in class Type
          +
          +
        • +
        + + + + + + + +
          +
        • +

          set_ParaList

          +
          public void set_ParaList(Menge<Type> v)
          +
          Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus. + In einem RefType dürfen keine GTVs enthalten sein.
          +
          +
          Parameters:
          +
          v -
          +
          +
        • +
        + + + +
          +
        • +

          get_ParaList

          +
          public Menge<Type> get_ParaList()
          +
          +
          Returns:
          +
          gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus
          +
          +
        • +
        + + + +
          +
        • +

          getParaList

          +
          public Menge<Type> getParaList()
          +
        • +
        + + + +
          +
        • +

          add_Parameter

          +
          public void add_Parameter(Type o)
          +
        • +
        + + + +
          +
        • +

          getTypeName

          +
          public java.lang.String getTypeName()
          +
        • +
        + + + + + + + +
          +
        • +

          isTV

          +
          public boolean isTV(int n)
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Jrg Buerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public RefType clone()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class ObjectType
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          toString in class Type
          +
          +
        • +
        + + + +
          +
        • +

          getSimpleName

          +
          public java.lang.String getSimpleName()
          +
          HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          +
          +
          Overrides:
          +
          getSimpleName in class Type
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          setPrimitiveFlag

          +
          public void setPrimitiveFlag(boolean b)
          +
        • +
        + + + +
          +
        • +

          getPrimitiveFlag

          +
          public boolean getPrimitiveFlag()
          +
        • +
        + + + +
          +
        • +

          IsArray

          +
          public boolean IsArray()
          +
          Author: Daniel Feinler
          + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          +
          +
          Returns:
          +
          the IsArray
          +
          +
        • +
        + + + +
          +
        • +

          setArray

          +
          public void setArray(boolean IsArray)
          +
          Author: Daniel Feinler
          + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
          +
          +
          Parameters:
          +
          IsArray - the IsArray to set
          +
          +
        • +
        + + + +
          +
        • +

          getMatchType

          +
          public Type getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
          +
          Specified by:
          +
          getMatchType in interface IMatchable
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getSuperWildcardTypes

          +
          public java.util.ArrayList<SuperWildcardType> getSuperWildcardTypes()
          +
          Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind. + Dabei werden auch die parameter auf SuperWildcardTypes durchsucht.
          +
          +
          Overrides:
          +
          getSuperWildcardTypes in class Type
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getUnresolvedTPH

          +
          public Menge<TypePlaceholder> getUnresolvedTPH(ResultSet resultSet)
          +
          Description copied from class: Type
          +
          Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.
          +
          +
          Overrides:
          +
          getUnresolvedTPH in class Type
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class Type
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ReturnType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ReturnType.html new file mode 100644 index 00000000..d6c4e147 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/ReturnType.html @@ -0,0 +1,369 @@ + + + + + +ReturnType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class ReturnType

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      +
      public class ReturnType
      +extends Type
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ReturnType

          +
          public ReturnType(int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public ReturnType clone()
          +

          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class Type
          +
          Returns:
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.html new file mode 100644 index 00000000..94408c10 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.html @@ -0,0 +1,665 @@ + + + + + +SuperWildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class SuperWildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SuperWildcardType

          +
          public SuperWildcardType(ObjectType innerType)
          +
        • +
        + + + +
          +
        • +

          SuperWildcardType

          +
          public SuperWildcardType(int offset,
          +                         ObjectType innerType)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine SuperWildcard
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get_SuperType

          +
          public ObjectType get_SuperType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen in der Wildcard zurück. + Beispiel: ? super Integer. + Integer wird zurückgegeben.
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public SuperWildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück. + Der Innere Typ wird auch geklont
          +
          +
          Overrides:
          +
          clone in class WildcardType
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          GetFreshWildcardType

          +
          public FreshSuperWildcardType GetFreshWildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende FreshWildcardType Klasse zurück. + Wird für CaptureConversion verwendet
          +
          +
          Overrides:
          +
          GetFreshWildcardType in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          GetWildcardType

          +
          public Type GetWildcardType()
          +
          Author: Arne Lüdtke
          + Das gleiche wie get_innerType(). + Überschreibt die Methode der Superklasse
          +
          +
          Overrides:
          +
          GetWildcardType in class WildcardType
          +
          +
        • +
        + + + +
          +
        • +

          SetWildcardType

          +
          public void SetWildcardType(ObjectType T)
          +
          Author: Arne Lüdtke
          + Setzt den Typ in der Wildcard
          +
          +
          Parameters:
          +
          T - - Type to be set
          +
          +
        • +
        + + + +
          +
        • +

          getContainedType

          +
          public Type getContainedType()
          +
          Author: Arne Lüdtke
          + Das gleiche wie get_innerType(). + Implementiert ITypeContainer
          +
          +
          Specified by:
          +
          getContainedType in interface ITypeContainer
          +
          +
        • +
        + + + +
          +
        • +

          getMatchType

          +
          public Type getMatchType()
          +
          Author: Arne Lüdtke
          + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + Wird über IMatchable implementiert.
          +
          +
          Specified by:
          +
          getMatchType in interface IMatchable
          +
          +
        • +
        + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Vergleicht mit einem anderen Objekt.
          +
          +
          Overrides:
          +
          equals in class WildcardType
          +
          Parameters:
          +
          obj - - Object to compare.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          parserPostProcessing

          +
          public void parserPostProcessing(SyntaxTreeNode parent)
          +
          Description copied from class: SyntaxTreeNode
          +
          Wird nach dem Parsen aufgerufen. + Erfüllt folgenden Aufgaben: + 1. Füllt fehlende Typangaben mit TPHs auf. + 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) + 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus. + 4. Führt einen Teil des Syntaxckecks durch.
          +
          +
          Overrides:
          +
          parserPostProcessing in class SyntaxTreeNode
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class WildcardType
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Type.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Type.html new file mode 100644 index 00000000..cd73fbdc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Type.html @@ -0,0 +1,761 @@ + + + + + +Type + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class Type

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Type

          +
          public Type(java.lang.String s,
          +            SyntaxTreeNode parent,
          +            int offset)
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setOffset

          +
          public void setOffset(int offset)
          +
        • +
        + + + + + + + +
          +
        • +

          set_UsedId

          +
          public void set_UsedId(UsedId uid)
          +
        • +
        + + + +
          +
        • +

          get_UsedId

          +
          public UsedId get_UsedId()
          +
        • +
        + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
        • +
        + + + +
          +
        • +

          Type2String

          +
          public java.lang.String Type2String()
          +
        • +
        + + + +
          +
        • +

          Type2Key

          +
          public java.lang.String Type2Key()
          +
        • +
        + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class SyntaxTreeNode
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public abstract Type clone()
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          clone in class java.lang.Object
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getSimpleName

          +
          public java.lang.String getSimpleName()
          +
          HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
          +
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          applyResultSet

          +
          public Type applyResultSet(ResultSet result)
          +
        • +
        + + + +
          +
        • +

          getSuperWildcardTypes

          +
          public java.util.ArrayList<SuperWildcardType> getSuperWildcardTypes()
          +
          Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getUnresolvedTPH

          +
          public Menge<TypePlaceholder> getUnresolvedTPH(ResultSet resultSet)
          +
          Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.
          +
          +
          Parameters:
          +
          resultSet -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          involves

          +
          public boolean involves(TypePlaceholder tph)
          +
          Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt.
          +
          +
          Parameters:
          +
          tph -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + +
          +
        • +

          getInvolvedTypePlaceholder

          +
          public Menge<TypePlaceholder> getInvolvedTypePlaceholder()
          +
          Sammelt alle TypePlaceholder, welche in diesem Typ vorkommen.
          +
          +
          Returns:
          +
          +
        • +
        + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.html new file mode 100644 index 00000000..0e7ba353 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.html @@ -0,0 +1,838 @@ + + + + + +TypePlaceholder + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class TypePlaceholder

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset
      +
      +
      +
      +
      public class TypePlaceholder
      +extends ObjectType
      +
      Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben + Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool + und + ist in einer zentralen Registry, d.h. einer Hashtable abgelegt.
      +
      +
      Version:
      +
      $Date: 2013/06/19 12:45:37 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          log

          +
          private static final Logger log
          +
        • +
        + + + +
          +
        • +

          strNextName

          +
          private static java.lang.String strNextName
          +
        • +
        + + + + + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypePlaceholder

          +
          private TypePlaceholder(java.lang.String typeName,
          +                        SyntaxTreeNode parent)
          +
          Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die + Factory-Methode fresh() erzeugt. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          typeName - Der Name der TypePlaceholder-Variablen
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class Type
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + +
          +
        • +

          getInstance

          +
          public static TypePlaceholder getInstance(java.lang.String name)
          +
          Statische Methode, um einen TypePlaceholder aus der Registry zu holen. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          name - Der Name des TypePlaceholders
          +
          Returns:
          +
          Der TypePlaceholder oder null, falls er nicht in der + Registry existiert
          +
          +
        • +
        + + + +
          +
        • +

          fresh

          +
          public static TypePlaceholder fresh(java.lang.String name,
          +                                    SyntaxTreeNode parent)
          +
          Generiert einen neuen TPH mit einem bestimmten Namen. + Wird benötigt, wenn aus Generischen Variablen TPH generiert werden.
          +
          +
          Parameters:
          +
          name -
          +
          Returns:
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          makeNewName

          +
          private static java.lang.String makeNewName()
          +
          Berechnet einen neuen, eindeutigen Namen f�r eine neue + TypePlaceholder.
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Der Name
          +
          +
        • +
        + + + +
          +
        • +

          inc

          +
          private static void inc(int i)
          +
          Hilfsfunktion zur Berechnung eines neuen Namens +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          i -
          +
          +
        • +
        + + + +
          +
        • +

          manipulate

          +
          private static void manipulate(int nStelle,
          +                               char nWert)
          +
          Hilfsfunktion zur Berechnung eines neuen Namens. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          nStelle -
          +
          nWert -
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          deleteRegistry

          +
          public static void deleteRegistry()
          +
          L�scht die komplette Registry von TypePlaceholders. Sollte nur und + ausschlie�lich von MyCompiler.init() aufgerufen werden!!! +
          Author: J�rg B�uerle
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public TypePlaceholder clone()
          +
          Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die + Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen + muss.
          + Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich + �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen + benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert. +
          Author: J�rg B�uerle
          +
          +
          Specified by:
          +
          clone in class ObjectType
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          get_Name

          +
          public java.lang.String get_Name()
          +
          +
          Overrides:
          +
          get_Name in class Type
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Description copied from class: Type
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          toString in class Type
          +
          +
        • +
        + + + +
          +
        • +

          backdoorFresh

          +
          public static TypePlaceholder backdoorFresh()
          +
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen + werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum. +
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Eine neue TypePlaceholder
          +
          +
        • +
        + + + +
          +
        • +

          backdoorSetName

          +
          public void backdoorSetName(java.lang.String varName)
          +
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
          + ACHTUNG: Diese TypePlaceholder darf nicht Teil des abstrakten + Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende + TypePlaceholder nicht �ber die Methode fresh(), + sondern �ber backdoorCreate() oder backdoorClone() + erzeugt worden ist. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          varName - Der Name des zu erzeugenden TypePlaceholders
          +
          +
        • +
        + + + +
          +
        • +

          backdoorCreate

          +
          public static TypePlaceholder backdoorCreate(java.lang.String name)
          +
          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in + der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig + losgel�st vom abstrakten Syntaxbaum.
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          name -
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getTypeInsertPoints

          +
          public Menge<TypeInsertPoint> getTypeInsertPoints(ResultSet result)
          +
          Berechnet die InsertPoints dieses TypePlaceholders. + Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert, + ob sie von TypeInsertable erben. + Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint. + Mehrere TypeInsertPoint's ergeben ein TypeInsertSet.
          +
          +
          Parameters:
          +
          result - Das ResultSet das den einzusetzenden Typ für diesen TPH enthält.
          +
          Returns:
          +
          See Also:
          +
          TypeInsertPoint
          +
          +
        • +
        + + + +
          +
        • +

          getUnresolvedTPH

          +
          public Menge<TypePlaceholder> getUnresolvedTPH(ResultSet resultSet)
          +
          Description copied from class: Type
          +
          Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.
          +
          +
          Overrides:
          +
          getUnresolvedTPH in class Type
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Void.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Void.html new file mode 100644 index 00000000..dd492ebc --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/Void.html @@ -0,0 +1,423 @@ + + + + + +Void + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class Void

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class RefType
          +
          Parameters:
          +
          Object -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public Void clone()
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          clone in class RefType
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class RefType
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/WildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/WildcardType.html new file mode 100644 index 00000000..2313bad3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/WildcardType.html @@ -0,0 +1,539 @@ + + + + + +WildcardType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.syntaxtree.type
    +

    Class WildcardType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          WildcardType

          +
          public WildcardType(ObjectType innerType,
          +                    SyntaxTreeNode parent,
          +                    int offset)
          +
          Author: Arne Lüdtke
          + Standard Konstruktor für eine Wildcard
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          Author: Arne Lüdtke
          + Gibt String Entsprechung zurück.
          +
          +
          Overrides:
          +
          toString in class Type
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public WildcardType clone()
          +
          Author: Arne Lüdtke
          + Gibt einen Klon der Wildcard zurück.
          +
          +
          Specified by:
          +
          clone in class Type
          +
          Returns:
          +
          // ino.end + // ino.method.clone.26768.definition + public Type clone() + // ino.end + // ino.method.clone.26768.body + { + return new RefType(this.getName().toString(), this.getParent(),getOffset()); + } + // ino.end
          +
          +
        • +
        + + + +
          +
        • +

          GetFreshWildcardType

          +
          public FreshWildcardType GetFreshWildcardType()
          +
          Author: Arne Lüdtke
          + Gibt die passende FreshWildcardType Klasse zurück. + Wird für CaptureConversion verwendet
          +
        • +
        + + + +
          +
        • +

          GetWildcardType

          +
          public Type GetWildcardType()
          +
          Author: Arne Lüdtke
          + Die Allgemeine Wildcard enthält keinen Typen.
          +
        • +
        + + + +
          +
        • +

          SetWildcardType

          +
          public void SetWildcardType(Type T)
          +
          Author: Arne Lüdtke
          + Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
          +
          +
          Parameters:
          +
          T - - Type to be set
          +
          +
        • +
        + + + + + + + +
          +
        • +

          TYPE

          +
          public ConstraintType TYPE(TypeAssumptions ass,
          +                           SyntaxTreeNode parent)
          +
          Description copied from class: Type
          +
          Prüft ob der Typ in den Assumptions ass vorhanden ist. + Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
          +
          +
          Overrides:
          +
          TYPE in class Type
          +
          Parameters:
          +
          ass - - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet. + + public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ + ConstraintType t = ass.getTypeFor(this, this); + if(t==null) + throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); + return t; + }
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          Description copied from class: Type
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class Type
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BaseType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BaseType.html new file mode 100644 index 00000000..a52aca6e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BaseType.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.BaseType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.BaseType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BooleanType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BooleanType.html new file mode 100644 index 00000000..1040fea6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BooleanType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.BooleanType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.BooleanType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BoundedGenericTypeVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BoundedGenericTypeVar.html new file mode 100644 index 00000000..1327735c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/BoundedGenericTypeVar.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/CharacterType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/CharacterType.html new file mode 100644 index 00000000..e887e54e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/CharacterType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.CharacterType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.CharacterType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/DoubleType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/DoubleType.html new file mode 100644 index 00000000..3431d216 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/DoubleType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.DoubleType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.DoubleType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ExtendsWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ExtendsWildcardType.html new file mode 100644 index 00000000..d21a6ce9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ExtendsWildcardType.html @@ -0,0 +1,174 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FloatType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FloatType.html new file mode 100644 index 00000000..732c0ebf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FloatType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.FloatType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.FloatType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshExtendsWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshExtendsWildcardType.html new file mode 100644 index 00000000..6018c074 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshExtendsWildcardType.html @@ -0,0 +1,174 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshSuperWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshSuperWildcardType.html new file mode 100644 index 00000000..ef5d2dce --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshSuperWildcardType.html @@ -0,0 +1,174 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshWildcardType.html new file mode 100644 index 00000000..33de2eca --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/FreshWildcardType.html @@ -0,0 +1,191 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.FreshWildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/GenericTypeVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/GenericTypeVar.html new file mode 100644 index 00000000..e079210d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/GenericTypeVar.html @@ -0,0 +1,686 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.GenericTypeVar

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IMatchable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IMatchable.html new file mode 100644 index 00000000..00cf47d5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IMatchable.html @@ -0,0 +1,210 @@ + + + + + +Uses of Interface de.dhbwstuttgart.syntaxtree.type.IMatchable + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.syntaxtree.type.IMatchable

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ITypeContainer.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ITypeContainer.html new file mode 100644 index 00000000..bfe9421a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ITypeContainer.html @@ -0,0 +1,172 @@ + + + + + +Uses of Interface de.dhbwstuttgart.syntaxtree.type.ITypeContainer + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.syntaxtree.type.ITypeContainer

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IntegerType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IntegerType.html new file mode 100644 index 00000000..14f57fa1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/IntegerType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.IntegerType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.IntegerType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/LongType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/LongType.html new file mode 100644 index 00000000..f50dbd12 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/LongType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.LongType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.LongType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ObjectType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ObjectType.html new file mode 100644 index 00000000..9d082951 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ObjectType.html @@ -0,0 +1,670 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.ObjectType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.ObjectType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ParaList.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ParaList.html new file mode 100644 index 00000000..31366694 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ParaList.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.ParaList + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.ParaList

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/RefType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/RefType.html new file mode 100644 index 00000000..4232cfd7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/RefType.html @@ -0,0 +1,646 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.RefType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.RefType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ReturnType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ReturnType.html new file mode 100644 index 00000000..ab3eda31 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/ReturnType.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.ReturnType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.ReturnType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/SuperWildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/SuperWildcardType.html new file mode 100644 index 00000000..854c139b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/SuperWildcardType.html @@ -0,0 +1,195 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.SuperWildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Type.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Type.html new file mode 100644 index 00000000..0f39b528 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Type.html @@ -0,0 +1,2099 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.Type + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.Type

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/TypePlaceholder.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/TypePlaceholder.html new file mode 100644 index 00000000..4a4583f2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/TypePlaceholder.html @@ -0,0 +1,642 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.TypePlaceholder

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Void.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Void.html new file mode 100644 index 00000000..5795a78e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/Void.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.Void + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.Void

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/WildcardType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/WildcardType.html new file mode 100644 index 00000000..e3574ae7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/class-use/WildcardType.html @@ -0,0 +1,215 @@ + + + + + +Uses of Class de.dhbwstuttgart.syntaxtree.type.WildcardType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.syntaxtree.type.WildcardType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-frame.html new file mode 100644 index 00000000..ddc14bcf --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-frame.html @@ -0,0 +1,46 @@ + + + + + +de.dhbwstuttgart.syntaxtree.type + + + + + +

    de.dhbwstuttgart.syntaxtree.type

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-summary.html new file mode 100644 index 00000000..5dadc7ef --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-summary.html @@ -0,0 +1,267 @@ + + + + + +de.dhbwstuttgart.syntaxtree.type + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.syntaxtree.type

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-tree.html new file mode 100644 index 00000000..9e8f9b78 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-tree.html @@ -0,0 +1,204 @@ + + + + + +de.dhbwstuttgart.syntaxtree.type Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.syntaxtree.type

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-use.html new file mode 100644 index 00000000..6c33a055 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/syntaxtree/type/package-use.html @@ -0,0 +1,536 @@ + + + + + +Uses of Package de.dhbwstuttgart.syntaxtree.type + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.syntaxtree.type

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintPair.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintPair.html new file mode 100644 index 00000000..ebecab8f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintPair.html @@ -0,0 +1,309 @@ + + + + + +ConstraintPair + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class ConstraintPair

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.ConstraintPair
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ConstraintPair
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private Pairp 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        PairgetPair() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintType.html new file mode 100644 index 00000000..1e8ae747 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintType.html @@ -0,0 +1,343 @@ + + + + + +ConstraintType + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class ConstraintType

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.ConstraintType
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ConstraintType
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getType

          +
          public Type getType()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintsSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintsSet.html new file mode 100644 index 00000000..4e08f866 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ConstraintsSet.html @@ -0,0 +1,404 @@ + + + + + +ConstraintsSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class ConstraintsSet

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          log

          +
          private static final Logger log
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConstraintsSet

          +
          public ConstraintsSet()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + +
          +
        • +

          filterWrongConstraints

          +
          public void filterWrongConstraints(Unifier unify)
          +
          Liefert alle Constraint-Variationen
          +
        • +
        + + + +
          +
        • +

          unifyUndConstraints

          +
          public void unifyUndConstraints(Unifier unifier)
          +
          Nimmt alle UndConstraints und filtert mithilfe dieser die falschen Constraints aus den OderConstraints
          +
          +
          Parameters:
          +
          unifier -
          +
          +
        • +
        + + + +
          +
        • +

          filterUndConstraints

          +
          private Menge<UndConstraint> filterUndConstraints()
          +
          Aus dem ConstraintsSet [ u1, u2, ... (OderConstraint), ... uN ] werden alle + UndConstraints, welche sich nicht innerhalb eines OderConstraints befinden, herausgefiltert
          +
          +
          Returns:
          +
          [u1, ... , uN]
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/EinzelElement.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/EinzelElement.html new file mode 100644 index 00000000..d9103498 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/EinzelElement.html @@ -0,0 +1,409 @@ + + + + + +EinzelElement + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class EinzelElement<A>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.EinzelElement<A>
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunN.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunN.html new file mode 100644 index 00000000..8daa377c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunN.html @@ -0,0 +1,462 @@ + + + + + +FunN + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class FunN

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IItemWithOffset, IMatchable
      +
      +
      +
      +
      public class FunN
      +extends RefType
      +
      +
      Author:
      +
      A10023 - Andreas Stadelmeier + + Bemerkung: + FunN ist ein RefType. Der RefType ist nicht mit einem FunNInterface verbunden.
      +
      See Also:
      +
      "Complete Typeinference in Java 8" von Martin Plümicke + "interface FunN { R apply(T1 arg1, T2 arg2, ... , TN argN); }"
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FunN

          +
          public FunN(Type R,
          +            Menge<Type> T)
          +
          +
          Parameters:
          +
          R -
          +
          T -
          +
          +
        • +
        + + + +
          +
        • +

          FunN

          +
          public FunN(int parameterCount)
          +
          Erstellt eine FunN: + FunN + R und T1 - TparameterCount werden mit TypePlaceholdern besetzt.
          +
          +
          Parameters:
          +
          parameterCount -
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          calculateNewParalist

          +
          private void calculateNewParalist()
          +
          Muss nach jeder Änderung von T oder R aufgerufen werden. + Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
          +
        • +
        + + + +
          +
        • +

          setT

          +
          protected void setT(Menge<Type> T)
          +
        • +
        + + + +
          +
        • +

          setR

          +
          protected void setR(Type R)
          +
        • +
        + + + +
          +
        • +

          getTypeLineNumber

          +
          public int getTypeLineNumber()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNInterface.html new file mode 100644 index 00000000..68f124cd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNInterface.html @@ -0,0 +1,381 @@ + + + + + +FunNInterface + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class FunNInterface

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FunNInterface

          +
          public FunNInterface(int N)
          +
          Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface.
          +
          +
          Parameters:
          +
          N - - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt R apply(T1 par1);
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          makeParaList

          +
          private static Menge<java.lang.String> makeParaList(int n)
          +
        • +
        + + + +
          +
        • +

          getPublicFieldAssumptions

          +
          public TypeAssumptions getPublicFieldAssumptions()
          +
          Description copied from class: Class
          +
          Ermittelt die Sichtbaren Felder und Methoden der Klasse. + (Momentan sind im Projekt alle Felder und Methoden "package private", da der Parser keine Access-Modifier einlesen kann.
          +
          +
          Overrides:
          +
          getPublicFieldAssumptions in class Class
          +
          Returns:
          +
          Im Falle von einem FunN-Interface ist dies die apply-Methode
          +
          +
        • +
        + + + +
          +
        • +

          getApplyFunction

          +
          private FunNMethod getApplyFunction()
          +
          Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode
          +
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNMethod.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNMethod.html new file mode 100644 index 00000000..c8fb626f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/FunNMethod.html @@ -0,0 +1,378 @@ + + + + + +FunNMethod + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class FunNMethod

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FunNMethod

          +
          public FunNMethod(Menge<? extends Type> paralist)
          +
          +
          Parameters:
          +
          N - - Anzahl der Parameter (Beispiel: Fun2)
          +
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/GenericTypeInsertable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/GenericTypeInsertable.html new file mode 100644 index 00000000..2a1c6825 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/GenericTypeInsertable.html @@ -0,0 +1,239 @@ + + + + + +GenericTypeInsertable + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Interface GenericTypeInsertable

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getGenericVarDeclarationString

          +
          java.lang.String getGenericVarDeclarationString(java.lang.String genericVarDeclaration)
          +
        • +
        + + + +
          +
        • +

          getGenericVarDeclarationOffset

          +
          int getGenericVarDeclarationOffset()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/JavaCodeResult.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/JavaCodeResult.html new file mode 100644 index 00000000..db5ffc51 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/JavaCodeResult.html @@ -0,0 +1,425 @@ + + + + + +JavaCodeResult + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class JavaCodeResult

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.JavaCodeResult
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class JavaCodeResult
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          javaCode

          +
          private java.lang.String javaCode
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          JavaCodeResult

          +
          public JavaCodeResult()
          +
        • +
        + + + +
          +
        • +

          JavaCodeResult

          +
          public JavaCodeResult(java.lang.String javaCode)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getJavaCode

          +
          public java.lang.String getJavaCode()
          +
        • +
        + + + + + + + +
          +
        • +

          attach

          +
          public JavaCodeResult attach(java.lang.String javaCode)
          +
        • +
        + + + +
          +
        • +

          addUnresolvedTPH

          +
          public void addUnresolvedTPH(TypePlaceholder typePlaceholder)
          +
        • +
        + + + +
          +
        • +

          getUnresolvedTPH

          +
          public Menge<TypePlaceholder> getUnresolvedTPH()
          +
          Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden. + Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KarthesischesProdukt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KarthesischesProdukt.html new file mode 100644 index 00000000..2d14a4a3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KarthesischesProdukt.html @@ -0,0 +1,301 @@ + + + + + +KarthesischesProdukt + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class KarthesischesProdukt

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.KarthesischesProdukt
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public abstract class KarthesischesProdukt
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          KarthesischesProdukt

          +
          public KarthesischesProdukt()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          berechneKarthesischesProdukt

          +
          public static <M> Menge<Menge<M>> berechneKarthesischesProdukt(Menge<Menge<M>> m1)
          +
        • +
        + + + +
          +
        • +

          berechneKarthesischesProdukt

          +
          private static <M> Menge<Menge<M>> berechneKarthesischesProdukt(Menge<Menge<M>> m1,
          +                                                                Menge<Menge<M>> result)
          +
        • +
        + + + +
          +
        • +

          karthesischesProdukt

          +
          private static <M> Menge<Menge<M>> karthesischesProdukt(Menge<M> m1,
          +                                                        Menge<M> m2)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KomplexeMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KomplexeMenge.html new file mode 100644 index 00000000..90c0ef7a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/KomplexeMenge.html @@ -0,0 +1,292 @@ + + + + + +KomplexeMenge + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Interface KomplexeMenge<A>

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Menge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Menge.html new file mode 100644 index 00000000..cd7e5c2a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Menge.html @@ -0,0 +1,300 @@ + + + + + +Menge + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class Menge<A>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.util.AbstractCollection<E>
      • +
      • +
          +
        • java.util.AbstractList<E>
        • +
        • +
            +
          • java.util.Vector<A>
          • +
          • +
              +
            • de.dhbwstuttgart.typeinference.Menge<A>
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<A>, java.util.Collection<A>, java.util.List<A>, java.util.RandomAccess
      +
      +
      +
      Direct Known Subclasses:
      +
      BoundedClassIdentifierList, ImportDeclarations, ParaList
      +
      +
      +
      +
      public class Menge<A>
      +extends java.util.Vector<A>
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class java.util.Vector

          +capacityIncrement, elementCount, elementData
        • +
        +
          +
        • + + +

          Fields inherited from class java.util.AbstractList

          +modCount
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Menge() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.util.Vector

          +add, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, forEach, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, removeIf, removeRange, replaceAll, retainAll, set, setElementAt, setSize, size, sort, spliterator, subList, toArray, toArray, toString, trimToSize
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
          +
        • + + +

          Methods inherited from interface java.util.Collection

          +parallelStream, stream
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Menge

          +
          public Menge()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderConstraint.html new file mode 100644 index 00000000..ce11e2e4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderConstraint.html @@ -0,0 +1,421 @@ + + + + + +OderConstraint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class OderConstraint

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          logger

          +
          private static final Logger logger
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OderConstraint

          +
          public OderConstraint(ConstraintType p1,
          +                      ConstraintType p2)
          +
          Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu.
          +
          +
          Parameters:
          +
          p1 -
          +
          p2 -
          +
          +
        • +
        + + + +
          +
        • +

          OderConstraint

          +
          public OderConstraint()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addConstraint

          +
          public void addConstraint(ConstraintType p1,
          +                          ConstraintType p2)
          +
          Fügt ein Pair(p1, p2) dem Constraint hinzu
          +
          +
          Parameters:
          +
          p1 -
          +
          p2 -
          +
          +
        • +
        + + + +
          +
        • +

          addConstraint

          +
          public void addConstraint(ConstraintPair toAdd)
          +
          Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw. TypePlaceholder sind, so werden sie in einen RefType umgewandelt.
          +
          +
          Parameters:
          +
          toAdd -
          +
          +
        • +
        + + + +
          +
        • +

          addConstraint

          +
          public void addConstraint(UndConstraint methodConstraint)
          +
        • +
        + + + +
          +
        • +

          filterWrongConstraints

          +
          void filterWrongConstraints(Unifier unifier)
          +
        • +
        + + + +
          +
        • +

          filterUndConstraints

          +
          UndConstraint filterUndConstraints()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderMenge.html new file mode 100644 index 00000000..f6070667 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/OderMenge.html @@ -0,0 +1,407 @@ + + + + + +OderMenge + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class OderMenge<A>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.OderMenge<A>
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.PairOperator.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.PairOperator.html new file mode 100644 index 00000000..5dc27a40 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.PairOperator.html @@ -0,0 +1,357 @@ + + + + + +Pair.PairOperator + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Enum Pair.PairOperator

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Enum<Pair.PairOperator>
      • +
      • +
          +
        • de.dhbwstuttgart.typeinference.Pair.PairOperator
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Comparable<Pair.PairOperator>
      +
      +
      +
      Enclosing class:
      +
      Pair
      +
      +
      +
      +
      public static enum Pair.PairOperator
      +extends java.lang.Enum<Pair.PairOperator>
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static Pair.PairOperatorvalueOf(java.lang.String name) +
        Returns the enum constant of this type with the specified name.
        +
        static Pair.PairOperator[]values() +
        Returns an array containing the constants of this enum type, in +the order they are declared.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Enum

          +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Pair.PairOperator[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Pair.PairOperator c : Pair.PairOperator.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Pair.PairOperator valueOf(java.lang.String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
          +
          java.lang.NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.html new file mode 100644 index 00000000..de89ac07 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Pair.html @@ -0,0 +1,690 @@ + + + + + +Pair + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class Pair

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.Pair
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Pair
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          isEqual

          +
          public boolean isEqual()
          +
        • +
        + + + +
          +
        • +

          copyType

          +
          public static Type copyType(Type T)
          +
        • +
        + + + +
          +
        • +

          getTA1Copy

          +
          public Type getTA1Copy()
          +
        • +
        + + + +
          +
        • +

          getTA2Copy

          +
          public Type getTA2Copy()
          +
        • +
        + + + +
          +
        • +

          copyPair

          +
          public Pair copyPair()
          +
        • +
        + + + +
          +
        • +

          Pair_isEquiv

          +
          public boolean Pair_isEquiv(Pair p)
          +
        • +
        + + + +
          +
        • +

          isInMenge

          +
          public boolean isInMenge(Menge<Pair> V)
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +

          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          Parameters:
          +
          obj -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          instanzeEquals

          +
          public boolean instanzeEquals(java.lang.Object obj)
          +
          Author: Arne Lüdtke
          + Überprüft ob die Paare die gleichen Instanzen sind.
          +
        • +
        + + + +
          +
        • +

          OperatorEqual

          +
          public boolean OperatorEqual()
          +
          Author: Arne Lüdtke
          + Abfrage, ob Operator vom Typ Equal ist.
          +
        • +
        + + + +
          +
        • +

          OperatorSmaller

          +
          public boolean OperatorSmaller()
          +
          Author: Arne Lüdtke
          + Abfrage, ob Operator vom Typ Smaller ist.
          +
        • +
        + + + +
          +
        • +

          OperatorSmallerExtends

          +
          public boolean OperatorSmallerExtends()
          +
          Author: Arne Lüdtke
          + Abfrage, ob Operator vom Typ SmallerExtends ist.
          +
        • +
        + + + +
          +
        • +

          GetOperator

          +
          public Pair.PairOperator GetOperator()
          +
          Author: Arne Lüdtke
          + Gibt den Operator zurück.
          +
        • +
        + + + +
          +
        • +

          SetOperator

          +
          public void SetOperator(Pair.PairOperator operator)
          +
          Author: Arne Lüdtke
          + Setzt den Operator
          +
          +
          Parameters:
          +
          operator - - Operator to set.
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public Pair clone()
          +
          Author: Arne Lüdtke
          + Erzeugt einen Klon des Paares.
          +
          +
          Overrides:
          +
          clone in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          getTypePlaceholder

          +
          public Menge<TypePlaceholder> getTypePlaceholder()
          +
          Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück. + (Immer zwischen 0 und 2 Stück ;P)
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypes

          +
          public Menge<Type> getTypes()
          +
          +
          Returns:
          +
          Menge aus TA1 und TA2
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ResultSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ResultSet.html new file mode 100644 index 00000000..711ccc16 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/ResultSet.html @@ -0,0 +1,490 @@ + + + + + +ResultSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class ResultSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.ResultSet
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Iterable<Pair>
      +
      +
      +
      +
      public class ResultSet
      +extends java.lang.Object
      +implements java.lang.Iterable<Pair>
      +
      Im Grunde Sammlung von Pair s mit Equal-Operatoren.
      +
      +
      Author:
      +
      Andreas Stadelmeier, a10023
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ResultSet

          +
          public ResultSet(Menge<Pair> resultSet)
          +
        • +
        + + + +
          +
        • +

          ResultSet

          +
          public ResultSet()
          +
          Erstellt ein leeres ResultSet
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResultSet

          +
          public Menge<Pair> getResultSet()
          +
        • +
        + + + +
          +
        • +

          getTypeEqualTo

          +
          public Type getTypeEqualTo(Type type)
          +
          Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void
          +
          +
          Parameters:
          +
          type -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          findPairWithTypeEqualTo

          +
          private int findPairWithTypeEqualTo(Type type,
          +                                    Menge<Pair> inResultPairs)
          +
        • +
        + + + +
          +
        • +

          iterator

          +
          public java.util.Iterator<Pair> iterator()
          +
          +
          Specified by:
          +
          iterator in interface java.lang.Iterable<Pair>
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          public boolean contains(Type tA1)
          +
          Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst. + Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht.
          +
          +
          Parameters:
          +
          tA1 -
          +
          Returns:
          +
          true, falls der gesuchte Typ enthalten ist.
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          getConstraintsFor

          +
          public Menge<Pair> getConstraintsFor(Menge<TypePlaceholder> typePlaceholders)
          +
          Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen. + Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypesInvolving

          +
          public Menge<Type> getTypesInvolving(Menge<TypePlaceholder> unresolvedTPH)
          +
          Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden.
          +
          +
          Parameters:
          +
          unresolvedTPH -
          +
          Returns:
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/SingleConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/SingleConstraint.html new file mode 100644 index 00000000..952df2c2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/SingleConstraint.html @@ -0,0 +1,323 @@ + + + + + +SingleConstraint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class SingleConstraint

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      KomplexeMenge<Pair>
      +
      +
      +
      +
      public class SingleConstraint
      +extends EinzelElement<Pair>
      +
      Beschreibung von Herrn Plümicke: + "The set of constraints consists of constraints of the form θ R θ' , where θ and + θ' are Java types and R (R ∈ { < , +
      +
      Author:
      +
      AI10023 - Andreas Stadelmeier + + Die Klasse stellt ein OderConstraint-Set dar, welches nur aus einem Constraint besteht.
      +
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TIPConstraints.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TIPConstraints.html new file mode 100644 index 00000000..572997a1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TIPConstraints.html @@ -0,0 +1,241 @@ + + + + + +TIPConstraints + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class TIPConstraints

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.TIPConstraints
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TIPConstraints
      +extends java.lang.Object
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeInsertable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeInsertable.html new file mode 100644 index 00000000..60baaab0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeInsertable.html @@ -0,0 +1,300 @@ + + + + + +TypeInsertable + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Interface TypeInsertable

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setOffset

          +
          void setOffset(int offset)
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          java.lang.String getIdentifier()
          +
        • +
        + + + +
          +
        • +

          createTypeInsertPoint

          +
          TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph,
          +                                      ResultSet resultSet)
          +
          Errechnet den TypeInsertPoint für das TypeInsertable. + TypeInsertPoints sollten nur über diese Funktion erstellt werden.
          +
          +
          Parameters:
          +
          tph -
          +
          resultSet -
          +
          Returns:
          +
          - kann auch null zurückgeben.
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Typeable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Typeable.html new file mode 100644 index 00000000..7d8a58f7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/Typeable.html @@ -0,0 +1,246 @@ + + + + + +Typeable + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Interface Typeable

    +
    +
    + +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setType

          +
          void setType(Type typ)
          +
          +
          Parameters:
          +
          typ - Der Typ der Typable-Expression/Statement
          +
          +
        • +
        + + + +
          +
        • +

          getType

          +
          Type getType()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.html new file mode 100644 index 00000000..6e329e3d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/TypeinferenceResultSet.html @@ -0,0 +1,466 @@ + + + + + +TypeinferenceResultSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class TypeinferenceResultSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.TypeinferenceResultSet
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TypeinferenceResultSet
      +extends java.lang.Object
      +
      Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche + Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine + Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.
      + Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die + Compiler-API zur�ckgegeben.
      +
      +
      Version:
      +
      $Date: 2013/09/22 20:13:02 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          constraints

          +
          private Menge<Pair> constraints
          +
          Alle Constraints vor der Unifizierung. + Dies ist nur eine Liste von Pair-Objekten (jedes Pair Objekt bildet dabei einen Constraint: Bsp.: TA <. TB)
          +
        • +
        + + + +
          +
        • +

          unifiedConstraints

          +
          private ResultSet unifiedConstraints
          +
          Das unifizierte ConstaraintsSet
          +
        • +
        + + + +
          +
        • +

          ownerOfResultSet

          +
          private Class ownerOfResultSet
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeinferenceResultSet

          +
          public TypeinferenceResultSet(Class inferedClass,
          +                              Menge<Pair> constraints,
          +                              ResultSet unifiedConstraints)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getConstraints

          +
          public Menge<Pair> getConstraints()
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getUnifiedConstraints

          +
          public ResultSet getUnifiedConstraints()
          +
          +
          Returns:
          +
          Das fertige ConstraintsSet dieser CTypeRecunstructionResult
          +
          +
        • +
        + + + +
          +
        • +

          getTypeOfPlaceholder

          +
          public Type getTypeOfPlaceholder(TypePlaceholder tph)
          +
          Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert.
          +
        • +
        + + + +
          +
        • +

          getInterferedClass

          +
          public Class getInterferedClass()
          +
          Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
          +
          +
          Returns:
          +
          Gibt die Klasse zurück der dieses ResultSet zugeordnet ist.
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          getTypeInsertionPoints

          +
          public TypeInsertSet getTypeInsertionPoints()
          +
          Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext + Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          codegen

          +
          public void codegen()
          +
          Startet die Bytecodegenerierung dieser Lösung. + Dabei wird die codegen-Methode der inferierten Klasse mit diesem ResultSet aufgerufen.
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndConstraint.html new file mode 100644 index 00000000..ca58adc7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndConstraint.html @@ -0,0 +1,378 @@ + + + + + +UndConstraint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class UndConstraint

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      KomplexeMenge<Pair>, java.lang.Iterable<Pair>
      +
      +
      +
      +
      public class UndConstraint
      +extends UndMenge<Pair>
      +implements java.lang.Iterable<Pair>
      +
      Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class UndMenge<Pair>
          +
          +
        • +
        + + + +
          +
        • +

          iterator

          +
          public java.util.Iterator<Pair> iterator()
          +
          +
          Specified by:
          +
          iterator in interface java.lang.Iterable<Pair>
          +
          +
        • +
        + + + + + + + +
          +
        • +

          addConstraint

          +
          public void addConstraint(ConstraintPair constraintPair)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndMenge.html new file mode 100644 index 00000000..78ea735a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/UndMenge.html @@ -0,0 +1,424 @@ + + + + + +UndMenge + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference
    +

    Class UndMenge<A>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.UndMenge<A>
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/Assumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/Assumption.html new file mode 100644 index 00000000..18328e0f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/Assumption.html @@ -0,0 +1,342 @@ + + + + + +Assumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class Assumption

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.assumptions.Assumption
      • +
      +
    • +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ModifierConstructor and Description
        protected Assumption() +
        Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden.
        +
         Assumption(TypeInsertable ass) 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Assumption

          +
          protected Assumption()
          +
          Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden.
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAssumedType

          +
          public Type getAssumedType()
          +
        • +
        + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.html new file mode 100644 index 00000000..414d76b2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ClassAssumption.html @@ -0,0 +1,347 @@ + + + + + +ClassAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class ClassAssumption

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ClassAssumption
      +extends java.lang.Object
      +
      Nicht wirklich eine Assumption. + Wird benutzt um Typen von Variablen zu verifizieren.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private ClassclassType 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        booleanequals(java.lang.Object obj) 
        ClassgetAssumedClass() 
        java.lang.StringtoString() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          classType

          +
          private Class classType
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ClassAssumption

          +
          public ClassAssumption(Class cls)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAssumedClass

          +
          public Class getAssumedClass()
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.html new file mode 100644 index 00000000..23a3741d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ConstructorAssumption.html @@ -0,0 +1,355 @@ + + + + + +ConstructorAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class ConstructorAssumption

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.html new file mode 100644 index 00000000..45d1293c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.html @@ -0,0 +1,389 @@ + + + + + +FieldAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class FieldAssumption

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          parentClass

          +
          private Class parentClass
          +
        • +
        + + + +
          +
        • +

          field

          +
          private Field field
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FieldAssumption

          +
          public FieldAssumption(Field fieldVar,
          +                       Class inClass)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getParentClass

          +
          public Class getParentClass()
          +
        • +
        + + + + + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.html new file mode 100644 index 00000000..0165c5e9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/GenericVarAssumption.html @@ -0,0 +1,350 @@ + + + + + +GenericVarAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class GenericVarAssumption

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class GenericVarAssumption
      +extends Assumption
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.html new file mode 100644 index 00000000..bd5c8485 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/LocalVarAssumption.html @@ -0,0 +1,338 @@ + + + + + +LocalVarAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class LocalVarAssumption

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class LocalVarAssumption
      +extends Assumption
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.html new file mode 100644 index 00000000..34f39be3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.html @@ -0,0 +1,444 @@ + + + + + +MethodAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class MethodAssumption

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          method

          +
          protected Method method
          +
        • +
        + + + +
          +
        • +

          parentClass

          +
          private Class parentClass
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MethodAssumption

          +
          public MethodAssumption(Method assumedMethod,
          +                        Class parentClass)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getMethodName

          +
          public java.lang.String getMethodName()
          +
        • +
        + + + +
          +
        • +

          getParaCount

          +
          public int getParaCount()
          +
        • +
        + + + +
          +
        • +

          getMethod

          +
          protected Method getMethod()
          +
        • +
        + + + +
          +
        • +

          getParameterType

          +
          public Type getParameterType(int i)
          +
          Liefert den Typ des i-ten Parameters dieser Method-Assumption
          +
          +
          Parameters:
          +
          i -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getParentClassType

          +
          public Type getParentClassType()
          +
        • +
        + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class FieldAssumption
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.html new file mode 100644 index 00000000..e54a43e6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/ParameterAssumption.html @@ -0,0 +1,254 @@ + + + + + +ParameterAssumption + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class ParameterAssumption

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class ParameterAssumption
      +extends Assumption
      +
      ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ParameterAssumption

          +
          public ParameterAssumption(FormalParameter parameter)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.html new file mode 100644 index 00000000..6cb27f3a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.html @@ -0,0 +1,818 @@ + + + + + +TypeAssumptions + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.assumptions
    +

    Class TypeAssumptions

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TypeAssumptions
      +extends java.lang.Object
      +
      Eine Sammlung von TypeAssumptions. + Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben.
      +
      +
      Author:
      +
      janulrich + + Es gibt verschiedene Assumptions: + 1. Methoden Assumptions + 2. Konstruktor Assumptions + 3. Lokale Variablen Assumptions + 4. Feldvariablen Assumptions
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeAssumptions

          +
          public TypeAssumptions()
          +
          Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
          +
          +
          Parameters:
          +
          klassenname - - Wert für "this"
          +
          +
        • +
        + + + +
          +
        • +

          TypeAssumptions

          +
          public TypeAssumptions(JavaClassName thisClassName)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getFieldVars

          +
          public Menge<FieldAssumption> getFieldVars(java.lang.String withName)
          +
          Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht.
          +
          +
          Parameters:
          +
          withName -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypeOfFieldVar

          +
          public Type getTypeOfFieldVar(java.lang.String withName,
          +                              Class inClass)
          +
          Liefert den Typ einer Feldvariable der Klasse inClass
          +
          +
          Parameters:
          +
          withName -
          +
          inClass -
          +
          Returns:
          +
          null, falls die Klasse kein zugängliches Feld enthält
          +
          +
        • +
        + + + +
          +
        • +

          getMethods2

          +
          @Deprecated
          +public Menge<MethodAssumption> getMethods2(java.lang.String withName)
          +
          Deprecated. 
          +
          Ermittelt alle bekannten Methoden mit dem Namen withName
          +
          +
          Parameters:
          +
          withName -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getTypeOfLocalVar2

          +
          @Deprecated
          +public Type getTypeOfLocalVar2(java.lang.String withName)
          +
          Deprecated. 
          +
          Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse
          +
          +
          Parameters:
          +
          withName -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getMethodAssumptions

          +
          public Menge<MethodAssumption> getMethodAssumptions(java.lang.String methodName,
          +                                                    int parameterCount)
          +
          Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
          +
          +
          Parameters:
          +
          methodName -
          +
          i - Die Parameter, welche die Methode verarbeiten soll
          +
          Returns:
          +
          Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können.
          +
          +
        • +
        + + + +
          +
        • +

          getVarType

          +
          public Type getVarType(java.lang.String variableName,
          +                       Class inScope)
          +
          Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen. + In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht.
          +
          +
          Parameters:
          +
          variableName - - der Identifier der gesuchten Variablen
          +
          inScope - - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht.
          +
          Returns:
          +
          - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt.
          +
          +
        • +
        + + + +
          +
        • +

          getMethodAssumptions

          +
          public Menge<MethodAssumption> getMethodAssumptions(JavaClassName className,
          +                                                    java.lang.String methodName)
          +
          Sucht nach MethodAssumptions einer bestimmten Klasse mit einem bestimmten Namen.
          +
          +
          Parameters:
          +
          className -
          +
          methodName -
          +
          parameterCount -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getAssumptionsFor

          +
          private Menge<FieldAssumption> getAssumptionsFor(JavaClassName className)
          +
          Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind.
          +
          +
          Parameters:
          +
          className -
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          addAssumption

          +
          public void addAssumption(Assumption ass)
          +
        • +
        + + + +
          +
        • +

          addAllAssumptions

          +
          private void addAllAssumptions(Menge<Assumption> assumptions)
          +
        • +
        + + + + + + + +
          +
        • +

          clone

          +
          public TypeAssumptions clone()
          +
          +
          Overrides:
          +
          clone in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          getTypeFor

          +
          public ConstraintType getTypeFor(Type t,
          +                                 SyntaxTreeNode inNode)
          +
          Kontrolliert den vom Parser gesetzten Typ. + Erweitert dessen Bezeichnung, wenn nötig.
          +
          +
          Parameters:
          +
          t -
          +
          Returns:
          +
          null, falls der Typ nicht vorhanden ist.
          +
          +
        • +
        + + + +
          +
        • +

          addClassAssumption

          +
          public void addClassAssumption(ClassAssumption classAssumption)
          +
          Fügt eine TypAssumption an. + Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind. + Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren.
          +
          +
          Parameters:
          +
          classAssumption -
          +
          +
        • +
        + + + +
          +
        • +

          getConstructorAssumption

          +
          public ConstructorAssumption getConstructorAssumption(java.lang.String className,
          +                                                      int paramCount)
          +
          +
          Returns:
          +
          Null, falls kein Konstruktor vorhanden.
          +
          +
        • +
        + + + +
          +
        • +

          addGenericVarAssumption

          +
          public void addGenericVarAssumption(GenericTypeVar genericTypeVar)
          +
          Fügt eine Generische Typvariablen den Assumptions hinzu
          +
          +
          Parameters:
          +
          genericTypeVar -
          +
          +
        • +
        + + + + + + + + +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/Assumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/Assumption.html new file mode 100644 index 00000000..a55c9bf7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/Assumption.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.Assumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.Assumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ClassAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ClassAssumption.html new file mode 100644 index 00000000..47fa9c33 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ClassAssumption.html @@ -0,0 +1,192 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.ClassAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ConstructorAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ConstructorAssumption.html new file mode 100644 index 00000000..a2ee6e58 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ConstructorAssumption.html @@ -0,0 +1,178 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/FieldAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/FieldAssumption.html new file mode 100644 index 00000000..b2b60c22 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/FieldAssumption.html @@ -0,0 +1,202 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.FieldAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/GenericVarAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/GenericVarAssumption.html new file mode 100644 index 00000000..6b6f3797 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/GenericVarAssumption.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/LocalVarAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/LocalVarAssumption.html new file mode 100644 index 00000000..a02af713 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/LocalVarAssumption.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/MethodAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/MethodAssumption.html new file mode 100644 index 00000000..1885f7fd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/MethodAssumption.html @@ -0,0 +1,235 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.MethodAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ParameterAssumption.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ParameterAssumption.html new file mode 100644 index 00000000..71708c30 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/ParameterAssumption.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/TypeAssumptions.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/TypeAssumptions.html new file mode 100644 index 00000000..0b5237f2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/class-use/TypeAssumptions.html @@ -0,0 +1,796 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-frame.html new file mode 100644 index 00000000..78ff2935 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-frame.html @@ -0,0 +1,28 @@ + + + + + +de.dhbwstuttgart.typeinference.assumptions + + + + + +

    de.dhbwstuttgart.typeinference.assumptions

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-summary.html new file mode 100644 index 00000000..09db9086 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-summary.html @@ -0,0 +1,180 @@ + + + + + +de.dhbwstuttgart.typeinference.assumptions + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.typeinference.assumptions

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-tree.html new file mode 100644 index 00000000..225bd728 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-tree.html @@ -0,0 +1,154 @@ + + + + + +de.dhbwstuttgart.typeinference.assumptions Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.typeinference.assumptions

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-use.html new file mode 100644 index 00000000..a0866038 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/assumptions/package-use.html @@ -0,0 +1,358 @@ + + + + + +Uses of Package de.dhbwstuttgart.typeinference.assumptions + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.typeinference.assumptions

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintPair.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintPair.html new file mode 100644 index 00000000..7af153d2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintPair.html @@ -0,0 +1,185 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.ConstraintPair + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.ConstraintPair

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintType.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintType.html new file mode 100644 index 00000000..3661c7fd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintType.html @@ -0,0 +1,350 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.ConstraintType + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.ConstraintType

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintsSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintsSet.html new file mode 100644 index 00000000..06522e00 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ConstraintsSet.html @@ -0,0 +1,515 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.ConstraintsSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.ConstraintsSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/EinzelElement.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/EinzelElement.html new file mode 100644 index 00000000..68dc3382 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/EinzelElement.html @@ -0,0 +1,168 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.EinzelElement + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.EinzelElement

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunN.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunN.html new file mode 100644 index 00000000..960d521c --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunN.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.FunN + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.FunN

    +
    +
    No usage of de.dhbwstuttgart.typeinference.FunN
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNInterface.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNInterface.html new file mode 100644 index 00000000..6c7aad3e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNInterface.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.FunNInterface + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.FunNInterface

    +
    +
    No usage of de.dhbwstuttgart.typeinference.FunNInterface
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNMethod.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNMethod.html new file mode 100644 index 00000000..2f85d0fb --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/FunNMethod.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.FunNMethod + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.FunNMethod

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/GenericTypeInsertable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/GenericTypeInsertable.html new file mode 100644 index 00000000..2fc176a4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/GenericTypeInsertable.html @@ -0,0 +1,277 @@ + + + + + +Uses of Interface de.dhbwstuttgart.typeinference.GenericTypeInsertable + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.typeinference.GenericTypeInsertable

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/JavaCodeResult.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/JavaCodeResult.html new file mode 100644 index 00000000..24dcb530 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/JavaCodeResult.html @@ -0,0 +1,596 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.JavaCodeResult + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.JavaCodeResult

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KarthesischesProdukt.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KarthesischesProdukt.html new file mode 100644 index 00000000..c7457103 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KarthesischesProdukt.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.KarthesischesProdukt + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.KarthesischesProdukt

    +
    +
    No usage of de.dhbwstuttgart.typeinference.KarthesischesProdukt
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KomplexeMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KomplexeMenge.html new file mode 100644 index 00000000..eac83f59 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/KomplexeMenge.html @@ -0,0 +1,262 @@ + + + + + +Uses of Interface de.dhbwstuttgart.typeinference.KomplexeMenge + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.typeinference.KomplexeMenge

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html new file mode 100644 index 00000000..ec67989f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html @@ -0,0 +1,3429 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.Menge + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.Menge

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderConstraint.html new file mode 100644 index 00000000..0089dd7f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderConstraint.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.OderConstraint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.OderConstraint

    +
    +
    No usage of de.dhbwstuttgart.typeinference.OderConstraint
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderMenge.html new file mode 100644 index 00000000..e75eae26 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/OderMenge.html @@ -0,0 +1,189 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.OderMenge + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.OderMenge

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.PairOperator.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.PairOperator.html new file mode 100644 index 00000000..0f57c8c5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.PairOperator.html @@ -0,0 +1,228 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.Pair.PairOperator + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.Pair.PairOperator

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html new file mode 100644 index 00000000..e52b3ef9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html @@ -0,0 +1,889 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.Pair + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.Pair

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ResultSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ResultSet.html new file mode 100644 index 00000000..cb62bfa3 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/ResultSet.html @@ -0,0 +1,726 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.ResultSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.ResultSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/SingleConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/SingleConstraint.html new file mode 100644 index 00000000..5bf8136d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/SingleConstraint.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.SingleConstraint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.SingleConstraint

    +
    +
    No usage of de.dhbwstuttgart.typeinference.SingleConstraint
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TIPConstraints.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TIPConstraints.html new file mode 100644 index 00000000..0b6aaca8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TIPConstraints.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.TIPConstraints + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.TIPConstraints

    +
    +
    No usage of de.dhbwstuttgart.typeinference.TIPConstraints
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeInsertable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeInsertable.html new file mode 100644 index 00000000..e85d6c6d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeInsertable.html @@ -0,0 +1,338 @@ + + + + + +Uses of Interface de.dhbwstuttgart.typeinference.TypeInsertable + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.typeinference.TypeInsertable

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Typeable.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Typeable.html new file mode 100644 index 00000000..9a294a13 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Typeable.html @@ -0,0 +1,438 @@ + + + + + +Uses of Interface de.dhbwstuttgart.typeinference.Typeable + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.typeinference.Typeable

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeinferenceResultSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeinferenceResultSet.html new file mode 100644 index 00000000..47674828 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/TypeinferenceResultSet.html @@ -0,0 +1,235 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.TypeinferenceResultSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.TypeinferenceResultSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndConstraint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndConstraint.html new file mode 100644 index 00000000..8a85e17d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndConstraint.html @@ -0,0 +1,221 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.UndConstraint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.UndConstraint

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndMenge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndMenge.html new file mode 100644 index 00000000..c8eebfbb --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/UndMenge.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.UndMenge + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.UndMenge

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/DebugException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/DebugException.html new file mode 100644 index 00000000..c9c4fa20 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/DebugException.html @@ -0,0 +1,267 @@ + + + + + +DebugException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.exceptions
    +

    Class DebugException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • java.lang.RuntimeException
          • +
          • +
              +
            • de.dhbwstuttgart.typeinference.exceptions.DebugException
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class DebugException
      +extends java.lang.RuntimeException
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        DebugException(java.lang.String message) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DebugException

          +
          public DebugException(java.lang.String message)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/NotImplementedException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/NotImplementedException.html new file mode 100644 index 00000000..ff548060 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/NotImplementedException.html @@ -0,0 +1,267 @@ + + + + + +NotImplementedException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.exceptions
    +

    Class NotImplementedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • java.lang.RuntimeException
          • +
          • +
              +
            • de.dhbwstuttgart.typeinference.exceptions.NotImplementedException
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      +
      public class NotImplementedException
      +extends java.lang.RuntimeException
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          NotImplementedException

          +
          public NotImplementedException()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/ParserError.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/ParserError.html new file mode 100644 index 00000000..e10aa6e7 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/ParserError.html @@ -0,0 +1,279 @@ + + + + + +ParserError + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.exceptions
    +

    Class ParserError

    +
    +
    + +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Summary

        + +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.html new file mode 100644 index 00000000..2c68752b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/TypeinferenceException.html @@ -0,0 +1,398 @@ + + + + + +TypeinferenceException + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.exceptions
    +

    Class TypeinferenceException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • java.lang.RuntimeException
          • +
          • +
              +
            • de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable
      +
      +
      +
      Direct Known Subclasses:
      +
      ParserError
      +
      +
      +
      +
      public class TypeinferenceException
      +extends java.lang.RuntimeException
      +
      Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird. + Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst.
      +
      +
      Author:
      +
      Andreas Stadelmeier, a10023
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private java.lang.Stringmessage 
        private intoffset +
        Das Offset im Quelltext bei dem das Problem aufgetaucht ist
        +
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        java.lang.StringgetMessage() 
        intgetOffset() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Throwable

          +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          offset

          +
          private int offset
          +
          Das Offset im Quelltext bei dem das Problem aufgetaucht ist
          +
        • +
        + + + +
          +
        • +

          message

          +
          private java.lang.String message
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeinferenceException

          +
          public TypeinferenceException(java.lang.String message,
          +                              SyntaxTreeNode problemSource)
          +
        • +
        + + + +
          +
        • +

          TypeinferenceException

          +
          public TypeinferenceException(java.lang.String message,
          +                              int offset)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
          +
          Returns:
          +
          Der Offset an dem im Quellcode der Fehler aufgetreten ist.
          +
          +
        • +
        + + + +
          +
        • +

          getMessage

          +
          public java.lang.String getMessage()
          +
          +
          Overrides:
          +
          getMessage in class java.lang.Throwable
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/DebugException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/DebugException.html new file mode 100644 index 00000000..a997e045 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/DebugException.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.exceptions.DebugException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.exceptions.DebugException

    +
    +
    No usage of de.dhbwstuttgart.typeinference.exceptions.DebugException
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/NotImplementedException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/NotImplementedException.html new file mode 100644 index 00000000..6ae5f729 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/NotImplementedException.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.exceptions.NotImplementedException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.exceptions.NotImplementedException

    +
    +
    No usage of de.dhbwstuttgart.typeinference.exceptions.NotImplementedException
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/ParserError.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/ParserError.html new file mode 100644 index 00000000..334a2046 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/ParserError.html @@ -0,0 +1,184 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.exceptions.ParserError + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.exceptions.ParserError

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/TypeinferenceException.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/TypeinferenceException.html new file mode 100644 index 00000000..42abca2e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/class-use/TypeinferenceException.html @@ -0,0 +1,189 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-frame.html new file mode 100644 index 00000000..9b2a3000 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-frame.html @@ -0,0 +1,23 @@ + + + + + +de.dhbwstuttgart.typeinference.exceptions + + + + + +

    de.dhbwstuttgart.typeinference.exceptions

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-summary.html new file mode 100644 index 00000000..4e979e6f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-summary.html @@ -0,0 +1,156 @@ + + + + + +de.dhbwstuttgart.typeinference.exceptions + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.typeinference.exceptions

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-tree.html new file mode 100644 index 00000000..97c7ea60 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-tree.html @@ -0,0 +1,155 @@ + + + + + +de.dhbwstuttgart.typeinference.exceptions Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.typeinference.exceptions

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Throwable (implements java.io.Serializable) + +
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-use.html new file mode 100644 index 00000000..a7959667 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/exceptions/package-use.html @@ -0,0 +1,183 @@ + + + + + +Uses of Package de.dhbwstuttgart.typeinference.exceptions + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.typeinference.exceptions

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-frame.html new file mode 100644 index 00000000..b987dff1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-frame.html @@ -0,0 +1,49 @@ + + + + + +de.dhbwstuttgart.typeinference + + + + + +

    de.dhbwstuttgart.typeinference

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-summary.html new file mode 100644 index 00000000..90d5a72d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-summary.html @@ -0,0 +1,271 @@ + + + + + +de.dhbwstuttgart.typeinference + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.typeinference

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-tree.html new file mode 100644 index 00000000..fdd7c4b5 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-tree.html @@ -0,0 +1,235 @@ + + + + + +de.dhbwstuttgart.typeinference Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.typeinference

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +

    Enum Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-use.html new file mode 100644 index 00000000..68bd36e8 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/package-use.html @@ -0,0 +1,700 @@ + + + + + +Uses of Package de.dhbwstuttgart.typeinference + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.typeinference

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.html new file mode 100644 index 00000000..92ab686a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.html @@ -0,0 +1,466 @@ + + + + + +GenericTypeInsertPoint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class GenericTypeInsertPoint

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Comparable<SourcePatchPoint>
      +
      +
      +
      +
      public class GenericTypeInsertPoint
      +extends SourcePatchPoint
      +
      Ein InsertPoint für Generische Variablen + Wird beim Einsetzen eines TIP generiert. + Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTypeInsertString

          +
          public java.lang.String getTypeInsertString()
          +
          Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert.
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + + + + + + + + + + + + + + + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarDeclarationPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarDeclarationPatch.html new file mode 100644 index 00000000..59484678 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarDeclarationPatch.html @@ -0,0 +1,346 @@ + + + + + +GenericVarDeclarationPatch + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class GenericVarDeclarationPatch

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class GenericVarDeclarationPatch
      +extends java.lang.Object
      +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarDeclarationPatch

          +
          public GenericVarDeclarationPatch(TypePlaceholder p)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getInsertString

          +
          public java.lang.String getInsertString(ResultSet resultSet)
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object o)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarExtendsDeclarationPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarExtendsDeclarationPatch.html new file mode 100644 index 00000000..1936b575 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarExtendsDeclarationPatch.html @@ -0,0 +1,367 @@ + + + + + +GenericVarExtendsDeclarationPatch + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class GenericVarExtendsDeclarationPatch

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class GenericVarExtendsDeclarationPatch
      +extends java.lang.Object
      +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable mit extend Bedingung.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          genericPair

          +
          private Pair genericPair
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarExtendsDeclarationPatch

          +
          public GenericVarExtendsDeclarationPatch(Pair p)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          definesGenericVar

          +
          public boolean definesGenericVar(TypePlaceholder tph)
          +
          Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2
          +
          +
          Parameters:
          +
          tph -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getInsertString

          +
          public java.lang.String getInsertString(ResultSet resultSet)
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object o)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarPatch.html new file mode 100644 index 00000000..021b9184 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/GenericVarPatch.html @@ -0,0 +1,410 @@ + + + + + +GenericVarPatch + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class GenericVarPatch

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class GenericVarPatch
      +extends java.lang.Object
      +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.html new file mode 100644 index 00000000..bfaae601 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/SourcePatchPoint.html @@ -0,0 +1,374 @@ + + + + + +SourcePatchPoint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class SourcePatchPoint

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SourcePatchPoint

          +
          public SourcePatchPoint()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getOffset

          +
          public abstract int getOffset()
          +
        • +
        + + + +
          +
        • +

          getResultSet

          +
          public ResultSet getResultSet()
          +
        • +
        + + + + + + + +
          +
        • +

          patch

          +
          public abstract JavaCodeResult patch(java.lang.String fileContent,
          +                                     int additionalOffset)
          +
        • +
        + + + +
          +
        • +

          getInsertLength

          +
          public abstract int getInsertLength()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.html new file mode 100644 index 00000000..f497b57f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertPoint.html @@ -0,0 +1,550 @@ + + + + + +TypeInsertPoint + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class TypeInsertPoint

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Comparable<SourcePatchPoint>
      +
      +
      +
      +
      public class TypeInsertPoint
      +extends SourcePatchPoint
      +
      Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar. + Mehrere TypeInsertPoint's werden in einem TypInsertSet zusammengefasst.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeInsertPoint

          +
          public TypeInsertPoint(TypeInsertable insertPoint,
          +                       SyntaxTreeNode insertNode,
          +                       Type insertType,
          +                       ResultSet resultSet)
          +
          Dieser Konstruktor erstellt einen TypInsertPoint
          +
          +
          Parameters:
          +
          insertPoint -
          +
          insertNode - - muss das gleiche sein wie "insertPoint"
          +
          insertType - - der einzusetzende Typ
          +
          resultSet -
          +
          generics - - die generischen Parameter des einzusetzenden Typs
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          patch

          +
          public JavaCodeResult patch(java.lang.String fileContent,
          +                            int additionalOffset)
          +
          Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein.
          +
          +
          Specified by:
          +
          patch in class SourcePatchPoint
          +
          Parameters:
          +
          fileContent - - der Quelltext
          +
          additionalOffset - - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden.
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getOffset

          +
          public int getOffset()
          +
          +
          Specified by:
          +
          getOffset in class SourcePatchPoint
          +
          Returns:
          +
          Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde.
          +
          +
        • +
        + + + +
          +
        • +

          getInsertType

          +
          protected Type getInsertType()
          +
        • +
        + + + +
          +
        • +

          getTypeInsertString

          +
          public JavaCodeResult getTypeInsertString()
          +
          Die Zeichenkette die durch diesen TypeInsertPoint eingesetzt wird. (Der Typ als String)
          +
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getInsertPoint

          +
          public IItemWithOffset getInsertPoint()
          +
          +
          Returns:
          +
          - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.html new file mode 100644 index 00000000..677643b6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.html @@ -0,0 +1,505 @@ + + + + + +TypeInsertSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class TypeInsertSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TypeInsertSet
      +extends java.lang.Object
      +
      Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören. + Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt, + müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeInsertSet

          +
          public TypeInsertSet(ResultSet resultSet)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          add

          +
          public void add(TypeInsertPoint typeInsertPoint)
          +
          Fügt einen TypeInsertPoint dem TypeInsertSet hinzu.
          +
          +
          Parameters:
          +
          typeInsertPoint -
          +
          +
        • +
        + + + +
          +
        • +

          insertType

          +
          public java.lang.String insertType(TypeInsertPoint tip,
          +                                   java.lang.String fileContent)
          +
          Fügt nur einen einzelnen TypeInsertPoint in fileContent ein.
          +
          +
          Parameters:
          +
          tip -
          +
          fileContent -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          insertType

          +
          private void insertType(TypeInsertPoint tip,
          +                        TypePatchJob tpj)
          +
          Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu
          +
          +
          Parameters:
          +
          tip -
          +
          tpj -
          +
          +
        • +
        + + + + + + + +
          +
        • +

          insertAllTypes

          +
          @Deprecated
          +public java.lang.String insertAllTypes(java.lang.String fileContent)
          +
          Deprecated. 
          +
          Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
          +
          +
          Parameters:
          +
          fileContent -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          getInsertPointFor

          +
          public TypeInsertPoint getInsertPointFor(TypeInsertable node)
          +
          +
          Parameters:
          +
          node -
          +
          Returns:
          +
          - null, falls kein InsertPoint für node vorhanden.
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          add

          +
          public void add(Menge<TypeInsertPoint> insertPoints)
          +
          Fügt TypeInsertPoints an
          +
          +
          Parameters:
          +
          insertPoints -
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypePatchJob.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypePatchJob.html new file mode 100644 index 00000000..d65739bd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/TypePatchJob.html @@ -0,0 +1,321 @@ + + + + + +TypePatchJob + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.typedeployment
    +

    Class TypePatchJob

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class TypePatchJob
      +extends java.lang.Object
      +
      Stellt eine Reihe von TypeInsertions dar
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TypePatchJob() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        (package private) voidadd(SourcePatchPoint tip) 
        (package private) java.lang.Stringrun(java.lang.String fileContent) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypePatchJob

          +
          TypePatchJob()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          run

          +
          java.lang.String run(java.lang.String fileContent)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericTypeInsertPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericTypeInsertPoint.html new file mode 100644 index 00000000..bfe3407b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericTypeInsertPoint.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint

    +
    +
    No usage of de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarDeclarationPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarDeclarationPatch.html new file mode 100644 index 00000000..1320e68d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarDeclarationPatch.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarExtendsDeclarationPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarExtendsDeclarationPatch.html new file mode 100644 index 00000000..0793c0b2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarExtendsDeclarationPatch.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarPatch.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarPatch.html new file mode 100644 index 00000000..736d74e6 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/GenericVarPatch.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/SourcePatchPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/SourcePatchPoint.html new file mode 100644 index 00000000..56f162ed --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/SourcePatchPoint.html @@ -0,0 +1,207 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertPoint.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertPoint.html new file mode 100644 index 00000000..7d163f76 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertPoint.html @@ -0,0 +1,331 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertSet.html new file mode 100644 index 00000000..97b89ec9 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypeInsertSet.html @@ -0,0 +1,192 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypePatchJob.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypePatchJob.html new file mode 100644 index 00000000..029b7eec --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/class-use/TypePatchJob.html @@ -0,0 +1,167 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-frame.html new file mode 100644 index 00000000..d6e2c686 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-frame.html @@ -0,0 +1,27 @@ + + + + + +de.dhbwstuttgart.typeinference.typedeployment + + + + + +

    de.dhbwstuttgart.typeinference.typedeployment

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-summary.html new file mode 100644 index 00000000..b95bd494 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-summary.html @@ -0,0 +1,185 @@ + + + + + +de.dhbwstuttgart.typeinference.typedeployment + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.typeinference.typedeployment

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      GenericTypeInsertPoint +
      Ein InsertPoint für Generische Variablen + Wird beim Einsetzen eines TIP generiert.
      +
      GenericVarDeclarationPatch +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
      +
      GenericVarExtendsDeclarationPatch +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable mit extend Bedingung.
      +
      GenericVarPatch +
      Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
      +
      SourcePatchPoint 
      TypeInsertPoint +
      Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar.
      +
      TypeInsertSet +
      Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören.
      +
      TypePatchJob +
      Stellt eine Reihe von TypeInsertions dar
      +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-tree.html new file mode 100644 index 00000000..067dc4d1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-tree.html @@ -0,0 +1,147 @@ + + + + + +de.dhbwstuttgart.typeinference.typedeployment Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.typeinference.typedeployment

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-use.html new file mode 100644 index 00000000..4038d8d4 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/typedeployment/package-use.html @@ -0,0 +1,276 @@ + + + + + +Uses of Package de.dhbwstuttgart.typeinference.typedeployment + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.typeinference.typedeployment

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSet.html new file mode 100644 index 00000000..28831491 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSet.html @@ -0,0 +1,437 @@ + + + + + +CSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CSet<E>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.CSet<E>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Iterable<E>
      +
      +
      +
      Direct Known Subclasses:
      +
      CVectorSet
      +
      +
      +
      +
      public abstract class CSet<E>
      +extends java.lang.Object
      +implements java.lang.Iterable<E>
      +
      +
      Version:
      +
      $date
      +
      Author:
      +
      Jrg Buerle
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CSet() 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CSet

          +
          public CSet()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          addElement

          +
          public abstract void addElement(E element)
          +
        • +
        + + + + + +
          +
        • +

          removeElement

          +
          public abstract void removeElement(E element)
          +
        • +
        + + + +
          +
        • +

          unite

          +
          public abstract void unite(CSet<E> anotherSet)
          +
        • +
        + + + +
          +
        • +

          subtract

          +
          public abstract void subtract(CSet<E> anotherSet)
          +
        • +
        + + + +
          +
        • +

          shallowCopy

          +
          public abstract CSet<E> shallowCopy()
          +
        • +
        + + + +
          +
        • +

          deepCopy

          +
          public abstract CSet<E> deepCopy()
          +
        • +
        + + + + + +
          +
        • +

          contains

          +
          public abstract boolean contains(E element)
          +
        • +
        + + + +
          +
        • +

          getCardinality

          +
          public abstract int getCardinality()
          +
        • +
        + + + +
          +
        • +

          getIterator

          +
          public abstract java.util.Iterator<E> getIterator()
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public abstract boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitution.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitution.html new file mode 100644 index 00000000..7f181d9d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitution.html @@ -0,0 +1,556 @@ + + + + + +CSubstitution + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CSubstitution

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.CSubstitution
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Direct Known Subclasses:
      +
      CSubstitutionGenVar
      +
      +
      +
      +
      public class CSubstitution
      +extends java.lang.Object
      +
      Implementierung einer Typsubstitution. Bildet eine zu ersetzende + TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser + Klasse werden in der Regel aus + Pair-Objekten erzeugt.
      +
      +
      Version:
      +
      $Date: 2006/07/10 11:27:04 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getType

          +
          public Type getType()
          +
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Returns the Type.
          +
          +
        • +
        + + + +
          +
        • +

          setType

          +
          public void setType(Type type)
          +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          type - The Type to set.
          +
          +
        • +
        + + + +
          +
        • +

          getTypeVar

          +
          public Type getTypeVar()
          +
          Author: J�rg B�uerle
          +
          +
          Returns:
          +
          Returns the TypeVar.
          +
          +
        • +
        + + + +
          +
        • +

          setTypeVar

          +
          public void setTypeVar(TypePlaceholder typeVar)
          +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          typeVar - The TypeVar to set.
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Overrides:
          +
          equals in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          clone

          +
          public CSubstitution clone()
          +
          +
          Overrides:
          +
          clone in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          applyUnifier

          +
          public void applyUnifier(CSubstitutionSet unifier)
          +
          Wendet den Unifier auf die rechte Seite dieser Substitution an. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          unifier -
          +
          +
        • +
        + + + +
          +
        • +

          applySubstitution

          +
          private Type applySubstitution(Type type,
          +                               CSubstitution unifierSub)
          +
          Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an. +
          Author: J�rg B�uerle
          +
          +
          Parameters:
          +
          type - Der zu untersuchende Typ
          +
          unifierSub - Die anzuwendende Substitution
          +
          Returns:
          +
          Den ermittelnden Typ
          +
          +
        • +
        + + + +
          +
        • +

          applyThisSubstitution

          +
          public Type applyThisSubstitution(Type type)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.html new file mode 100644 index 00000000..5080a66b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionGenVar.html @@ -0,0 +1,376 @@ + + + + + +CSubstitutionGenVar + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CSubstitutionGenVar

    +
    +
    + +
    +
      +
    • +
      +
      +
      public class CSubstitutionGenVar
      +extends CSubstitution
      +
      Implementierung einer Typsubstitution der GenVar. Bildet eine zu ersetzende + TypePlaceholder auf einen Substitutions-Typ ab. Instanzen dieser + Klasse werden in der Regel aus + Pair-Objekten erzeugt.
      +
      +
      Version:
      +
      $Date: 2006/06/13 10:37:32 $
      +
      Author:
      +
      Martin Pl�micke
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CSubstitutionGenVar

          +
          public CSubstitutionGenVar()
          +
        • +
        + + + +
          +
        • +

          CSubstitutionGenVar

          +
          public CSubstitutionGenVar(GenericTypeVar typeVar,
          +                           Type type)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTypeVar

          +
          public Type getTypeVar()
          +
          Author: J�rg B�uerle
          +
          +
          Overrides:
          +
          getTypeVar in class CSubstitution
          +
          Returns:
          +
          Returns the TypeVar.
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class CSubstitution
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.html new file mode 100644 index 00000000..ae166903 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CSubstitutionSet.html @@ -0,0 +1,397 @@ + + + + + +CSubstitutionSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CSubstitutionSet

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Iterable<CSubstitution>
      +
      +
      +
      +
      public class CSubstitutionSet
      +extends CVectorSet<CSubstitution>
      +
      +
      Version:
      +
      $Date: 2013/03/27 18:29:34 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CVectorSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CVectorSet.html new file mode 100644 index 00000000..8f20e6bb --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CVectorSet.html @@ -0,0 +1,514 @@ + + + + + +CVectorSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CVectorSet<E>

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Iterable<E>
      +
      +
      +
      Direct Known Subclasses:
      +
      CSubstitutionSet
      +
      +
      +
      +
      public abstract class CVectorSet<E>
      +extends CSet<E>
      +
      +
      Version:
      +
      $Date: 2013/02/07 05:08:51 $
      +
      Author:
      +
      J�rg B�uerle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          m_Elements

          +
          private Menge<E> m_Elements
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CVectorSet

          +
          public CVectorSet()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          addElement

          +
          public void addElement(E element)
          +
          +
          Specified by:
          +
          addElement in class CSet<E>
          +
          +
        • +
        + + + + + +
          +
        • +

          removeElement

          +
          public void removeElement(E element)
          +
          +
          Specified by:
          +
          removeElement in class CSet<E>
          +
          +
        • +
        + + + +
          +
        • +

          addAll

          +
          public void addAll(CVectorSet<E> set)
          +
        • +
        + + + +
          +
        • +

          getIterator

          +
          public java.util.Iterator<E> getIterator()
          +
          +
          Specified by:
          +
          getIterator in class CSet<E>
          +
          +
        • +
        + + + +
          +
        • +

          getMenge

          +
          public Menge<E> getMenge()
          +
        • +
        + + + +
          +
        • +

          setMenge

          +
          public void setMenge(Menge<E> elements)
          +
        • +
        + + + +
          +
        • +

          unite

          +
          public void unite(CSet<E> anotherSet)
          +
          Fügt ein CMengeSet an! + Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen)
          +
          +
          Specified by:
          +
          unite in class CSet<E>
          +
          Parameters:
          +
          anotherSet - Das hinzuzufügende CMengeSet (CSet wird ignoriert)
          +
          +
        • +
        + + + +
          +
        • +

          subtract

          +
          public void subtract(CSet<E> anotherSet)
          +
          +
          Specified by:
          +
          subtract in class CSet<E>
          +
          +
        • +
        + + + + + +
          +
        • +

          contains

          +
          public boolean contains(E element)
          +
          +
          Specified by:
          +
          contains in class CSet<E>
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals(java.lang.Object obj)
          +
          +
          Specified by:
          +
          equals in class CSet<E>
          +
          +
        • +
        + + + +
          +
        • +

          getCardinality

          +
          public int getCardinality()
          +
          +
          Specified by:
          +
          getCardinality in class CSet<E>
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CartesianProduct.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CartesianProduct.html new file mode 100644 index 00000000..b9b8a16b --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/CartesianProduct.html @@ -0,0 +1,237 @@ + + + + + +CartesianProduct + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class CartesianProduct

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.CartesianProduct
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class CartesianProduct
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CartesianProduct() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CartesianProduct

          +
          CartesianProduct()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/FC_TTO.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/FC_TTO.html new file mode 100644 index 00000000..d4e1330e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/FC_TTO.html @@ -0,0 +1,400 @@ + + + + + +FC_TTO + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class FC_TTO

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.FC_TTO
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class FC_TTO
      +extends java.lang.Object
      +
      Hilfsklasse f�r den Unifizierungsalgorithmus
      +
      +
      Version:
      +
      $Date: 2013/05/12 14:00:05 $
      +
      Author:
      +
      Martin Pl�micke
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          getTTO

          +
          public Menge getTTO()
          +
        • +
        + + + +
          +
        • +

          getClasses

          +
          public Menge<Class> getClasses()
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public java.lang.String toString()
          +
          +
          Overrides:
          +
          toString in class java.lang.Object
          +
          +
        • +
        + + + +
          +
        • +

          generateFullyNamedTypes

          +
          public void generateFullyNamedTypes(TypeAssumptions ass)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html new file mode 100644 index 00000000..c54a662f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html @@ -0,0 +1,335 @@ + + + + + +MUB + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class MUB

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.MUB
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class MUB
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) Menge<? extends Type>Mub 
        (package private) Menge<Pair>sigma 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        MUB(Menge<? extends Type> M, + Menge<Pair> s) 
        +
      • +
      + + +
    • +
    +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelConstraintSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelConstraintSet.html new file mode 100644 index 00000000..c53e6bef --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelConstraintSet.html @@ -0,0 +1,299 @@ + + + + + +ParallelConstraintSet + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class ParallelConstraintSet

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ParallelConstraintSet

          +
          ParallelConstraintSet()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parallelGetConstraints

          +
          java.util.stream.Stream parallelGetConstraints()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelUnify.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelUnify.html new file mode 100644 index 00000000..2311ba6a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/ParallelUnify.html @@ -0,0 +1,299 @@ + + + + + +ParallelUnify + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class ParallelUnify

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.ParallelUnify
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ParallelUnify
      +extends java.lang.Object
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unifier.html new file mode 100644 index 00000000..bf450abb --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unifier.html @@ -0,0 +1,221 @@ + + + + + +Unifier + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Interface Unifier

    +
    +
    +
    +
      +
    • +
      +
      +
      public interface Unifier
      +
    • +
    +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unify.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unify.html new file mode 100644 index 00000000..52482a3d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/Unify.html @@ -0,0 +1,1571 @@ + + + + + +Unify + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class Unify

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.Unify
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Unify
      +extends java.lang.Object
      +
      Implementierung des Unifizierungsalgorithmus
      +
      +
      Version:
      +
      $Date: 2013/05/22 22:23:50 $
      +
      Author:
      +
      Martin Pl�micke, Thomas Ott
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Unify

          +
          public Unify()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          unify

          +
          public static Menge<Menge<Pair>> unify(Type ty1,
          +                                       Type ty2,
          +                                       FC_TTO fc_tto)
          +
          Unifiziert ein Pair mit den Elementen ty1 und ty2 -> (ty1 < ty2)
          +
          +
          Parameters:
          +
          ty1 -
          +
          ty2 -
          +
          fc_tto -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          unifyWC

          +
          public static Menge<Menge<Pair>> unifyWC(Type ty1,
          +                                         Type ty2,
          +                                         FC_TTO fc_tto)
          +
          Einstieg in die Unifizierung mit Wildcards
          +
          +
          Parameters:
          +
          ty1 - - Typ 1 der Unifizierung
          +
          ty2 - - Typ 2 der Unifizierung
          +
          fc_tto - - Hilfsklasse mit FC
          +
          Returns:
          +
          Menge> - Ergebnispaare
          +
          +
        • +
        + + + +
          +
        • +

          unifyWC

          +
          public static Menge<Menge<Pair>> unifyWC(Pair P,
          +                                         FC_TTO fc_tto)
          +
          Einstieg in die Unifizierung mit Wildcards
          +
          +
          Parameters:
          +
          P - - Paar das unifiziert werden soll.
          +
          fc_tto - - Hilfsklasse mit FC
          +
          Returns:
          +
          Menge> - Ergebnispaare
          +
          +
        • +
        + + + +
          +
        • +

          unify

          +
          public static Menge<Menge<Pair>> unify(Menge<Pair> E,
          +                                       FC_TTO fc_tto)
          +
          Einstieg in die Unifizierung mit Wildcards
          +
          +
          Parameters:
          +
          E - - Menge von Paaren die unifiziert werden sollen
          +
          fc_tto - - Hilfsklasse mit FC
          +
          Returns:
          +
          Menge> - Ergebnispaare + Entweder alle Elemente in solved Form [A =. type, B =. type2, ...] + oder alle Elemente in der Form [A <. B, C <. D, ..., E in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt
          +
          +
        • +
        + + + + + + + +
          +
        • +

          schnitt1

          +
          static Menge<java.lang.Integer> schnitt1(Menge<TypePlaceholder> var,
          +                                         Menge<Menge<TypePlaceholder>> vars,
          +                                         Menge<java.lang.Integer> indexe)
          +
          PL 2014-10-25 + schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind + Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind.
          +
          +
          Parameters:
          +
          var -
          +
          vars -
          +
          indexe -
          +
          Returns:
          +
          +
        • +
        + + + +
          +
        • +

          schnitt

          +
          public static Menge<Menge<java.lang.Integer>> schnitt(Menge<Menge<TypePlaceholder>> vars)
          +
          Bildet Schnittmengen der Mengen von Typeplaceholders + Rueckgabe ist die Menge der Menge von Indizies die Schnittmengen sind.
          +
          +
          Parameters:
          +
          vars -
          +
          Returns:
          +
          +
        • +
        + + + + + + + +
          +
        • +

          generateSetOfSetOfPair

          +
          private static Menge<Menge<Pair>> generateSetOfSetOfPair(Type TA1,
          +                                                         Menge<? extends Type> otherPairTypes)
          +
          Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten. + Beispiel: otherPairTypes = [Integer, Number, Menge], TA1 = TPH a. + return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge]]
          +
          +
          Parameters:
          +
          TA1 - - Der Typ der immer vorne steht
          +
          otherPairTypes - - Die anderen Typen
          +
          Returns:
          +
          - Ein Menge> der alle Paare enthält.
          +
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reduceEq

          +
          private static void reduceEq(Menge<Pair> H,
          +                             RefType TA1,
          +                             RefType TA2,
          +                             Menge TTO)
          +                      throws SCException
          +
          Implementiert die reduceEq Regel des sub_unify + Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren.
          +
          +
          Throws:
          +
          SCException
          +
          +
        • +
        + + + + + + + +
          +
        • +

          adapt

          +
          private static void adapt(Menge<Pair> H,
          +                          Pair PFC,
          +                          RefType TA1,
          +                          RefType TA2,
          +                          FC_TTO fc_tto)
          +
          Implementiert die adapt Regel des sub_unify
          +
        • +
        + + + +
          +
        • +

          adaptExt

          +
          private static void adaptExt(Menge<Pair> H,
          +                             Pair PFC,
          +                             RefType TA1,
          +                             RefType TA2,
          +                             FC_TTO fc_tto)
          +
          Implementiert die adaptExt Regel des sub_unify
          +
        • +
        + + + +
          +
        • +

          adaptSup

          +
          private static void adaptSup(Menge<Pair> H,
          +                             Pair PFC,
          +                             RefType TA1,
          +                             RefType TA2,
          +                             FC_TTO fc_tto)
          +
          Implementiert die adaptSup Regel des sub_unify
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          isRXSimilarRY

          +
          public static boolean isRXSimilarRY(RefType RFC,
          +                                    RefType RY,
          +                                    boolean allowTPH)
          +
        • +
        + + + +
          +
        • +

          SubstHashtable2MengePair

          +
          public static Menge<Pair> SubstHashtable2MengePair(java.util.Hashtable<JavaClassName,Type> ht)
          +
        • +
        + + + +
          +
        • +

          MengePair2SubstHashtableMengePair

          +
          public static java.util.Hashtable<JavaClassName,Type> MengePair2SubstHashtableMengePair(Menge<Pair> v)
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          Subst

          +
          public static boolean Subst(Pair P,
          +                            int nTypnrInPair,
          +                            TypePlaceholder a,
          +                            Type o,
          +                            boolean bMitVorbedingung)
          +
        • +
        + + + +
          +
        • +

          SubstHashtableGeneric

          +
          public static void SubstHashtableGeneric(RefType typterm,
          +                                         java.util.Hashtable<JavaClassName,Type> ht)
          +
        • +
        + + + +
          +
        • +

          SubstHashtable

          +
          public static void SubstHashtable(RefType typterm,
          +                                  java.util.Hashtable<JavaClassName,Type> ht)
          +
        • +
        + + + +
          +
        • +

          isRealSubClass

          +
          public static boolean isRealSubClass(java.lang.String Basis,
          +                                     java.lang.String Mutter,
          +                                     FC_TTO fc_tto)
          +
        • +
        + + + +
          +
        • +

          pi

          +
          public static int pi(int n,
          +                     java.lang.String C,
          +                     java.lang.String D,
          +                     Menge tto)
          +              throws SCException
          +
          +
          Throws:
          +
          SCException
          +
          +
        • +
        + + + +
          +
        • +

          printMengeUnifier

          +
          public static void printMengeUnifier(java.lang.String strMenge,
          +                                     Menge<Menge<Pair>> Uni,
          +                                     int nDebug)
          +
        • +
        + + + +
          +
        • +

          printMenge

          +
          public static void printMenge(java.lang.String strMenge,
          +                              Menge<Pair> E,
          +                              int nDebug)
          +
        • +
        + + + +
          +
        • +

          hasSolvedForm

          +
          public static boolean hasSolvedForm(Menge<Pair> E)
          +
        • +
        + + + + + + + +
          +
        • +

          CaptureConversion

          +
          private static Menge<ObjectType> CaptureConversion(Menge<ObjectType> TVec,
          +                                                   FC_TTO fc_tto)
          +
          Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Menge TVec an. + Rückgabe ist ein ErgebnisMenge
          +
        • +
        + + + +
          +
        • +

          CaptureConversion

          +
          private static Type CaptureConversion(Type T,
          +                                      FC_TTO fc_tto)
          +
          Erzeugt die CaptureConversion von einem Typ.
          +
          +
          Parameters:
          +
          T - - Übergebener Typ, von welchem die CaptureConversion gemacht werden soll.
          +
          fc_tto - - Hilfsklasse.
          +
          Returns:
          +
          - CC(T)
          +
          +
        • +
        + + + +
          +
        • +

          greater

          +
          private static Menge<ObjectType> greater(ObjectType T,
          +                                         FC_TTO fc_tto)
          +
          Erzeugt alle Typen die greater sind als T. Gibt diese zurück. + Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt
          +
        • +
        + + + + + + + +
          +
        • +

          greater1

          +
          private static Menge<ObjectType> greater1(ObjectType T,
          +                                          FC_TTO fc_tto)
          +
          greater1 Schritt von greater. + Für den Argumenttype FunN<...> in Typ A ...> werden keine ? extends-, ? super-Typen erzeugt
          +
        • +
        + + + +
          +
        • +

          cartProductType

          +
          private static Menge<Menge<Type>> cartProductType(Menge<Menge<Type>> vec)
          +
          Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + welcher für die rekursion erforderlich ist mit übergeben muss.
          +
        • +
        + + + +
          +
        • +

          cartProductType

          +
          private static Menge<Menge<Type>> cartProductType(Menge<Menge<Type>> vec,
          +                                                  int index)
          +
          Erzeugt das Kartesische Product von mehreren Mengeen von Typen. + Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf.
          +
        • +
        + + + +
          +
        • +

          cartProductPair

          +
          private static Menge<Menge<Pair>> cartProductPair(Menge<Menge<Pair>> vec)
          +
          Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter + welcher für die rekursion erforderlich ist mit übergeben muss.
          +
        • +
        + + + +
          +
        • +

          cartProductPair

          +
          private static Menge<Menge<Pair>> cartProductPair(Menge<Menge<Pair>> vec,
          +                                                  int index)
          +
          Erzeugt das Kartesische Product von mehreren Mengeen von Paaren. + Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf.
          +
        • +
        + + + +
          +
        • +

          copyMengeType

          +
          private static Menge<Type> copyMengeType(Menge<? extends Type> vec)
          +
          Kopiert einen Menge. Es ist eine Deep Copy, da die Elemente auch kopiert werden.
          +
        • +
        + + + +
          +
        • +

          copyMengeObjectType

          +
          private static Menge<ObjectType> copyMengeObjectType(Menge<ObjectType> vec)
          +
          Kopiert einen Menge. Es ist eine Deep Copy, da die Elemente auch kopiert werden. + noetig wegen Type-Erasure
          +
        • +
        + + + +
          +
        • +

          greaterArg

          +
          private static Menge<Type> greaterArg(Type T,
          +                                      FC_TTO fc_tto)
          +
          greaterArg Schritt von greater + Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          smaller

          +
          private static Menge<ObjectType> smaller(ObjectType T,
          +                                         FC_TTO fc_tto)
          +
          Erzeugt alle Typen die smaller sind als T. Gibt diese zurück.
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          smallerArg

          +
          private static Menge<Type> smallerArg(Type T,
          +                                      FC_TTO fc_tto)
          +
          smallerArg Schritt von smaller
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          DelFreshWildcardTypeVar

          +
          private static boolean DelFreshWildcardTypeVar(Type T)
          +
          Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält.
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/UnifyResult.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/UnifyResult.html new file mode 100644 index 00000000..113b1066 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/UnifyResult.html @@ -0,0 +1,237 @@ + + + + + +UnifyResult + + + + + + + + + + + + +
    +
    de.dhbwstuttgart.typeinference.unify
    +

    Class UnifyResult

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • de.dhbwstuttgart.typeinference.unify.UnifyResult
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      class UnifyResult
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        UnifyResult() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnifyResult

          +
          UnifyResult()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSet.html new file mode 100644 index 00000000..64d8993e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSet.html @@ -0,0 +1,212 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitution.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitution.html new file mode 100644 index 00000000..02c08391 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitution.html @@ -0,0 +1,208 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CSubstitution + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CSubstitution

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionGenVar.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionGenVar.html new file mode 100644 index 00000000..924f182e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionGenVar.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar

    +
    +
    No usage of de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionSet.html new file mode 100644 index 00000000..f48504c1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CSubstitutionSet.html @@ -0,0 +1,213 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CSubstitutionSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CVectorSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CVectorSet.html new file mode 100644 index 00000000..5d35f141 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CVectorSet.html @@ -0,0 +1,177 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CVectorSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CVectorSet

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CartesianProduct.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CartesianProduct.html new file mode 100644 index 00000000..aece11be --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/CartesianProduct.html @@ -0,0 +1,164 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.CartesianProduct + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.CartesianProduct

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/FC_TTO.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/FC_TTO.html new file mode 100644 index 00000000..b04af97e --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/FC_TTO.html @@ -0,0 +1,409 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.FC_TTO + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.FC_TTO

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/MUB.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/MUB.html new file mode 100644 index 00000000..e38291b1 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/MUB.html @@ -0,0 +1,166 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.MUB + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.MUB

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelConstraintSet.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelConstraintSet.html new file mode 100644 index 00000000..b908a473 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelConstraintSet.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.ParallelConstraintSet + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.ParallelConstraintSet

    +
    +
    No usage of de.dhbwstuttgart.typeinference.unify.ParallelConstraintSet
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelUnify.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelUnify.html new file mode 100644 index 00000000..9a6fe5a2 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/ParallelUnify.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.ParallelUnify + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.ParallelUnify

    +
    +
    No usage of de.dhbwstuttgart.typeinference.unify.ParallelUnify
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unifier.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unifier.html new file mode 100644 index 00000000..acf24a1d --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unifier.html @@ -0,0 +1,176 @@ + + + + + +Uses of Interface de.dhbwstuttgart.typeinference.unify.Unifier + + + + + + + + + + + +
    +

    Uses of Interface
    de.dhbwstuttgart.typeinference.unify.Unifier

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unify.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unify.html new file mode 100644 index 00000000..96c26e9f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/Unify.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.Unify + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.Unify

    +
    +
    No usage of de.dhbwstuttgart.typeinference.unify.Unify
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/UnifyResult.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/UnifyResult.html new file mode 100644 index 00000000..d6740e9f --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/class-use/UnifyResult.html @@ -0,0 +1,169 @@ + + + + + +Uses of Class de.dhbwstuttgart.typeinference.unify.UnifyResult + + + + + + + + + + + +
    +

    Uses of Class
    de.dhbwstuttgart.typeinference.unify.UnifyResult

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-frame.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-frame.html new file mode 100644 index 00000000..d58c2cbd --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-frame.html @@ -0,0 +1,35 @@ + + + + + +de.dhbwstuttgart.typeinference.unify + + + + + +

    de.dhbwstuttgart.typeinference.unify

    + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-summary.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-summary.html new file mode 100644 index 00000000..60b56eb0 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-summary.html @@ -0,0 +1,209 @@ + + + + + +de.dhbwstuttgart.typeinference.unify + + + + + + + + + + + +
    +

    Package de.dhbwstuttgart.typeinference.unify

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-tree.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-tree.html new file mode 100644 index 00000000..c3edd05a --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-tree.html @@ -0,0 +1,169 @@ + + + + + +de.dhbwstuttgart.typeinference.unify Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package de.dhbwstuttgart.typeinference.unify

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    +
      +
    • de.dhbwstuttgart.typeinference.unify.Unifier
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-use.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-use.html new file mode 100644 index 00000000..d5fa1b75 --- /dev/null +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/package-use.html @@ -0,0 +1,241 @@ + + + + + +Uses of Package de.dhbwstuttgart.typeinference.unify + + + + + + + + + + + +
    +

    Uses of Package
    de.dhbwstuttgart.typeinference.unify

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/deprecated-list.html b/doc/LambdaJavadoc/deprecated-list.html new file mode 100644 index 00000000..af714f1a --- /dev/null +++ b/doc/LambdaJavadoc/deprecated-list.html @@ -0,0 +1,177 @@ + + + + + +Deprecated List + + + + + + + + +
    + + + + + + + +
    + + +
    +

    Deprecated API

    +

    Contents

    + +
    + + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/help-doc.html b/doc/LambdaJavadoc/help-doc.html new file mode 100644 index 00000000..07f76eaa --- /dev/null +++ b/doc/LambdaJavadoc/help-doc.html @@ -0,0 +1,229 @@ + + + + + +API Help + + + + + + + + +
    + + + + + + + +
    + + +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
    • +
    • +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

      +
        +
      • Interfaces (italic)
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
    • +
    • +

      Class/Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class inheritance diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class/interface declaration
      • +
      • Class/interface description
      • +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
        +
      • Field Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
    • +
    • +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type declaration
      • +
      • Annotation Type description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
    • +
    • +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum declaration
      • +
      • Enum description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
    • +
    • +

      Use

      +

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      +
    • +
    • +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
      • +
      +
    • +
    • +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
    • +
    • +

      Index

      +

      The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

      +
    • +
    • +

      Prev/Next

      +

      These links take you to the next or previous class, interface, package, or related page.

      +
    • +
    • +

      Frames/No Frames

      +

      These links show and hide the HTML frames. All pages are available with or without frames.

      +
    • +
    • +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
    • +
    • +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
    • +
    • +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
    • +
    +This help file applies to API documentation generated using the standard doclet.
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-1.html b/doc/LambdaJavadoc/index-files/index-1.html new file mode 100644 index 00000000..c0c93932 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-1.html @@ -0,0 +1,358 @@ + + + + + +A-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    A

    +
    +
    ABSTRACT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Abstract - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
    +
    Stellt den Modifier Abstract dar.
    +
    +
    Abstract() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Abstract
    +
     
    +
    AClassOrInterface - Interface in de.dhbwstuttgart.core
    +
    +
    Superklasse von Class und Interface.
    +
    +
    adapt(Menge<Pair>, Pair, RefType, RefType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die adapt Regel des sub_unify
    +
    +
    adaptExt(Menge<Pair>, Pair, RefType, RefType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die adaptExt Regel des sub_unify
    +
    +
    adaptSup(Menge<Pair>, Pair, RefType, RefType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die adaptSup Regel des sub_unify
    +
    +
    add(GenericTypeVar) - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    add(TypeAssumptions) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    add(ConstraintsSet) - Method in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
     
    +
    add(KomplexeMenge<Pair>) - Method in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
     
    +
    add(Pair) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
    +
    Fügt eine generische Variable in Form eines Pairs an.
    +
    +
    add(TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    add(TypeInsertPoint) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
    +
    Fügt einen TypeInsertPoint dem TypeInsertSet hinzu.
    +
    +
    add(Menge<TypeInsertPoint>) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
    +
    Fügt TypeInsertPoints an
    +
    +
    add(SourcePatchPoint) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob
    +
     
    +
    Add - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    Add() - Constructor for class plugindevelopment.TypeInsertTests.Add
    +
     
    +
    add_classexceptions(SCClassException) - Method in exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    add_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    add_ParaList(Type) - Method in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    add_Parameter(Type) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    addAll(Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    addAll(CVectorSet<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    addAllAssumptions(Menge<Assumption>) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    addAssumption(Assumption) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    addBound(ObjectType) - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    addClassAssumption(ClassAssumption) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Fügt eine TypAssumption an.
    +
    +
    addClassname(String) - Method in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    addConstraint(ConstraintType, ConstraintType) - Method in class de.dhbwstuttgart.typeinference.OderConstraint
    +
    +
    Fügt ein Pair(p1, p2) dem Constraint hinzu
    +
    +
    addConstraint(ConstraintPair) - Method in class de.dhbwstuttgart.typeinference.OderConstraint
    +
    +
    Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw.
    +
    +
    addConstraint(UndConstraint) - Method in class de.dhbwstuttgart.typeinference.OderConstraint
    +
     
    +
    addConstraint(ConstraintPair) - Method in class de.dhbwstuttgart.typeinference.SingleConstraint
    +
     
    +
    addConstraint(ConstraintType, ConstraintType) - Method in class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    addConstraint(ConstraintPair) - Method in class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    addElement(GenericTypeVar) - Method in class de.dhbwstuttgart.parser.GenericVarDeclarationList
    +
     
    +
    addElement(Field) - Method in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
    +
    Fuegt ein neues Element (Konstantendefinition oder abstrakte + Methode) ein.
    +
    +
    addElement(AClassOrInterface) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Fuegt ein neues Element (Interface oder Klasse) hinzu.
    +
    +
    addElement(E) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    addElement(E) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    addException(SCExcept) - Method in exception de.dhbwstuttgart.myexception.SCClassBodyException
    +
     
    +
    addException(Menge<SCExcept>) - Method in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    addException(SCExcept) - Method in exception de.dhbwstuttgart.myexception.SCStatementException
    +
     
    +
    addField(Field) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    addField(Field) - Method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    addGenericVarAssumption(GenericTypeVar) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Fügt eine Generische Typvariablen den Assumptions hinzu
    +
    +
    addImports(ImportDeclarations) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    addInterface(UsedId) - Method in class de.dhbwstuttgart.parser.InterfaceList
    +
     
    +
    addItem(A) - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    addItem(A) - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    addItem(A) - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    addItem(A) - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    addItems(KomplexeMenge<A>) - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    addItems(KomplexeMenge<A>) - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    addItems(KomplexeMenge<A>) - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    addItems(KomplexeMenge<A>) - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    addModifier(Modifier) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
    +
    Fuegt den angegebenen Modifier zur Auflistung hinzu.
    +
    +
    addOffsetOff(RefType) - Method in class de.dhbwstuttgart.parser.BoundedClassIdentifierList
    +
     
    +
    AddOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    AddOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.AddOp
    +
     
    +
    addPairs(Menge<Pair>) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    addTPHs(Menge<TypePlaceholder>) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    addTypeInsertPoints(TypeInsertSet, ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
    +
    Methode zur Generierung der TypeInsertPoints
    +
    +
    addUnresolvedTPH(TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    advance() - Method in interface de.dhbwstuttgart.parser.JavaParser.yyInput
    +
    +
    move on to next token.
    +
    +
    advance() - Method in class de.dhbwstuttgart.parser.Scanner
    +
     
    +
    allGreater(RefType, Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    allSmaller(RefType, Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    ANDEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    AndOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    AndOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.AndOp
    +
     
    +
    apply(Section, PrintStream) - Method in interface de.dhbwstuttgart.logger.ConfigurationEvaluater
    +
     
    +
    apply(Menge<Pair>) - Method in interface de.dhbwstuttgart.typeinference.unify.Unifier
    +
     
    +
    applyResultSet(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    applyResultSet(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    applySubstitution(Type, CSubstitution) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an.
    +
    +
    applyThisSubstitution(Type) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    applyThisSubstitutionSet(Type) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    applyUnifier(CSubstitutionSet) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Wendet den Unifier auf die rechte Seite dieser Substitution an.
    +
    +
    applyUnifier(CSubstitutionSet) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
    +
    Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
    +
    +
    arglist - Variable in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    arglist - Variable in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    arglist - Variable in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    arglist - Variable in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    argumentAt(int) - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    ArgumentList - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    ArgumentList() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    Assign - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Assign(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    Assumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    Assumption() - Constructor for class de.dhbwstuttgart.typeinference.assumptions.Assumption
    +
    +
    Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden.
    +
    +
    Assumption(TypeInsertable) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.Assumption
    +
     
    +
    attach(JavaCodeResult) - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    attach(String) - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-10.html b/doc/LambdaJavadoc/index-files/index-10.html new file mode 100644 index 00000000..5e67e3d2 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-10.html @@ -0,0 +1,173 @@ + + + + + +J-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    J

    +
    +
    j - Variable in class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    JavaClassName - Class in de.dhbwstuttgart.parser
    +
    +
    Stellt den Namen einer Java Klasse dar.
    +
    +
    JavaClassName(String) - Constructor for class de.dhbwstuttgart.parser.JavaClassName
    +
     
    +
    javaCode - Variable in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    JavaCodeResult - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    JavaCodeResult() - Constructor for class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    JavaCodeResult(String) - Constructor for class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    JavaLexer - Class in de.dhbwstuttgart.parser
    +
     
    +
    JavaLexer(Reader) - Constructor for class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    JavaLexer(InputStream) - Constructor for class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    JavaLexer() - Constructor for class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    JavaParser - Class in de.dhbwstuttgart.parser
    +
     
    +
    JavaParser() - Constructor for class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    JavaParser.yyException - Exception in de.dhbwstuttgart.parser
    +
    +
    thrown for irrecoverable syntax errors and stack overflow.
    +
    +
    JavaParser.yyInput - Interface in de.dhbwstuttgart.parser
    +
    +
    must be implemented by a scanner object to supply input to the parser.
    +
    +
    JNULL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    JVMCodeException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    JVMCodeException(String) - Constructor for exception de.dhbwstuttgart.myexception.JVMCodeException
    +
     
    +
    jvmDisassembler - Class in de.dhbwstuttgart.JvmDisassembler
    +
     
    +
    jvmDisassembler() - Constructor for class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-11.html b/doc/LambdaJavadoc/index-files/index-11.html new file mode 100644 index 00000000..9206c63c --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-11.html @@ -0,0 +1,151 @@ + + + + + +K-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    K

    +
    +
    k - Variable in class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    KarthesischesProdukt - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    KarthesischesProdukt() - Constructor for class de.dhbwstuttgart.typeinference.KarthesischesProdukt
    +
     
    +
    karthesischesProdukt(Menge<M>, Menge<M>) - Static method in class de.dhbwstuttgart.typeinference.KarthesischesProdukt
    +
     
    +
    KarthesischesProduktTest - Class in KomplexeMenge
    +
     
    +
    KarthesischesProduktTest() - Constructor for class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    KeineDoppeltenVerweise - Class in KomplexeMenge
    +
     
    +
    KeineDoppeltenVerweise() - Constructor for class KomplexeMenge.KeineDoppeltenVerweise
    +
     
    +
    kill - Variable in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    KlassenVektor - Variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    KomplexeMenge - package KomplexeMenge
    +
     
    +
    KomplexeMenge<A> - Interface in de.dhbwstuttgart.typeinference
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-12.html b/doc/LambdaJavadoc/index-files/index-12.html new file mode 100644 index 00000000..fe0ab41a --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-12.html @@ -0,0 +1,335 @@ + + + + + +L-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    L

    +
    +
    LAMBDAASSIGNMENT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    LambdaExpression - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    LambdaExpression(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    LambdaParameter - Class in de.dhbwstuttgart.syntaxtree.statement
    +
    +
    Der FormalParameter einer LambdaExpression hat gesonderte Eigenschaften.
    +
    +
    LambdaParameter(FormalParameter) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LambdaParameter
    +
     
    +
    LambdaTest1 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest1() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest1
    +
     
    +
    LambdaTest10 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest10() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest10
    +
     
    +
    LambdaTest11 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest11() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest11
    +
     
    +
    LambdaTest12 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest12() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest12
    +
     
    +
    LambdaTest13 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest13() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest13
    +
     
    +
    LambdaTest14 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest14() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest14
    +
     
    +
    LambdaTest15 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest15() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest15
    +
     
    +
    LambdaTest16 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest16() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest16
    +
     
    +
    LambdaTest17 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest17() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest17
    +
     
    +
    LambdaTest18 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest18() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest18
    +
     
    +
    LambdaTest19 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest19() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest19
    +
     
    +
    LambdaTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest2() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest2
    +
     
    +
    LambdaTest20 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest20() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest20
    +
     
    +
    LambdaTest22 - Class in plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +
     
    +
    LambdaTest22() - Constructor for class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
    +
     
    +
    LambdaTest23 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest23() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest23
    +
     
    +
    LambdaTest24 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest24() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest24
    +
     
    +
    LambdaTest25 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest25() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest25
    +
     
    +
    LambdaTest26 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest26() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest26
    +
     
    +
    LambdaTest27 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest27() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest27
    +
     
    +
    LambdaTest2_2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest2_2() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest2_2
    +
     
    +
    LambdaTest3 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest3() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest3
    +
     
    +
    LambdaTest4 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest4() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest4
    +
     
    +
    LambdaTest5 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest5() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest5
    +
     
    +
    LambdaTest6 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest6() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest6
    +
     
    +
    LambdaTest7 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest7() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest7
    +
     
    +
    LambdaTest8 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest8() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest8
    +
     
    +
    LambdaTest9 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    LambdaTest9() - Constructor for class plugindevelopment.TypeInsertTests.LambdaTest9
    +
     
    +
    LESSEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    LessEquOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    LessEquOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.LessEquOp
    +
     
    +
    LessOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    LessOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.LessOp
    +
     
    +
    lexem - Variable in class de.dhbwstuttgart.parser.Token
    +
     
    +
    list - Variable in class de.dhbwstuttgart.parser.BoundedClassIdentifierList
    +
     
    +
    Literal - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Literal(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Literal
    +
     
    +
    LOAD_BASIC_ASSUMPTIONS_FROM_JRE - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    LocalOrFieldVar - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    LocalOrFieldVar(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    LocalOrFieldVar(String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    localVar - Variable in class de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption
    +
     
    +
    LocalVarAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    LocalVarAssumption(LocalVarDecl, Type) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption
    +
     
    +
    localVarAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    LocalVarDecl - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    LocalVarDecl(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    log - Static variable in class de.dhbwstuttgart.core.ConsoleInterface
    +
     
    +
    log - Variable in class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    log - Static variable in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    log - Static variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    log - Static variable in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
     
    +
    logConfig - Static variable in class plugindevelopment.TypeInsertTester
    +
     
    +
    logConfig - Static variable in class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    Logger - Class in de.dhbwstuttgart.logger
    +
     
    +
    Logger(String, LoggerConfiguration) - Constructor for class de.dhbwstuttgart.logger.Logger
    +
     
    +
    logger - Variable in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    logger - Static variable in class de.dhbwstuttgart.typeinference.OderConstraint
    +
     
    +
    LOGGER_DIRECTORY - Static variable in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    LoggerConfiguration - Class in de.dhbwstuttgart.logger
    +
     
    +
    LoggerConfiguration() - Constructor for class de.dhbwstuttgart.logger.LoggerConfiguration
    +
     
    +
    LOGICALAND - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    LOGICALOR - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    LogOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    LogOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.LogOp
    +
     
    +
    Long - Variable in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    LONGLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    LongLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    LongLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    LongType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    LongType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.LongType
    +
     
    +
    loop_block - Variable in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-13.html b/doc/LambdaJavadoc/index-files/index-13.html new file mode 100644 index 00000000..c87142d5 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-13.html @@ -0,0 +1,333 @@ + + + + + +M-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    M

    +
    +
    m_AbstractSyntaxTree - Variable in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Der abstrake Syntaxbaum +
    Autor: J�rg B�uerle
    +
    +
    m_Elements - Variable in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    m_LineNumber - Variable in class de.dhbwstuttgart.parser.Token
    +
     
    +
    m_LineNumber - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    m_LineNumber - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    m_Offset - Variable in class de.dhbwstuttgart.parser.Token
    +
     
    +
    m_Offset - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    m_Offset - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    m_Offset - Variable in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    m_Type - Variable in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    m_TypePlaceholdersRegistry - Static variable in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    m_TypeVar - Variable in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    m_TypeVar - Variable in class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    +
     
    +
    main(String[]) - Static method in class de.dhbwstuttgart.core.ConsoleInterface
    +
     
    +
    main(String[]) - Static method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet + werden kann.
    +
    +
    main(String[]) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    makeBasicAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen.
    +
    +
    makeBasicAssumptionsFromJRE(Menge<UsedId>, boolean) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen.
    +
    +
    makeFC(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Erstellt die Finite Closure
    +
    +
    makeFunNAssumptions() - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Erstellt die FunN-Assumptions + Fun0-FunN (momentan für N = 6)
    +
    +
    makeGenericTypeVars2TypePlaceHolders(Type) - Static method in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    makeNewName() - Static method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Erzeugt einen neuen Namen, und gibt diesen zurück + Methode aus TypePlaceholder kopiert
    +
    +
    makeNewName() - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Berechnet einen neuen, eindeutigen Namen f�r eine neue + TypePlaceholder.
    +
    +
    makeParaList(int) - Static method in class de.dhbwstuttgart.typeinference.FunNInterface
    +
     
    +
    makePosByte(int) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    makePosInt(long) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    makePosShort(int) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    manipulate(int, char) - Static method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Hilfsmethode für makeNewName + Methode aus TypePlaceholder kopiert
    +
    +
    manipulate(int, char) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Hilfsfunktion zur Berechnung eines neuen Namens.
    +
    +
    match(RefType, RefType, Hashtable<JavaClassName, Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    MatchException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    MatchException(String) - Constructor for exception de.dhbwstuttgart.myexception.MatchException
    +
     
    +
    Matrix - Class in plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +
     
    +
    Matrix() - Constructor for class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
    +
     
    +
    Matrix_simple - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    Matrix_simple() - Constructor for class plugindevelopment.TypeInsertTests.Matrix_simple
    +
     
    +
    Menge<A> - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    Menge() - Constructor for class de.dhbwstuttgart.typeinference.Menge
    +
     
    +
    MengePair2SubstHashtableMengePair(Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    mergeConfiguration(LoggerConfiguration) - Method in class de.dhbwstuttgart.logger.LoggerConfiguration
    +
     
    +
    message - Variable in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    message - Variable in exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
     
    +
    meth(a) - Method in class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    meth2(b, t) - Method in class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    Method - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Stellt eine Methode dar.
    +
    +
    Method(int) - Constructor for class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    Method(String, Type, ParameterList, Block, GenericDeclarationList, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    method - Variable in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    method_body - Variable in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    MethodAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    MethodAssumption(Method, Class) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    methodAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    MethodCall - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    MethodCall(Receiver, String, ArgumentList, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    MethodCall(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    methode - Variable in class de.dhbwstuttgart.syntaxtree.Constructor
    +
     
    +
    MethodTypeInsertTest - Class in plugindevelopment
    +
     
    +
    MethodTypeInsertTest() - Constructor for class plugindevelopment.MethodTypeInsertTest
    +
     
    +
    MethodVektor - Variable in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    MINUSEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    MinusOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    MinusOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.MinusOp
    +
     
    +
    mod - Variable in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    Modifier - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Modifier() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Modifier
    +
     
    +
    modifier - Variable in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    modifiers - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    modifiers - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    Modifiers - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
    +
    Die Klasse beinhaltet die Liste der Access-Modifier fuer eine Klasse, + Methode usw.
    +
    +
    Modifiers() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    MODULOEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    ModuloOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    ModuloOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.ModuloOp
    +
     
    +
    MUB - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    MUB(Menge<? extends Type>, Menge<Pair>) - Constructor for class de.dhbwstuttgart.typeinference.unify.MUB
    +
     
    +
    Mub - Variable in class de.dhbwstuttgart.typeinference.unify.MUB
    +
     
    +
    MulOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    MulOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.MulOp
    +
     
    +
    MultipleTypesInsertTester - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    MultipleTypesInsertTester() - Constructor for class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    MutlitpleTestCases - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    MutlitpleTestCases() - Constructor for class plugindevelopment.TypeInsertTests.MutlitpleTestCases
    +
     
    +
    MyCompiler - Class in de.dhbwstuttgart.core
    +
     
    +
    MyCompiler() - Constructor for class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Author: J�rg B�uerle
    + Der private Konstruktor.
    +
    +
    MyCompilerAPI - Interface in de.dhbwstuttgart.core
    +
    +
    Schnittstellen-Klasse zum Compiler.
    +
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-14.html b/doc/LambdaJavadoc/index-files/index-14.html new file mode 100644 index 00000000..ac509b7b --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-14.html @@ -0,0 +1,193 @@ + + + + + +N-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    N

    +
    +
    name - Variable in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    name - Variable in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    name - Variable in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    name - Variable in class de.dhbwstuttgart.parser.JavaClassName
    +
     
    +
    name - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    name - Variable in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    name - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    name - Variable in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    name - Variable in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    name - Variable in class KomplexeMenge.TestKlasse
    +
     
    +
    names - Variable in class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    neg - Variable in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    NegativeExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    NegativeExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    NEW - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    NewArray - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    NewArray(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    NewClass - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    NewClass(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    NO_LINENUMBER - Static variable in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    node - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    NodeEqualTest - Class in syntaxTree
    +
     
    +
    NodeEqualTest() - Constructor for class syntaxTree.NodeEqualTest
    +
     
    +
    not - Variable in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    NOTEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    NotEqualOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    NotEqualOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.NotEqualOp
    +
     
    +
    NotExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    NotExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    NotImplementedException - Exception in de.dhbwstuttgart.typeinference.exceptions
    +
     
    +
    NotImplementedException() - Constructor for exception de.dhbwstuttgart.typeinference.exceptions.NotImplementedException
    +
     
    +
    Null - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Null() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-15.html b/doc/LambdaJavadoc/index-files/index-15.html new file mode 100644 index 00000000..448da2f7 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-15.html @@ -0,0 +1,249 @@ + + + + + +O-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    O

    +
    +
    ObjectType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    ObjectType(String, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ObjectType
    +
     
    +
    ObjectType(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ObjectType
    +
     
    +
    OderConstraint - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    OderConstraint(ConstraintType, ConstraintType) - Constructor for class de.dhbwstuttgart.typeinference.OderConstraint
    +
    +
    Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu.
    +
    +
    OderConstraint() - Constructor for class de.dhbwstuttgart.typeinference.OderConstraint
    +
     
    +
    OderMenge<A> - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    OderMenge() - Constructor for class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    offset - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    offset - Variable in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    offset - Variable in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    offset - Variable in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    offset - Variable in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    offset - Variable in exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
    +
    Das Offset im Quelltext bei dem das Problem aufgetaucht ist
    +
    +
    offsetOfLastElement - Variable in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    OL - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OL() - Constructor for class plugindevelopment.TypeInsertTests.OL
    +
     
    +
    OP - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    op - Variable in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    Operator - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    Operator(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    OperatorEqual() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Abfrage, ob Operator vom Typ Equal ist.
    +
    +
    OperatorSmaller() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Abfrage, ob Operator vom Typ Smaller ist.
    +
    +
    OperatorSmallerExtends() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Abfrage, ob Operator vom Typ SmallerExtends ist.
    +
    +
    OperatorTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OperatorTest() - Constructor for class plugindevelopment.TypeInsertTests.OperatorTest
    +
     
    +
    OREQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    OrOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    OrOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.OrOp
    +
     
    +
    output(String, Level, Section) - Method in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    output - Variable in class de.dhbwstuttgart.logger.OutputHandler
    +
     
    +
    OutputDir - Variable in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    OutputHandler - Class in de.dhbwstuttgart.logger
    +
     
    +
    OutputHandler(PrintStream) - Constructor for class de.dhbwstuttgart.logger.OutputHandler
    +
     
    +
    outputs - Variable in class de.dhbwstuttgart.logger.LoggerConfiguration
    +
     
    +
    overloadedID - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    HOTI 4.5.06 + Dieser Vektor beinhaltet alle Generischen Typen und v.a. die + F-Bounded-Generics, die die Methode besitzt + size()==0, falls es keine gibt
    +
    +
    overloading(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.misc.ConstructorCall
    +
     
    +
    overloading(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
    +
    Erstellt die Constraints für den eigentlichen Methodenaufruf.
    +
    +
    OverloadingExample - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingExample() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingExample
    +
     
    +
    OverloadingInMethod - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingInMethod() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingInMethod
    +
     
    +
    OverloadingInMethod2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingInMethod2() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingInMethod2
    +
     
    +
    OverloadingInMethod2Simple - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingInMethod2Simple() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple
    +
     
    +
    OverloadingInsertTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingInsertTest() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingInsertTest
    +
     
    +
    OverloadingRecursive - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    OverloadingRecursive() - Constructor for class plugindevelopment.TypeInsertTests.OverloadingRecursive
    +
     
    +
    ownerOfResultSet - Variable in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-16.html b/doc/LambdaJavadoc/index-files/index-16.html new file mode 100644 index 00000000..e9d71a7f --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-16.html @@ -0,0 +1,618 @@ + + + + + +P-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    P

    +
    +
    p - Variable in class de.dhbwstuttgart.typeinference.ConstraintPair
    +
     
    +
    PACKAGE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    packageName - Variable in class de.dhbwstuttgart.parser.JavaClassName
    +
     
    +
    PackageName - Class in de.dhbwstuttgart.parser
    +
     
    +
    PackageName(Menge<String>) - Constructor for class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    PackageName() - Constructor for class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    Pair - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    Pair(Type, Type) - Constructor for class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    Pair(Type, Type, Pair.PairOperator) - Constructor for class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    Pair(Type, Type, Pair.PairOperator, boolean) - Constructor for class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    Pair.PairOperator - Enum in de.dhbwstuttgart.typeinference
    +
     
    +
    Pair_isEquiv(Pair) - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    PairOperator() - Constructor for enum de.dhbwstuttgart.typeinference.Pair.PairOperator
    +
     
    +
    pairsDeclareTPH(Menge<Pair>, TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    parahash - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    parahash - Variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    paralist - Variable in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    paralist - Variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    ParaList - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    ParaList() - Constructor for class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    ParaList(Type) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    parallelCartProd() - Method in class de.dhbwstuttgart.typeinference.unify.ParallelUnify
    +
     
    +
    ParallelConstraintSet - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    ParallelConstraintSet() - Constructor for class de.dhbwstuttgart.typeinference.unify.ParallelConstraintSet
    +
     
    +
    parallelGetConstraints() - Method in class de.dhbwstuttgart.typeinference.unify.ParallelConstraintSet
    +
     
    +
    ParallelUnify - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    ParallelUnify(ConstraintsSet) - Constructor for class de.dhbwstuttgart.typeinference.unify.ParallelUnify
    +
     
    +
    parallelUnify(Menge<Pair>, FC_TTO) - Method in class de.dhbwstuttgart.typeinference.unify.ParallelUnify
    +
     
    +
    parameter - Variable in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    ParameterAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
    +
    ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode.
    +
    +
    ParameterAssumption(FormalParameter) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption
    +
     
    +
    parameterAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    ParameterInsertTest - Class in plugindevelopment
    +
     
    +
    ParameterInsertTest() - Constructor for class plugindevelopment.ParameterInsertTest
    +
     
    +
    parameterlist - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    ParameterList - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    ParameterList() - Constructor for class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    params - Variable in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    paratyp - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    parent - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    parent - Variable in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    parent - Variable in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    parentClass - Variable in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    parentClass - Variable in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    parentExceptions - Variable in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    parse(File) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Author: J�rg B�uerle
    + Ruft die Parse-Methode.
    +
    +
    parse(Menge<String>) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Diese Funktion nimmt einen Menge von Dateinamen.
    +
    +
    parse(String) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    parse(File) - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Author: Jörg Bäuerle
    + Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
    +
    +
    parse(Menge<String>) - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
    +
    +
    parse(String) - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Parst den SourceCode einer Datei.
    +
    +
    parse2SyntaxTree(Reader) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Parst den Inhalt einer Datei zu einem Syntaxbaum.
    +
    +
    parse_attribute(DataInputStream, Menge<String>) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    parse_backup(Reader) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Parst den Quellcode und baut den abstrakten Syntaxbaum auf.
    +
    +
    parse_code(DataInputStream, Menge<String>) - Static method in class de.dhbwstuttgart.JvmDisassembler.jvmDisassembler
    +
     
    +
    parser - package parser
    +
     
    +
    ParserError - Exception in de.dhbwstuttgart.typeinference.exceptions
    +
     
    +
    ParserError(JavaParser.yyException) - Constructor for exception de.dhbwstuttgart.typeinference.exceptions.ParserError
    +
     
    +
    parserlog - Static variable in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    parserlog - Static variable in exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
    +
    Logger log4j
    +
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
    +
    Logger: log4j
    +
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    parserlog - Static variable in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
    +
    Wird nach dem Parsen aufgerufen.
    +
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    parserPostProcessing(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
     
    +
    patch - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    patch(String, int) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    patch(String, int) - Method in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    patch(String, int) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
    +
    Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein.
    +
    +
    path - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    pi(int, String, String, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    pkgName - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    pkgName - Variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    plist - Variable in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    plist - Variable in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    plugindevelopment - package plugindevelopment
    +
     
    +
    plugindevelopment.MartinTestCases - package plugindevelopment.MartinTestCases
    +
     
    +
    plugindevelopment.TypeInsertTests - package plugindevelopment.TypeInsertTests
    +
     
    +
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests - package plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +
     
    +
    plus - Variable in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    PLUSEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    PlusOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    PlusOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.PlusOp
    +
     
    +
    point - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    points - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    points - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob
    +
     
    +
    PositivExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    PositivExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    PostDecExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    PostDecExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    PostIncExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    PostIncExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    pp - Variable in class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    PreDecExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    PreDecExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    PreIncExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    PreIncExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    primitiveFlag - Variable in class de.dhbwstuttgart.syntaxtree.statement.Literal
    +
     
    +
    primitiveFlag - Variable in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Ist primitiveFlag auf true, muss beim Codegen dieser Reftype durch + den primitiven Datentyp ersetzt werden + + Bsp: java.lang.Integer mit Flag wird dann zu [int]
    +
    +
    printJavaCode(TypeinferenceResultSet) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet.
    +
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Abstract
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Final
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifier
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Private
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Protected
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Public
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Static
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Super
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.BooleanType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.CharacterType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.DoubleType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.FloatType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.IntegerType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.LongType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.ReturnType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    printJavaCode(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
     
    +
    printMenge(String, Menge<Pair>, int) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    printMengeUnifier(String, Menge<Menge<Pair>>, int) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    PRIVATE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Private - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Private() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Private
    +
     
    +
    problemSource - Variable in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
    +
    Das Statement bei dem das Problem aufgetaucht ist
    +
    +
    PROTECTED - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Protected - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Protected() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Protected
    +
     
    +
    PUBLIC - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Public - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Public() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Public
    +
     
    +
    publish(LogRecord) - Method in class de.dhbwstuttgart.logger.OutputHandler
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-17.html b/doc/LambdaJavadoc/index-files/index-17.html new file mode 100644 index 00000000..8821a7fd --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-17.html @@ -0,0 +1,406 @@ + + + + + +R-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    R

    +
    +
    R - Variable in class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    READ_BASE_TYPE_SUPERCLASSES_FROM_JRE - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Wenn dieses Flag auf false ist, werden für alle Basisklassen (definiert + durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen.
    +
    +
    READ_IMPORTED_SUPERCLASSES_FROM_JRE - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    READ_OBJECT_SUPERCLASSES_FROM_JRE - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    receiver - Variable in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
    +
    Diese Variable speichert die Expression, welche die Klasse von welcher die Methode aufgerufen wird darstellt.
    +
    +
    Receiver - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Receiver(Expr) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
    +
    Autor: J�rg B�uerle
    +
    +
    recursivlyCheckEqual(SyntaxTreeNode, SyntaxTreeNode) - Method in class syntaxTree.NodeEqualTest
    +
     
    +
    reduce1(Menge<Pair>, RefType, RefType, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die reduce1 Regel des sub_unify
    +
    +
    reduce2(Menge<Pair>, RefType, RefType, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die reduce2 Regel des sub_unify
    +
    +
    reduceEq(Menge<Pair>, RefType, RefType, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die reduceEq Regel des sub_unify + Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren.
    +
    +
    reduceExt(Menge<Pair>, RefType, RefType, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die reduceExt Regel des sub_unify
    +
    +
    reduceSup(Menge<Pair>, RefType, RefType, Menge) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die reduceSup Regel des sub_unify
    +
    +
    reftype - Variable in class de.dhbwstuttgart.syntaxtree.ExceptionList
    +
     
    +
    reftype - Variable in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    RefType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    RefType(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    RefType(String, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    RefType(String, Menge, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    RefType(RefType, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    RefType(Type) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Erstellt einen Referenztyp aus dem übergebenen Type.
    +
    +
    RefType(JavaClassName, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    RELOP - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    RelOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    RelOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.RelOp
    +
     
    +
    RelOpTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    RelOpTest() - Constructor for class plugindevelopment.TypeInsertTests.RelOpTest
    +
     
    +
    removeBasicAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    L�scht die Anfangsinformation wieder aus dem Klassenvektor +
    Author: J�rg B�uerle
    +
    +
    removeElement(E) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    removeElement(E) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    removeLast() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    removeUnusedTPHs(Menge<TypePlaceholder>) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    resultPairs - Variable in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    ResultSet - Class in de.dhbwstuttgart.typeinference
    +
    +
    Im Grunde Sammlung von Pair s mit Equal-Operatoren.
    +
    +
    ResultSet(Menge<Pair>) - Constructor for class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    ResultSet() - Constructor for class de.dhbwstuttgart.typeinference.ResultSet
    +
    +
    Erstellt ein leeres ResultSet
    +
    +
    resultSet - Variable in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    resultSet - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    retexpr - Variable in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    RETURN - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Return - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Return(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    returntype - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    ReturnType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    ReturnType(int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ReturnType
    +
     
    +
    ReursiveTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ReursiveTest() - Constructor for class plugindevelopment.TypeInsertTests.ReursiveTest
    +
     
    +
    ReursiveTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ReursiveTest2() - Constructor for class plugindevelopment.TypeInsertTests.ReursiveTest2
    +
     
    +
    rootDirectory - Static variable in class parser.GeneralParserTest
    +
     
    +
    rootDirectory - Static variable in class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    rootDirectory - Static variable in class plugindevelopment.MartinTestCases.Tester
    +
     
    +
    rootDirectory - Static variable in class plugindevelopment.TypeInsertTester
    +
     
    +
    rootDirectory - Static variable in class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    rootDirectory - Static variable in class syntaxTree.NodeEqualTest
    +
     
    +
    run(Menge<String>) - Static method in class de.dhbwstuttgart.core.ConsoleInterface
    +
     
    +
    run(String) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob
    +
     
    +
    run() - Method in class parser.GeneralParserTest
    +
     
    +
    run() - Method in class plugindevelopment.MethodTypeInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.ParameterInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.Add
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.BoundedGenericsTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ConstructorTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.FunNInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericParaListInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericParaListInsertTest2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericTypeVarTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericVarInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericVarTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericVarTest2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenericVarTest3
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.GenTypeTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.Id
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ImportSubClassTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ImportTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ImportTest2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.IntTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest1
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest10
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest11
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest12
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest13
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest14
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest15
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest16
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest17
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest18
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest19
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest20
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest23
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest24
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest25
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest26
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest27
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest2_2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest3
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest4
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest5
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest6
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest7
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest8
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LambdaTest9
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.Matrix_simple
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OL
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OperatorTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingExample
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingInMethod
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingInMethod2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingInsertTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.OverloadingRecursive
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.RelOpTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ReursiveTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ReursiveTest2
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.SuperTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.ThisTest
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.WildcardTestForLambda
    +
     
    +
    run() - Method in class plugindevelopment.TypeInsertTests.WildcardTestForLambda2
    +
     
    +
    run() - Method in class plugindevelopment.VariableTypeInsertTest
    +
     
    +
    run2() - Method in class plugindevelopment.TypeInsertTests.GenericTypeVarTest2
    +
     
    +
    runTests() - Method in class plugindevelopment.MartinTestCases.Tester
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-18.html b/doc/LambdaJavadoc/index-files/index-18.html new file mode 100644 index 00000000..6e66932b --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-18.html @@ -0,0 +1,764 @@ + + + + + +S-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    S

    +
    +
    sc_check(Menge<Class>, Hashtable, Hashtable<String, String>, boolean, Hashtable, Hashtable<String, Hashtable>) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    sc_get_Formalparalist() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    Scanner - Class in de.dhbwstuttgart.parser
    +
     
    +
    Scanner(Reader) - Constructor for class de.dhbwstuttgart.parser.Scanner
    +
     
    +
    SCClassBodyException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    SCClassBodyException() - Constructor for exception de.dhbwstuttgart.myexception.SCClassBodyException
    +
     
    +
    SCClassException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    SCClassException() - Constructor for exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    scerrors - Variable in exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    SCExcept - Class in de.dhbwstuttgart.myexception
    +
     
    +
    SCExcept() - Constructor for class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    SCException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    SCException() - Constructor for exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    schnitt(Menge<Menge<TypePlaceholder>>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Bildet Schnittmengen der Mengen von Typeplaceholders + Rueckgabe ist die Menge der Menge von Indizies die Schnittmengen sind.
    +
    +
    schnitt1(Menge<TypePlaceholder>, Menge<Menge<TypePlaceholder>>, Menge<Integer>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    PL 2014-10-25 + schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind + Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind.
    +
    +
    SCMethodException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    SCMethodException() - Constructor for exception de.dhbwstuttgart.myexception.SCMethodException
    +
     
    +
    SCStatementException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    SCStatementException() - Constructor for exception de.dhbwstuttgart.myexception.SCStatementException
    +
     
    +
    Section - Enum in de.dhbwstuttgart.logger
    +
     
    +
    Section() - Constructor for enum de.dhbwstuttgart.logger.Section
    +
     
    +
    section - Variable in class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    SectionLogger - Class in de.dhbwstuttgart.logger
    +
    +
    Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt
    +
    +
    SectionLogger(Logger, Section) - Constructor for class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    seesType(Type) - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.JVMCodeException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.MatchException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.SCClassBodyException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.SCMethodException
    +
     
    +
    serialVersionUID - Static variable in exception de.dhbwstuttgart.myexception.SCStatementException
    +
     
    +
    serialVersionUID - Static variable in class de.dhbwstuttgart.syntaxtree.ImportDeclarations
    +
     
    +
    set - Variable in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    set - Variable in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    set_addElem(RefType) - Method in class de.dhbwstuttgart.syntaxtree.ExceptionList
    +
     
    +
    set_AddParameter(FormalParameter) - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    set_ArgumentList(ArgumentList) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    set_ArgumentList(ArgumentList) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    set_ArgumentList(ArgumentList) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    set_ArgumentList(ArgumentList) - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    set_Block(Block) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    set_body_Loop_block(Statement) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    set_Bool(boolean) - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    set_Char(char) - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    set_class_block(Block) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    set_ClassBody(ClassBody) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Setzt den ClassBody dieser Klasse.
    +
    +
    set_classname(String) - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    set_DeclId(DeclId) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    set_DeclId(DeclId) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    set_DeclId(DeclId) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    set_Double(double) - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    set_Else_block(Statement) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    set_error(String) - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    set_ExceptionList(ExceptionList) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    set_exlist(Menge<SCExcept>) - Method in exception de.dhbwstuttgart.myexception.SCMethodException
    +
     
    +
    set_Expr(Expr, Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    set_Expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    set_Expr1(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    set_Expr2(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    set_Expr_Menge(Menge<Expr>) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    set_Float(float) - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    set_function(String) - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    set_head_Condition(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    set_head_Initializer(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    set_head_Loop_expr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    set_Int(int) - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    set_ListType(Type) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    set_Long(long) - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    set_Loop_block(Statement) - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    set_Method_Name(String) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    set_Modifiers(Modifiers) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    set_Modifiers(Modifiers) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    set_Name(String) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    set_Name(String) - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    set_Name(String) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    set_Operator(Operator) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    set_ParaHash(Hashtable<String, String>) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    set_ParaList(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    set_ParaList(Menge) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    set_ParaList(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
    +
    +
    set_Paratyp(Menge) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    set_Receiver(Receiver) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    set_ReturnExpr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    set_statement(String) - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    set_Statement(Statement) - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    set_Statement_Menge(Menge<Statement>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    set_String(String) - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    set_Then_block(Statement) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    set_Type(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    set_Type(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    set_Type(RefType) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    set_Typen(Menge) - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    set_UnaryMinus(UnaryMinus) - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    set_UnaryNot(UnaryNot) - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    set_UnaryPlus(UnaryPlus) - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    set_UpperBounds(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Setzt den Menge der oberen Grenzen
    +
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Generiert die ClassFile für diese Klasse.
    +
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    set_UsedId(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    set_UserDef(UserDef) - Method in class de.dhbwstuttgart.syntaxtree.misc.Status
    +
     
    +
    set_Wert(ExprStmt) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    setAbstract(boolean) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    Legt fuer die ByteCodeGen fest, ob Bytecode + innerhalb der Methode generiert wird.
    +
    +
    setArray(boolean) - Method in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
    +
    Author: Daniel Feinler
    + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    +
    +
    setArray(boolean) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Author: Daniel Feinler
    + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    +
    +
    setBody(Block) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    setConstantVektor(Menge<Constant>) - Method in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    setContainedTypes(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setDeclIdMenge(Menge<DeclId>) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    setDeclidMenge(Menge<DeclId>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    setExpr(Expr) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    setFileName(String) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Deprecated.
    +
    +
    setGenericParameter(GenericDeclarationList) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setGenericParameter(GenericDeclarationList) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    setGenericParameter(GenericDeclarationList) - Method in interface de.dhbwstuttgart.syntaxtree.Generic
    +
     
    +
    setImports(ImportDeclarations) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    setInterfaceBody(InterfaceBody) - Method in class de.dhbwstuttgart.syntaxtree.Interface
    +
     
    +
    setLineNumber(int) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    setLineNumber(int) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    setMenge(Menge<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    setMethodVektor(Menge<Method>) - Method in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    setModifier(Menge<Modifier>) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    setModifiers(Modifiers) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setModifiers(Modifiers) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    setName(String) - Method in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    setName(String) - Method in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    setName(String) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setName(String) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    setName(String) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    setName(JavaClassName) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    setOffset(int) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    setOffset(int) - Method in interface de.dhbwstuttgart.typeinference.TypeInsertable
    +
     
    +
    SetOperator(Pair.PairOperator) - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Setzt den Operator
    +
    +
    setOutput(Section, PrintStream) - Method in class de.dhbwstuttgart.logger.LoggerConfiguration
    +
     
    +
    setOutputDir(String) - Method in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    setOutputDir(String) - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Author: Juergen Schmiing
    + Legt das Ausgabeverzeichnis fuer die class-Files fest.
    +
    +
    setOverloadedID(int) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    setPackageName(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setPackageName(UsedId) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    setParalist(ParaList) - Method in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    setParalist(ParaList) - Method in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    setParaList(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.Interface
    +
     
    +
    setParalist(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    setParameterList(ParameterList) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    setParameterList(ParameterList) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    setPrimitiveFlag(boolean) - Method in class de.dhbwstuttgart.syntaxtree.statement.Literal
    +
     
    +
    setPrimitiveFlag(boolean) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    setR(Type) - Method in class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    setReturnType(Type) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +

    Author: Jrg Buerle
    +
    +
    setReturnType(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    setReturnType(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    setStandardConfiguration(LoggerConfiguration) - Static method in class de.dhbwstuttgart.logger.Logger
    +
    +
    wird hier null übergeben, so wird sämtliches Logging unterdrückt.
    +
    +
    setSuperInterfaces(Menge<Type>) - Method in interface de.dhbwstuttgart.core.AClassOrInterface
    +
     
    +
    setSuperInterfaces(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    setT(Menge<Type>) - Method in class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
    +
    Legt den Typ der Konstantendefinition fest
    +
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.Constructor
    +
     
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
    +

    Author: J�rg B�uerle
    +
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
    +
    Author: J�rg B�uerle
    +
    +
    setType(Type) - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    setType(Type) - Method in interface de.dhbwstuttgart.typeinference.Typeable
    +
     
    +
    setType(Type) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Author: J�rg B�uerle
    +
    +
    setTypeVar(TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Author: J�rg B�uerle
    +
    +
    setValue(Expr) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
    +
    Legt den Wert der Konstantendefinition fest.
    +
    +
    setWert(Expr) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    SetWildcardType(ObjectType) - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Setzt den Typ in der Wildcard
    +
    +
    SetWildcardType(ObjectType) - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Setzt den Typ in der Wildcard
    +
    +
    SetWildcardType(Type) - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
    +
    +
    shallowCopy() - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    shallowCopy() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    SHIFTLEFT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    SHIFTLEFTEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    SHIFTRIGHT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    sigma - Variable in class de.dhbwstuttgart.typeinference.unify.MUB
    +
     
    +
    SIGNEDSHIFTRIGHT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    SIGNEDSHIFTRIGHTEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    SingleConstraint - Class in de.dhbwstuttgart.typeinference
    +
    +
    Beschreibung von Herrn Plümicke: + "The set of constraints consists of constraints of the form θ R θ' , where θ and + θ' are Java types and R (R ∈ { < , +
    +
    SingleConstraint(ConstraintType, ConstraintType) - Constructor for class de.dhbwstuttgart.typeinference.SingleConstraint
    +
     
    +
    SingleConstraint(ConstraintPair) - Constructor for class de.dhbwstuttgart.typeinference.SingleConstraint
    +
     
    +
    size() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    size() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    smaller(ObjectType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Erzeugt alle Typen die smaller sind als T.
    +
    +
    smaller0(ObjectType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smaller0 Schritt von smaller
    +
    +
    smaller1(Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smaller1 Schritt von smaller
    +
    +
    smaller2(Menge<ObjectType>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smaller2 Schritt von smaller
    +
    +
    smaller3(Menge<ObjectType>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smaller3 Schritt von smaller
    +
    +
    smaller4(Menge<ObjectType>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smaller4 Schritt von smaller
    +
    +
    smallerArg(Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    smallerArg Schritt von smaller
    +
    +
    SOLUTION_FILE - Static variable in class plugindevelopment.MethodTypeInsertTest
    +
     
    +
    SOLUTION_FILE - Static variable in class plugindevelopment.ParameterInsertTest
    +
     
    +
    SOLUTION_FILE - Static variable in class plugindevelopment.VariableTypeInsertTest
    +
     
    +
    SourceFile - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    SourceFile() - Constructor for class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei.
    +
    +
    SourceFile(Menge<Class>) - Constructor for class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    SourcePatchPoint - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
     
    +
    SourcePatchPoint() - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    standardConfiguration - Static variable in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    statement - Variable in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    Statement - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Statement(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    statements - Variable in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    STATIC - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Static - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Static() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Static
    +
     
    +
    Status - Class in de.dhbwstuttgart.syntaxtree.misc
    +
     
    +
    Status() - Constructor for class de.dhbwstuttgart.syntaxtree.misc.Status
    +
     
    +
    string - Variable in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    String2Bool() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    String2Double() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    String2Float() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    String2Int() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    String2Long() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    string_rec(Hashtable) - Static method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    string_rec(String, Hashtable) - Static method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    string_rec(String, Menge) - Static method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    STRINGLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    StringLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    StringLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    strNextName - Static variable in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
     
    +
    strNextName - Static variable in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    sub_unify(Menge<Pair>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    sub_unify(Menge<Pair>, FC_TTO, boolean) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    Subst(Pair, int, TypePlaceholder, Type, boolean) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    SubstHashtable(RefType, Hashtable<JavaClassName, Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    SubstHashtable2MengePair(Hashtable<JavaClassName, Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    SubstHashtableGeneric(RefType, Hashtable<JavaClassName, Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    subtract(CSet<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    subtract(CSet<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    SUPER - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Super - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    Super() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Super
    +
     
    +
    superBoundType - Variable in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
     
    +
    SuperCall - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    SuperCall(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
     
    +
    SuperCall(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
     
    +
    superClass - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    superclassid - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    superif - Variable in class de.dhbwstuttgart.parser.InterfaceList
    +
     
    +
    superif - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    SuperTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    SuperTest() - Constructor for class plugindevelopment.TypeInsertTests.SuperTest
    +
     
    +
    SuperWildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Stellt eine Wildcard mit unterer Grenze dar.
    +
    +
    SuperWildcardType(ObjectType) - Constructor for class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
     
    +
    SuperWildcardType(int, ObjectType) - Constructor for class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine SuperWildcard
    +
    +
    SWITCH - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    syntaxTree - package syntaxTree
    +
     
    +
    SyntaxTreeNode - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    SyntaxTreeNode() - Constructor for class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    SyntaxTreeTests - Class in plugindevelopment
    +
     
    +
    SyntaxTreeTests() - Constructor for class plugindevelopment.SyntaxTreeTests
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-19.html b/doc/LambdaJavadoc/index-files/index-19.html new file mode 100644 index 00000000..ff88015e --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-19.html @@ -0,0 +1,864 @@ + + + + + +T-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    T

    +
    +
    t - Variable in class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    T - Variable in class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    TA1 - Variable in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    TA2 - Variable in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    test() - Method in class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    test() - Method in class KomplexeMenge.KeineDoppeltenVerweise
    +
     
    +
    test(String) - Static method in class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    test(String, Menge<String>) - Static method in class plugindevelopment.MartinTestCases.Tester
    +
     
    +
    test(String, String) - Static method in class plugindevelopment.TypeInsertTester
    +
     
    +
    test(String, Menge<String>, LoggerConfiguration) - Static method in class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    test(String, Menge<String>) - Static method in class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    test() - Method in class syntaxTree.NodeEqualTest
    +
     
    +
    test1() - Method in class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    test1() - Method in class plugindevelopment.TypeInsertTests.MutlitpleTestCases
    +
     
    +
    test2() - Method in class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    test2() - Method in class plugindevelopment.TypeInsertTests.MutlitpleTestCases
    +
     
    +
    test3() - Method in class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    test4() - Method in class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    test5() - Method in class KomplexeMenge.KarthesischesProduktTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.MethodTypeInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.ParameterInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.Add
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.BoundedGenericsTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ConstructorTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.FunNInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericParaListInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericParaListInsertTest2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericTypeVarTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericVarInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericVarTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericVarTest2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenericVarTest3
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.GenTypeTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.Id
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ImportSubClassTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ImportTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ImportTest2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.IntTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest1
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest10
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest11
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest12
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest13
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest14
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest15
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest16
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest17
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest18
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest19
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest20
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest23
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest24
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest25
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest26
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest27
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest2_2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest3
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest4
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest5
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest6
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest7
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest8
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LambdaTest9
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.Matrix_simple
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.MutlitpleTestCases
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OL
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OperatorTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingExample
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingInMethod
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingInMethod2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingInsertTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.OverloadingRecursive
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.RelOpTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ReursiveTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ReursiveTest2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.SuperTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.ThisTest
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.WildcardTestForLambda
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.TypeInsertTests.WildcardTestForLambda2
    +
     
    +
    TEST_FILE - Static variable in class plugindevelopment.VariableTypeInsertTest
    +
     
    +
    TEST_FILE2 - Static variable in class plugindevelopment.TypeInsertTests.GenericTypeVarTest2
    +
     
    +
    TEST_FILE2 - Static variable in class plugindevelopment.TypeInsertTests.MutlitpleTestCases
    +
     
    +
    Tester - Class in plugindevelopment.MartinTestCases
    +
     
    +
    Tester() - Constructor for class plugindevelopment.MartinTestCases.Tester
    +
     
    +
    testFile - Static variable in class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    testFile - Static variable in class syntaxTree.NodeEqualTest
    +
     
    +
    TestKlasse - Class in KomplexeMenge
    +
     
    +
    TestKlasse(String) - Constructor for class KomplexeMenge.TestKlasse
    +
     
    +
    testPair - Variable in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    testPair - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    testSingleInsert(String, Menge<String>) - Static method in class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    +
     
    +
    testUnifyErg(Menge<Menge<Pair>>, RefType) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Diese Methode wird verwendet, um Zuordnungen z.B.
    +
    +
    then_block - Variable in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    THIS - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    This - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    This(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    This(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    ThisCall - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    ThisCall(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    ThisCall(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    thisClassName - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    ThisTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ThisTest() - Constructor for class plugindevelopment.TypeInsertTests.ThisTest
    +
     
    +
    THROW - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    THROWS - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    TIMESEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    TimesOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    TimesOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.TimesOp
    +
     
    +
    TIPConstraints - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    TIPConstraints(Menge<TypePlaceholder>) - Constructor for class de.dhbwstuttgart.typeinference.TIPConstraints
    +
     
    +
    token - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    token - Variable in exception de.dhbwstuttgart.parser.JavaParser.yyException
    +
     
    +
    token() - Method in interface de.dhbwstuttgart.parser.JavaParser.yyInput
    +
    +
    classifies current token.
    +
    +
    token() - Method in class de.dhbwstuttgart.parser.Scanner
    +
     
    +
    Token - Class in de.dhbwstuttgart.parser
    +
     
    +
    Token(int, int) - Constructor for class de.dhbwstuttgart.parser.Token
    +
     
    +
    Token(int, String, int) - Constructor for class de.dhbwstuttgart.parser.Token
    +
     
    +
    Token(int, char, int) - Constructor for class de.dhbwstuttgart.parser.Token
    +
     
    +
    Token(int, String, int, int) - Constructor for class de.dhbwstuttgart.parser.Token
    +
     
    +
    Token(int, char, int, int) - Constructor for class de.dhbwstuttgart.parser.Token
    +
     
    +
    token - Variable in class de.dhbwstuttgart.parser.Token
    +
     
    +
    toString() - Method in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.parser.JavaClassName
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
    +

    Author: Martin Pl�micke
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +

    Author: J�rg B�uerle
    +
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt String Entsprechung zurück.
    +
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    +
     
    +
    toString() - Method in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    toString() - Method in class KomplexeMenge.TestKlasse
    +
     
    +
    tph - Static variable in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
    +
    Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch + Ihre Superklasse ersetzt werden m�ssen.
    +
    +
    TRY - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    TTO - Variable in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    typ - Variable in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    typ - Variable in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    typable - Variable in class de.dhbwstuttgart.typeinference.assumptions.Assumption
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.Constructor
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    type - Variable in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    type - Variable in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    type - Variable in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    type - Variable in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    type - Variable in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
     
    +
    TYPE(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
    +
    Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
    +
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
     
    +
    Type - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    Type(String, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    Type(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Prüft ob der Typ in den Assumptions ass vorhanden ist.
    +
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.Void
    +
     
    +
    TYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
     
    +
    type - Variable in class de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption
    +
     
    +
    type - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    Type2Key() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    Type2Key() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    Type2String() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    Type2String() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    Typeable - Interface in de.dhbwstuttgart.typeinference
    +
     
    +
    typeAssumptions - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    TypeAssumptions - Class in de.dhbwstuttgart.typeinference.assumptions
    +
    +
    Eine Sammlung von TypeAssumptions.
    +
    +
    TypeAssumptions() - Constructor for class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
    +
    +
    TypeAssumptions(JavaClassName) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    TypedMatrixSimpleTest - Class in plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +
     
    +
    TypedMatrixSimpleTest() - Constructor for class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
    +
     
    +
    TypedMatrixTest - Class in plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +
     
    +
    TypedMatrixTest() - Constructor for class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
    +
    Spezifikation: + + TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) = + let + AssArgs = { xi : ai | ai fresh type variables } + (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr ) + | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt ) + in + (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a, + ConS ∪ { (FunN a) }), + where a is a fresh type variable
    +
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    TYPEExpr(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr
    +
     
    +
    TypeinferenceException - Exception in de.dhbwstuttgart.typeinference.exceptions
    +
    +
    Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird.
    +
    +
    TypeinferenceException(String, SyntaxTreeNode) - Constructor for exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
     
    +
    TypeinferenceException(String, int) - Constructor for exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
     
    +
    TypeinferenceResultSet - Class in de.dhbwstuttgart.typeinference
    +
    +
    Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche + Typkombination einer Klasse und deren Methoden sowie lokalen Variablen.
    +
    +
    TypeinferenceResultSet(Class, Menge<Pair>, ResultSet) - Constructor for class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
     
    +
    TypeInsertable - Interface in de.dhbwstuttgart.typeinference
    +
     
    +
    TypeInsertPoint - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar.
    +
    +
    TypeInsertPoint(TypeInsertable, SyntaxTreeNode, Type, ResultSet) - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
    +
    Dieser Konstruktor erstellt einen TypInsertPoint
    +
    +
    TypeInsertSet - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören.
    +
    +
    TypeInsertSet(ResultSet) - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    TypeInsertTester - Class in plugindevelopment
    +
     
    +
    TypeInsertTester() - Constructor for class plugindevelopment.TypeInsertTester
    +
     
    +
    typen - Variable in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    TypePatchJob - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Stellt eine Reihe von TypeInsertions dar
    +
    +
    TypePatchJob() - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.TypePatchJob
    +
     
    +
    TypePlaceholder - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben + Typ.
    +
    +
    TypePlaceholder(String, SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die + Factory-Methode fresh() erzeugt.
    +
    +
    typeReconstruction() - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Author: J�rg B�uerle
    + Ruft den Typrekonstruktionsalgorithmus auf.
    +
    +
    typeReconstruction() - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Author: Jörg Bäuerle
    + Ruft den Typrekonstruktionsalgorithmus auf.
    +
    +
    typeReconstruction(FC_TTO, TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
    +
    +
    typeReconstruction(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
    +
    +
    types_in_parameterlist - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
    +
    Spezifikation: + TYPEStmt( Ass, stmt ) = + let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) + in (stmt : Void, ConS)
    +
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
    +
    Spezifikation: + TYPEStmt( Ass, stmt ) = + let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) + in (stmt : Void, ConS)
    +
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
    +
    Spezifikation: + TYPEStmt( Ass, stmt ) = + let (stmt : rty, ConS) = TYPEExpr( Ass, stmt ) + in (stmt : Void, ConS)
    +
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.SuperCall
    +
    +
    This kann auch als Konstruktoraufruf in einem Konstruktor-Block vorkommen.
    +
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
    +
    This kann auch als Konstruktoraufruf in einem Konstruktor-Block vorkommen.
    +
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr
    +
     
    +
    TYPEStmt(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    typinferenceLog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    typinferenzLog - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    typinferenzLog - Variable in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-2.html b/doc/LambdaJavadoc/index-files/index-2.html new file mode 100644 index 00000000..119b054d --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-2.html @@ -0,0 +1,228 @@ + + + + + +B-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    B

    +
    +
    backdoorCreate(String) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, zum Erzeugen eines TypePlaceholders, der nicht in + der zentralen Registry eingetragen wird.
    +
    +
    backdoorFresh() - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, um neue TypePlaceholders zu erzeugen.
    +
    +
    backdoorSetName(String) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Backdoor-Hilfsfunktion, die f�r makeFC() und unify() + ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.
    +
    +
    BaseType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    BaseType(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
     
    +
    BaseType(String, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
     
    +
    baseTypeTranslationTable - Variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Table zum Übersetzen der nicht implementierten Base-Types: + Überall im Compiler wird statt bspw. int Integer verwendet + d.h. 1+2 liefert ein Integer + Deshalb benötigen wir hier eine Tabelle, mit der man die von + der JRE gelieferten Base-Typen (int,char, etc) und die Objekt- + Typen umwandeln können
    +
    +
    BasicAssumptionClass - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    BasicAssumptionClass(String) - Constructor for class de.dhbwstuttgart.syntaxtree.BasicAssumptionClass
    +
     
    +
    BasicAssumptionClass(String, Modifiers) - Constructor for class de.dhbwstuttgart.syntaxtree.BasicAssumptionClass
    +
     
    +
    berechneKarthesischesProdukt(Menge<Menge<M>>) - Static method in class de.dhbwstuttgart.typeinference.KarthesischesProdukt
    +
     
    +
    berechneKarthesischesProdukt(Menge<Menge<M>>, Menge<Menge<M>>) - Static method in class de.dhbwstuttgart.typeinference.KarthesischesProdukt
    +
     
    +
    Binary - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Binary(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    BinaryExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    BinaryExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.BinaryExpr
    +
     
    +
    block - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    Block - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Block() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    block - Variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    body_Loop_block - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    Bool - Variable in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    BOOLEAN - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    BooleanType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    BooleanType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.BooleanType
    +
     
    +
    BOOLLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    BoolLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    BoolLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    BoundedClassIdentifierList - Class in de.dhbwstuttgart.parser
    +
     
    +
    BoundedClassIdentifierList(Menge<ObjectType>, int) - Constructor for class de.dhbwstuttgart.parser.BoundedClassIdentifierList
    +
     
    +
    BoundedGenericsTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    BoundedGenericsTest() - Constructor for class plugindevelopment.TypeInsertTests.BoundedGenericsTest
    +
     
    +
    BoundedGenericTypeVar - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Entspricht einem GenericTypeVar, jedoch mit Bounds + (d.h. vorgaben, von welchem Typ die Typevar sein darf + => extends Class x + => implements Interface y + ...
    +
    +
    BoundedGenericTypeVar(String, Menge<ObjectType>, SyntaxTreeNode, int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    bounds - Variable in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
    +
    Hier sind die Bounds in Form von Type-Objekten abgespeichert
    +
    +
    BRACE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    BREAK - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    bSubst - Variable in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-20.html b/doc/LambdaJavadoc/index-files/index-20.html new file mode 100644 index 00000000..3a2bdff4 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-20.html @@ -0,0 +1,241 @@ + + + + + +U-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    U

    +
    +
    UnaryExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    UnaryExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr
    +
     
    +
    UnaryMinus - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    UnaryMinus() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.UnaryMinus
    +
     
    +
    UnaryNot - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    UnaryNot() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.UnaryNot
    +
     
    +
    UnaryPlus - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    UnaryPlus() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.UnaryPlus
    +
     
    +
    UndConstraint - Class in de.dhbwstuttgart.typeinference
    +
    +
    Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht.
    +
    +
    UndConstraint(ConstraintType, ConstraintType) - Constructor for class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    UndConstraint() - Constructor for class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    UndMenge<A> - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    UndMenge() - Constructor for class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    unifiedConstraints - Variable in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Das unifizierte ConstaraintsSet
    +
    +
    Unifier - Interface in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    unify() - Method in class de.dhbwstuttgart.typeinference.unify.ParallelUnify
    +
     
    +
    Unify - Class in de.dhbwstuttgart.typeinference.unify
    +
    +
    Implementierung des Unifizierungsalgorithmus
    +
    +
    Unify() - Constructor for class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    unify(Type, Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Unifiziert ein Pair mit den Elementen ty1 und ty2 -> (ty1 < ty2)
    +
    +
    unify(Menge<Pair>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Einstieg in die Unifizierung mit Wildcards
    +
    +
    unify_Mub(Type, Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    unifyFiltered(Menge<Pair>, FC_TTO, boolean) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    UnifyResult - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    UnifyResult() - Constructor for class de.dhbwstuttgart.typeinference.unify.UnifyResult
    +
     
    +
    unifyUndConstraints(Unifier) - Method in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
    +
    Nimmt alle UndConstraints und filtert mithilfe dieser die falschen Constraints aus den OderConstraints
    +
    +
    unifyWC(Type, Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Einstieg in die Unifizierung mit Wildcards
    +
    +
    unifyWC(Pair, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Einstieg in die Unifizierung mit Wildcards
    +
    +
    unite(CSet<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    unite(CSet<E>) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
    +
    Fügt ein CMengeSet an!
    +
    +
    unpackFromString(int, int, String) - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    unresolvedTPHs - Variable in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    UNSIGNEDSHIFTRIGHT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    UNSIGNEDSHIFTRIGHTEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    upperBounds - Variable in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
     
    +
    used - Variable in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    UsedId - Class in de.dhbwstuttgart.syntaxtree.misc
    +
     
    +
    UsedId(int) - Constructor for class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    UsedId(String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    usedid - Variable in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    usedid - Variable in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    usedIdsToCheck - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    usedIdsToCheck - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    usedIdToRefType(Menge<UsedId>) - Static method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    usedIdToRefType(UsedId) - Static method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    usedTPHs - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    userdef - Variable in class de.dhbwstuttgart.syntaxtree.misc.Status
    +
     
    +
    UserDef - Class in de.dhbwstuttgart.syntaxtree.misc
    +
     
    +
    UserDef() - Constructor for class de.dhbwstuttgart.syntaxtree.misc.UserDef
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-21.html b/doc/LambdaJavadoc/index-files/index-21.html new file mode 100644 index 00000000..7d41732f --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-21.html @@ -0,0 +1,169 @@ + + + + + +V-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    V

    +
    +
    value() - Method in interface de.dhbwstuttgart.parser.JavaParser.yyInput
    +
    +
    associated with current token.
    +
    +
    value() - Method in class de.dhbwstuttgart.parser.Scanner
    +
     
    +
    valueOf(String) - Static method in enum de.dhbwstuttgart.logger.Section
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum de.dhbwstuttgart.typeinference.Pair.PairOperator
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    values() - Static method in enum de.dhbwstuttgart.logger.Section
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum de.dhbwstuttgart.typeinference.Pair.PairOperator
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    variableLength - Variable in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    variableLength - Variable in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    VariableTypeInsertTest - Class in plugindevelopment
    +
     
    +
    VariableTypeInsertTest() - Constructor for class plugindevelopment.VariableTypeInsertTest
    +
     
    +
    varSubst(RefType, Hashtable<JavaClassName, Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    VOID - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Void - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    Void(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.Void
    +
     
    +
    vParaOrg - Variable in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-22.html b/doc/LambdaJavadoc/index-files/index-22.html new file mode 100644 index 00000000..7720377e --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-22.html @@ -0,0 +1,241 @@ + + + + + +W-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    W

    +
    +
    wandleRefTypeAttributes2GenericAttributes() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Alle Methoden der Klassen überprüfen, ob sie als + RefType deklarierte Attribute haben, die aber GenericTypeVars sind + und ggf. ersetzen + + Bsp.: + bei public E elementAt(i){...} wird E vorerst als RefType erkannt
    +
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
    +
    Wird im Zuge des ParserPostProcessing aufgerufen.
    +
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
    +
    In allen lokalen Variablendeklarationen die "falschen" RefTypes ersetzen
    +
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    wandleRefTypeAttributes2GenericAttributes(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    wert - Variable in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    wert - Variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    WHILE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    WhileStmt - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    WhileStmt(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    WildcardTestForLambda - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    WildcardTestForLambda() - Constructor for class plugindevelopment.TypeInsertTests.WildcardTestForLambda
    +
     
    +
    WildcardTestForLambda2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    WildcardTestForLambda2() - Constructor for class plugindevelopment.TypeInsertTests.WildcardTestForLambda2
    +
     
    +
    WildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Stellt eine Wildcard in Java dar.
    +
    +
    WildcardType(ObjectType, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine Wildcard
    +
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-23.html b/doc/LambdaJavadoc/index-files/index-23.html new file mode 100644 index 00000000..05ddd0fd --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-23.html @@ -0,0 +1,129 @@ + + + + + +X-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    X

    +
    +
    XOREQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-24.html b/doc/LambdaJavadoc/index-files/index-24.html new file mode 100644 index 00000000..25ddc05e --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-24.html @@ -0,0 +1,297 @@ + + + + + +Y-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    Y

    +
    +
    yy_acpt - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_advance() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_at_bol - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_BOL - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_buffer - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_buffer_end - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_buffer_index - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_buffer_read - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_BUFFER_SIZE - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_buffer_start - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_cmap - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_double(char[]) - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_E_INTERNAL - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_E_MATCH - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_END - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_EOF - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_eof_done - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_error(int, boolean) - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_error_string - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_F - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_last_was_cr - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_lexical_state - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_mark_end() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_mark_start() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_move_end() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_NO_ANCHOR - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_NO_STATE - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_NOT_ACCEPT - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_nxt - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_reader - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_rmap - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    YY_START - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_state_dtrans - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yy_to_mark() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yybegin(int) - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yychar - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yyCheck - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyCheck - Static variable in class de.dhbwstuttgart.parser.yyCheckInit
    +
     
    +
    yyCheck0 - Class in de.dhbwstuttgart.parser
    +
     
    +
    yyCheck0() - Constructor for class de.dhbwstuttgart.parser.yyCheck0
    +
     
    +
    yyCheck0 - Static variable in class de.dhbwstuttgart.parser.yyCheck0
    +
     
    +
    yyCheck1 - Class in de.dhbwstuttgart.parser
    +
     
    +
    yyCheck1() - Constructor for class de.dhbwstuttgart.parser.yyCheck1
    +
     
    +
    yyCheck1 - Static variable in class de.dhbwstuttgart.parser.yyCheck1
    +
     
    +
    yyCheck2 - Class in de.dhbwstuttgart.parser
    +
     
    +
    yyCheck2() - Constructor for class de.dhbwstuttgart.parser.yyCheck2
    +
     
    +
    yyCheck2 - Static variable in class de.dhbwstuttgart.parser.yyCheck2
    +
     
    +
    yyCheck3 - Class in de.dhbwstuttgart.parser
    +
     
    +
    yyCheck3() - Constructor for class de.dhbwstuttgart.parser.yyCheck3
    +
     
    +
    yyCheck3 - Static variable in class de.dhbwstuttgart.parser.yyCheck3
    +
     
    +
    yyCheckInit - Class in de.dhbwstuttgart.parser
    +
     
    +
    yyCheckInit() - Constructor for class de.dhbwstuttgart.parser.yyCheckInit
    +
     
    +
    yyCheckInit() - Static method in class de.dhbwstuttgart.parser.yyCheckInit
    +
     
    +
    yyDefault(Object) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    executed at the beginning of a reduce action.
    +
    +
    yyDefRed - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyDgoto - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyerror(String) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    simplified error message.
    +
    +
    yyerror(String, String[]) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    (syntax) error message.
    +
    +
    yyErrorCode - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyException(String, Token) - Constructor for exception de.dhbwstuttgart.parser.JavaParser.yyException
    +
     
    +
    yyExpecting(int) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    computes list of expected tokens on error by tracing the tables.
    +
    +
    yyFinal - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    debugging support, requires the package jay.yydebug.
    +
    +
    yyGindex - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    YYINITIAL - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yyLen - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yylength() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yylex() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yyLhs - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyline - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    yyMax - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    initial size and increment of the state/value stack [default 256].
    +
    +
    yyName - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyparse(JavaParser.yyInput, Object) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    the generated parser, with debugging messages.
    +
    +
    yyparse(JavaParser.yyInput) - Method in class de.dhbwstuttgart.parser.JavaParser
    +
    +
    the generated parser.
    +
    +
    yyRindex - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yySindex - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yyTable - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    yytext() - Method in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-3.html b/doc/LambdaJavadoc/index-files/index-3.html new file mode 100644 index 00000000..8b17972e --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-3.html @@ -0,0 +1,560 @@ + + + + + +C-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    C

    +
    +
    calculate_access_flags() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
    +
    Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier + zurueck.
    +
    +
    calculateNewParalist() - Method in class de.dhbwstuttgart.typeinference.FunN
    +
    +
    Muss nach jeder Änderung von T oder R aufgerufen werden.
    +
    +
    CaptureConversion(Menge<ObjectType>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Implementiert die CaptureConversion.
    +
    +
    CaptureConversion(Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Erzeugt die CaptureConversion von einem Typ.
    +
    +
    CaptureConversionHashtable(Hashtable<JavaClassName, Type>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    cartesianProduct() - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    cartesianProduct() - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    cartesianProduct() - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    cartesianProduct() - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    CartesianProduct - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    CartesianProduct() - Constructor for class de.dhbwstuttgart.typeinference.unify.CartesianProduct
    +
     
    +
    cartProductPair(Menge<Menge<Pair>>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2.
    +
    +
    cartProductPair(Menge<Menge<Pair>>, int) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Erzeugt das Kartesische Product von mehreren Mengeen von Paaren.
    +
    +
    cartProductType(Menge<Menge<Type>>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2.
    +
    +
    cartProductType(Menge<Menge<Type>>, int) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Erzeugt das Kartesische Product von mehreren Mengeen von Typen.
    +
    +
    CASE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    CastExpr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    CastExpr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    CATCH - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    CHAR - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Char - Variable in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    CharacterType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    CharacterType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.CharacterType
    +
     
    +
    CharInString() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    CHARLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    CharLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    CharLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    check(Menge<Menge<A>>) - Method in class KomplexeMenge.KeineDoppeltenVerweise
    +
     
    +
    checkTYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    checkTYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    checkTYPE(TypeAssumptions, SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.Void
    +
     
    +
    checkType(RefType, SyntaxTreeNode) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    CLASS - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Class - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    Class(String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, RefType, Modifiers, Menge<String>) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Erstellt eine Klasse, welche nur für die Assumptions verwendet wird.
    +
    +
    Class(String, RefType, Modifiers, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, Modifiers, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, Modifiers, ClassBody, Menge<Type>, Menge<UsedId>, UsedId, Menge<UsedId>, Menge<Type>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, ClassBody, Menge<Type>, UsedId, Menge<Type>, Menge<Type>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, Modifiers, ClassBody, Menge<Type>, UsedId, Menge<Type>, Menge<Type>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, Modifiers, ClassBody, Menge<Type>, Menge<Type>, Menge<Type>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Class(String, Modifiers, ClassBody, Menge<Type>, Type, Menge<Type>, Menge<? extends Type>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Konstruktor, der die Angabe aller Parameter ermoeglicht.
    +
    +
    class_block - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    ClassAndParameter - Class in de.dhbwstuttgart.parser
    +
    +
    Hilfskonstrukt, um die Grammatik fuer einen Klassenheader + ueberschaubar zu halten.
    +
    +
    ClassAndParameter(String) - Constructor for class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    ClassAndParameter(String, ParaList) - Constructor for class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    ClassAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
    +
    Nicht wirklich eine Assumption.
    +
    +
    ClassAssumption(Class) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
    +
     
    +
    classAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    ClassBody - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    ClassBody() - Constructor for class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    ClassHelper - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    ClassHelper() - Constructor for class de.dhbwstuttgart.syntaxtree.ClassHelper
    +
     
    +
    classname - Variable in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    classType - Variable in class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
    +
     
    +
    CLASSVEC - Variable in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.BooleanType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.CharacterType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.DoubleType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.FloatType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.IntegerType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.LongType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.ObjectType
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.ReturnType
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die + Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen + muss.
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.Void
    +
    +

    Author: J�rg B�uerle
    +
    +
    clone() - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt einen Klon der Wildcard zurück.
    +
    +
    clone() - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    clone() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Erzeugt einen Klon des Paares.
    +
    +
    clone() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    close() - Method in class de.dhbwstuttgart.logger.OutputHandler
    +
     
    +
    codegen() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Startet die Bytecodegenerierung dieser Lösung.
    +
    +
    codegenlog - Static variable in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    codegenlog - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    commentblock - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    commentsingleline - Variable in class de.dhbwstuttgart.parser.JavaLexer
    +
     
    +
    compareTo(SourcePatchPoint) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    compareTo(SourcePatchPoint) - Method in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    ConfigurationEvaluater - Interface in de.dhbwstuttgart.logger
    +
     
    +
    ConsoleInterface - Class in de.dhbwstuttgart.core
    +
     
    +
    ConsoleInterface() - Constructor for class de.dhbwstuttgart.core.ConsoleInterface
    +
     
    +
    Constant - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Enthaelt die Eigenschaften einer Konstante (Name, Typ, Modifier, Wert)
    +
    +
    Constant(String, Modifiers) - Constructor for class de.dhbwstuttgart.syntaxtree.Constant
    +
    +
    Deprecated.
    +
    +
    ConstantVektor - Variable in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    ConstraintPair - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    ConstraintPair(ConstraintType, ConstraintType) - Constructor for class de.dhbwstuttgart.typeinference.ConstraintPair
    +
     
    +
    constraints - Variable in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Alle Constraints vor der Unifizierung.
    +
    +
    constraintsFromMethodAssumption(MethodAssumption, TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
    +
    Spezifikation: + overloading determines for all possible overloadings and overridings + of a method the constraints, where constraints itself forms + the constraints from the receiver type, the argument types, the return + type and a given type assumption for the method.
    +
    +
    ConstraintsSet - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    ConstraintsSet() - Constructor for class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
     
    +
    ConstraintType - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    ConstraintType(TypePlaceholder) - Constructor for class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    ConstraintType(GenericTypeVar) - Constructor for class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    ConstraintType(RefType) - Constructor for class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    ConstraintType(WildcardType) - Constructor for class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    Constructor - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    Constructor(Method) - Constructor for class de.dhbwstuttgart.syntaxtree.Constructor
    +
    +
    Parser kann nicht zwischen einem Konstruktor und einer Methode unterscheiden.
    +
    +
    ConstructorAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    ConstructorAssumption(Method, Class) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption
    +
     
    +
    constructorAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    ConstructorCall - Class in de.dhbwstuttgart.syntaxtree.misc
    +
    +
    Diese Klasse stellt den this()-Aufruf dar.
    +
    +
    ConstructorCall(Receiver, String, ArgumentList, int) - Constructor for class de.dhbwstuttgart.syntaxtree.misc.ConstructorCall
    +
     
    +
    ConstructorTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ConstructorTest() - Constructor for class plugindevelopment.TypeInsertTests.ConstructorTest
    +
     
    +
    containedTypes - Variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    containedTypes - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    contains(Type) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
    +
    Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ.
    +
    +
    contains(E) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    contains(E) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    containsRef(Menge, Object) - Method in class KomplexeMenge.KeineDoppeltenVerweise
    +
     
    +
    containsString(Menge<UsedId>, String) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    CONTINUE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    copyMengeMengePair(Menge<Menge<Pair>>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    copyMengeObjectType(Menge<ObjectType>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Kopiert einen Menge.
    +
    +
    copyMengePair(Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    copyMengeType(Menge<? extends Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Kopiert einen Menge.
    +
    +
    copyPair() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    copyType(Type) - Static method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    createAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    createEmptyMethod(String, Class) - Static method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    createFromQualifiedName(String, int) - Static method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    createNotImplementedException() - Static method in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    createPairFromClassAndSuperclass(Class, Type, Menge, Menge, TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Erstellt ein Typ-Paar, welches im 1.
    +
    +
    createTypeAssumptions(Class) - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    createTypeAssumptions(Class) - Method in class de.dhbwstuttgart.syntaxtree.Constructor
    +
     
    +
    createTypeAssumptions(Class) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
    +
    Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember
    +
    +
    createTypeAssumptions(Class) - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    createTypeAssumptions(Class) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    Liefert die MethodAssumption zu dieser Methode
    +
    +
    createTypeFromJavaGenericType(Type, Class<?>, Hashtable<String, GenericTypeVar>, Class) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaParameter
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in class de.dhbwstuttgart.typeinference.FunNMethod
    +
     
    +
    createTypeInsertPoint(TypePlaceholder, ResultSet) - Method in interface de.dhbwstuttgart.typeinference.TypeInsertable
    +
    +
    Errechnet den TypeInsertPoint für das TypeInsertable.
    +
    +
    CSet<E> - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    CSet() - Constructor for class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    CSubstitution - Class in de.dhbwstuttgart.typeinference.unify
    +
    +
    Implementierung einer Typsubstitution.
    +
    +
    CSubstitution() - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    CSubstitution(TypePlaceholder, Type) - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    CSubstitution(Pair) - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    CSubstitutionGenVar - Class in de.dhbwstuttgart.typeinference.unify
    +
    +
    Implementierung einer Typsubstitution der GenVar.
    +
    +
    CSubstitutionGenVar() - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    +
     
    +
    CSubstitutionGenVar(GenericTypeVar, Type) - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    +
     
    +
    CSubstitutionSet - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    CSubstitutionSet() - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    CSubstitutionSet(Menge<Pair>) - Constructor for class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    CTypeReconstructionException - Exception in de.dhbwstuttgart.myexception
    +
     
    +
    CTypeReconstructionException(String, IItemWithOffset) - Constructor for exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    CTypeReconstructionException(String, Menge<CTypeReconstructionException>, IItemWithOffset) - Constructor for exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    CVectorSet<E> - Class in de.dhbwstuttgart.typeinference.unify
    +
     
    +
    CVectorSet() - Constructor for class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-4.html b/doc/LambdaJavadoc/index-files/index-4.html new file mode 100644 index 00000000..72ab1681 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-4.html @@ -0,0 +1,225 @@ + + + + + +D-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    D

    +
    +
    de.dhbwstuttgart.core - package de.dhbwstuttgart.core
    +
     
    +
    de.dhbwstuttgart.JvmDisassembler - package de.dhbwstuttgart.JvmDisassembler
    +
     
    +
    de.dhbwstuttgart.logger - package de.dhbwstuttgart.logger
    +
     
    +
    de.dhbwstuttgart.myexception - package de.dhbwstuttgart.myexception
    +
     
    +
    de.dhbwstuttgart.parser - package de.dhbwstuttgart.parser
    +
     
    +
    de.dhbwstuttgart.syntaxtree - package de.dhbwstuttgart.syntaxtree
    +
     
    +
    de.dhbwstuttgart.syntaxtree.misc - package de.dhbwstuttgart.syntaxtree.misc
    +
     
    +
    de.dhbwstuttgart.syntaxtree.modifier - package de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    de.dhbwstuttgart.syntaxtree.operator - package de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    de.dhbwstuttgart.syntaxtree.statement - package de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    de.dhbwstuttgart.syntaxtree.type - package de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    de.dhbwstuttgart.typeinference - package de.dhbwstuttgart.typeinference
    +
     
    +
    de.dhbwstuttgart.typeinference.assumptions - package de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    de.dhbwstuttgart.typeinference.exceptions - package de.dhbwstuttgart.typeinference.exceptions
    +
     
    +
    de.dhbwstuttgart.typeinference.typedeployment - package de.dhbwstuttgart.typeinference.typedeployment
    +
     
    +
    de.dhbwstuttgart.typeinference.unify - package de.dhbwstuttgart.typeinference.unify
    +
     
    +
    debug(String, Section) - Method in class de.dhbwstuttgart.logger.Logger
    +
    +
    Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
    +
    +
    debug(String) - Method in class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    DebugException - Exception in de.dhbwstuttgart.typeinference.exceptions
    +
     
    +
    DebugException(String) - Constructor for exception de.dhbwstuttgart.typeinference.exceptions.DebugException
    +
     
    +
    declid - Variable in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    declid - Variable in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    DeclId - Class in de.dhbwstuttgart.syntaxtree.misc
    +
     
    +
    DeclId() - Constructor for class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    DeclId(String) - Constructor for class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    declid - Variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    DECREMENT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    deepCopy() - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    deepCopy() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    DEFAULT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    definesGenericVar(TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
    +
    Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2
    +
    +
    deleteRegistry() - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    L�scht die komplette Registry von TypePlaceholders.
    +
    +
    DelFreshWildcardTypeVar(Type) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält.
    +
    +
    directory - Static variable in class de.dhbwstuttgart.core.ConsoleInterface
    +
     
    +
    DIVIDEEQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    DivideOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    DivideOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.DivideOp
    +
     
    +
    DO - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    does_Class_extend() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    Double - Variable in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    DOUBLELITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    DoubleLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    DoubleLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    DoubleType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    DoubleType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.DoubleType
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-5.html b/doc/LambdaJavadoc/index-files/index-5.html new file mode 100644 index 00000000..ec52edff --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-5.html @@ -0,0 +1,370 @@ + + + + + +E-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    E

    +
    +
    EinzelElement<A> - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    EinzelElement(A) - Constructor for class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    elements - Variable in class de.dhbwstuttgart.parser.GenericVarDeclarationList
    +
     
    +
    ELSE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    else_block - Variable in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    EmptyStmt - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    EmptyStmt() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    endOffset - Variable in class de.dhbwstuttgart.parser.BoundedClassIdentifierList
    +
     
    +
    endOffset - Variable in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    ENDOFGENERICVARDECLARATION - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    ensureAbstract() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
    +
    Stellt sicher, dass ABSTRACT in der Modifierliste + vorkommt.
    +
    +
    ensurePublic() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    EOF - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    eOperator - Variable in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    EQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    EqualOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    EqualOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.EqualOp
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.parser.JavaClassName
    +
    +
    Namen sind nur gleich, wenn bei den beiden zu vergleichenden JavaClassNames auch das Package angegeben ist
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.BooleanType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.CharacterType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.DoubleType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Vergleicht mit einem anderen Objekt.
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.FloatType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Prüft, ob zwei Objekte gleich sind.
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Prüft, ob zwei Objekte gleich sind.
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Prüft, ob zwei Objekte gleich sind.
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
    +

    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.IntegerType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.LongType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Author: Jrg Buerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.ReturnType
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Vergleicht mit einem anderen Objekt.
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.Void
    +
    +
    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +

    Author: J�rg B�uerle
    +
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    equals(Object) - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    Equiv2Equal(RefType, Hashtable<JavaClassName, Type>) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    error(String, Section) - Method in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    error(String) - Method in class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    error - Variable in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    ExceptionList - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    ExceptionList() - Constructor for class de.dhbwstuttgart.syntaxtree.ExceptionList
    +
     
    +
    exceptionlist - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    exlist - Variable in exception de.dhbwstuttgart.myexception.SCClassBodyException
    +
     
    +
    exlist - Variable in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    exlist - Variable in exception de.dhbwstuttgart.myexception.SCMethodException
    +
     
    +
    exlist - Variable in exception de.dhbwstuttgart.myexception.SCStatementException
    +
     
    +
    exp - Variable in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    Expr - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    Expr(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr
    +
     
    +
    expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    expr1 - Variable in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    expr1 - Variable in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    expr2 - Variable in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    expr2 - Variable in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    ExprStmt - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    ExprStmt(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.ExprStmt
    +
     
    +
    EXTENDS - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    extendsBoundType - Variable in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
     
    +
    ExtendsWildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Stellt eine Wildcard mit oberer Grenze dar.
    +
    +
    ExtendsWildcardType(int, ObjectType) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine ExtendsWildcard
    +
    +
    ExtendsWildcardType(ObjectType) - Constructor for class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-6.html b/doc/LambdaJavadoc/index-files/index-6.html new file mode 100644 index 00000000..304a5418 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-6.html @@ -0,0 +1,300 @@ + + + + + +F-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    F

    +
    +
    FC - Variable in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    FC_TTO - Class in de.dhbwstuttgart.typeinference.unify
    +
    +
    Hilfsklasse f�r den Unifizierungsalgorithmus
    +
    +
    FC_TTO(Menge<Pair>, Menge, Menge<Class>) - Constructor for class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    fehlerausgabe() - Method in exception de.dhbwstuttgart.myexception.SCClassException
    +
     
    +
    fehlerausgabe() - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    fehlerausgabe() - Method in exception de.dhbwstuttgart.myexception.SCException
    +
     
    +
    Field - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    Field(int) - Constructor for class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    field - Variable in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    FieldAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    FieldAssumption(Field, Class) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    fieldAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    fielddecl - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    fielddecl - Variable in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    FieldDeclaration - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung + Beispiel: 'public Feld FeldVar = FeldWert;'
    +
    +
    FieldDeclaration(String, Type) - Constructor for class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
    +
    Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
    +
    +
    FieldDeclaration(int) - Constructor for class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    filterUndConstraints() - Method in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
    +
    Aus dem ConstraintsSet [ u1, u2, ...
    +
    +
    filterUndConstraints() - Method in class de.dhbwstuttgart.typeinference.OderConstraint
    +
     
    +
    filterWrongConstraints(Unifier) - Method in class de.dhbwstuttgart.typeinference.ConstraintsSet
    +
    +
    Liefert alle Constraint-Variationen
    +
    +
    filterWrongConstraints(Unifier) - Method in class de.dhbwstuttgart.typeinference.OderConstraint
    +
     
    +
    FINAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Final - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
    +
    Stellt den Modifier Final dar.
    +
    +
    Final() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.Final
    +
     
    +
    FINALLY - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    findGenericType(Type, Menge<Type>, Menge<GenericTypeVar>) - Static method in class de.dhbwstuttgart.syntaxtree.ClassHelper
    +
    +
    Deprecated.
    +
    +
    findGenericType(Menge<Type>, Menge<GenericTypeVar>) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    HOTI + Diese Methode sucht in der Klassendefinition nach einen GTV, die + so heißt wie die im RefType definierte Variable.
    +
    +
    findPairWithTypeEqualTo(Type, Menge<Pair>) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    Float - Variable in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    FLOATLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    FloatLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    FloatLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    FloatType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    FloatType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FloatType
    +
     
    +
    flush() - Method in class de.dhbwstuttgart.logger.OutputHandler
    +
     
    +
    FOR - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    forEach(ConfigurationEvaluater) - Method in class de.dhbwstuttgart.logger.LoggerConfiguration
    +
     
    +
    FormalParameter - Class in de.dhbwstuttgart.syntaxtree
    +
     
    +
    FormalParameter(DeclId) - Constructor for class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    formalparameter - Variable in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    ForStmt - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    ForStmt(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    fresh(String, SyntaxTreeNode) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Generiert einen neuen TPH mit einem bestimmten Namen.
    +
    +
    fresh(SyntaxTreeNode) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    FreshExtendsWildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    FreshExtendsWildcardType(ObjectType, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine FreshExtendsWildcard
    +
    +
    FreshExtendsWildcardType(ObjectType, SyntaxTreeNode, int, String) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Privater Konstruktor für clone
    +
    +
    FreshSuperWildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    FreshSuperWildcardType(ObjectType, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine FreshSuperWildcard
    +
    +
    FreshSuperWildcardType(ObjectType, SyntaxTreeNode, int, String) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Privater Konstruktor für clone
    +
    +
    FreshWildcardType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    FreshWildcardType(SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Standard Konstruktor für eine FreshWildcard
    +
    +
    FreshWildcardType(SyntaxTreeNode, int, String) - Constructor for class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Protected Konstruktor für clone.
    +
    +
    function - Variable in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    FunN - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    FunN(Type, Menge<Type>) - Constructor for class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    FunN(int) - Constructor for class de.dhbwstuttgart.typeinference.FunN
    +
    +
    Erstellt eine FunN: + FunN + R und T1 - TparameterCount werden mit TypePlaceholdern besetzt.
    +
    +
    FunNInsertTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    FunNInsertTest() - Constructor for class plugindevelopment.TypeInsertTests.FunNInsertTest
    +
     
    +
    FunNInterface - Class in de.dhbwstuttgart.typeinference
    +
    +
    Stellt das Interface FunN dar.
    +
    +
    FunNInterface(int) - Constructor for class de.dhbwstuttgart.typeinference.FunNInterface
    +
    +
    Ein FunN-Interface enthält nur eine Methode (namens apply).
    +
    +
    FunNMethod - Class in de.dhbwstuttgart.typeinference
    +
     
    +
    FunNMethod(Menge<? extends Type>) - Constructor for class de.dhbwstuttgart.typeinference.FunNMethod
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-7.html b/doc/LambdaJavadoc/index-files/index-7.html new file mode 100644 index 00000000..63351275 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-7.html @@ -0,0 +1,1447 @@ + + + + + +G-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    G

    +
    +
    GeneralParserTest - Class in parser
    +
    +
    Dieser Test pr�ft nur, ob .java-Dateien fehlerfrei geparst werden.
    +
    +
    GeneralParserTest() - Constructor for class parser.GeneralParserTest
    +
     
    +
    generateFullyNamedTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    generateSetOfSetOfPair(Type, Menge<? extends Type>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Diese Methode generiert einen Menge> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten.
    +
    +
    Generic - Interface in de.dhbwstuttgart.syntaxtree
    +
    +
    Wird von allen Klassen implementiert, welche generische Parameter halten können.
    +
    +
    genericClassParameters - Variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    genericConstraint - Variable in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    GenericDeclarationList - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Stellt eine Deklarations-Liste von Generischen Variablen dar.
    +
    +
    GenericDeclarationList(Menge<GenericTypeVar>, int) - Constructor for class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    genericInsertPoint - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    genericPair - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
     
    +
    GenericParaListInsertTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericParaListInsertTest() - Constructor for class plugindevelopment.TypeInsertTests.GenericParaListInsertTest
    +
     
    +
    GenericParaListInsertTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericParaListInsertTest2() - Constructor for class plugindevelopment.TypeInsertTests.GenericParaListInsertTest2
    +
     
    +
    genericParameters - Variable in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    GenericsTest<a,b> - Class in de.dhbwstuttgart.JvmDisassembler
    +
     
    +
    GenericsTest() - Constructor for class de.dhbwstuttgart.JvmDisassembler.GenericsTest
    +
     
    +
    GenericTypeInsertable - Interface in de.dhbwstuttgart.typeinference
    +
    +
    Wird von Knoten im Syntaxbaum implementiert, welche ein Einsetzen von generischen Variablendeklarationen erlauben.
    +
    +
    GenericTypeInsertPoint - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Ein InsertPoint für Generische Variablen + Wird beim Einsetzen eines TIP generiert.
    +
    +
    GenericTypeInsertPoint(GenericTypeInsertable, GenericVarPatch, ResultSet) - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    GenericTypeVar - Class in de.dhbwstuttgart.syntaxtree.type
    +
    +
    TODO: Diese Klasse überarbeiten.
    +
    +
    GenericTypeVar(String, SyntaxTreeNode, int) - Constructor for class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    GenericTypeVar2TypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
    +
    +
    GenericTypeVarTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericTypeVarTest() - Constructor for class plugindevelopment.TypeInsertTests.GenericTypeVarTest
    +
     
    +
    GenericTypeVarTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericTypeVarTest2() - Constructor for class plugindevelopment.TypeInsertTests.GenericTypeVarTest2
    +
     
    +
    genericVar - Variable in class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption
    +
     
    +
    genericVar - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
    +
     
    +
    GenericVarAssumption - Class in de.dhbwstuttgart.typeinference.assumptions
    +
     
    +
    GenericVarAssumption(GenericTypeVar) - Constructor for class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption
    +
     
    +
    genericVarAssumptions - Variable in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    GenericVarDeclarationList - Class in de.dhbwstuttgart.parser
    +
     
    +
    GenericVarDeclarationList() - Constructor for class de.dhbwstuttgart.parser.GenericVarDeclarationList
    +
     
    +
    GenericVarDeclarationPatch - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
    +
    +
    GenericVarDeclarationPatch(TypePlaceholder) - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
    +
     
    +
    genericVarDeclarations - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    genericVarExtendDeclarations - Variable in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    GenericVarExtendsDeclarationPatch - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Eine Hilfsklasse zur Einsetzung einer Generischen Variable mit extend Bedingung.
    +
    +
    GenericVarExtendsDeclarationPatch(Pair) - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
     
    +
    GenericVarInsertTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericVarInsertTest() - Constructor for class plugindevelopment.TypeInsertTests.GenericVarInsertTest
    +
     
    +
    GenericVarPatch - Class in de.dhbwstuttgart.typeinference.typedeployment
    +
    +
    Eine Hilfsklasse zur Einsetzung einer Generischen Variable.
    +
    +
    GenericVarPatch() - Constructor for class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    GenericVarTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericVarTest() - Constructor for class plugindevelopment.TypeInsertTests.GenericVarTest
    +
     
    +
    GenericVarTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericVarTest2() - Constructor for class plugindevelopment.TypeInsertTests.GenericVarTest2
    +
     
    +
    GenericVarTest3 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenericVarTest3() - Constructor for class plugindevelopment.TypeInsertTests.GenericVarTest3
    +
     
    +
    GenTypeTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    GenTypeTest() - Constructor for class plugindevelopment.TypeInsertTests.GenTypeTest
    +
     
    +
    get_access_flags() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    get_Block() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    get_class_block() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    get_classname() - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    get_codegen_Array_Type() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    get_codegen_Type(Menge) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
    +
    hoti 4.5.06 + Generische Typen werden im Bytecode + aus Abwaertskompatiblitaet wie Object dargestellt
    +
    +
    get_codegen_UsedId() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_codegen_UsedId() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    get_Double() - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    get_ExceptionList() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    get_exlist() - Method in exception de.dhbwstuttgart.myexception.SCClassBodyException
    +
     
    +
    get_exlist() - Method in exception de.dhbwstuttgart.myexception.SCMethodException
    +
     
    +
    get_exlist() - Method in exception de.dhbwstuttgart.myexception.SCStatementException
    +
     
    +
    get_Expr() - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    get_Expr() - Method in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    get_Expr1() - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    get_Expr2() - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    get_ExtendsBound() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die Grenze der Wildcard zurück
    +
    +
    get_ExtendsType() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen in der Wildcard zurück.
    +
    +
    get_firstElement() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    get_firstElement() - Method in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    get_Float() - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    get_function() - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    get_Int() - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    get_Long() - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    get_Method_Name() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    get_Modifiers() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    get_Name() - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    get_Name_1Element() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_Name_Menge() - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    get_Operator() - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    get_ParaHash() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    get_ParaList() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    get_ParaList() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_ParaList() - Method in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    get_ParaList() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    get_Paratyp() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    get_RealParaList() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_Receiver() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    get_statement() - Method in class de.dhbwstuttgart.myexception.SCExcept
    +
     
    +
    get_Statement() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    get_String() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    get_SuperBound() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die Grenze der Wildcard zurück
    +
    +
    get_Superclass_Name() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    get_SuperType() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen in der Wildcard zurück.
    +
    +
    get_Type() - Method in class de.dhbwstuttgart.syntaxtree.statement.Receiver
    +
     
    +
    get_Type() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    get_Type_Menge() - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    get_Type_Paralist() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    get_Typen() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_UpperBounds() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Menge der oberen Grenzen zurück
    +
    +
    get_UsedId() - Method in class de.dhbwstuttgart.syntaxtree.statement.Expr
    +
     
    +
    get_UsedId() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    get_vParaOrg() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    get_Wert() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    get_WildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende ExtendsWildcardType Klasse zurück.
    +
    +
    get_WildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende SuperWildcardType Klasse zurück.
    +
    +
    get_WildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende WildcardType Klasse zurück.
    +
    +
    getAccessFlags() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Liefert die AccessFlags fuer den Bytecode zurueck.
    +
    +
    getAllAssumptions() - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    getAndSets() - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    getAndSets() - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    getAndSets() - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    getAndSets() - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    getAPI(LoggerConfiguration) - Static method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Author: Jörg Bäuerle
    + Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
    +
    +
    getApplyFunction() - Method in class de.dhbwstuttgart.typeinference.FunNInterface
    +
    +
    Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode
    +
    +
    getArgumentList() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    getArgumentList() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    getArgumentList() - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    getArgumentList() - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    getAssumedClass() - Method in class de.dhbwstuttgart.typeinference.assumptions.ClassAssumption
    +
     
    +
    getAssumedType() - Method in class de.dhbwstuttgart.typeinference.assumptions.Assumption
    +
     
    +
    getAssumedType() - Method in class de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption
    +
     
    +
    getAssumedType() - Method in class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption
    +
     
    +
    getAssumedType() - Method in class de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption
    +
     
    +
    getAssumptionsFor(JavaClassName) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind.
    +
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Abstract
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Final
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifier
    +
    +
    Liefert den Wert des Access-Modifiers fuer die Bytecode-Generierung + zurueck.
    +
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Private
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Protected
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Public
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Static
    +
     
    +
    getBitmask() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Super
    +
     
    +
    getBounds() - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    getCardinality() - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    getCardinality() - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.Binary
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.BoolLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.CastExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.CharLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.DoubleLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.FloatLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.LongLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.NegativeExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewClass
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.NotExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.Null
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.PositivExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.PostDecExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.PostIncExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.PreDecExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.PreIncExpr
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.StringLiteral
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.This
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.ThisCall
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getChildren() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    getClassAssumptions() - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    getClasses() - Method in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    getClassIterator() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getConstantVektor() - Method in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    getConstraints() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
     
    +
    getConstraintsFor(Menge<TypePlaceholder>) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
    +
    Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen.
    +
    +
    getConstructorAssumption(String, int) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
     
    +
    getContainedType() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Das gleiche wie get_ExtendsType().
    +
    +
    getContainedType() - Method in interface de.dhbwstuttgart.syntaxtree.type.ITypeContainer
    +
    +
    Author: Arne Lüdtke
    + Das gleiche wie get_ExtendsType().
    +
    +
    getContainedType() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Das gleiche wie get_innerType().
    +
    +
    getContainedTypes() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getDeclarationContext() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    getDeclId() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getDeclIdMenge() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getDeclidMenge() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getDescription() - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
    +
    Eine Beschreibung/Name des SyntaxTree-Nodes
    +
    +
    getElements() - Method in class de.dhbwstuttgart.parser.GenericVarDeclarationList
    +
     
    +
    getEndOffset() - Method in class de.dhbwstuttgart.parser.BoundedClassIdentifierList
    +
     
    +
    getEndOffset() - Method in class de.dhbwstuttgart.parser.GenericVarDeclarationList
    +
     
    +
    getEndOffset() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    getEndOffset() - Method in class de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar
    +
     
    +
    getEndOffset() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    getFC() - Method in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    getFields() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getFields() - Method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    getFieldVars(String) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Liefert alle bekannten öffentlichen Feldern mit dem Namen withName.
    +
    +
    getFileContent(String) - Static method in class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    getFileContent(String) - Static method in class plugindevelopment.TypeInsertTester
    +
     
    +
    GetFreshWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende FreshWildcardType Klasse zurück.
    +
    +
    GetFreshWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende FreshWildcardType Klasse zurück.
    +
    +
    GetFreshWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt die passende FreshWildcardType Klasse zurück.
    +
    +
    getGenericDeclarationList() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getGenericParameter() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getGenericParameter() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getGenericParameter() - Method in interface de.dhbwstuttgart.syntaxtree.Generic
    +
     
    +
    getGenericTypeVarInsertNode() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getGenericVarDeclarationOffset() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getGenericVarDeclarationOffset() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getGenericVarDeclarationOffset() - Method in interface de.dhbwstuttgart.typeinference.GenericTypeInsertable
    +
     
    +
    getGenericVarDeclarationString(String) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getGenericVarDeclarationString(String) - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getGenericVarDeclarationString(String) - Method in interface de.dhbwstuttgart.typeinference.GenericTypeInsertable
    +
     
    +
    getGTVDeclarationContext() - Method in class de.dhbwstuttgart.syntaxtree.GTVDeclarationContext
    +
     
    +
    getGTVDeclarationContext() - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    getHighestProblemSources() - Method in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.typeinference.assumptions.Assumption
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    getIdentifier() - Method in class de.dhbwstuttgart.typeinference.assumptions.GenericVarAssumption
    +
     
    +
    getIdentifier() - Method in interface de.dhbwstuttgart.typeinference.TypeInsertable
    +
     
    +
    getImports() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getInsertLength() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    getInsertLength() - Method in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    getInsertLength() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getInsertNode() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getInsertPoint() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getInsertPointFor(TypeInsertable) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
     
    +
    getInsertString(ResultSet) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarDeclarationPatch
    +
     
    +
    getInsertString(ResultSet) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarExtendsDeclarationPatch
    +
     
    +
    getInsertString(ResultSet) - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericVarPatch
    +
     
    +
    getInsertType() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getInstance(String) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
    +
    +
    getInterfaceIterator() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getInterferedClass() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
    +
    +
    getInvolvedTypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
     
    +
    getInvolvedTypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getInvolvedTypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
     
    +
    getInvolvedTypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Sammelt alle TypePlaceholder, welche in diesem Typ vorkommen.
    +
    +
    getInvolvedTypePlaceholder() - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    getItems() - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    getItems() - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    getItems() - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    getItems() - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    getIterator() - Method in class de.dhbwstuttgart.typeinference.unify.CSet
    +
     
    +
    getIterator() - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    getJavaCode() - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
     
    +
    getLexem() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    getLineNumber() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    getLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
    +

    Author: J�rg B�uerle
    +
    +
    getLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    getLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
    +

    Author: J�rg B�uerle
    +
    +
    getLogger(String) - Static method in class de.dhbwstuttgart.logger.Logger
    +
    +
    Liefert den Logger mit dem angegebenen Namen.
    +
    +
    getMatchingParentNode(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    getMatchType() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMatchType() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMatchType() - Method in class de.dhbwstuttgart.syntaxtree.type.FreshSuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMatchType() - Method in interface de.dhbwstuttgart.syntaxtree.type.IMatchable
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMatchType() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMatchType() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
    +
    +
    getMenge() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    getMenge() - Method in class de.dhbwstuttgart.typeinference.unify.CVectorSet
    +
     
    +
    getMessage() - Method in exception de.dhbwstuttgart.myexception.CTypeReconstructionException
    +
     
    +
    getMessage() - Method in exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
     
    +
    getMethod() - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    getMethodAssumptions(String, int) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
    +
    +
    getMethodAssumptions(JavaClassName, String) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Sucht nach MethodAssumptions einer bestimmten Klasse mit einem bestimmten Namen.
    +
    +
    getMethodName() - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    getMethods2(String) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Deprecated.
    +
    +
    getMethodVektor() - Method in class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    getModifiers() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getModifiers() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getModifiers() - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
     
    +
    getMub() - Method in class de.dhbwstuttgart.typeinference.unify.MUB
    +
     
    +
    getName() - Method in interface de.dhbwstuttgart.core.AClassOrInterface
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.syntaxtree.statement.MethodCall
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getName() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    getNumericTypes() - Method in class de.dhbwstuttgart.syntaxtree.statement.UnaryExpr
    +
     
    +
    getOffset() - Method in interface de.dhbwstuttgart.core.IItemWithOffset
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.parser.Token
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Errechnet die Generischen Parameter der Klasse für diese Klasse.
    +
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
    +

    Author: Thomas Hornberger 09.04.2006
    +
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.misc.DeclId
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
    +

    Author: Thomas Hornberger
    +
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    getOffset() - Method in exception de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    getOffset() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getOffset() - Method in interface de.dhbwstuttgart.typeinference.TypeInsertable
    +
     
    +
    GetOperator() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Gibt den Operator zurück.
    +
    +
    getOperatorTypes() - Method in class de.dhbwstuttgart.syntaxtree.operator.AddOp
    +
     
    +
    getOperatorTypes() - Method in class de.dhbwstuttgart.syntaxtree.operator.LogOp
    +
     
    +
    getOperatorTypes() - Method in class de.dhbwstuttgart.syntaxtree.operator.MulOp
    +
     
    +
    getOperatorTypes() - Method in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    getOperatorTypes() - Method in class de.dhbwstuttgart.syntaxtree.operator.RelOp
    +
     
    +
    getOrSets() - Method in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    getOrSets() - Method in interface de.dhbwstuttgart.typeinference.KomplexeMenge
    +
     
    +
    getOrSets() - Method in class de.dhbwstuttgart.typeinference.OderMenge
    +
     
    +
    getOrSets() - Method in class de.dhbwstuttgart.typeinference.UndMenge
    +
     
    +
    getOutputDir() - Method in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    getOutputDir() - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Author: Juergen Schmiing
    + Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
    +
    +
    getOverloadedID() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getPackageName() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getPackageName() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    getPackageName() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars + dieser Klasse gespeichert werden.
    +
    +
    getPair() - Method in class de.dhbwstuttgart.typeinference.ConstraintPair
    +
     
    +
    getPair() - Method in class de.dhbwstuttgart.typeinference.SingleConstraint
    +
     
    +
    getParaCount() - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    getParalist() - Method in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    getParalist() - Method in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    getParaList() - Method in class de.dhbwstuttgart.syntaxtree.Interface
    +
     
    +
    getParalist() - Method in class de.dhbwstuttgart.syntaxtree.type.ParaList
    +
     
    +
    getParaList() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getParaMenge() - Method in class de.dhbwstuttgart.parser.ClassAndParameter
    +
     
    +
    getParaMenge() - Method in class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    getParameterAt(int) - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    getParameterCount() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    Author: Jrg Buerle
    +
    +
    getParameterCount() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
    +
    Author: J�rg B�uerle
    +
    +
    getParameterList() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getParameterType(int) - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
    +
    Liefert den Typ des i-ten Parameters dieser Method-Assumption
    +
    +
    getParaN(int) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getParent() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getParent() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getParent() - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    getParentClass() - Method in class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
    +
     
    +
    getParentClass() - Method in class de.dhbwstuttgart.typeinference.assumptions.FieldAssumption
    +
     
    +
    getParentClassType() - Method in class de.dhbwstuttgart.typeinference.assumptions.MethodAssumption
    +
     
    +
    getPrimitiveFlag() - Method in class de.dhbwstuttgart.syntaxtree.statement.Literal
    +
     
    +
    getPrimitiveFlag() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getPrivateFieldAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese.
    +
    +
    getPublicFieldAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Ermittelt die Sichtbaren Felder und Methoden der Klasse.
    +
    +
    getPublicFieldAssumptions() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getPublicFieldAssumptions() - Method in class de.dhbwstuttgart.typeinference.FunNInterface
    +
     
    +
    getQualifiedName() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    getResultSet() - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    getResultSet() - Method in class de.dhbwstuttgart.typeinference.typedeployment.SourcePatchPoint
    +
     
    +
    getReturnType() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    getReturnType() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getReturnTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.operator.AddOp
    +
     
    +
    getReturnTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.operator.LogOp
    +
     
    +
    getReturnTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.operator.MulOp
    +
     
    +
    getReturnTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
    +
    Liefert eine HashMap der Form: HashMap
    +
    +
    getReturnTypes(TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.operator.RelOp
    +
     
    +
    getSectionLogger(String, Section) - Static method in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    getSignatureType(Menge) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    getSimpleName() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    +
    +
    getSimpleName() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    getSimpleName() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    +
    +
    getSimpleName() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    HOTI + Liefert bei Klassen die fullyQualified angegeben wurden + nur den schlussendlichen Bezeichner + p.ex. de.dhbwstuttgart.typeinference.Menge => Menge
    +
    +
    getSuperClass() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Die Super Klasse dieser Klasse.
    +
    +
    getSuperClassOfJREClass(Class<?>, TypeAssumptions) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getSuperInterfaces() - Method in interface de.dhbwstuttgart.core.AClassOrInterface
    +
     
    +
    getSuperInterfaces() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getSuperWildcardTypes() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
    +
    +
    getSuperWildcardTypes() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Liefert alle SuperWildcardTypes, die in diesem Typ enthalten sind.
    +
    +
    getTA1Copy() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    getTA2Copy() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    getTIP() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
     
    +
    getTTO() - Method in class de.dhbwstuttgart.typeinference.unify.FC_TTO
    +
     
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Erstellt einen RefType, welcher auf diese Klasse verweist + Ersetzt alle Generischen Variablen in der Parameterliste mit TPH
    +
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
    +
    Gibt den Typ der Konstantendefinition zurueck.
    +
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    Der Typ einer Methode ist ihr Returntype
    +
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.statement.NewArray
    +
    +
    Author: J�rg B�uerle
    +
    +
    getType() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getType() - Method in class de.dhbwstuttgart.typeinference.ConstraintType
    +
     
    +
    getType() - Method in interface de.dhbwstuttgart.typeinference.Typeable
    +
     
    +
    getType() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Author: J�rg B�uerle
    +
    +
    getTypeEqualTo(Type) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
    +
    Löst den übergebenen Typ auf.
    +
    +
    getTypeFor(Type, SyntaxTreeNode) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Kontrolliert den vom Parser gesetzten Typ.
    +
    +
    getTypeInformation(Menge<Method>, Menge<Expr>) - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.Assign
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.LambdaExpression
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    getTypeInformation() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getTypeInsertionPoints() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext + Dabei entstehen TypeInsertSets.
    +
    +
    getTypeInsertPoints(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Berechnet die InsertPoints dieses TypePlaceholders.
    +
    +
    getTypeInsertString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint
    +
    +
    Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert.
    +
    +
    getTypeInsertString() - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint
    +
    +
    Die Zeichenkette die durch diesen TypeInsertPoint eingesetzt wird.
    +
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
    +

    Author: J�rg B�uerle
    +
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +

    Author: Jrg Buerle
    +
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.EmptyStmt
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.ExprStmt
    +
    +

    Author: J�rg B�uerle
    +
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
    +

    Author: J�rg B�uerle
    +
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.Return
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.syntaxtree.statement.WhileStmt
    +
     
    +
    getTypeLineNumber() - Method in class de.dhbwstuttgart.typeinference.FunN
    +
     
    +
    getTypeMenge() - Method in class de.dhbwstuttgart.parser.InterfaceList
    +
     
    +
    getTypeName() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
     
    +
    getTypeName() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getTypeName() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getTypeName() - Method in class de.dhbwstuttgart.syntaxtree.statement.ExprStmt
    +
     
    +
    getTypeName() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getTypeOfFieldVar(String, Class) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Liefert den Typ einer Feldvariable der Klasse inClass
    +
    +
    getTypeOfLocalVar2(String) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Deprecated.
    +
    +
    getTypeOfPlaceholder(TypePlaceholder) - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
    +
    Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert.
    +
    +
    getTypePlaceHolder(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    getTypePlaceholder() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück.
    +
    +
    getTypes() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    getTypesInvolving(Menge<TypePlaceholder>) - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
    +
    Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden.
    +
    +
    getTypeVar() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
    +
    Author: J�rg B�uerle
    +
    +
    getTypeVar() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionGenVar
    +
    +
    Author: J�rg B�uerle
    +
    +
    getUnifiedConstraints() - Method in class de.dhbwstuttgart.typeinference.TypeinferenceResultSet
    +
     
    +
    getUnifier() - Method in class de.dhbwstuttgart.typeinference.unify.MUB
    +
     
    +
    getUnresolvedTPH(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    getUnresolvedTPH(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.
    +
    +
    getUnresolvedTPH(ResultSet) - Method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
     
    +
    getUnresolvedTPH() - Method in class de.dhbwstuttgart.typeinference.JavaCodeResult
    +
    +
    Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden.
    +
    +
    getUsedIdsToCheck() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getValue() - Method in class de.dhbwstuttgart.syntaxtree.Constant
    +
    +
    Gibt den Wert der Konstantendefinition zurueck.
    +
    +
    getVariableLength() - Method in interface de.dhbwstuttgart.core.IItemWithOffset
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.operator.Operator
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.statement.ArgumentList
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.statement.Statement
    +
     
    +
    getVariableLength() - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
     
    +
    getVarType(String, Class) - Method in class de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions
    +
    +
    Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen.
    +
    +
    getWert() - Method in class de.dhbwstuttgart.syntaxtree.FieldDeclaration
    +
     
    +
    GetWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType
    +
    +
    Author: Arne Lüdtke
    + Das gleiche wie get_ExtendsType().
    +
    +
    GetWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.SuperWildcardType
    +
    +
    Author: Arne Lüdtke
    + Das gleiche wie get_innerType().
    +
    +
    GetWildcardType() - Method in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
    +
    Author: Arne Lüdtke
    + Die Allgemeine Wildcard enthält keinen Typen.
    +
    +
    greater(ObjectType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    Erzeugt alle Typen die greater sind als T.
    +
    +
    greater0(ObjectType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    greater0 Schritt von greater.
    +
    +
    greater1(ObjectType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    greater1 Schritt von greater.
    +
    +
    greater2(Menge<ObjectType>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    greater2 Schritt von greater
    +
    +
    greater3(Menge<ObjectType>, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    greater3 Schritt von greater
    +
    +
    greaterArg(Type, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
    +
    greaterArg Schritt von greater + Für den Argumenttype FunN<...> werden keine ?
    +
    +
    GREATEREQUAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    GreaterEquOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    GreaterEquOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.GreaterEquOp
    +
     
    +
    GreaterOp - Class in de.dhbwstuttgart.syntaxtree.operator
    +
     
    +
    GreaterOp(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.operator.GreaterOp
    +
     
    +
    GTV2TPH(SyntaxTreeNode) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
    +
    +
    GTVDeclarationContext - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Beischreibt eine SyntaxTreeNode, welcher die Eigenschaft besitzt, + dass bei seiner Deklaration auch Generische Typvariablen deklariert wurden.
    +
    +
    GTVDeclarationContext() - Constructor for class de.dhbwstuttgart.syntaxtree.GTVDeclarationContext
    +
     
    +
    gtvs - Variable in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-8.html b/doc/LambdaJavadoc/index-files/index-8.html new file mode 100644 index 00000000..6d657df3 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-8.html @@ -0,0 +1,153 @@ + + + + + +H-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    H

    +
    +
    hamaDebug - Variable in class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    hashCode() - Method in class de.dhbwstuttgart.parser.JavaClassName
    +
     
    +
    hashCode() - Method in class de.dhbwstuttgart.parser.PackageName
    +
     
    +
    hashCode() - Method in class de.dhbwstuttgart.syntaxtree.type.GenericTypeVar
    +
     
    +
    hashCode() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    hasSolvedForm(Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    hasWildCard() - Method in class de.dhbwstuttgart.syntaxtree.misc.UsedId
    +
     
    +
    head_Condition - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    head_Condition_1 - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    head_Initializer - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    head_Initializer_1 - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    head_Loop_expr - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    head_Loop_expr_1 - Variable in class de.dhbwstuttgart.syntaxtree.statement.ForStmt
    +
     
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index-files/index-9.html b/doc/LambdaJavadoc/index-files/index-9.html new file mode 100644 index 00000000..74a43947 --- /dev/null +++ b/doc/LambdaJavadoc/index-files/index-9.html @@ -0,0 +1,427 @@ + + + + + +I-Index + + + + + + + + +
    + + + + + + + +
    + + +
    A B C D E F G H I J K L M N O P R S T U V W X Y  + + +

    I

    +
    +
    id - Variable in class KomplexeMenge.TestKlasse
    +
     
    +
    Id - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    Id() - Constructor for class plugindevelopment.TypeInsertTests.Id
    +
     
    +
    IDENTIFIER - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    identifier - Static variable in class KomplexeMenge.TestKlasse
    +
     
    +
    IF - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    IfStmt - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    IfStmt(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.IfStmt
    +
     
    +
    IItemWithOffset - Interface in de.dhbwstuttgart.core
    +
     
    +
    IMatchable - Interface in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Dieses Interface wird von allen Klassen implementiert, die weitere Klassen + enthalten, die im match des Unify beachtet werden müssen.
    +
    +
    IMPLEMENTS - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    IMPORT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    ImportDeclarations - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    HOTI 4.5.06 + Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-) + Der Parser kann keine Generischen Typen darstellen, damit trotzdem + an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung...
    +
    +
    ImportDeclarations() - Constructor for class de.dhbwstuttgart.syntaxtree.ImportDeclarations
    +
     
    +
    imports - Variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
    +
    HOTI 4.5.06 + Beinhaltet alle Imports des aktuell geparsten Files + in Form einer UsedId
    +
    +
    ImportSubClassTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ImportSubClassTest() - Constructor for class plugindevelopment.TypeInsertTests.ImportSubClassTest
    +
     
    +
    ImportTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ImportTest() - Constructor for class plugindevelopment.TypeInsertTests.ImportTest
    +
     
    +
    ImportTest2 - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    ImportTest2() - Constructor for class plugindevelopment.TypeInsertTests.ImportTest2
    +
     
    +
    inc(int) - Static method in class de.dhbwstuttgart.syntaxtree.type.FreshWildcardType
    +
    +
    Hilfsmethode für makeNewName + Methode aus TypePlaceholder kopiert
    +
    +
    inc(int) - Static method in class de.dhbwstuttgart.syntaxtree.type.TypePlaceholder
    +
    +
    Hilfsfunktion zur Berechnung eines neuen Namens +
    Author: J�rg B�uerle
    +
    +
    includesModifier(Modifier) - Method in class de.dhbwstuttgart.syntaxtree.modifier.Modifiers
    +
    +
    Gibt zurueck, ob der angegebene Modifier enthalten ist.
    +
    +
    INCREMENT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.core.MyCompiler
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.Class
    +
    +
    Log4j - Loggerinstanzen
    +
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.FormalParameter
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.Block
    +
    +
    Logger: log4j
    +
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.ExprStmt
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.typeinference.unify.CSubstitution
    +
     
    +
    inferencelog - Static variable in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    info(String, Section) - Method in class de.dhbwstuttgart.logger.Logger
    +
     
    +
    info(String) - Method in class de.dhbwstuttgart.logger.SectionLogger
    +
     
    +
    init() - Method in class de.dhbwstuttgart.core.MyCompiler
    +
    +
    Author: J�rg B�uerle
    + Initialisiert den Compiler
    +
    +
    init() - Method in interface de.dhbwstuttgart.core.MyCompilerAPI
    +
    +
    Author: Jörg Bäuerle
    + Initialisiert den Compiler
    +
    +
    initContainedTypes() - Method in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    initUsedIdsToCheck() - Method in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    innerType - Variable in class de.dhbwstuttgart.syntaxtree.type.WildcardType
    +
     
    +
    insertAllTypes(String) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
    +
    Deprecated.
    +
    +
    InsertSingleTypeTest - Class in plugindevelopment
    +
     
    +
    InsertSingleTypeTest() - Constructor for class plugindevelopment.InsertSingleTypeTest
    +
     
    +
    insertType(TypeInsertPoint, String) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
    +
    Fügt nur einen einzelnen TypeInsertPoint in fileContent ein.
    +
    +
    insertType(TypeInsertPoint, TypePatchJob) - Method in class de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet
    +
    +
    Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu
    +
    +
    INSTANCEOF - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    InstanceOf - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    InstanceOf(int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.InstanceOf
    +
     
    +
    instanceSmaller(Pair, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    instanzeEquals(Object) - Method in class de.dhbwstuttgart.typeinference.Pair
    +
    +
    Author: Arne Lüdtke
    + Überprüft ob die Paare die gleichen Instanzen sind.
    +
    +
    InstVar - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    InstVar(Expr, String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    InstVar(String, String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
     
    +
    InstVar(UsedId, int, int) - Constructor for class de.dhbwstuttgart.syntaxtree.statement.InstVar
    +
    +
    macht aus einem UsedId mit einem Menge von Strings eine InstVar +
    Author: Martin Pl�micke PL 05-08-17
    +
    +
    INT - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Int - Variable in class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    IntegerType - Class in de.dhbwstuttgart.syntaxtree.type
    +
     
    +
    IntegerType(SyntaxTreeNode) - Constructor for class de.dhbwstuttgart.syntaxtree.type.IntegerType
    +
     
    +
    INTERFACE - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    Interface - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Ein Interface ist eine abstrakte Klasse, erbt daher von Class
    +
    +
    Interface(String, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Interface
    +
     
    +
    Interface(String, Modifiers, int) - Constructor for class de.dhbwstuttgart.syntaxtree.Interface
    +
     
    +
    InterfaceAndParameter - Class in de.dhbwstuttgart.parser
    +
    +
    Hilfskonstrukt, um die Grammatik fuer einen Interfaceheader + ueberschaubar zu halten.
    +
    +
    InterfaceAndParameter(String) - Constructor for class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    InterfaceAndParameter(String, ParaList) - Constructor for class de.dhbwstuttgart.parser.InterfaceAndParameter
    +
     
    +
    InterfaceBody - Class in de.dhbwstuttgart.syntaxtree
    +
    +
    Die Klasse enthaelt den Inhalt eines Interfaces, also Konstanten- + und Mehtodendefinitionen.
    +
    +
    InterfaceBody() - Constructor for class de.dhbwstuttgart.syntaxtree.InterfaceBody
    +
     
    +
    InterfaceList - Class in de.dhbwstuttgart.parser
    +
    +
    Hilfskonstrukt fuer die Grammatik, um ungepruefte + Typcasts fuer Mengeen zu umgehen.
    +
    +
    InterfaceList() - Constructor for class de.dhbwstuttgart.parser.InterfaceList
    +
     
    +
    InterfaceModifier - Class in de.dhbwstuttgart.syntaxtree.modifier
    +
     
    +
    InterfaceModifier() - Constructor for class de.dhbwstuttgart.syntaxtree.modifier.InterfaceModifier
    +
     
    +
    InterfaceVektor - Variable in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    INTLITERAL - Static variable in class de.dhbwstuttgart.parser.JavaParser
    +
     
    +
    IntLiteral - Class in de.dhbwstuttgart.syntaxtree.statement
    +
     
    +
    IntLiteral() - Constructor for class de.dhbwstuttgart.syntaxtree.statement.IntLiteral
    +
     
    +
    IntTest - Class in plugindevelopment.TypeInsertTests
    +
     
    +
    IntTest() - Constructor for class plugindevelopment.TypeInsertTests.IntTest
    +
     
    +
    involves(TypePlaceholder) - Method in class de.dhbwstuttgart.syntaxtree.type.Type
    +
    +
    Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt.
    +
    +
    is_declared(Type, Menge<Class>) - Method in class de.dhbwstuttgart.syntaxtree.ClassBody
    +
     
    +
    is_declared(Type, Menge<Class>) - Method in class de.dhbwstuttgart.syntaxtree.statement.LocalVarDecl
    +
     
    +
    is_Equiv(RefType, Hashtable<JavaClassName, Type>) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    isAbstract - Variable in class de.dhbwstuttgart.syntaxtree.Method
    +
     
    +
    isAbstract() - Method in class de.dhbwstuttgart.syntaxtree.Method
    +
    +
    Gibt zurueck, ob ByteCode innerhabl der Methode + generiert wird.
    +
    +
    IsArray - Variable in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
    +
    Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V + Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
    +
    +
    IsArray() - Method in class de.dhbwstuttgart.syntaxtree.type.BaseType
    +
    +
    Author: Daniel Feinler
    + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    +
    +
    IsArray - Variable in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V + Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden + Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
    +
    +
    IsArray() - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
    +
    Author: Daniel Feinler
    + Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann + wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht.
    +
    +
    isBaseType(String) - Method in class de.dhbwstuttgart.syntaxtree.SourceFile
    +
     
    +
    isClass() - Method in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    isClass() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    isClass() - Method in class de.dhbwstuttgart.syntaxtree.GTVDeclarationContext
    +
     
    +
    isEqual() - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    isFirstLocalVarDecl - Static variable in class de.dhbwstuttgart.syntaxtree.Class
    +
     
    +
    isInFC(RefType, RefType, Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    isInFClinks(RefType, RefType, Menge<Pair>) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    isInFCrechtsUnify(RefType, RefType, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    isInMenge(Menge<Pair>) - Method in class de.dhbwstuttgart.typeinference.Pair
    +
     
    +
    isPublic() - Method in class de.dhbwstuttgart.syntaxtree.Field
    +
     
    +
    isRealSubClass(String, String, FC_TTO) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    isRXSimilarRY(RefType, RefType, boolean) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    isTV(int) - Method in class de.dhbwstuttgart.syntaxtree.type.RefType
    +
     
    +
    isTVinRefType(TypePlaceholder, RefType) - Static method in class de.dhbwstuttgart.typeinference.unify.Unify
    +
     
    +
    item - Variable in class de.dhbwstuttgart.typeinference.EinzelElement
    +
     
    +
    iterator() - Method in class de.dhbwstuttgart.syntaxtree.GenericDeclarationList
    +
     
    +
    iterator() - Method in class de.dhbwstuttgart.syntaxtree.ParameterList
    +
     
    +
    iterator() - Method in class de.dhbwstuttgart.typeinference.ResultSet
    +
     
    +
    iterator() - Method in class de.dhbwstuttgart.typeinference.UndConstraint
    +
     
    +
    iterator() - Method in class de.dhbwstuttgart.typeinference.unify.CSubstitutionSet
    +
     
    +
    ITypeContainer - Interface in de.dhbwstuttgart.syntaxtree.type
    +
    +
    Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten.
    +
    +
    +A B C D E F G H I J K L M N O P R S T U V W X Y 
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/index.html b/doc/LambdaJavadoc/index.html new file mode 100644 index 00000000..b978684a --- /dev/null +++ b/doc/LambdaJavadoc/index.html @@ -0,0 +1,74 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/doc/LambdaJavadoc/overview-frame.html b/doc/LambdaJavadoc/overview-frame.html new file mode 100644 index 00000000..b0e6a5ef --- /dev/null +++ b/doc/LambdaJavadoc/overview-frame.html @@ -0,0 +1,43 @@ + + + + + +Overview List + + + + + + + +

     

    + + diff --git a/doc/LambdaJavadoc/overview-summary.html b/doc/LambdaJavadoc/overview-summary.html new file mode 100644 index 00000000..e53458e3 --- /dev/null +++ b/doc/LambdaJavadoc/overview-summary.html @@ -0,0 +1,223 @@ + + + + + +Overview + + + + + + + + +
    + + + + + + + +
    + + + + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/overview-tree.html b/doc/LambdaJavadoc/overview-tree.html new file mode 100644 index 00000000..652c8064 --- /dev/null +++ b/doc/LambdaJavadoc/overview-tree.html @@ -0,0 +1,644 @@ + + + + + +Class Hierarchy + + + + + + + + +
    + + + + + + + +
    + + + +
    +

    Class Hierarchy

    + +

    Interface Hierarchy

    + +

    Enum Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
      • +
      +
    • +
    +
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/package-list b/doc/LambdaJavadoc/package-list new file mode 100644 index 00000000..969cbb20 --- /dev/null +++ b/doc/LambdaJavadoc/package-list @@ -0,0 +1,23 @@ +KomplexeMenge +de.dhbwstuttgart.JvmDisassembler +de.dhbwstuttgart.core +de.dhbwstuttgart.logger +de.dhbwstuttgart.myexception +de.dhbwstuttgart.parser +de.dhbwstuttgart.syntaxtree +de.dhbwstuttgart.syntaxtree.misc +de.dhbwstuttgart.syntaxtree.modifier +de.dhbwstuttgart.syntaxtree.operator +de.dhbwstuttgart.syntaxtree.statement +de.dhbwstuttgart.syntaxtree.type +de.dhbwstuttgart.typeinference +de.dhbwstuttgart.typeinference.assumptions +de.dhbwstuttgart.typeinference.exceptions +de.dhbwstuttgart.typeinference.typedeployment +de.dhbwstuttgart.typeinference.unify +parser +plugindevelopment +plugindevelopment.MartinTestCases +plugindevelopment.TypeInsertTests +plugindevelopment.TypeInsertTests.LargeSourceCodeTests +syntaxTree diff --git a/doc/LambdaJavadoc/parser/GeneralParserTest.html b/doc/LambdaJavadoc/parser/GeneralParserTest.html new file mode 100644 index 00000000..c27b81b6 --- /dev/null +++ b/doc/LambdaJavadoc/parser/GeneralParserTest.html @@ -0,0 +1,313 @@ + + + + + +GeneralParserTest + + + + + + + + + + + + +
    +
    parser
    +

    Class GeneralParserTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • parser.GeneralParserTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GeneralParserTest
      +extends java.lang.Object
      +
      Dieser Test pr�ft nur, ob .java-Dateien fehlerfrei geparst werden. + Der dabei erstellte Syntaxbaum wird nicht kontrolliert.
      +
      +
      Author:
      +
      janulrich
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringrootDirectory 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GeneralParserTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          rootDirectory

          +
          private static final java.lang.String rootDirectory
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GeneralParserTest

          +
          public GeneralParserTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/parser/class-use/GeneralParserTest.html b/doc/LambdaJavadoc/parser/class-use/GeneralParserTest.html new file mode 100644 index 00000000..609c6792 --- /dev/null +++ b/doc/LambdaJavadoc/parser/class-use/GeneralParserTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class parser.GeneralParserTest + + + + + + + + + + + +
    +

    Uses of Class
    parser.GeneralParserTest

    +
    +
    No usage of parser.GeneralParserTest
    + + + + + + diff --git a/doc/LambdaJavadoc/parser/package-frame.html b/doc/LambdaJavadoc/parser/package-frame.html new file mode 100644 index 00000000..ce203107 --- /dev/null +++ b/doc/LambdaJavadoc/parser/package-frame.html @@ -0,0 +1,20 @@ + + + + + +parser + + + + + +

    parser

    +
    +

    Classes

    + +
    + + diff --git a/doc/LambdaJavadoc/parser/package-summary.html b/doc/LambdaJavadoc/parser/package-summary.html new file mode 100644 index 00000000..f7c4f77f --- /dev/null +++ b/doc/LambdaJavadoc/parser/package-summary.html @@ -0,0 +1,144 @@ + + + + + +parser + + + + + + + + + + + +
    +

    Package parser

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      GeneralParserTest +
      Dieser Test pr�ft nur, ob .java-Dateien fehlerfrei geparst werden.
      +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/parser/package-tree.html b/doc/LambdaJavadoc/parser/package-tree.html new file mode 100644 index 00000000..7cf25f3e --- /dev/null +++ b/doc/LambdaJavadoc/parser/package-tree.html @@ -0,0 +1,137 @@ + + + + + +parser Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package parser

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/parser/package-use.html b/doc/LambdaJavadoc/parser/package-use.html new file mode 100644 index 00000000..d243e971 --- /dev/null +++ b/doc/LambdaJavadoc/parser/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package parser + + + + + + + + + + + +
    +

    Uses of Package
    parser

    +
    +
    No usage of parser
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/InsertSingleTypeTest.html b/doc/LambdaJavadoc/plugindevelopment/InsertSingleTypeTest.html new file mode 100644 index 00000000..abde91e2 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/InsertSingleTypeTest.html @@ -0,0 +1,355 @@ + + + + + +InsertSingleTypeTest + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class InsertSingleTypeTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.InsertSingleTypeTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class InsertSingleTypeTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        (package private) static java.lang.StringrootDirectory 
        private static java.lang.StringtestFile 
        +
      • +
      + + + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          rootDirectory

          +
          static final java.lang.String rootDirectory
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InsertSingleTypeTest

          +
          public InsertSingleTypeTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test1

          +
          public void test1()
          +
        • +
        + + + + + + + +
          +
        • +

          getFileContent

          +
          public static java.lang.String getFileContent(java.lang.String path)
          +                                       throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/Tester.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/Tester.html new file mode 100644 index 00000000..1b6e9385 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/Tester.html @@ -0,0 +1,334 @@ + + + + + +Tester + + + + + + + + + + + + +
    +
    plugindevelopment.MartinTestCases
    +

    Class Tester

    +
    +
    + +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringrootDirectory 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Tester() 
        +
      • +
      + + +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          rootDirectory

          +
          public static final java.lang.String rootDirectory
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Tester

          +
          public Tester()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test

          +
          public static void test(java.lang.String sourceFileToInfere,
          +                        Menge<java.lang.String> mustContain)
          +
        • +
        + + + +
          +
        • +

          runTests

          +
          public void runTests()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/class-use/Tester.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/class-use/Tester.html new file mode 100644 index 00000000..2886cf01 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/class-use/Tester.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.MartinTestCases.Tester + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.MartinTestCases.Tester

    +
    +
    No usage of plugindevelopment.MartinTestCases.Tester
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-frame.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-frame.html new file mode 100644 index 00000000..ecb8d8bd --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-frame.html @@ -0,0 +1,20 @@ + + + + + +plugindevelopment.MartinTestCases + + + + + +

    plugindevelopment.MartinTestCases

    +
    +

    Classes

    + +
    + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-summary.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-summary.html new file mode 100644 index 00000000..a9d55a86 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-summary.html @@ -0,0 +1,142 @@ + + + + + +plugindevelopment.MartinTestCases + + + + + + + + + + + +
    +

    Package plugindevelopment.MartinTestCases

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      Tester 
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-tree.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-tree.html new file mode 100644 index 00000000..c09f6075 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-tree.html @@ -0,0 +1,141 @@ + + + + + +plugindevelopment.MartinTestCases Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package plugindevelopment.MartinTestCases

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object + +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-use.html b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-use.html new file mode 100644 index 00000000..e8c623bd --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MartinTestCases/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package plugindevelopment.MartinTestCases + + + + + + + + + + + +
    +

    Uses of Package
    plugindevelopment.MartinTestCases

    +
    +
    No usage of plugindevelopment.MartinTestCases
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/MethodTypeInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/MethodTypeInsertTest.html new file mode 100644 index 00000000..0764e1b7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/MethodTypeInsertTest.html @@ -0,0 +1,328 @@ + + + + + +MethodTypeInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class MethodTypeInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.MethodTypeInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class MethodTypeInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringSOLUTION_FILE 
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MethodTypeInsertTest

          +
          public MethodTypeInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/ParameterInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/ParameterInsertTest.html new file mode 100644 index 00000000..b4179576 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/ParameterInsertTest.html @@ -0,0 +1,328 @@ + + + + + +ParameterInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class ParameterInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.ParameterInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ParameterInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringSOLUTION_FILE 
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ParameterInsertTest

          +
          public ParameterInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/SyntaxTreeTests.html b/doc/LambdaJavadoc/plugindevelopment/SyntaxTreeTests.html new file mode 100644 index 00000000..1a36d644 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/SyntaxTreeTests.html @@ -0,0 +1,237 @@ + + + + + +SyntaxTreeTests + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class SyntaxTreeTests

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.SyntaxTreeTests
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class SyntaxTreeTests
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SyntaxTreeTests() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SyntaxTreeTests

          +
          public SyntaxTreeTests()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTester.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTester.html new file mode 100644 index 00000000..ae8a11ad --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTester.html @@ -0,0 +1,344 @@ + + + + + +TypeInsertTester + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class TypeInsertTester

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTester
      • +
      +
    • +
    +
    + +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TypeInsertTester() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static java.lang.StringgetFileContent(java.lang.String path) 
        static voidtest(java.lang.String sourceFileToInfere, + java.lang.String solutionFile) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          rootDirectory

          +
          static final java.lang.String rootDirectory
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypeInsertTester

          +
          public TypeInsertTester()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test

          +
          public static void test(java.lang.String sourceFileToInfere,
          +                        java.lang.String solutionFile)
          +
        • +
        + + + +
          +
        • +

          getFileContent

          +
          public static java.lang.String getFileContent(java.lang.String path)
          +                                       throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Add.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Add.html new file mode 100644 index 00000000..99c7614b --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Add.html @@ -0,0 +1,311 @@ + + + + + +Add + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class Add

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.Add
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Add
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Add() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Add

          +
          public Add()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/BoundedGenericsTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/BoundedGenericsTest.html new file mode 100644 index 00000000..405f86ed --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/BoundedGenericsTest.html @@ -0,0 +1,311 @@ + + + + + +BoundedGenericsTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class BoundedGenericsTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.BoundedGenericsTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class BoundedGenericsTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BoundedGenericsTest

          +
          public BoundedGenericsTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ConstructorTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ConstructorTest.html new file mode 100644 index 00000000..52b21805 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ConstructorTest.html @@ -0,0 +1,311 @@ + + + + + +ConstructorTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ConstructorTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ConstructorTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ConstructorTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ConstructorTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConstructorTest

          +
          public ConstructorTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/FunNInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/FunNInsertTest.html new file mode 100644 index 00000000..4581dfef --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/FunNInsertTest.html @@ -0,0 +1,311 @@ + + + + + +FunNInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class FunNInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.FunNInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class FunNInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        FunNInsertTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FunNInsertTest

          +
          public FunNInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenTypeTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenTypeTest.html new file mode 100644 index 00000000..8ee06710 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenTypeTest.html @@ -0,0 +1,311 @@ + + + + + +GenTypeTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenTypeTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenTypeTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenTypeTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenTypeTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenTypeTest

          +
          public GenTypeTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.html new file mode 100644 index 00000000..7a07e993 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest.html @@ -0,0 +1,311 @@ + + + + + +GenericParaListInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericParaListInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericParaListInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericParaListInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericParaListInsertTest

          +
          public GenericParaListInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.html new file mode 100644 index 00000000..b9006782 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericParaListInsertTest2.html @@ -0,0 +1,311 @@ + + + + + +GenericParaListInsertTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericParaListInsertTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericParaListInsertTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericParaListInsertTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericParaListInsertTest2

          +
          public GenericParaListInsertTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest.html new file mode 100644 index 00000000..d8ff6324 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest.html @@ -0,0 +1,311 @@ + + + + + +GenericTypeVarTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericTypeVarTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericTypeVarTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericTypeVarTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenericTypeVarTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericTypeVarTest

          +
          public GenericTypeVarTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.html new file mode 100644 index 00000000..f2b48047 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.html @@ -0,0 +1,311 @@ + + + + + +GenericTypeVarTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericTypeVarTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericTypeVarTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericTypeVarTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE2 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun2() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericTypeVarTest2

          +
          public GenericTypeVarTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run2

          +
          public void run2()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarInsertTest.html new file mode 100644 index 00000000..4281d134 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarInsertTest.html @@ -0,0 +1,311 @@ + + + + + +GenericVarInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericVarInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericVarInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericVarInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarInsertTest

          +
          public GenericVarInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest.html new file mode 100644 index 00000000..1c44b137 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest.html @@ -0,0 +1,311 @@ + + + + + +GenericVarTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericVarTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericVarTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericVarTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenericVarTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarTest

          +
          public GenericVarTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest2.html new file mode 100644 index 00000000..0b4be499 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest2.html @@ -0,0 +1,311 @@ + + + + + +GenericVarTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericVarTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericVarTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericVarTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenericVarTest2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarTest2

          +
          public GenericVarTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest3.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest3.html new file mode 100644 index 00000000..2fc98dbd --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/GenericVarTest3.html @@ -0,0 +1,311 @@ + + + + + +GenericVarTest3 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class GenericVarTest3

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.GenericVarTest3
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class GenericVarTest3
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        GenericVarTest3() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GenericVarTest3

          +
          public GenericVarTest3()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Id.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Id.html new file mode 100644 index 00000000..243adac3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Id.html @@ -0,0 +1,311 @@ + + + + + +Id + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class Id

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.Id
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Id
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Id() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Id

          +
          public Id()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportSubClassTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportSubClassTest.html new file mode 100644 index 00000000..b3405b7c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportSubClassTest.html @@ -0,0 +1,311 @@ + + + + + +ImportSubClassTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ImportSubClassTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ImportSubClassTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ImportSubClassTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ImportSubClassTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ImportSubClassTest

          +
          public ImportSubClassTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest.html new file mode 100644 index 00000000..6aeeebe4 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest.html @@ -0,0 +1,311 @@ + + + + + +ImportTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ImportTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ImportTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ImportTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ImportTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ImportTest

          +
          public ImportTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest2.html new file mode 100644 index 00000000..37d1a52c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ImportTest2.html @@ -0,0 +1,311 @@ + + + + + +ImportTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ImportTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ImportTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ImportTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ImportTest2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ImportTest2

          +
          public ImportTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/IntTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/IntTest.html new file mode 100644 index 00000000..6933f7ee --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/IntTest.html @@ -0,0 +1,311 @@ + + + + + +IntTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class IntTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.IntTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class IntTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        IntTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IntTest

          +
          public IntTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest1.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest1.html new file mode 100644 index 00000000..2ab733c3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest1.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest1 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest1

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest1
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest1
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest1() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest1

          +
          public LambdaTest1()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest10.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest10.html new file mode 100644 index 00000000..1f684e14 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest10.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest10 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest10

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest10
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest10
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest10() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest10

          +
          public LambdaTest10()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest11.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest11.html new file mode 100644 index 00000000..5f7a27d0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest11.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest11 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest11

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest11
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest11
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest11() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest11

          +
          public LambdaTest11()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest12.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest12.html new file mode 100644 index 00000000..f147340b --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest12.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest12 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest12

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest12
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest12
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest12() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest12

          +
          public LambdaTest12()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest13.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest13.html new file mode 100644 index 00000000..5bc12f46 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest13.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest13 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest13

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest13
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest13
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest13() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest13

          +
          public LambdaTest13()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest14.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest14.html new file mode 100644 index 00000000..da652f3c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest14.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest14 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest14

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest14
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest14
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest14() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest14

          +
          public LambdaTest14()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest15.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest15.html new file mode 100644 index 00000000..90b684b2 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest15.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest15 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest15

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest15
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest15
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest15() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest15

          +
          public LambdaTest15()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest16.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest16.html new file mode 100644 index 00000000..07470ff7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest16.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest16 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest16

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest16
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest16
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest16() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest16

          +
          public LambdaTest16()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest17.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest17.html new file mode 100644 index 00000000..506b1266 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest17.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest17 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest17

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest17
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest17
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest17() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest17

          +
          public LambdaTest17()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest18.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest18.html new file mode 100644 index 00000000..824e79b4 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest18.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest18 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest18

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest18
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest18
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest18() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest18

          +
          public LambdaTest18()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest19.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest19.html new file mode 100644 index 00000000..d4247fbb --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest19.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest19 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest19

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest19
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest19
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest19() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest19

          +
          public LambdaTest19()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2.html new file mode 100644 index 00000000..ae6088fe --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest2

          +
          public LambdaTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest20.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest20.html new file mode 100644 index 00000000..9e8d376d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest20.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest20 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest20

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest20
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest20
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest20() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest20

          +
          public LambdaTest20()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest23.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest23.html new file mode 100644 index 00000000..c697123a --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest23.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest23 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest23

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest23
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest23
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest23() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest23

          +
          public LambdaTest23()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest24.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest24.html new file mode 100644 index 00000000..3ea2bb97 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest24.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest24 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest24

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest24
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest24
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest24() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest24

          +
          public LambdaTest24()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest25.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest25.html new file mode 100644 index 00000000..37572fee --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest25.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest25 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest25

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest25
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest25
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest25() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest25

          +
          public LambdaTest25()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest26.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest26.html new file mode 100644 index 00000000..ef161c50 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest26.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest26 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest26

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest26
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest26
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest26() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest26

          +
          public LambdaTest26()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest27.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest27.html new file mode 100644 index 00000000..001721bc --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest27.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest27 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest27

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest27
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest27
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest27() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest27

          +
          public LambdaTest27()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2_2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2_2.html new file mode 100644 index 00000000..fa9bd45e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest2_2.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest2_2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest2_2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest2_2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest2_2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest2_2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest2_2

          +
          public LambdaTest2_2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest3.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest3.html new file mode 100644 index 00000000..b5ee6ff7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest3.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest3 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest3

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest3
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest3
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest3() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest3

          +
          public LambdaTest3()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest4.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest4.html new file mode 100644 index 00000000..352e4f74 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest4.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest4 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest4

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest4
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest4
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest4() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest4

          +
          public LambdaTest4()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest5.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest5.html new file mode 100644 index 00000000..d577fcea --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest5.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest5 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest5

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest5
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest5
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest5() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest5

          +
          public LambdaTest5()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest6.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest6.html new file mode 100644 index 00000000..4b19c9b6 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest6.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest6 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest6

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest6
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest6
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest6() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest6

          +
          public LambdaTest6()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest7.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest7.html new file mode 100644 index 00000000..1b912d18 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest7.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest7 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest7

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest7
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest7
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest7() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest7

          +
          public LambdaTest7()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest8.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest8.html new file mode 100644 index 00000000..e6056334 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest8.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest8 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest8

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest8
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest8
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest8() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest8

          +
          public LambdaTest8()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest9.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest9.html new file mode 100644 index 00000000..7e520cc9 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LambdaTest9.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest9 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class LambdaTest9

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LambdaTest9
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest9
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest9() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest9

          +
          public LambdaTest9()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.html new file mode 100644 index 00000000..6ec634ec --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest22.html @@ -0,0 +1,311 @@ + + + + + +LambdaTest22 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +

    Class LambdaTest22

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class LambdaTest22
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        LambdaTest22() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LambdaTest22

          +
          public LambdaTest22()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.html new file mode 100644 index 00000000..072badfc --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/Matrix.html @@ -0,0 +1,311 @@ + + + + + +Matrix + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +

    Class Matrix

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Matrix
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Matrix() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Matrix

          +
          public Matrix()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.html new file mode 100644 index 00000000..acee7753 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixSimpleTest.html @@ -0,0 +1,311 @@ + + + + + +TypedMatrixSimpleTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +

    Class TypedMatrixSimpleTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TypedMatrixSimpleTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypedMatrixSimpleTest

          +
          public TypedMatrixSimpleTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.html new file mode 100644 index 00000000..96f9062e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/TypedMatrixTest.html @@ -0,0 +1,311 @@ + + + + + +TypedMatrixTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    +

    Class TypedMatrixTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TypedMatrixTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TypedMatrixTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TypedMatrixTest

          +
          public TypedMatrixTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/LambdaTest22.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/LambdaTest22.html new file mode 100644 index 00000000..21e3206f --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/LambdaTest22.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/Matrix.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/Matrix.html new file mode 100644 index 00000000..3b720c63 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/Matrix.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixSimpleTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixSimpleTest.html new file mode 100644 index 00000000..2e457a01 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixSimpleTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixTest.html new file mode 100644 index 00000000..42e278c4 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/class-use/TypedMatrixTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-frame.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-frame.html new file mode 100644 index 00000000..2e3b4b7d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-frame.html @@ -0,0 +1,23 @@ + + + + + +plugindevelopment.TypeInsertTests.LargeSourceCodeTests + + + + + +

    plugindevelopment.TypeInsertTests.LargeSourceCodeTests

    + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-summary.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-summary.html new file mode 100644 index 00000000..fb56deab --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-summary.html @@ -0,0 +1,154 @@ + + + + + +plugindevelopment.TypeInsertTests.LargeSourceCodeTests + + + + + + + + + + + +
    +

    Package plugindevelopment.TypeInsertTests.LargeSourceCodeTests

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-tree.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-tree.html new file mode 100644 index 00000000..d0cf757c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-tree.html @@ -0,0 +1,140 @@ + + + + + +plugindevelopment.TypeInsertTests.LargeSourceCodeTests Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package plugindevelopment.TypeInsertTests.LargeSourceCodeTests

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.LambdaTest22
      • +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.Matrix
      • +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixSimpleTest
      • +
      • plugindevelopment.TypeInsertTests.LargeSourceCodeTests.TypedMatrixTest
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-use.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-use.html new file mode 100644 index 00000000..b2cce1ee --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package plugindevelopment.TypeInsertTests.LargeSourceCodeTests + + + + + + + + + + + +
    +

    Uses of Package
    plugindevelopment.TypeInsertTests.LargeSourceCodeTests

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LargeSourceCodeTests
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Matrix_simple.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Matrix_simple.html new file mode 100644 index 00000000..eca1ac6b --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/Matrix_simple.html @@ -0,0 +1,311 @@ + + + + + +Matrix_simple + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class Matrix_simple

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.Matrix_simple
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class Matrix_simple
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        Matrix_simple() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Matrix_simple

          +
          public Matrix_simple()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.html new file mode 100644 index 00000000..124f9023 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.html @@ -0,0 +1,366 @@ + + + + + +MultipleTypesInsertTester + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class MultipleTypesInsertTester

    +
    +
    + +
    + +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static voidtest(java.lang.String sourceFileToInfere, + Menge<java.lang.String> mustContain) 
        static voidtest(java.lang.String sourceFileToInfere, + Menge<java.lang.String> mustContain, + LoggerConfiguration additionalConfig) 
        static voidtestSingleInsert(java.lang.String sourceFileToInfere, + Menge<java.lang.String> mustContain) 
        + +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          rootDirectory

          +
          public static final java.lang.String rootDirectory
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MultipleTypesInsertTester

          +
          public MultipleTypesInsertTester()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test

          +
          public static void test(java.lang.String sourceFileToInfere,
          +                        Menge<java.lang.String> mustContain,
          +                        LoggerConfiguration additionalConfig)
          +
        • +
        + + + +
          +
        • +

          test

          +
          public static void test(java.lang.String sourceFileToInfere,
          +                        Menge<java.lang.String> mustContain)
          +
        • +
        + + + +
          +
        • +

          testSingleInsert

          +
          public static void testSingleInsert(java.lang.String sourceFileToInfere,
          +                                    Menge<java.lang.String> mustContain)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MutlitpleTestCases.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MutlitpleTestCases.html new file mode 100644 index 00000000..b070848e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/MutlitpleTestCases.html @@ -0,0 +1,341 @@ + + + + + +MutlitpleTestCases + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class MutlitpleTestCases

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.MutlitpleTestCases
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class MutlitpleTestCases
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        private static java.lang.StringTEST_FILE2 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        MutlitpleTestCases() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidtest1() 
        voidtest2() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MutlitpleTestCases

          +
          public MutlitpleTestCases()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          test1

          +
          public void test1()
          +
        • +
        + + + +
          +
        • +

          test2

          +
          public void test2()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OL.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OL.html new file mode 100644 index 00000000..16c47f14 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OL.html @@ -0,0 +1,311 @@ + + + + + +OL + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OL

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OL
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OL
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        OL() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OL

          +
          public OL()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OperatorTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OperatorTest.html new file mode 100644 index 00000000..5479fda3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OperatorTest.html @@ -0,0 +1,311 @@ + + + + + +OperatorTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OperatorTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OperatorTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OperatorTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        OperatorTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OperatorTest

          +
          public OperatorTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingExample.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingExample.html new file mode 100644 index 00000000..e54cfd8e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingExample.html @@ -0,0 +1,311 @@ + + + + + +OverloadingExample + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingExample

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingExample
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingExample
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        OverloadingExample() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingExample

          +
          public OverloadingExample()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod.html new file mode 100644 index 00000000..5dc8a291 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod.html @@ -0,0 +1,311 @@ + + + + + +OverloadingInMethod + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingInMethod

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingInMethod
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingInMethod
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingInMethod

          +
          public OverloadingInMethod()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2.html new file mode 100644 index 00000000..4ce7f574 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2.html @@ -0,0 +1,311 @@ + + + + + +OverloadingInMethod2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingInMethod2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingInMethod2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingInMethod2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingInMethod2

          +
          public OverloadingInMethod2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.html new file mode 100644 index 00000000..bcc4e824 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInMethod2Simple.html @@ -0,0 +1,311 @@ + + + + + +OverloadingInMethod2Simple + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingInMethod2Simple

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingInMethod2Simple
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingInMethod2Simple

          +
          public OverloadingInMethod2Simple()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInsertTest.html new file mode 100644 index 00000000..bb9e6dcf --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingInsertTest.html @@ -0,0 +1,311 @@ + + + + + +OverloadingInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingInsertTest

          +
          public OverloadingInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingRecursive.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingRecursive.html new file mode 100644 index 00000000..b035ccb1 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/OverloadingRecursive.html @@ -0,0 +1,311 @@ + + + + + +OverloadingRecursive + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class OverloadingRecursive

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.OverloadingRecursive
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class OverloadingRecursive
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          OverloadingRecursive

          +
          public OverloadingRecursive()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/RelOpTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/RelOpTest.html new file mode 100644 index 00000000..ccecbac0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/RelOpTest.html @@ -0,0 +1,311 @@ + + + + + +RelOpTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class RelOpTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.RelOpTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class RelOpTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        RelOpTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RelOpTest

          +
          public RelOpTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest.html new file mode 100644 index 00000000..4061eff7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest.html @@ -0,0 +1,311 @@ + + + + + +ReursiveTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ReursiveTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ReursiveTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ReursiveTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ReursiveTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ReursiveTest

          +
          public ReursiveTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest2.html new file mode 100644 index 00000000..4bc58d42 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ReursiveTest2.html @@ -0,0 +1,311 @@ + + + + + +ReursiveTest2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ReursiveTest2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ReursiveTest2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ReursiveTest2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ReursiveTest2() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ReursiveTest2

          +
          public ReursiveTest2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/SuperTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/SuperTest.html new file mode 100644 index 00000000..bac4073d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/SuperTest.html @@ -0,0 +1,311 @@ + + + + + +SuperTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class SuperTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.SuperTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class SuperTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        SuperTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SuperTest

          +
          public SuperTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ThisTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ThisTest.html new file mode 100644 index 00000000..e695a225 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/ThisTest.html @@ -0,0 +1,311 @@ + + + + + +ThisTest + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class ThisTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.ThisTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class ThisTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        ThisTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ThisTest

          +
          public ThisTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda.html new file mode 100644 index 00000000..19fe9fe5 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda.html @@ -0,0 +1,311 @@ + + + + + +WildcardTestForLambda + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class WildcardTestForLambda

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.WildcardTestForLambda
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class WildcardTestForLambda
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          WildcardTestForLambda

          +
          public WildcardTestForLambda()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.html new file mode 100644 index 00000000..dfe2dd71 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/WildcardTestForLambda2.html @@ -0,0 +1,311 @@ + + + + + +WildcardTestForLambda2 + + + + + + + + + + + + +
    +
    plugindevelopment.TypeInsertTests
    +

    Class WildcardTestForLambda2

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.TypeInsertTests.WildcardTestForLambda2
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class WildcardTestForLambda2
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          WildcardTestForLambda2

          +
          public WildcardTestForLambda2()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Add.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Add.html new file mode 100644 index 00000000..6d982c39 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Add.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.Add + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.Add

    +
    +
    No usage of plugindevelopment.TypeInsertTests.Add
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/BoundedGenericsTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/BoundedGenericsTest.html new file mode 100644 index 00000000..8898244b --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/BoundedGenericsTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.BoundedGenericsTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.BoundedGenericsTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.BoundedGenericsTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ConstructorTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ConstructorTest.html new file mode 100644 index 00000000..c6e2bcb9 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ConstructorTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ConstructorTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ConstructorTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ConstructorTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/FunNInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/FunNInsertTest.html new file mode 100644 index 00000000..ab502cf8 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/FunNInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.FunNInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.FunNInsertTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.FunNInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenTypeTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenTypeTest.html new file mode 100644 index 00000000..b4ab79f0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenTypeTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenTypeTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenTypeTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenTypeTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest.html new file mode 100644 index 00000000..f5d8c191 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericParaListInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericParaListInsertTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericParaListInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest2.html new file mode 100644 index 00000000..119e99ae --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericParaListInsertTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericParaListInsertTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericParaListInsertTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericParaListInsertTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest.html new file mode 100644 index 00000000..ebfe9a03 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericTypeVarTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericTypeVarTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericTypeVarTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest2.html new file mode 100644 index 00000000..8e760b6d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericTypeVarTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericTypeVarTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericTypeVarTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericTypeVarTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarInsertTest.html new file mode 100644 index 00000000..baf62c36 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericVarInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericVarInsertTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericVarInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest.html new file mode 100644 index 00000000..aa271da9 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericVarTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericVarTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericVarTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest2.html new file mode 100644 index 00000000..f1bf8b4b --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericVarTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericVarTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericVarTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest3.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest3.html new file mode 100644 index 00000000..c657295c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/GenericVarTest3.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.GenericVarTest3 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.GenericVarTest3

    +
    +
    No usage of plugindevelopment.TypeInsertTests.GenericVarTest3
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Id.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Id.html new file mode 100644 index 00000000..631ad92c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Id.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.Id + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.Id

    +
    +
    No usage of plugindevelopment.TypeInsertTests.Id
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportSubClassTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportSubClassTest.html new file mode 100644 index 00000000..8869460f --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportSubClassTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ImportSubClassTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ImportSubClassTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ImportSubClassTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest.html new file mode 100644 index 00000000..f8780937 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ImportTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ImportTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ImportTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest2.html new file mode 100644 index 00000000..cdf39934 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ImportTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ImportTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ImportTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ImportTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/IntTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/IntTest.html new file mode 100644 index 00000000..c2b01199 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/IntTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.IntTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.IntTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.IntTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest1.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest1.html new file mode 100644 index 00000000..c32e1c69 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest1.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest1 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest1

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest1
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest10.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest10.html new file mode 100644 index 00000000..08c21e53 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest10.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest10 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest10

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest10
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest11.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest11.html new file mode 100644 index 00000000..f3ea4a7d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest11.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest11 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest11

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest11
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest12.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest12.html new file mode 100644 index 00000000..48fd3df5 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest12.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest12 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest12

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest12
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest13.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest13.html new file mode 100644 index 00000000..e68edee4 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest13.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest13 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest13

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest13
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest14.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest14.html new file mode 100644 index 00000000..2e53e6b9 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest14.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest14 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest14

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest14
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest15.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest15.html new file mode 100644 index 00000000..019b8b40 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest15.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest15 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest15

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest15
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest16.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest16.html new file mode 100644 index 00000000..9dfe72ce --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest16.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest16 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest16

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest16
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest17.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest17.html new file mode 100644 index 00000000..dd80202e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest17.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest17 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest17

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest17
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest18.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest18.html new file mode 100644 index 00000000..14b65302 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest18.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest18 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest18

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest18
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest19.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest19.html new file mode 100644 index 00000000..526ac105 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest19.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest19 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest19

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest19
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2.html new file mode 100644 index 00000000..eab7726c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest20.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest20.html new file mode 100644 index 00000000..24f4aa45 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest20.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest20 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest20

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest20
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest23.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest23.html new file mode 100644 index 00000000..67575d75 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest23.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest23 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest23

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest23
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest24.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest24.html new file mode 100644 index 00000000..1b0ba02f --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest24.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest24 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest24

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest24
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest25.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest25.html new file mode 100644 index 00000000..8e8590ac --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest25.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest25 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest25

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest25
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest26.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest26.html new file mode 100644 index 00000000..794ee932 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest26.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest26 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest26

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest26
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest27.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest27.html new file mode 100644 index 00000000..7169805c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest27.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest27 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest27

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest27
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2_2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2_2.html new file mode 100644 index 00000000..8ad84557 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest2_2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest2_2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest2_2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest2_2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest3.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest3.html new file mode 100644 index 00000000..bf0726ac --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest3.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest3 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest3

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest3
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest4.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest4.html new file mode 100644 index 00000000..afaeda26 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest4.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest4 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest4

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest4
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest5.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest5.html new file mode 100644 index 00000000..0aafb5c7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest5.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest5 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest5

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest5
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest6.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest6.html new file mode 100644 index 00000000..d44154e2 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest6.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest6 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest6

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest6
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest7.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest7.html new file mode 100644 index 00000000..f617db55 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest7.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest7 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest7

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest7
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest8.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest8.html new file mode 100644 index 00000000..bc5acf12 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest8.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest8 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest8

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest8
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest9.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest9.html new file mode 100644 index 00000000..4fd552c3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/LambdaTest9.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.LambdaTest9 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.LambdaTest9

    +
    +
    No usage of plugindevelopment.TypeInsertTests.LambdaTest9
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Matrix_simple.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Matrix_simple.html new file mode 100644 index 00000000..234499a7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/Matrix_simple.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.Matrix_simple + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.Matrix_simple

    +
    +
    No usage of plugindevelopment.TypeInsertTests.Matrix_simple
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MultipleTypesInsertTester.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MultipleTypesInsertTester.html new file mode 100644 index 00000000..f1ee6fe8 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MultipleTypesInsertTester.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.MultipleTypesInsertTester + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.MultipleTypesInsertTester

    +
    +
    No usage of plugindevelopment.TypeInsertTests.MultipleTypesInsertTester
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MutlitpleTestCases.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MutlitpleTestCases.html new file mode 100644 index 00000000..a0a54b5e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/MutlitpleTestCases.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.MutlitpleTestCases + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.MutlitpleTestCases

    +
    +
    No usage of plugindevelopment.TypeInsertTests.MutlitpleTestCases
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OL.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OL.html new file mode 100644 index 00000000..7000d73e --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OL.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OL + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OL

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OL
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OperatorTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OperatorTest.html new file mode 100644 index 00000000..58aa5897 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OperatorTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OperatorTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OperatorTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OperatorTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingExample.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingExample.html new file mode 100644 index 00000000..89aaaaf3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingExample.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingExample + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingExample

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingExample
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod.html new file mode 100644 index 00000000..cf50b1d7 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingInMethod + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingInMethod

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingInMethod
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2.html new file mode 100644 index 00000000..551dd108 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingInMethod2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingInMethod2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingInMethod2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2Simple.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2Simple.html new file mode 100644 index 00000000..0be5022d --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInMethod2Simple.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingInMethod2Simple
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInsertTest.html new file mode 100644 index 00000000..343c9ba0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingInsertTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingRecursive.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingRecursive.html new file mode 100644 index 00000000..bf89e6ee --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/OverloadingRecursive.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.OverloadingRecursive + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.OverloadingRecursive

    +
    +
    No usage of plugindevelopment.TypeInsertTests.OverloadingRecursive
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/RelOpTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/RelOpTest.html new file mode 100644 index 00000000..8ad50d74 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/RelOpTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.RelOpTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.RelOpTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.RelOpTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest.html new file mode 100644 index 00000000..ecd4ced0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ReursiveTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ReursiveTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ReursiveTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest2.html new file mode 100644 index 00000000..6a1c90ba --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ReursiveTest2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ReursiveTest2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ReursiveTest2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ReursiveTest2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/SuperTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/SuperTest.html new file mode 100644 index 00000000..5c1abef3 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/SuperTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.SuperTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.SuperTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.SuperTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ThisTest.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ThisTest.html new file mode 100644 index 00000000..6d9fe7bd --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/ThisTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.ThisTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.ThisTest

    +
    +
    No usage of plugindevelopment.TypeInsertTests.ThisTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda.html new file mode 100644 index 00000000..3a6ad007 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.WildcardTestForLambda + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.WildcardTestForLambda

    +
    +
    No usage of plugindevelopment.TypeInsertTests.WildcardTestForLambda
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda2.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda2.html new file mode 100644 index 00000000..2fb955af --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/class-use/WildcardTestForLambda2.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTests.WildcardTestForLambda2 + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTests.WildcardTestForLambda2

    +
    +
    No usage of plugindevelopment.TypeInsertTests.WildcardTestForLambda2
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-frame.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-frame.html new file mode 100644 index 00000000..23cf0254 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-frame.html @@ -0,0 +1,81 @@ + + + + + +plugindevelopment.TypeInsertTests + + + + + +

    plugindevelopment.TypeInsertTests

    + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-summary.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-summary.html new file mode 100644 index 00000000..eb358185 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-summary.html @@ -0,0 +1,386 @@ + + + + + +plugindevelopment.TypeInsertTests + + + + + + + + + + + +
    +

    Package plugindevelopment.TypeInsertTests

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-tree.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-tree.html new file mode 100644 index 00000000..7cd09abc --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-tree.html @@ -0,0 +1,202 @@ + + + + + +plugindevelopment.TypeInsertTests Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package plugindevelopment.TypeInsertTests

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-use.html b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-use.html new file mode 100644 index 00000000..432e5e32 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/TypeInsertTests/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package plugindevelopment.TypeInsertTests + + + + + + + + + + + +
    +

    Uses of Package
    plugindevelopment.TypeInsertTests

    +
    +
    No usage of plugindevelopment.TypeInsertTests
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/VariableTypeInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/VariableTypeInsertTest.html new file mode 100644 index 00000000..1df75c2c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/VariableTypeInsertTest.html @@ -0,0 +1,328 @@ + + + + + +VariableTypeInsertTest + + + + + + + + + + + + +
    +
    plugindevelopment
    +

    Class VariableTypeInsertTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • plugindevelopment.VariableTypeInsertTest
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class VariableTypeInsertTest
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringSOLUTION_FILE 
        private static java.lang.StringTEST_FILE 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          VariableTypeInsertTest

          +
          public VariableTypeInsertTest()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/InsertSingleTypeTest.html b/doc/LambdaJavadoc/plugindevelopment/class-use/InsertSingleTypeTest.html new file mode 100644 index 00000000..5697cac5 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/InsertSingleTypeTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.InsertSingleTypeTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.InsertSingleTypeTest

    +
    +
    No usage of plugindevelopment.InsertSingleTypeTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/MethodTypeInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/class-use/MethodTypeInsertTest.html new file mode 100644 index 00000000..8abbdec0 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/MethodTypeInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.MethodTypeInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.MethodTypeInsertTest

    +
    +
    No usage of plugindevelopment.MethodTypeInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/ParameterInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/class-use/ParameterInsertTest.html new file mode 100644 index 00000000..f69af555 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/ParameterInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.ParameterInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.ParameterInsertTest

    +
    +
    No usage of plugindevelopment.ParameterInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/SyntaxTreeTests.html b/doc/LambdaJavadoc/plugindevelopment/class-use/SyntaxTreeTests.html new file mode 100644 index 00000000..7e238745 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/SyntaxTreeTests.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.SyntaxTreeTests + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.SyntaxTreeTests

    +
    +
    No usage of plugindevelopment.SyntaxTreeTests
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/TypeInsertTester.html b/doc/LambdaJavadoc/plugindevelopment/class-use/TypeInsertTester.html new file mode 100644 index 00000000..892b2dc5 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/TypeInsertTester.html @@ -0,0 +1,186 @@ + + + + + +Uses of Class plugindevelopment.TypeInsertTester + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.TypeInsertTester

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/class-use/VariableTypeInsertTest.html b/doc/LambdaJavadoc/plugindevelopment/class-use/VariableTypeInsertTest.html new file mode 100644 index 00000000..6076850c --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/class-use/VariableTypeInsertTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class plugindevelopment.VariableTypeInsertTest + + + + + + + + + + + +
    +

    Uses of Class
    plugindevelopment.VariableTypeInsertTest

    +
    +
    No usage of plugindevelopment.VariableTypeInsertTest
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/package-frame.html b/doc/LambdaJavadoc/plugindevelopment/package-frame.html new file mode 100644 index 00000000..11093c93 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/package-frame.html @@ -0,0 +1,25 @@ + + + + + +plugindevelopment + + + + + +

    plugindevelopment

    + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/package-summary.html b/doc/LambdaJavadoc/plugindevelopment/package-summary.html new file mode 100644 index 00000000..e7d970f9 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/package-summary.html @@ -0,0 +1,162 @@ + + + + + +plugindevelopment + + + + + + + + + + + +
    +

    Package plugindevelopment

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/package-tree.html b/doc/LambdaJavadoc/plugindevelopment/package-tree.html new file mode 100644 index 00000000..dc38d6b1 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/package-tree.html @@ -0,0 +1,142 @@ + + + + + +plugindevelopment Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package plugindevelopment

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/plugindevelopment/package-use.html b/doc/LambdaJavadoc/plugindevelopment/package-use.html new file mode 100644 index 00000000..96c1f872 --- /dev/null +++ b/doc/LambdaJavadoc/plugindevelopment/package-use.html @@ -0,0 +1,176 @@ + + + + + +Uses of Package plugindevelopment + + + + + + + + + + + +
    +

    Uses of Package
    plugindevelopment

    +
    +
    + +
    + + + + + + diff --git a/doc/LambdaJavadoc/script.js b/doc/LambdaJavadoc/script.js new file mode 100644 index 00000000..b3463569 --- /dev/null +++ b/doc/LambdaJavadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/doc/LambdaJavadoc/serialized-form.html b/doc/LambdaJavadoc/serialized-form.html new file mode 100644 index 00000000..1d628e58 --- /dev/null +++ b/doc/LambdaJavadoc/serialized-form.html @@ -0,0 +1,395 @@ + + + + + +Serialized Form + + + + + + + + +
    + + + + + + + +
    + + +
    +

    Serialized Form

    +
    +
    + +
    + +
    + + + + + + + +
    + + + + diff --git a/doc/LambdaJavadoc/stylesheet.css b/doc/LambdaJavadoc/stylesheet.css new file mode 100644 index 00000000..cebb4fd8 --- /dev/null +++ b/doc/LambdaJavadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; + width:100%; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/doc/LambdaJavadoc/syntaxTree/NodeEqualTest.html b/doc/LambdaJavadoc/syntaxTree/NodeEqualTest.html new file mode 100644 index 00000000..51ab0e76 --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/NodeEqualTest.html @@ -0,0 +1,367 @@ + + + + + +NodeEqualTest + + + + + + + + + + + + +
    +
    syntaxTree
    +

    Class NodeEqualTest

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • junit.framework.Assert
      • +
      • +
          +
        • junit.framework.TestCase
        • +
        • +
            +
          • syntaxTree.NodeEqualTest
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      junit.framework.Test
      +
      +
      +
      +
      public class NodeEqualTest
      +extends junit.framework.TestCase
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        private static java.lang.StringrootDirectory 
        private static java.lang.StringtestFile 
        +
      • +
      + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        NodeEqualTest() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        private voidrecursivlyCheckEqual(SyntaxTreeNode node1, + SyntaxTreeNode node2) 
        voidtest() 
        +
          +
        • + + +

          Methods inherited from class junit.framework.TestCase

          +countTestCases, createResult, getName, run, run, runBare, runTest, setName, setUp, tearDown, toString
        • +
        +
          +
        • + + +

          Methods inherited from class junit.framework.Assert

          +assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          rootDirectory

          +
          private static final java.lang.String rootDirectory
          +
        • +
        + + + + +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          NodeEqualTest

          +
          public NodeEqualTest()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/doc/LambdaJavadoc/syntaxTree/class-use/NodeEqualTest.html b/doc/LambdaJavadoc/syntaxTree/class-use/NodeEqualTest.html new file mode 100644 index 00000000..1aeb9d86 --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/class-use/NodeEqualTest.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class syntaxTree.NodeEqualTest + + + + + + + + + + + +
    +

    Uses of Class
    syntaxTree.NodeEqualTest

    +
    +
    No usage of syntaxTree.NodeEqualTest
    + + + + + + diff --git a/doc/LambdaJavadoc/syntaxTree/package-frame.html b/doc/LambdaJavadoc/syntaxTree/package-frame.html new file mode 100644 index 00000000..b67f0498 --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/package-frame.html @@ -0,0 +1,20 @@ + + + + + +syntaxTree + + + + + +

    syntaxTree

    +
    +

    Classes

    + +
    + + diff --git a/doc/LambdaJavadoc/syntaxTree/package-summary.html b/doc/LambdaJavadoc/syntaxTree/package-summary.html new file mode 100644 index 00000000..2d1f19db --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/package-summary.html @@ -0,0 +1,142 @@ + + + + + +syntaxTree + + + + + + + + + + + +
    +

    Package syntaxTree

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      NodeEqualTest 
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/syntaxTree/package-tree.html b/doc/LambdaJavadoc/syntaxTree/package-tree.html new file mode 100644 index 00000000..bfefeed0 --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/package-tree.html @@ -0,0 +1,145 @@ + + + + + +syntaxTree Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package syntaxTree

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • junit.framework.Assert +
          +
        • junit.framework.TestCase (implements junit.framework.Test) + +
        • +
        +
      • +
      +
    • +
    +
    + + + + + + diff --git a/doc/LambdaJavadoc/syntaxTree/package-use.html b/doc/LambdaJavadoc/syntaxTree/package-use.html new file mode 100644 index 00000000..5a31c76e --- /dev/null +++ b/doc/LambdaJavadoc/syntaxTree/package-use.html @@ -0,0 +1,124 @@ + + + + + +Uses of Package syntaxTree + + + + + + + + + + + +
    +

    Uses of Package
    syntaxTree

    +
    +
    No usage of syntaxTree
    + + + + + + From 4833bfd09b2f70d59096c1ca69b22f788565a390 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 13 May 2015 13:59:10 +0200 Subject: [PATCH 091/186] =?UTF-8?q?Cloning=20Library=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/cloning.jar | Bin 0 -> 65949 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/cloning.jar diff --git a/lib/cloning.jar b/lib/cloning.jar new file mode 100644 index 0000000000000000000000000000000000000000..d56184265968fbd123f145dabd0b080005a000ca GIT binary patch literal 65949 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 SVK8Rkzkk3W6Egt)-~R!#^gZbS literal 0 HcmV?d00001 From 035851ba79468bfef50215a665f0317a33a1babf Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 20 May 2015 14:59:28 +0200 Subject: [PATCH 092/186] =?UTF-8?q?=C3=84nderungen=20am=20Logger.=20+=20Te?= =?UTF-8?q?st=20f=C3=BCr=20Filte=20im=20Unify.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/logger/Logger.java | 65 +++++++++++++++---- .../typeinference/ConstraintsSet.java | 6 ++ .../typeinference/unify/Unify.java | 10 ++- 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/de/dhbwstuttgart/logger/Logger.java b/src/de/dhbwstuttgart/logger/Logger.java index dd870906..64836c07 100755 --- a/src/de/dhbwstuttgart/logger/Logger.java +++ b/src/de/dhbwstuttgart/logger/Logger.java @@ -1,6 +1,8 @@ package de.dhbwstuttgart.logger; import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.logging.Handler; import java.util.logging.Level; @@ -14,6 +16,8 @@ public class Logger { private String name; private final HashMap logger; + private static final LogHistory LOG_HISTORY = new LogHistory(); + protected Logger(String name, LoggerConfiguration config) { this.name = name; this.logger = new HashMap<>(); @@ -26,12 +30,6 @@ public class Logger { }); } } - - /* - public static LoggerConfiguration getConfiguration(){ - return Logger.standardConfiguration; - } - */ /** * Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird. @@ -72,17 +70,11 @@ public class Logger { } protected void output(String msg , Level logLevel, Section section){ + Logger.LOG_HISTORY.add(new LogLine(msg, this.name, section, logLevel)); if(logger.containsKey(section)){ java.util.logging.Logger log = logger.get(section); log.log(logLevel, msg); } - /* - if(output != null){ - output.println(msg); - }else if(standardOutput != null){ - standardOutput.println(msg); - } - */ } public void info(String message, Section s) { @@ -100,6 +92,12 @@ public class Logger { Logger.standardConfiguration = config; } + public static String getWholeLog(){ + String ret = ""; + Logger.LOG_HISTORY.sort((log1, log2)->log1.timestamp.compareTo(log2.timestamp)); + ret += Logger.LOG_HISTORY.toString(); + return ret; + } } class OutputHandler extends Handler{ @@ -123,3 +121,44 @@ class OutputHandler extends Handler{ public void close() throws SecurityException { } } + +class LogHistory extends ArrayList{ + private static final long serialVersionUID = -1785228323497318261L; + + @Override + public String toString(){ + String ret = ""; + for(LogLine l : this){ + ret += l.toString() + "\n"; + } + return ret; + } +} + +class LogLine { + Date timestamp; + String message; + String name; + Section section; + Level level; + + LogLine(String msg, String loggerName, Section section, Level logLevel){ + this.timestamp = new Date(); + this.message = msg; + this.name = loggerName; + this.section = section; + this.level = logLevel; + } + + public String toString(){ + String ret = ""; + ret += name + ": "; + ret += message; + ret += " - " + section.name(); + return ret; + } + + public String toJSON(){ + return ""; + } +} diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 49a0f5f8..c8dadca9 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -20,6 +20,12 @@ public class ConstraintsSet extends UndMenge{ this.addItems(constraint); } + public String toString(){ + String ret = ""; + + return ret; + } + /* private UndConstraint constraintsSet; diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 858f5c35..852183a6 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -56,7 +56,7 @@ public class Unify { // ino.attribute.inferencelog.28052.declaration - protected static SectionLogger inferencelog = Logger.getSectionLogger("inference", Section.UNIFY); + protected static SectionLogger inferencelog = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); // ino.end /** @@ -644,13 +644,19 @@ public class Unify } cSet.addItems(orConstraints); } + if(filter){ + SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); + Unifier filterUnify = (pairs)->{ + String pairsString = pairs.toString(); Menge> retValue = new Menge<>(); retValue = Unify.unifyFiltered(pairs,fc_tto,false); //Unify.unify(pairs, fc_tto, (i)->{}); + log.debug("Filtere Constraints:\n"+pairsString); + log.debug("Ergebnis: "+ retValue); return retValue;}; - + log.debug("Filtere 'WrongConstraints' auf: "+cSet); cSet.filterWrongConstraints(filterUnify); } From fcac7fb04fc3b72d4ac03ecaa6e336661bad74dd Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 20 May 2015 15:20:25 +0200 Subject: [PATCH 093/186] =?UTF-8?q?toString()=20f=C3=BCr=20OderMenge=20imp?= =?UTF-8?q?lementieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/typeinference/ConstraintsSet.java | 7 +------ src/de/dhbwstuttgart/typeinference/OderMenge.java | 9 +++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index c8dadca9..6e4a483d 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -19,12 +19,7 @@ public class ConstraintsSet extends UndMenge{ public void add(KomplexeMenge constraint){ this.addItems(constraint); } - - public String toString(){ - String ret = ""; - - return ret; - } + /* private UndConstraint constraintsSet; diff --git a/src/de/dhbwstuttgart/typeinference/OderMenge.java b/src/de/dhbwstuttgart/typeinference/OderMenge.java index 0d17bf09..853fa968 100644 --- a/src/de/dhbwstuttgart/typeinference/OderMenge.java +++ b/src/de/dhbwstuttgart/typeinference/OderMenge.java @@ -75,4 +75,13 @@ public class OderMenge implements KomplexeMenge{ } return ret; } + + @Override + public String toString(){ + String ret = "["; + for(KomplexeMenge i : set){ + ret += i.toString() + " |\n"; + } + return ret + "]"; + } } From 19d0198d2aa9269d48a811f00384178f2bc421e9 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 20 May 2015 15:20:56 +0200 Subject: [PATCH 094/186] Unify Test --- test/unify/UnifyFilter.jav | 16 + test/unify/UnifyFilter.jav.log | 7058 ++++++++++++++++++++++++++++++++ test/unify/UnifyFilter.java | 54 + 3 files changed, 7128 insertions(+) create mode 100644 test/unify/UnifyFilter.jav create mode 100644 test/unify/UnifyFilter.jav.log create mode 100644 test/unify/UnifyFilter.java diff --git a/test/unify/UnifyFilter.jav b/test/unify/UnifyFilter.jav new file mode 100644 index 00000000..47103c2a --- /dev/null +++ b/test/unify/UnifyFilter.jav @@ -0,0 +1,16 @@ +class Test{ + void methode(){ + var; + var.methode(); + var.methode(); + } +} + +class Klasse1 { + void methode(){ + } +} +class Klasse2 { + void methode(){ + } +} \ No newline at end of file diff --git a/test/unify/UnifyFilter.jav.log b/test/unify/UnifyFilter.jav.log new file mode 100644 index 00000000..be41765b --- /dev/null +++ b/test/unify/UnifyFilter.jav.log @@ -0,0 +1,7058 @@ +parser: P -> Lokale Variable angelegt! - PARSER +parser: M1 - PARSER +parser: M1 - PARSER +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH A für SyntaxTreeNode: null [Test]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH B für SyntaxTreeNode: no type [var] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH C für SyntaxTreeNode: null [Klasse1]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH D für SyntaxTreeNode: null [Klasse2]null { [] - TYPEINFERENCE +de.dhbwstuttgart.core.MyCompiler: ########################################## - TYPEINFERENCE +de.dhbwstuttgart.core.MyCompiler: # TypeReconstruction-Algorithmus - START # - TYPEINFERENCE +de.dhbwstuttgart.core.MyCompiler: ########################################## + - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH E für SyntaxTreeNode: null [numberOfLeadingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH F für SyntaxTreeNode: null [numberOfTrailingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH G für SyntaxTreeNode: null [bitCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH H für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH I für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH J für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH K für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH L für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH M für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH N für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH O für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH P für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH Q für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH R für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH S für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH T für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH U für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH V für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH W für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH X für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH Y für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH Z für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AA für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AB für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AC für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AD für SyntaxTreeNode: null [decode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AE für SyntaxTreeNode: null [reverse]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AF für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AG für SyntaxTreeNode: null [parseInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AH für SyntaxTreeNode: null [parseInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AI für SyntaxTreeNode: null [toUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AJ für SyntaxTreeNode: null [compareUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AK für SyntaxTreeNode: null [divideUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AL für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AM für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AN für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AO für SyntaxTreeNode: null [highestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AP für SyntaxTreeNode: null [lowestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AQ für SyntaxTreeNode: null [parseUnsignedInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AR für SyntaxTreeNode: null [parseUnsignedInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AS für SyntaxTreeNode: null [remainderUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AT für SyntaxTreeNode: null [rotateLeft]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AU für SyntaxTreeNode: null [rotateRight]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AV für SyntaxTreeNode: null [signum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AW für SyntaxTreeNode: null [toBinaryString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AX für SyntaxTreeNode: null [toOctalString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AY für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AZ für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BA für SyntaxTreeNode: null [java.lang.Integer]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BB für SyntaxTreeNode: null [java.lang.Integer]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BC für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BD für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BE für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BF für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BG für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BH für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BI für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BJ für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BK für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BL für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BM für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BN für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BO für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BP für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BQ für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BR für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BS für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BT für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BU für SyntaxTreeNode: null [charAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BV für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BW für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BX für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BY für SyntaxTreeNode: null [compareToIgnoreCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH BZ für SyntaxTreeNode: null [concat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CA für SyntaxTreeNode: null [contains]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CB für SyntaxTreeNode: null [contentEquals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CC für SyntaxTreeNode: null [contentEquals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CD für SyntaxTreeNode: null [copyValueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CE für SyntaxTreeNode: null [copyValueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CF für SyntaxTreeNode: null [endsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CG für SyntaxTreeNode: null [equalsIgnoreCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CH für SyntaxTreeNode: null [format]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CI für SyntaxTreeNode: null [format]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CJ für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CK für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CL für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CM für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CN für SyntaxTreeNode: null [getChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CO für SyntaxTreeNode: null [intern]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CP für SyntaxTreeNode: null [isEmpty]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CQ für SyntaxTreeNode: null [join]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CR für SyntaxTreeNode: null [join]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CS für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CT für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CU für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CV für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CW für SyntaxTreeNode: null [length]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CX für SyntaxTreeNode: null [matches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CY für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH CZ für SyntaxTreeNode: null [regionMatches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DA für SyntaxTreeNode: null [regionMatches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DB für SyntaxTreeNode: null [replace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DC für SyntaxTreeNode: null [replace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DD für SyntaxTreeNode: null [replaceAll]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DE für SyntaxTreeNode: null [replaceFirst]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DF für SyntaxTreeNode: null [split]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DG für SyntaxTreeNode: null [split]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DH für SyntaxTreeNode: null [startsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DI für SyntaxTreeNode: null [startsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DJ für SyntaxTreeNode: null [subSequence]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DK für SyntaxTreeNode: null [substring]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DL für SyntaxTreeNode: null [substring]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DM für SyntaxTreeNode: null [toCharArray]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DN für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DO für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DP für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DQ für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DR für SyntaxTreeNode: null [trim]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DS für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DT für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DU für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DV für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DW für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DX für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DY für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH DZ für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EA für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EB für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EC für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ED für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EE für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EF für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EG für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EH für SyntaxTreeNode: null [isJavaIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EI für SyntaxTreeNode: null [isJavaIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EJ für SyntaxTreeNode: null [isJavaIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EK für SyntaxTreeNode: null [isJavaIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EL für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EM für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EN für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EO für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EP für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EQ für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ER für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ES für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ET für SyntaxTreeNode: null [charValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EU für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EV für SyntaxTreeNode: null [getName]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EW für SyntaxTreeNode: null [charCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EX für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EY für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH EZ für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FA für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FB für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FC für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FD für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FE für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FF für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FG für SyntaxTreeNode: null [highSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FH für SyntaxTreeNode: null [isBmpCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FI für SyntaxTreeNode: null [isValidCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FJ für SyntaxTreeNode: null [lowSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FK für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FL für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FM für SyntaxTreeNode: null [toChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FN für SyntaxTreeNode: null [toChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FO für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FP für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FQ für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FR für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FS für SyntaxTreeNode: null [getType]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FT für SyntaxTreeNode: null [getType]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FU für SyntaxTreeNode: null [isHighSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FV für SyntaxTreeNode: null [isLowSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FW für SyntaxTreeNode: null [isSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FX für SyntaxTreeNode: null [digit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FY für SyntaxTreeNode: null [digit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH FZ für SyntaxTreeNode: null [forDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GA für SyntaxTreeNode: null [getDirectionality]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GB für SyntaxTreeNode: null [getDirectionality]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GC für SyntaxTreeNode: null [getNumericValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GD für SyntaxTreeNode: null [getNumericValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GE für SyntaxTreeNode: null [isAlphabetic]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GF für SyntaxTreeNode: null [isDefined]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GG für SyntaxTreeNode: null [isDefined]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GH für SyntaxTreeNode: null [isDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GI für SyntaxTreeNode: null [isDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GJ für SyntaxTreeNode: null [isISOControl]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GK für SyntaxTreeNode: null [isISOControl]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GL für SyntaxTreeNode: null [isIdentifierIgnorable]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GM für SyntaxTreeNode: null [isIdentifierIgnorable]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GN für SyntaxTreeNode: null [isIdeographic]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GO für SyntaxTreeNode: null [isJavaLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GP für SyntaxTreeNode: null [isJavaLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GQ für SyntaxTreeNode: null [isLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GR für SyntaxTreeNode: null [isLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GS für SyntaxTreeNode: null [isLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GT für SyntaxTreeNode: null [isLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GU für SyntaxTreeNode: null [isLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GV für SyntaxTreeNode: null [isLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GW für SyntaxTreeNode: null [isMirrored]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GX für SyntaxTreeNode: null [isMirrored]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GY für SyntaxTreeNode: null [isSpace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH GZ für SyntaxTreeNode: null [isSpaceChar]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HA für SyntaxTreeNode: null [isSpaceChar]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HB für SyntaxTreeNode: null [isSupplementaryCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HC für SyntaxTreeNode: null [isSurrogatePair]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HD für SyntaxTreeNode: null [isTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HE für SyntaxTreeNode: null [isTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HF für SyntaxTreeNode: null [isUnicodeIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HG für SyntaxTreeNode: null [isUnicodeIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HH für SyntaxTreeNode: null [isUnicodeIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HI für SyntaxTreeNode: null [isUnicodeIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HJ für SyntaxTreeNode: null [isUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HK für SyntaxTreeNode: null [isUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HL für SyntaxTreeNode: null [isWhitespace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HM für SyntaxTreeNode: null [isWhitespace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HN für SyntaxTreeNode: null [toCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HO für SyntaxTreeNode: null [toTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HP für SyntaxTreeNode: null [toTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HQ für SyntaxTreeNode: null [java.lang.Character]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HR für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HS für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HT für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HU für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HV für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HW für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HX für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HY für SyntaxTreeNode: null [getBoolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH HZ für SyntaxTreeNode: null [booleanValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IA für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IB für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IC für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ID für SyntaxTreeNode: null [logicalAnd]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IE für SyntaxTreeNode: null [logicalOr]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IF für SyntaxTreeNode: null [logicalXor]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IG für SyntaxTreeNode: null [parseBoolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IH für SyntaxTreeNode: null [java.lang.Boolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH II für SyntaxTreeNode: null [java.lang.Boolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IJ für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IK für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IL für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IM für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IN für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IO für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IP für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IQ für SyntaxTreeNode: null [doubleToRawLongBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IR für SyntaxTreeNode: null [doubleToLongBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IS für SyntaxTreeNode: null [longBitsToDouble]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IT für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IU für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IV für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IW für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IX für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IY für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH IZ für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JA für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JB für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JC für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JD für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JE für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JF für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JG für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JH für SyntaxTreeNode: null [isFinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JI für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JJ für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JK für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JL für SyntaxTreeNode: null [parseDouble]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JM für SyntaxTreeNode: null [java.lang.Double]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JN für SyntaxTreeNode: null [java.lang.Double]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JO für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JP für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JQ für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JR für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JS für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JT für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JU für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JV für SyntaxTreeNode: null [floatToRawIntBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JW für SyntaxTreeNode: null [floatToIntBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JX für SyntaxTreeNode: null [intBitsToFloat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JY für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH JZ für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KA für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KB für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KC für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KD für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KE für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KF für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KG für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KH für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KI für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KJ für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KK für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KL für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KM für SyntaxTreeNode: null [isFinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KN für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KO für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KP für SyntaxTreeNode: null [parseFloat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KQ für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KR für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KS für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KT für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KU für SyntaxTreeNode: null [numberOfLeadingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KV für SyntaxTreeNode: null [numberOfTrailingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KW für SyntaxTreeNode: null [bitCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KX für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KY für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH KZ für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LA für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LB für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LC für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LD für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LE für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LF für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LG für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LH für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LI für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LJ für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LK für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LL für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LM für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LN für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LO für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LP für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LQ für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LR für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LS für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LT für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LU für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LV für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LW für SyntaxTreeNode: null [decode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LX für SyntaxTreeNode: null [reverse]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LY für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH LZ für SyntaxTreeNode: null [compareUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MA für SyntaxTreeNode: null [divideUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MB für SyntaxTreeNode: null [highestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MC für SyntaxTreeNode: null [lowestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MD für SyntaxTreeNode: null [parseLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ME für SyntaxTreeNode: null [parseLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MF für SyntaxTreeNode: null [remainderUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MG für SyntaxTreeNode: null [rotateLeft]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MH für SyntaxTreeNode: null [rotateRight]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MI für SyntaxTreeNode: null [signum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MJ für SyntaxTreeNode: null [toBinaryString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MK für SyntaxTreeNode: null [toOctalString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ML für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MM für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MN für SyntaxTreeNode: null [parseUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MO für SyntaxTreeNode: null [parseUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MP für SyntaxTreeNode: null [java.lang.Long]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MQ für SyntaxTreeNode: null [java.lang.Long]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MR für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MS für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MT für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MU für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MV für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MW für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MX für SyntaxTreeNode: null [getClass]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MY für SyntaxTreeNode: null [notify]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH MZ für SyntaxTreeNode: null [notifyAll]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NA für SyntaxTreeNode: null [java.lang.Object]null { [] - TYPEINFERENCE +Typeinference: Von JRE erstellte Assumptions: this: null +Method Assumptions: +[MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [min](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [max](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [reverseBytes](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [reverse](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [sum](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [toUnsignedLong](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [divideUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String,java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [highestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lowestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [remainderUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateLeft](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateRight](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toBinaryString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toOctalString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.String [valueOf]([C [C), MethodAssumption: java.lang.String [valueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Character* [charAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareToIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [concat](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [contains](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.StringBuffer java.lang.StringBuffer), MethodAssumption: java.lang.String [copyValueOf]([C [C), MethodAssumption: java.lang.String [copyValueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [endsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equalsIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [format](java.util.Locale java.util.Locale,java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: java.lang.String [format](java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: void [getBytes](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[B [B,java.lang.Integer* java.lang.Integer), MethodAssumption: [B [getBytes](java.nio.charset.Charset java.nio.charset.Charset), MethodAssumption: [B [getBytes](java.lang.String java.lang.String), MethodAssumption: [B [getBytes](), MethodAssumption: void [getChars](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [intern](), MethodAssumption: java.lang.Boolean* [isEmpty](), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,[Ljava.lang.CharSequence; [Ljava.lang.CharSequence;), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,java.lang.Iterable java.lang.Iterable), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [length](), MethodAssumption: java.lang.Boolean* [matches](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Boolean* java.lang.Boolean,java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [replace](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [replace](java.lang.CharSequence java.lang.CharSequence,java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.String [replaceAll](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: java.lang.String [replaceFirst](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.CharSequence [subSequence](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toCharArray](), MethodAssumption: java.lang.String [toLowerCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [toLowerCase](), MethodAssumption: java.lang.String [toUpperCase](), MethodAssumption: java.lang.String [toUpperCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [trim](), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [reverseBytes](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Character java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Character* [charValue](), MethodAssumption: java.lang.Character [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [getName](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [charCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [highSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isBmpCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isValidCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [lowSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toChars](java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toChars](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isHighSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLowSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [digit](java.lang.Character* java.lang.Character,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [digit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [forDigit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isAlphabetic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isIdeographic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSupplementaryCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSurrogatePair](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toCodePoint](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [toTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Boolean java.lang.Boolean), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Boolean* [getBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [booleanValue](), MethodAssumption: java.lang.Boolean [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compare](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalAnd](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalOr](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalXor](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [parseBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [min](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [max](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToRawLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [longBitsToDouble](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Double java.lang.Double), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Double [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Double [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toHexString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Integer* [compare](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Double* [sum](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [parseDouble](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [min](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [max](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToRawIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [intBitsToFloat](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Float java.lang.Float), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Float [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [compare](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [parseFloat](java.lang.String java.lang.String), MethodAssumption: java.lang.Float* [sum](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [min](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [max](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [reverseBytes](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String,java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Long [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compare](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [reverse](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [sum](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [divideUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [highestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [lowestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [remainderUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [rotateLeft](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [rotateRight](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toBinaryString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toOctalString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](), MethodAssumption: void [wait](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Class [getClass](), MethodAssumption: void [notify](), MethodAssumption: void [notifyAll]()] +FieldVar Assumptions: +[FieldAssumption: int MIN_VALUE, FieldAssumption: int MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.util.Comparator CASE_INSENSITIVE_ORDER, FieldAssumption: int MIN_RADIX, FieldAssumption: int MAX_RADIX, FieldAssumption: char MIN_VALUE, FieldAssumption: char MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: byte UNASSIGNED, FieldAssumption: byte UPPERCASE_LETTER, FieldAssumption: byte LOWERCASE_LETTER, FieldAssumption: byte TITLECASE_LETTER, FieldAssumption: byte MODIFIER_LETTER, FieldAssumption: byte OTHER_LETTER, FieldAssumption: byte NON_SPACING_MARK, FieldAssumption: byte ENCLOSING_MARK, FieldAssumption: byte COMBINING_SPACING_MARK, FieldAssumption: byte DECIMAL_DIGIT_NUMBER, FieldAssumption: byte LETTER_NUMBER, FieldAssumption: byte OTHER_NUMBER, FieldAssumption: byte SPACE_SEPARATOR, FieldAssumption: byte LINE_SEPARATOR, FieldAssumption: byte PARAGRAPH_SEPARATOR, FieldAssumption: byte CONTROL, FieldAssumption: byte FORMAT, FieldAssumption: byte PRIVATE_USE, FieldAssumption: byte SURROGATE, FieldAssumption: byte DASH_PUNCTUATION, FieldAssumption: byte START_PUNCTUATION, FieldAssumption: byte END_PUNCTUATION, FieldAssumption: byte CONNECTOR_PUNCTUATION, FieldAssumption: byte OTHER_PUNCTUATION, FieldAssumption: byte MATH_SYMBOL, FieldAssumption: byte CURRENCY_SYMBOL, FieldAssumption: byte MODIFIER_SYMBOL, FieldAssumption: byte OTHER_SYMBOL, FieldAssumption: byte INITIAL_QUOTE_PUNCTUATION, FieldAssumption: byte FINAL_QUOTE_PUNCTUATION, FieldAssumption: byte DIRECTIONALITY_UNDEFINED, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR, FieldAssumption: byte DIRECTIONALITY_ARABIC_NUMBER, FieldAssumption: byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_NONSPACING_MARK, FieldAssumption: byte DIRECTIONALITY_BOUNDARY_NEUTRAL, FieldAssumption: byte DIRECTIONALITY_PARAGRAPH_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_SEGMENT_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_WHITESPACE, FieldAssumption: byte DIRECTIONALITY_OTHER_NEUTRALS, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT, FieldAssumption: char MIN_HIGH_SURROGATE, FieldAssumption: char MAX_HIGH_SURROGATE, FieldAssumption: char MIN_LOW_SURROGATE, FieldAssumption: char MAX_LOW_SURROGATE, FieldAssumption: char MIN_SURROGATE, FieldAssumption: char MAX_SURROGATE, FieldAssumption: int MIN_SUPPLEMENTARY_CODE_POINT, FieldAssumption: int MIN_CODE_POINT, FieldAssumption: int MAX_CODE_POINT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Boolean TRUE, FieldAssumption: java.lang.Boolean FALSE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: double POSITIVE_INFINITY, FieldAssumption: double NEGATIVE_INFINITY, FieldAssumption: double NaN, FieldAssumption: double MAX_VALUE, FieldAssumption: double MIN_NORMAL, FieldAssumption: double MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: float POSITIVE_INFINITY, FieldAssumption: float NEGATIVE_INFINITY, FieldAssumption: float NaN, FieldAssumption: float MAX_VALUE, FieldAssumption: float MIN_NORMAL, FieldAssumption: float MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: long MIN_VALUE, FieldAssumption: long MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES] +LocalVar Assumptions: +[] +Parameter Assumptions: +[] +Generic Var Assumptions: +[] +Konstruktor Assumptions: +[ConstructorAssumption: java.lang.Integer(int p0), ConstructorAssumption: java.lang.Integer(java.lang.String p0), ConstructorAssumption: java.lang.String([B p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,java.nio.charset.Charset p1), ConstructorAssumption: java.lang.String([B p0,java.lang.String p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.nio.charset.Charset p3), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.lang.String p3), ConstructorAssumption: java.lang.String(java.lang.StringBuilder p0), ConstructorAssumption: java.lang.String(java.lang.StringBuffer p0), ConstructorAssumption: java.lang.String([B p0), ConstructorAssumption: java.lang.String([I p0,int p1,int p2), ConstructorAssumption: java.lang.String(), ConstructorAssumption: java.lang.String([C p0), ConstructorAssumption: java.lang.String(java.lang.String p0), ConstructorAssumption: java.lang.String([C p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,int p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,int p3), ConstructorAssumption: java.lang.Character(char p0), ConstructorAssumption: java.lang.Boolean(boolean p0), ConstructorAssumption: java.lang.Boolean(java.lang.String p0), ConstructorAssumption: java.lang.Double(double p0), ConstructorAssumption: java.lang.Double(java.lang.String p0), ConstructorAssumption: java.lang.Float(java.lang.String p0), ConstructorAssumption: java.lang.Float(double p0), ConstructorAssumption: java.lang.Float(float p0), ConstructorAssumption: java.lang.Long(long p0), ConstructorAssumption: java.lang.Long(java.lang.String p0), ConstructorAssumption: java.lang.Object()] +Class Assumptions: +[java.lang.Object, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, java.lang.Object] + - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NB für SyntaxTreeNode: null [numberOfLeadingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NC für SyntaxTreeNode: null [numberOfTrailingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ND für SyntaxTreeNode: null [bitCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NE für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NF für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NG für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NH für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NI für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NJ für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NK für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NL für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NM für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NN für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NO für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NP für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NQ für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NR für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NS für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NT für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NU für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NV für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NW für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NX für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NY für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH NZ für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OA für SyntaxTreeNode: null [decode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OB für SyntaxTreeNode: null [reverse]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OC für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OD für SyntaxTreeNode: null [parseInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OE für SyntaxTreeNode: null [parseInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OF für SyntaxTreeNode: null [toUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OG für SyntaxTreeNode: null [compareUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OH für SyntaxTreeNode: null [divideUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OI für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OJ für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OK für SyntaxTreeNode: null [getInteger]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OL für SyntaxTreeNode: null [highestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OM für SyntaxTreeNode: null [lowestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ON für SyntaxTreeNode: null [parseUnsignedInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OO für SyntaxTreeNode: null [parseUnsignedInt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OP für SyntaxTreeNode: null [remainderUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OQ für SyntaxTreeNode: null [rotateLeft]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OR für SyntaxTreeNode: null [rotateRight]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OS für SyntaxTreeNode: null [signum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OT für SyntaxTreeNode: null [toBinaryString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OU für SyntaxTreeNode: null [toOctalString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OV für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OW für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OX für SyntaxTreeNode: null [java.lang.Integer]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OY für SyntaxTreeNode: null [java.lang.Integer]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH OZ für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PA für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PB für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PC für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PD für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PE für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PF für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PG für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PH für SyntaxTreeNode: null [indexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PI für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PJ für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PK für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PL für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PM für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PN für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PO für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PP für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PQ für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PR für SyntaxTreeNode: null [charAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PS für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PT für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PU für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PV für SyntaxTreeNode: null [compareToIgnoreCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PW für SyntaxTreeNode: null [concat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PX für SyntaxTreeNode: null [contains]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PY für SyntaxTreeNode: null [contentEquals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH PZ für SyntaxTreeNode: null [contentEquals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QA für SyntaxTreeNode: null [copyValueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QB für SyntaxTreeNode: null [copyValueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QC für SyntaxTreeNode: null [endsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QD für SyntaxTreeNode: null [equalsIgnoreCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QE für SyntaxTreeNode: null [format]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QF für SyntaxTreeNode: null [format]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QG für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QH für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QI für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QJ für SyntaxTreeNode: null [getBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QK für SyntaxTreeNode: null [getChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QL für SyntaxTreeNode: null [intern]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QM für SyntaxTreeNode: null [isEmpty]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QN für SyntaxTreeNode: null [join]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QO für SyntaxTreeNode: null [join]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QP für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QQ für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QR für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QS für SyntaxTreeNode: null [lastIndexOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QT für SyntaxTreeNode: null [length]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QU für SyntaxTreeNode: null [matches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QV für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QW für SyntaxTreeNode: null [regionMatches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QX für SyntaxTreeNode: null [regionMatches]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QY für SyntaxTreeNode: null [replace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH QZ für SyntaxTreeNode: null [replace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RA für SyntaxTreeNode: null [replaceAll]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RB für SyntaxTreeNode: null [replaceFirst]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RC für SyntaxTreeNode: null [split]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RD für SyntaxTreeNode: null [split]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RE für SyntaxTreeNode: null [startsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RF für SyntaxTreeNode: null [startsWith]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RG für SyntaxTreeNode: null [subSequence]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RH für SyntaxTreeNode: null [substring]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RI für SyntaxTreeNode: null [substring]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RJ für SyntaxTreeNode: null [toCharArray]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RK für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RL für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RM für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RN für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RO für SyntaxTreeNode: null [trim]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RP für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RQ für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RR für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RS für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RT für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RU für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RV für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RW für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RX für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RY für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH RZ für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SA für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SB für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SC für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SD für SyntaxTreeNode: null [java.lang.String]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SE für SyntaxTreeNode: null [isJavaIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SF für SyntaxTreeNode: null [isJavaIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SG für SyntaxTreeNode: null [isJavaIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SH für SyntaxTreeNode: null [isJavaIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SI für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SJ für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SK für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SL für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SM für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SN für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SO für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SP für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SQ für SyntaxTreeNode: null [charValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SR für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SS für SyntaxTreeNode: null [getName]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ST für SyntaxTreeNode: null [charCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SU für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SV für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SW für SyntaxTreeNode: null [codePointAt]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SX für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SY für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH SZ für SyntaxTreeNode: null [codePointBefore]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TA für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TB für SyntaxTreeNode: null [codePointCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TC für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TD für SyntaxTreeNode: null [highSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TE für SyntaxTreeNode: null [isBmpCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TF für SyntaxTreeNode: null [isValidCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TG für SyntaxTreeNode: null [lowSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TH für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TI für SyntaxTreeNode: null [offsetByCodePoints]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TJ für SyntaxTreeNode: null [toChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TK für SyntaxTreeNode: null [toChars]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TL für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TM für SyntaxTreeNode: null [toLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TN für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TO für SyntaxTreeNode: null [toUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TP für SyntaxTreeNode: null [getType]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TQ für SyntaxTreeNode: null [getType]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TR für SyntaxTreeNode: null [isHighSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TS für SyntaxTreeNode: null [isLowSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TT für SyntaxTreeNode: null [isSurrogate]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TU für SyntaxTreeNode: null [digit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TV für SyntaxTreeNode: null [digit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TW für SyntaxTreeNode: null [forDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TX für SyntaxTreeNode: null [getDirectionality]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TY für SyntaxTreeNode: null [getDirectionality]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH TZ für SyntaxTreeNode: null [getNumericValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UA für SyntaxTreeNode: null [getNumericValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UB für SyntaxTreeNode: null [isAlphabetic]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UC für SyntaxTreeNode: null [isDefined]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UD für SyntaxTreeNode: null [isDefined]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UE für SyntaxTreeNode: null [isDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UF für SyntaxTreeNode: null [isDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UG für SyntaxTreeNode: null [isISOControl]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UH für SyntaxTreeNode: null [isISOControl]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UI für SyntaxTreeNode: null [isIdentifierIgnorable]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UJ für SyntaxTreeNode: null [isIdentifierIgnorable]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UK für SyntaxTreeNode: null [isIdeographic]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UL für SyntaxTreeNode: null [isJavaLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UM für SyntaxTreeNode: null [isJavaLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UN für SyntaxTreeNode: null [isLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UO für SyntaxTreeNode: null [isLetter]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UP für SyntaxTreeNode: null [isLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UQ für SyntaxTreeNode: null [isLetterOrDigit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UR für SyntaxTreeNode: null [isLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH US für SyntaxTreeNode: null [isLowerCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UT für SyntaxTreeNode: null [isMirrored]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UU für SyntaxTreeNode: null [isMirrored]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UV für SyntaxTreeNode: null [isSpace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UW für SyntaxTreeNode: null [isSpaceChar]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UX für SyntaxTreeNode: null [isSpaceChar]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UY für SyntaxTreeNode: null [isSupplementaryCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH UZ für SyntaxTreeNode: null [isSurrogatePair]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VA für SyntaxTreeNode: null [isTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VB für SyntaxTreeNode: null [isTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VC für SyntaxTreeNode: null [isUnicodeIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VD für SyntaxTreeNode: null [isUnicodeIdentifierPart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VE für SyntaxTreeNode: null [isUnicodeIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VF für SyntaxTreeNode: null [isUnicodeIdentifierStart]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VG für SyntaxTreeNode: null [isUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VH für SyntaxTreeNode: null [isUpperCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VI für SyntaxTreeNode: null [isWhitespace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VJ für SyntaxTreeNode: null [isWhitespace]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VK für SyntaxTreeNode: null [toCodePoint]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VL für SyntaxTreeNode: null [toTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VM für SyntaxTreeNode: null [toTitleCase]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VN für SyntaxTreeNode: null [java.lang.Character]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VO für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VP für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VQ für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VR für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VS für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VT für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VU für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VV für SyntaxTreeNode: null [getBoolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VW für SyntaxTreeNode: null [booleanValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VX für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VY für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH VZ für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WA für SyntaxTreeNode: null [logicalAnd]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WB für SyntaxTreeNode: null [logicalOr]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WC für SyntaxTreeNode: null [logicalXor]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WD für SyntaxTreeNode: null [parseBoolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WE für SyntaxTreeNode: null [java.lang.Boolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WF für SyntaxTreeNode: null [java.lang.Boolean]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WG für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WH für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WI für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WJ für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WK für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WL für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WM für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WN für SyntaxTreeNode: null [doubleToRawLongBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WO für SyntaxTreeNode: null [doubleToLongBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WP für SyntaxTreeNode: null [longBitsToDouble]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WQ für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WR für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WS für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WT für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WU für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WV für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WW für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WX für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WY für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH WZ für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XA für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XB für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XC für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XD für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XE für SyntaxTreeNode: null [isFinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XF für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XG für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XH für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XI für SyntaxTreeNode: null [parseDouble]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XJ für SyntaxTreeNode: null [java.lang.Double]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XK für SyntaxTreeNode: null [java.lang.Double]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XL für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XM für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XN für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XO für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XP für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XQ für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XR für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XS für SyntaxTreeNode: null [floatToRawIntBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XT für SyntaxTreeNode: null [floatToIntBits]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XU für SyntaxTreeNode: null [intBitsToFloat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XV für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XW für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XX für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XY für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH XZ für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YA für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YB für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YC für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YD für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YE für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YF für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YG für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YH für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YI für SyntaxTreeNode: null [isNaN]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YJ für SyntaxTreeNode: null [isFinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YK für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YL für SyntaxTreeNode: null [isInfinite]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YM für SyntaxTreeNode: null [parseFloat]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YN für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YO für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YP für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YQ für SyntaxTreeNode: null [java.lang.Float]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YR für SyntaxTreeNode: null [numberOfLeadingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YS für SyntaxTreeNode: null [numberOfTrailingZeros]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YT für SyntaxTreeNode: null [bitCount]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YU für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YV für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YW für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YX für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YY für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH YZ für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZA für SyntaxTreeNode: null [min]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZB für SyntaxTreeNode: null [max]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZC für SyntaxTreeNode: null [reverseBytes]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZD für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZE für SyntaxTreeNode: null [compareTo]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZF für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZG für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZH für SyntaxTreeNode: null [getLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZI für SyntaxTreeNode: null [byteValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZJ für SyntaxTreeNode: null [shortValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZK für SyntaxTreeNode: null [intValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZL für SyntaxTreeNode: null [longValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZM für SyntaxTreeNode: null [floatValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZN für SyntaxTreeNode: null [doubleValue]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZO für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZP für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZQ für SyntaxTreeNode: null [valueOf]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZR für SyntaxTreeNode: null [toHexString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZS für SyntaxTreeNode: null [compare]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZT für SyntaxTreeNode: null [decode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZU für SyntaxTreeNode: null [reverse]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZV für SyntaxTreeNode: null [sum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZW für SyntaxTreeNode: null [compareUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZX für SyntaxTreeNode: null [divideUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZY für SyntaxTreeNode: null [highestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ZZ für SyntaxTreeNode: null [lowestOneBit]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAA für SyntaxTreeNode: null [parseLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAB für SyntaxTreeNode: null [parseLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAC für SyntaxTreeNode: null [remainderUnsigned]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAD für SyntaxTreeNode: null [rotateLeft]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAE für SyntaxTreeNode: null [rotateRight]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAF für SyntaxTreeNode: null [signum]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAG für SyntaxTreeNode: null [toBinaryString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAH für SyntaxTreeNode: null [toOctalString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAI für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAJ für SyntaxTreeNode: null [toUnsignedString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAK für SyntaxTreeNode: null [parseUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAL für SyntaxTreeNode: null [parseUnsignedLong]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAM für SyntaxTreeNode: null [java.lang.Long]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAN für SyntaxTreeNode: null [java.lang.Long]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAO für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAP für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAQ für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAR für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAS für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAT für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAU für SyntaxTreeNode: null [getClass]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAV für SyntaxTreeNode: null [notify]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAW für SyntaxTreeNode: null [notifyAll]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAX für SyntaxTreeNode: null [java.lang.Object]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAY für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH AAZ für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABA für SyntaxTreeNode: null [wait]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABB für SyntaxTreeNode: null [equals]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABC für SyntaxTreeNode: null [toString]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABD für SyntaxTreeNode: null [hashCode]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABE für SyntaxTreeNode: null [getClass]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABF für SyntaxTreeNode: null [notify]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABG für SyntaxTreeNode: null [notifyAll]null { [] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABH für SyntaxTreeNode: null [java.lang.Object]null { [] - TYPEINFERENCE +inference: Verarbeite Test - TYPEINFERENCE +inference: Verarbeite Klasse1 - TYPEINFERENCE +inference: Verarbeite Klasse2 - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge FC = { +(java.lang.Integer <. java.lang.Number)Smaller, + +(java.lang.Double <. java.lang.Number)Smaller, + +(java.lang.Float <. java.lang.Number)Smaller, + +(java.lang.Long <. java.lang.Number)Smaller, + +(Test <. java.lang.Object)Smaller, + +(Klasse1 <. java.lang.Object)Smaller, + +(Klasse2 <. java.lang.Object)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +inference: nSubstStelleStart0 0 - FINITECLOSURE +inference: nSubstStelleStart0 1 - FINITECLOSURE +inference: nSubstStelleStart0 2 - FINITECLOSURE +inference: nSubstStelleStart0 3 - FINITECLOSURE +inference: nSubstStelleStart0 4 - FINITECLOSURE +inference: nSubstStelleStart0 5 - FINITECLOSURE +inference: nSubstStelleStart0 6 - FINITECLOSURE +Typeinference: FiniteClosure: +FC: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +TTO: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +CLASSVEC: [Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, Test, Klasse1, Klasse2] - TYPEINFERENCE +inference: Rufe TRStart()... - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte FiniteClosure: FC: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +TTO: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +CLASSVEC: [Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, Test, Klasse1, Klasse2] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Assumptions: this: Test +Method Assumptions: +[MethodAssumption: GTV R [apply](), MethodAssumption: GTV R [apply](GTV T1 T1), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4,GTV T5 T5), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [min](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [max](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [reverseBytes](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [reverse](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [sum](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [toUnsignedLong](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [divideUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String,java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [highestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lowestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [remainderUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateLeft](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateRight](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toBinaryString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toOctalString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.String [valueOf]([C [C), MethodAssumption: java.lang.String [valueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Character* [charAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareToIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [concat](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [contains](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.StringBuffer java.lang.StringBuffer), MethodAssumption: java.lang.String [copyValueOf]([C [C), MethodAssumption: java.lang.String [copyValueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [endsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equalsIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [format](java.util.Locale java.util.Locale,java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: java.lang.String [format](java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: void [getBytes](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[B [B,java.lang.Integer* java.lang.Integer), MethodAssumption: [B [getBytes](java.nio.charset.Charset java.nio.charset.Charset), MethodAssumption: [B [getBytes](java.lang.String java.lang.String), MethodAssumption: [B [getBytes](), MethodAssumption: void [getChars](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [intern](), MethodAssumption: java.lang.Boolean* [isEmpty](), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,[Ljava.lang.CharSequence; [Ljava.lang.CharSequence;), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,java.lang.Iterable java.lang.Iterable), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [length](), MethodAssumption: java.lang.Boolean* [matches](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Boolean* java.lang.Boolean,java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [replace](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [replace](java.lang.CharSequence java.lang.CharSequence,java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.String [replaceAll](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: java.lang.String [replaceFirst](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.CharSequence [subSequence](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toCharArray](), MethodAssumption: java.lang.String [toLowerCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [toLowerCase](), MethodAssumption: java.lang.String [toUpperCase](), MethodAssumption: java.lang.String [toUpperCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [trim](), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [reverseBytes](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Character java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Character* [charValue](), MethodAssumption: java.lang.Character [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [getName](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [charCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [highSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isBmpCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isValidCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [lowSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toChars](java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toChars](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isHighSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLowSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [digit](java.lang.Character* java.lang.Character,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [digit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [forDigit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isAlphabetic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isIdeographic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSupplementaryCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSurrogatePair](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toCodePoint](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [toTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Boolean java.lang.Boolean), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Boolean* [getBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [booleanValue](), MethodAssumption: java.lang.Boolean [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compare](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalAnd](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalOr](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalXor](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [parseBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [min](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [max](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToRawLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [longBitsToDouble](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Double java.lang.Double), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Double [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Double [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toHexString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Integer* [compare](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Double* [sum](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [parseDouble](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [min](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [max](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToRawIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [intBitsToFloat](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Float java.lang.Float), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Float [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [compare](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [parseFloat](java.lang.String java.lang.String), MethodAssumption: java.lang.Float* [sum](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [min](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [max](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [reverseBytes](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String,java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Long [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compare](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [reverse](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [sum](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [divideUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [highestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [lowestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [remainderUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [rotateLeft](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [rotateRight](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toBinaryString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toOctalString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](), MethodAssumption: void [wait](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Class [getClass](), MethodAssumption: void [notify](), MethodAssumption: void [notifyAll]()] +FieldVar Assumptions: +[FieldAssumption: int MIN_VALUE, FieldAssumption: int MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.util.Comparator CASE_INSENSITIVE_ORDER, FieldAssumption: int MIN_RADIX, FieldAssumption: int MAX_RADIX, FieldAssumption: char MIN_VALUE, FieldAssumption: char MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: byte UNASSIGNED, FieldAssumption: byte UPPERCASE_LETTER, FieldAssumption: byte LOWERCASE_LETTER, FieldAssumption: byte TITLECASE_LETTER, FieldAssumption: byte MODIFIER_LETTER, FieldAssumption: byte OTHER_LETTER, FieldAssumption: byte NON_SPACING_MARK, FieldAssumption: byte ENCLOSING_MARK, FieldAssumption: byte COMBINING_SPACING_MARK, FieldAssumption: byte DECIMAL_DIGIT_NUMBER, FieldAssumption: byte LETTER_NUMBER, FieldAssumption: byte OTHER_NUMBER, FieldAssumption: byte SPACE_SEPARATOR, FieldAssumption: byte LINE_SEPARATOR, FieldAssumption: byte PARAGRAPH_SEPARATOR, FieldAssumption: byte CONTROL, FieldAssumption: byte FORMAT, FieldAssumption: byte PRIVATE_USE, FieldAssumption: byte SURROGATE, FieldAssumption: byte DASH_PUNCTUATION, FieldAssumption: byte START_PUNCTUATION, FieldAssumption: byte END_PUNCTUATION, FieldAssumption: byte CONNECTOR_PUNCTUATION, FieldAssumption: byte OTHER_PUNCTUATION, FieldAssumption: byte MATH_SYMBOL, FieldAssumption: byte CURRENCY_SYMBOL, FieldAssumption: byte MODIFIER_SYMBOL, FieldAssumption: byte OTHER_SYMBOL, FieldAssumption: byte INITIAL_QUOTE_PUNCTUATION, FieldAssumption: byte FINAL_QUOTE_PUNCTUATION, FieldAssumption: byte DIRECTIONALITY_UNDEFINED, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR, FieldAssumption: byte DIRECTIONALITY_ARABIC_NUMBER, FieldAssumption: byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_NONSPACING_MARK, FieldAssumption: byte DIRECTIONALITY_BOUNDARY_NEUTRAL, FieldAssumption: byte DIRECTIONALITY_PARAGRAPH_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_SEGMENT_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_WHITESPACE, FieldAssumption: byte DIRECTIONALITY_OTHER_NEUTRALS, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT, FieldAssumption: char MIN_HIGH_SURROGATE, FieldAssumption: char MAX_HIGH_SURROGATE, FieldAssumption: char MIN_LOW_SURROGATE, FieldAssumption: char MAX_LOW_SURROGATE, FieldAssumption: char MIN_SURROGATE, FieldAssumption: char MAX_SURROGATE, FieldAssumption: int MIN_SUPPLEMENTARY_CODE_POINT, FieldAssumption: int MIN_CODE_POINT, FieldAssumption: int MAX_CODE_POINT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Boolean TRUE, FieldAssumption: java.lang.Boolean FALSE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: double POSITIVE_INFINITY, FieldAssumption: double NEGATIVE_INFINITY, FieldAssumption: double NaN, FieldAssumption: double MAX_VALUE, FieldAssumption: double MIN_NORMAL, FieldAssumption: double MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: float POSITIVE_INFINITY, FieldAssumption: float NEGATIVE_INFINITY, FieldAssumption: float NaN, FieldAssumption: float MAX_VALUE, FieldAssumption: float MIN_NORMAL, FieldAssumption: float MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: long MIN_VALUE, FieldAssumption: long MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES] +LocalVar Assumptions: +[] +Parameter Assumptions: +[] +Generic Var Assumptions: +[R::GTV R, R::GTV R, T1::GTV T1, R::GTV R, T1::GTV T1, T2::GTV T2, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, T5::GTV T5] +Konstruktor Assumptions: +[ConstructorAssumption: Test(), ConstructorAssumption: Klasse1(), ConstructorAssumption: Klasse2(), ConstructorAssumption: java.lang.Integer(int p0), ConstructorAssumption: java.lang.Integer(java.lang.String p0), ConstructorAssumption: java.lang.String([B p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,java.nio.charset.Charset p1), ConstructorAssumption: java.lang.String([B p0,java.lang.String p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.nio.charset.Charset p3), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.lang.String p3), ConstructorAssumption: java.lang.String(java.lang.StringBuilder p0), ConstructorAssumption: java.lang.String(java.lang.StringBuffer p0), ConstructorAssumption: java.lang.String([B p0), ConstructorAssumption: java.lang.String([I p0,int p1,int p2), ConstructorAssumption: java.lang.String(), ConstructorAssumption: java.lang.String([C p0), ConstructorAssumption: java.lang.String(java.lang.String p0), ConstructorAssumption: java.lang.String([C p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,int p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,int p3), ConstructorAssumption: java.lang.Character(char p0), ConstructorAssumption: java.lang.Boolean(boolean p0), ConstructorAssumption: java.lang.Boolean(java.lang.String p0), ConstructorAssumption: java.lang.Double(double p0), ConstructorAssumption: java.lang.Double(java.lang.String p0), ConstructorAssumption: java.lang.Float(java.lang.String p0), ConstructorAssumption: java.lang.Float(double p0), ConstructorAssumption: java.lang.Float(float p0), ConstructorAssumption: java.lang.Long(long p0), ConstructorAssumption: java.lang.Long(java.lang.String p0), ConstructorAssumption: java.lang.Object()] +Class Assumptions: +[Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Object, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, java.lang.Object] + - TYPEINFERENCE +Typeinference: Prozessing statement: TPH B [var] - TYPEINFERENCE +Typeinference: Prozessing statement: null (var.methode( [ ])) - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABI für SyntaxTreeNode: null (var.methode( [ ])) - TYPEINFERENCE +Typeinference: Prozessing statement: null (var.methode( [ ])) - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.type.TypePlaceholder: Erstelle TPH ABJ für SyntaxTreeNode: null (var.methode( [ ])) - TYPEINFERENCE +Typeinference: Prozessing statement: void (var: TPH B.methode( [ ])) - TYPEINFERENCE +Typeinference: Prozessing statement: void (var: TPH B.methode( [ ])) - TYPEINFERENCE +Typeinference: Prozessing statement: TPH B [var] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Constraints: [de.dhbwstuttgart.typeinference.SingleConstraint@7106e68e +[[ +(void <. TPH ABI), +(TPH B <. Test), ] | +[ +(void <. TPH ABI), +(TPH B <. Klasse1), ] | +[ +(void <. TPH ABI), +(TPH B <. Klasse2), ] | +] +[[ +(void <. TPH ABJ), +(TPH B <. Test), ] | +[ +(void <. TPH ABJ), +(TPH B <. Klasse1), ] | +[ +(void <. TPH ABJ), +(TPH B <. Klasse2), ] | +] +de.dhbwstuttgart.typeinference.SingleConstraint@7eda2dbb +de.dhbwstuttgart.typeinference.SingleConstraint@6576fe71 +] - TYPEINFERENCE +inference: Rufe TRStart()... - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte FiniteClosure: FC: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +TTO: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +CLASSVEC: [Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, Test, Klasse1, Klasse2] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Assumptions: this: Klasse1 +Method Assumptions: +[MethodAssumption: GTV R [apply](), MethodAssumption: GTV R [apply](GTV T1 T1), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4,GTV T5 T5), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [min](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [max](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [reverseBytes](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [reverse](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [sum](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [toUnsignedLong](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [divideUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String,java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [highestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lowestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [remainderUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateLeft](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateRight](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toBinaryString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toOctalString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.String [valueOf]([C [C), MethodAssumption: java.lang.String [valueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Character* [charAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareToIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [concat](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [contains](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.StringBuffer java.lang.StringBuffer), MethodAssumption: java.lang.String [copyValueOf]([C [C), MethodAssumption: java.lang.String [copyValueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [endsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equalsIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [format](java.util.Locale java.util.Locale,java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: java.lang.String [format](java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: void [getBytes](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[B [B,java.lang.Integer* java.lang.Integer), MethodAssumption: [B [getBytes](java.nio.charset.Charset java.nio.charset.Charset), MethodAssumption: [B [getBytes](java.lang.String java.lang.String), MethodAssumption: [B [getBytes](), MethodAssumption: void [getChars](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [intern](), MethodAssumption: java.lang.Boolean* [isEmpty](), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,[Ljava.lang.CharSequence; [Ljava.lang.CharSequence;), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,java.lang.Iterable java.lang.Iterable), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [length](), MethodAssumption: java.lang.Boolean* [matches](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Boolean* java.lang.Boolean,java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [replace](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [replace](java.lang.CharSequence java.lang.CharSequence,java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.String [replaceAll](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: java.lang.String [replaceFirst](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.CharSequence [subSequence](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toCharArray](), MethodAssumption: java.lang.String [toLowerCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [toLowerCase](), MethodAssumption: java.lang.String [toUpperCase](), MethodAssumption: java.lang.String [toUpperCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [trim](), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [reverseBytes](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Character java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Character* [charValue](), MethodAssumption: java.lang.Character [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [getName](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [charCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [highSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isBmpCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isValidCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [lowSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toChars](java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toChars](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isHighSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLowSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [digit](java.lang.Character* java.lang.Character,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [digit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [forDigit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isAlphabetic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isIdeographic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSupplementaryCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSurrogatePair](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toCodePoint](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [toTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Boolean java.lang.Boolean), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Boolean* [getBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [booleanValue](), MethodAssumption: java.lang.Boolean [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compare](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalAnd](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalOr](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalXor](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [parseBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [min](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [max](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToRawLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [longBitsToDouble](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Double java.lang.Double), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Double [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Double [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toHexString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Integer* [compare](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Double* [sum](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [parseDouble](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [min](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [max](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToRawIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [intBitsToFloat](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Float java.lang.Float), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Float [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [compare](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [parseFloat](java.lang.String java.lang.String), MethodAssumption: java.lang.Float* [sum](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [min](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [max](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [reverseBytes](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String,java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Long [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compare](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [reverse](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [sum](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [divideUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [highestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [lowestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [remainderUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [rotateLeft](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [rotateRight](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toBinaryString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toOctalString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](), MethodAssumption: void [wait](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Class [getClass](), MethodAssumption: void [notify](), MethodAssumption: void [notifyAll]()] +FieldVar Assumptions: +[FieldAssumption: int MIN_VALUE, FieldAssumption: int MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.util.Comparator CASE_INSENSITIVE_ORDER, FieldAssumption: int MIN_RADIX, FieldAssumption: int MAX_RADIX, FieldAssumption: char MIN_VALUE, FieldAssumption: char MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: byte UNASSIGNED, FieldAssumption: byte UPPERCASE_LETTER, FieldAssumption: byte LOWERCASE_LETTER, FieldAssumption: byte TITLECASE_LETTER, FieldAssumption: byte MODIFIER_LETTER, FieldAssumption: byte OTHER_LETTER, FieldAssumption: byte NON_SPACING_MARK, FieldAssumption: byte ENCLOSING_MARK, FieldAssumption: byte COMBINING_SPACING_MARK, FieldAssumption: byte DECIMAL_DIGIT_NUMBER, FieldAssumption: byte LETTER_NUMBER, FieldAssumption: byte OTHER_NUMBER, FieldAssumption: byte SPACE_SEPARATOR, FieldAssumption: byte LINE_SEPARATOR, FieldAssumption: byte PARAGRAPH_SEPARATOR, FieldAssumption: byte CONTROL, FieldAssumption: byte FORMAT, FieldAssumption: byte PRIVATE_USE, FieldAssumption: byte SURROGATE, FieldAssumption: byte DASH_PUNCTUATION, FieldAssumption: byte START_PUNCTUATION, FieldAssumption: byte END_PUNCTUATION, FieldAssumption: byte CONNECTOR_PUNCTUATION, FieldAssumption: byte OTHER_PUNCTUATION, FieldAssumption: byte MATH_SYMBOL, FieldAssumption: byte CURRENCY_SYMBOL, FieldAssumption: byte MODIFIER_SYMBOL, FieldAssumption: byte OTHER_SYMBOL, FieldAssumption: byte INITIAL_QUOTE_PUNCTUATION, FieldAssumption: byte FINAL_QUOTE_PUNCTUATION, FieldAssumption: byte DIRECTIONALITY_UNDEFINED, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR, FieldAssumption: byte DIRECTIONALITY_ARABIC_NUMBER, FieldAssumption: byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_NONSPACING_MARK, FieldAssumption: byte DIRECTIONALITY_BOUNDARY_NEUTRAL, FieldAssumption: byte DIRECTIONALITY_PARAGRAPH_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_SEGMENT_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_WHITESPACE, FieldAssumption: byte DIRECTIONALITY_OTHER_NEUTRALS, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT, FieldAssumption: char MIN_HIGH_SURROGATE, FieldAssumption: char MAX_HIGH_SURROGATE, FieldAssumption: char MIN_LOW_SURROGATE, FieldAssumption: char MAX_LOW_SURROGATE, FieldAssumption: char MIN_SURROGATE, FieldAssumption: char MAX_SURROGATE, FieldAssumption: int MIN_SUPPLEMENTARY_CODE_POINT, FieldAssumption: int MIN_CODE_POINT, FieldAssumption: int MAX_CODE_POINT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Boolean TRUE, FieldAssumption: java.lang.Boolean FALSE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: double POSITIVE_INFINITY, FieldAssumption: double NEGATIVE_INFINITY, FieldAssumption: double NaN, FieldAssumption: double MAX_VALUE, FieldAssumption: double MIN_NORMAL, FieldAssumption: double MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: float POSITIVE_INFINITY, FieldAssumption: float NEGATIVE_INFINITY, FieldAssumption: float NaN, FieldAssumption: float MAX_VALUE, FieldAssumption: float MIN_NORMAL, FieldAssumption: float MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: long MIN_VALUE, FieldAssumption: long MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES] +LocalVar Assumptions: +[] +Parameter Assumptions: +[] +Generic Var Assumptions: +[R::GTV R, R::GTV R, T1::GTV T1, R::GTV R, T1::GTV T1, T2::GTV T2, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, T5::GTV T5] +Konstruktor Assumptions: +[ConstructorAssumption: Test(), ConstructorAssumption: Klasse1(), ConstructorAssumption: Klasse2(), ConstructorAssumption: java.lang.Integer(int p0), ConstructorAssumption: java.lang.Integer(java.lang.String p0), ConstructorAssumption: java.lang.String([B p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,java.nio.charset.Charset p1), ConstructorAssumption: java.lang.String([B p0,java.lang.String p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.nio.charset.Charset p3), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.lang.String p3), ConstructorAssumption: java.lang.String(java.lang.StringBuilder p0), ConstructorAssumption: java.lang.String(java.lang.StringBuffer p0), ConstructorAssumption: java.lang.String([B p0), ConstructorAssumption: java.lang.String([I p0,int p1,int p2), ConstructorAssumption: java.lang.String(), ConstructorAssumption: java.lang.String([C p0), ConstructorAssumption: java.lang.String(java.lang.String p0), ConstructorAssumption: java.lang.String([C p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,int p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,int p3), ConstructorAssumption: java.lang.Character(char p0), ConstructorAssumption: java.lang.Boolean(boolean p0), ConstructorAssumption: java.lang.Boolean(java.lang.String p0), ConstructorAssumption: java.lang.Double(double p0), ConstructorAssumption: java.lang.Double(java.lang.String p0), ConstructorAssumption: java.lang.Float(java.lang.String p0), ConstructorAssumption: java.lang.Float(double p0), ConstructorAssumption: java.lang.Float(float p0), ConstructorAssumption: java.lang.Long(long p0), ConstructorAssumption: java.lang.Long(java.lang.String p0), ConstructorAssumption: java.lang.Object()] +Class Assumptions: +[Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Object, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, java.lang.Object] + - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Constraints: [de.dhbwstuttgart.typeinference.SingleConstraint@76fb509a +de.dhbwstuttgart.typeinference.SingleConstraint@300ffa5d +] - TYPEINFERENCE +inference: Rufe TRStart()... - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte FiniteClosure: FC: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +TTO: [ +(java.lang.Integer <. java.lang.Number), +(java.lang.Double <. java.lang.Number), +(java.lang.Float <. java.lang.Number), +(java.lang.Long <. java.lang.Number), +(Test <. java.lang.Object), +(Klasse1 <. java.lang.Object), +(Klasse2 <. java.lang.Object)] +CLASSVEC: [Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, Test, Klasse1, Klasse2] - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Assumptions: this: Klasse2 +Method Assumptions: +[MethodAssumption: GTV R [apply](), MethodAssumption: GTV R [apply](GTV T1 T1), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4), MethodAssumption: GTV R [apply](GTV T1 T1,GTV T2 T2,GTV T3 T3,GTV T4 T4,GTV T5 T5), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: void [methode](), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [min](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [max](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [reverseBytes](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [reverse](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [sum](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [toUnsignedLong](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [divideUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String,java.lang.Integer java.lang.Integer), MethodAssumption: java.lang.Integer [getInteger](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [highestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lowestOneBit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [parseUnsignedInt](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [remainderUnsigned](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateLeft](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [rotateRight](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toBinaryString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toOctalString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [indexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.String [valueOf]([C [C), MethodAssumption: java.lang.String [valueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [valueOf](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Character* [charAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareToIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [concat](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [contains](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.Boolean* [contentEquals](java.lang.StringBuffer java.lang.StringBuffer), MethodAssumption: java.lang.String [copyValueOf]([C [C), MethodAssumption: java.lang.String [copyValueOf]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [endsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equalsIgnoreCase](java.lang.String java.lang.String), MethodAssumption: java.lang.String [format](java.util.Locale java.util.Locale,java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: java.lang.String [format](java.lang.String java.lang.String,[Ljava.lang.Object; [Ljava.lang.Object;), MethodAssumption: void [getBytes](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[B [B,java.lang.Integer* java.lang.Integer), MethodAssumption: [B [getBytes](java.nio.charset.Charset java.nio.charset.Charset), MethodAssumption: [B [getBytes](java.lang.String java.lang.String), MethodAssumption: [B [getBytes](), MethodAssumption: void [getChars](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [intern](), MethodAssumption: java.lang.Boolean* [isEmpty](), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,[Ljava.lang.CharSequence; [Ljava.lang.CharSequence;), MethodAssumption: java.lang.String [join](java.lang.CharSequence java.lang.CharSequence,java.lang.Iterable java.lang.Iterable), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [lastIndexOf](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [length](), MethodAssumption: java.lang.Boolean* [matches](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [regionMatches](java.lang.Boolean* java.lang.Boolean,java.lang.Integer* java.lang.Integer,java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [replace](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [replace](java.lang.CharSequence java.lang.CharSequence,java.lang.CharSequence java.lang.CharSequence), MethodAssumption: java.lang.String [replaceAll](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: java.lang.String [replaceFirst](java.lang.String java.lang.String,java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String), MethodAssumption: [Ljava.lang.String; [split](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [startsWith](java.lang.String java.lang.String), MethodAssumption: java.lang.CharSequence [subSequence](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [substring](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toCharArray](), MethodAssumption: java.lang.String [toLowerCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [toLowerCase](), MethodAssumption: java.lang.String [toUpperCase](), MethodAssumption: java.lang.String [toUpperCase](java.util.Locale java.util.Locale), MethodAssumption: java.lang.String [trim](), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [reverseBytes](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Character java.lang.Character), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Character* [charValue](), MethodAssumption: java.lang.Character [valueOf](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.String [getName](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [charCount](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointAt]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointBefore]([C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [codePointCount]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compare](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [highSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isBmpCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isValidCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [lowSurrogate](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints](java.lang.CharSequence java.lang.CharSequence,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [offsetByCodePoints]([C [C,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toChars](java.lang.Integer* java.lang.Integer,[C [C,java.lang.Integer* java.lang.Integer), MethodAssumption: [C [toChars](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [toUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getType](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isHighSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLowSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSurrogate](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [digit](java.lang.Character* java.lang.Character,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [digit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Character* [forDigit](java.lang.Integer* java.lang.Integer,java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Integer* java.lang.Integer), MethodAssumption: byte [getDirectionality](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [getNumericValue](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isAlphabetic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isDefined](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isISOControl](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isIdentifierIgnorable](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isIdeographic](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isJavaLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isJavaLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLetter](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isLetterOrDigit](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isLowerCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isMirrored](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSpaceChar](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isSupplementaryCodePoint](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isSurrogatePair](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierPart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isUnicodeIdentifierStart](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isUpperCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Boolean* [isWhitespace](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [toCodePoint](java.lang.Character* java.lang.Character,java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Character* [toTitleCase](java.lang.Character* java.lang.Character), MethodAssumption: java.lang.Integer* [toTitleCase](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Boolean java.lang.Boolean), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Boolean* [getBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [booleanValue](), MethodAssumption: java.lang.Boolean [valueOf](java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Integer* [compare](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalAnd](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalOr](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [logicalXor](java.lang.Boolean* java.lang.Boolean,java.lang.Boolean* java.lang.Boolean), MethodAssumption: java.lang.Boolean* [parseBoolean](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [min](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [max](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToRawLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Long* [doubleToLongBits](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [longBitsToDouble](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Double java.lang.Double), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Double [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.Double [valueOf](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.String [toHexString](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Integer* [compare](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Double* [sum](java.lang.Double* java.lang.Double,java.lang.Double* java.lang.Double), MethodAssumption: java.lang.Double* [parseDouble](java.lang.String java.lang.String), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [min](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [max](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToRawIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [floatToIntBits](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [intBitsToFloat](java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Float java.lang.Float), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Float [valueOf](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [compare](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isNaN](), MethodAssumption: java.lang.Boolean* [isFinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Boolean* [isInfinite](), MethodAssumption: java.lang.Boolean* [isInfinite](java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Float* [parseFloat](java.lang.String java.lang.String), MethodAssumption: java.lang.Float* [sum](java.lang.Float* java.lang.Float,java.lang.Float* java.lang.Float), MethodAssumption: java.lang.Integer* [numberOfLeadingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [numberOfTrailingZeros](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [bitCount](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.String [toString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Integer* [hashCode](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [min](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [max](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [reverseBytes](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Object java.lang.Object), MethodAssumption: java.lang.Integer* [compareTo](java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String,java.lang.Long java.lang.Long), MethodAssumption: java.lang.Long [getLong](java.lang.String java.lang.String), MethodAssumption: byte [byteValue](), MethodAssumption: short [shortValue](), MethodAssumption: java.lang.Integer* [intValue](), MethodAssumption: java.lang.Long* [longValue](), MethodAssumption: java.lang.Float* [floatValue](), MethodAssumption: java.lang.Double* [doubleValue](), MethodAssumption: java.lang.Long [valueOf](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long [valueOf](java.lang.String java.lang.String), MethodAssumption: java.lang.String [toHexString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compare](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long [decode](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [reverse](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [sum](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Integer* [compareUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [divideUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [highestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [lowestOneBit](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [remainderUnsigned](java.lang.Long* java.lang.Long,java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Long* [rotateLeft](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [rotateRight](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Integer* [signum](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toBinaryString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toOctalString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.String [toUnsignedString](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String), MethodAssumption: java.lang.Long* [parseUnsignedLong](java.lang.String java.lang.String,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](), MethodAssumption: void [wait](java.lang.Long* java.lang.Long,java.lang.Integer* java.lang.Integer), MethodAssumption: void [wait](java.lang.Long* java.lang.Long), MethodAssumption: java.lang.Boolean* [equals](java.lang.Object java.lang.Object), MethodAssumption: java.lang.String [toString](), MethodAssumption: java.lang.Integer* [hashCode](), MethodAssumption: java.lang.Class [getClass](), MethodAssumption: void [notify](), MethodAssumption: void [notifyAll]()] +FieldVar Assumptions: +[FieldAssumption: int MIN_VALUE, FieldAssumption: int MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.util.Comparator CASE_INSENSITIVE_ORDER, FieldAssumption: int MIN_RADIX, FieldAssumption: int MAX_RADIX, FieldAssumption: char MIN_VALUE, FieldAssumption: char MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: byte UNASSIGNED, FieldAssumption: byte UPPERCASE_LETTER, FieldAssumption: byte LOWERCASE_LETTER, FieldAssumption: byte TITLECASE_LETTER, FieldAssumption: byte MODIFIER_LETTER, FieldAssumption: byte OTHER_LETTER, FieldAssumption: byte NON_SPACING_MARK, FieldAssumption: byte ENCLOSING_MARK, FieldAssumption: byte COMBINING_SPACING_MARK, FieldAssumption: byte DECIMAL_DIGIT_NUMBER, FieldAssumption: byte LETTER_NUMBER, FieldAssumption: byte OTHER_NUMBER, FieldAssumption: byte SPACE_SEPARATOR, FieldAssumption: byte LINE_SEPARATOR, FieldAssumption: byte PARAGRAPH_SEPARATOR, FieldAssumption: byte CONTROL, FieldAssumption: byte FORMAT, FieldAssumption: byte PRIVATE_USE, FieldAssumption: byte SURROGATE, FieldAssumption: byte DASH_PUNCTUATION, FieldAssumption: byte START_PUNCTUATION, FieldAssumption: byte END_PUNCTUATION, FieldAssumption: byte CONNECTOR_PUNCTUATION, FieldAssumption: byte OTHER_PUNCTUATION, FieldAssumption: byte MATH_SYMBOL, FieldAssumption: byte CURRENCY_SYMBOL, FieldAssumption: byte MODIFIER_SYMBOL, FieldAssumption: byte OTHER_SYMBOL, FieldAssumption: byte INITIAL_QUOTE_PUNCTUATION, FieldAssumption: byte FINAL_QUOTE_PUNCTUATION, FieldAssumption: byte DIRECTIONALITY_UNDEFINED, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR, FieldAssumption: byte DIRECTIONALITY_ARABIC_NUMBER, FieldAssumption: byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_NONSPACING_MARK, FieldAssumption: byte DIRECTIONALITY_BOUNDARY_NEUTRAL, FieldAssumption: byte DIRECTIONALITY_PARAGRAPH_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_SEGMENT_SEPARATOR, FieldAssumption: byte DIRECTIONALITY_WHITESPACE, FieldAssumption: byte DIRECTIONALITY_OTHER_NEUTRALS, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING, FieldAssumption: byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE, FieldAssumption: byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT, FieldAssumption: char MIN_HIGH_SURROGATE, FieldAssumption: char MAX_HIGH_SURROGATE, FieldAssumption: char MIN_LOW_SURROGATE, FieldAssumption: char MAX_LOW_SURROGATE, FieldAssumption: char MIN_SURROGATE, FieldAssumption: char MAX_SURROGATE, FieldAssumption: int MIN_SUPPLEMENTARY_CODE_POINT, FieldAssumption: int MIN_CODE_POINT, FieldAssumption: int MAX_CODE_POINT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Boolean TRUE, FieldAssumption: java.lang.Boolean FALSE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: double POSITIVE_INFINITY, FieldAssumption: double NEGATIVE_INFINITY, FieldAssumption: double NaN, FieldAssumption: double MAX_VALUE, FieldAssumption: double MIN_NORMAL, FieldAssumption: double MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: float POSITIVE_INFINITY, FieldAssumption: float NEGATIVE_INFINITY, FieldAssumption: float NaN, FieldAssumption: float MAX_VALUE, FieldAssumption: float MIN_NORMAL, FieldAssumption: float MIN_VALUE, FieldAssumption: int MAX_EXPONENT, FieldAssumption: int MIN_EXPONENT, FieldAssumption: int SIZE, FieldAssumption: int BYTES, FieldAssumption: java.lang.Class TYPE, FieldAssumption: long MIN_VALUE, FieldAssumption: long MAX_VALUE, FieldAssumption: java.lang.Class TYPE, FieldAssumption: int SIZE, FieldAssumption: int BYTES] +LocalVar Assumptions: +[] +Parameter Assumptions: +[] +Generic Var Assumptions: +[R::GTV R, R::GTV R, T1::GTV T1, R::GTV R, T1::GTV T1, T2::GTV T2, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, R::GTV R, T1::GTV T1, T2::GTV T2, T3::GTV T3, T4::GTV T4, T5::GTV T5] +Konstruktor Assumptions: +[ConstructorAssumption: Test(), ConstructorAssumption: Klasse1(), ConstructorAssumption: Klasse2(), ConstructorAssumption: java.lang.Integer(int p0), ConstructorAssumption: java.lang.Integer(java.lang.String p0), ConstructorAssumption: java.lang.String([B p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,java.nio.charset.Charset p1), ConstructorAssumption: java.lang.String([B p0,java.lang.String p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.nio.charset.Charset p3), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,java.lang.String p3), ConstructorAssumption: java.lang.String(java.lang.StringBuilder p0), ConstructorAssumption: java.lang.String(java.lang.StringBuffer p0), ConstructorAssumption: java.lang.String([B p0), ConstructorAssumption: java.lang.String([I p0,int p1,int p2), ConstructorAssumption: java.lang.String(), ConstructorAssumption: java.lang.String([C p0), ConstructorAssumption: java.lang.String(java.lang.String p0), ConstructorAssumption: java.lang.String([C p0,int p1,int p2), ConstructorAssumption: java.lang.String([B p0,int p1), ConstructorAssumption: java.lang.String([B p0,int p1,int p2,int p3), ConstructorAssumption: java.lang.Character(char p0), ConstructorAssumption: java.lang.Boolean(boolean p0), ConstructorAssumption: java.lang.Boolean(java.lang.String p0), ConstructorAssumption: java.lang.Double(double p0), ConstructorAssumption: java.lang.Double(java.lang.String p0), ConstructorAssumption: java.lang.Float(java.lang.String p0), ConstructorAssumption: java.lang.Float(double p0), ConstructorAssumption: java.lang.Float(float p0), ConstructorAssumption: java.lang.Long(long p0), ConstructorAssumption: java.lang.Long(java.lang.String p0), ConstructorAssumption: java.lang.Object()] +Class Assumptions: +[Fun0, Fun1, Fun2, Fun3, Fun4, Fun5, Test, Klasse1, Klasse2, java.lang.Object, java.lang.Number, java.lang.Integer, java.lang.String, java.lang.Character, java.lang.Boolean, java.lang.Double, java.lang.Float, java.lang.Long, java.lang.Object] + - TYPEINFERENCE +de.dhbwstuttgart.syntaxtree.Class: Erstellte Constraints: [de.dhbwstuttgart.typeinference.SingleConstraint@1f17ae12 +de.dhbwstuttgart.typeinference.SingleConstraint@4d405ef7 +] - TYPEINFERENCE +Typeinference: Übriggebliebene Konstraints: +[de.dhbwstuttgart.typeinference.SingleConstraint@7106e68e +[[ +(void <. TPH ABI), +(TPH B <. Test), ] | +[ +(void <. TPH ABI), +(TPH B <. Klasse1), ] | +[ +(void <. TPH ABI), +(TPH B <. Klasse2), ] | +] +[[ +(void <. TPH ABJ), +(TPH B <. Test), ] | +[ +(void <. TPH ABJ), +(TPH B <. Klasse1), ] | +[ +(void <. TPH ABJ), +(TPH B <. Klasse2), ] | +] +de.dhbwstuttgart.typeinference.SingleConstraint@7eda2dbb +de.dhbwstuttgart.typeinference.SingleConstraint@6576fe71 +de.dhbwstuttgart.typeinference.SingleConstraint@76fb509a +de.dhbwstuttgart.typeinference.SingleConstraint@300ffa5d +de.dhbwstuttgart.typeinference.SingleConstraint@1f17ae12 +de.dhbwstuttgart.typeinference.SingleConstraint@4d405ef7 +] + - TYPEINFERENCE +Typeinference: Karthesisches Produkt der Constraints: [[ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Test), +(void <. TPH ABJ), +(TPH B <. Test), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Test), +(void <. TPH ABJ), +(TPH B <. Klasse1), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Test), +(void <. TPH ABJ), +(TPH B <. Klasse2), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse1), +(void <. TPH ABJ), +(TPH B <. Test), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse1), +(void <. TPH ABJ), +(TPH B <. Klasse1), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse1), +(void <. TPH ABJ), +(TPH B <. Klasse2), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse2), +(void <. TPH ABJ), +(TPH B <. Test), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse2), +(void <. TPH ABJ), +(TPH B <. Klasse1), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)], [ +(TPH B <. TPH B), +(void <. TPH ABI), +(TPH B <. Klasse2), +(void <. TPH ABJ), +(TPH B <. Klasse2), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void), +(void <. void)]] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Test)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Test)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Test var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Test)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Test)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Test var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Test)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Test)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Test var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Test), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse1)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse1)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Klasse1 var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse1)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse1)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Klasse1 var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse1)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse1)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Klasse1 var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse1), +(TPH B = Klasse2)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse2)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse2)Smaller, + +(TPH B <. Test)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Test = Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +[[ +(TPH B = Test), ] | +[ +(TPH B = ? extends Test), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(TPH B = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Test) alle B durch Test - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Test)Equal, + +(Test = ? extends Test)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Test = ? extends Test) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Test <. ? extends Test muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Test), +(TPH B = ? extends Test)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Test), ] | +[ +(Test = ? extends Test), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Klasse2 var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Test)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse2)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse2)Smaller, + +(TPH B <. Klasse1)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse1 = Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +[[ +(TPH B = Klasse1), ] | +[ +(TPH B = ? extends Klasse1), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(TPH B = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse1) alle B durch Klasse1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse1)Equal, + +(Klasse1 = ? extends Klasse1)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse1 = ? extends Klasse1) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse1 <. ? extends Klasse1 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse1), +(TPH B = ? extends Klasse1)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse1), ] | +[ +(Klasse1 = ? extends Klasse1), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +Typeinference: +JavaFiles: + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Test extends Object +{ +void methode() +{ +Klasse2 var; +var.methode();; +var.methode();; +} +void Test() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse1 extends Object +{ +void methode() +{ +} +void Klasse1() +{ +} +} + - TYPEINFERENCE +Typeinference: JavaFile für ResultSet Unified Constraints: [ +(TPH ABJ = void), +(TPH ABI = void), +(TPH B = Klasse2), +(TPH B = Klasse1)] + - TYPEINFERENCE +Typeinference: class Klasse2 extends Object +{ +void methode() +{ +} +void Klasse2() +{ +} +} + - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. TPH B)Smaller, + +(TPH B <. Klasse2)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. TPH B) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B <. Klasse2)Smaller, + +(TPH B <. Klasse2)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B <. Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Number)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Number) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Number muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = java.lang.Object)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = java.lang.Object) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCEEQ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. java.lang.Object muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(Klasse2 = Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE3 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +[[ +(TPH B = Klasse2), ] | +[ +(TPH B = ? extends Klasse2), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(TPH B = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in +(TPH B = ? extends Klasse2) alle B durch Klasse2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(TPH B = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 1 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBST: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Pair: +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Nummer: 2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: TV: B - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Bedingung: true - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH B = Klasse2)Equal, + +(Klasse2 = ? extends Klasse2)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH B = Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(Klasse2 = ? extends Klasse2) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: UNIFY FAIL:Klasse2 <. ? extends Klasse2 muesste mindestens einen TPH enthalten. - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH B = Klasse2), +(TPH B = ? extends Klasse2)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY +Filter: Ausgesondertes Constraint: [[ +(TPH B = Klasse2), ] | +[ +(Klasse2 = ? extends Klasse2), ] | +] - TYPEINFERENCE +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABI)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABI) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABI = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABI = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABI = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABI = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABI = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. TPH ABJ)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. TPH ABJ) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: +--> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ +(TPH ABJ = void), ] | +] +] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(TPH ABJ = void)Equal } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(TPH ABJ = void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: SUBSTITUTE: in - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Subst? - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: +[ +(TPH ABJ = void)] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [[ +(TPH ABJ = void)]] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +(void <. void) - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: -------------------------------------------------- - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ERASE1 ObjectType - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ================================ - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { +(void <. void)Smaller } - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: - UNIFY +de.dhbwstuttgart.typeinference.unify.Unify: Ausgewaehltes Paar = +( \ No newline at end of file diff --git a/test/unify/UnifyFilter.java b/test/unify/UnifyFilter.java new file mode 100644 index 00000000..3897ca31 --- /dev/null +++ b/test/unify/UnifyFilter.java @@ -0,0 +1,54 @@ +package unify; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; + +import org.junit.Test; + +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.syntaxtree.SourceFile; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; + +public class UnifyFilter { + public final static String rootDirectory = System.getProperty("user.dir")+"/test/unify/"; + + private final String testFile = "UnifyFilter.jav"; + + @Test + public void test(){ + MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration().setOutput(Section.UNIFY, System.out)); + try { + compiler.parse(new File(this.rootDirectory+testFile)); + Menge ergebnis = compiler.typeReconstruction(); + //Nichts weiter unternehmen. Nur die Ausgabe des Unifikationsalgorithmus anzeigen. + String log = Logger.getWholeLog(); + //System.out.println(log); + writeLogFile(log); + } catch (Exception e){ + e.printStackTrace(); + } + } + + private void writeLogFile(String log){ + try { + PrintWriter writer = new PrintWriter(rootDirectory+testFile+".log", "UTF-8"); + writer.write(log); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } +} From 2b62ac43e64634f195860f4b70c59809d764f817 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Thu, 21 May 2015 17:10:04 +0200 Subject: [PATCH 095/186] =?UTF-8?q?21.05.15=20-=20Konferenz=20Call;=20Clas?= =?UTF-8?q?s.java=20GenByteCode=20Methode=20-=20Zusatz:=20R=C3=BCckgabewer?= =?UTF-8?q?t=20sollte=20ByteCode=20sein;=20Entsprechend=20muss=20=C3=A4hnl?= =?UTF-8?q?ich=20JavaCodeResult=20Klasse=20eine=20ByteCodeResult=20Klasse?= =?UTF-8?q?=20erstellt=20werden...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 21 +++--- .settings/org.eclipse.jdt.core.prefs | 26 +++---- bin/log4j.xml | 70 +++++++++---------- bin/log4jTesting.xml | 48 ++++++------- src/de/dhbwstuttgart/syntaxtree/Class.java | 17 ++++- .../dhbwstuttgart/syntaxtree/ClassBody.java | 3 +- 6 files changed, 100 insertions(+), 85 deletions(-) diff --git a/.classpath b/.classpath index 45b378ef..17feec47 100755 --- a/.classpath +++ b/.classpath @@ -1,10 +1,11 @@ - - - - - - - - - - + + + + + + + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 2e8ab188..f307ce3c 100755 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,13 +1,13 @@ -eclipse.preferences.version=1 -instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +eclipse.preferences.version=1 +instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/bin/log4j.xml b/bin/log4j.xml index 64e7c5db..f36fb342 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index dc30c245..ef849218 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 09d44797..2858dc9b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -7,6 +7,9 @@ import java.util.Collection; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -33,7 +36,10 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.unify.FC_TTO; import de.dhbwstuttgart.typeinference.unify.Unify; - +import org.apache.bcel.generic.*; +import org.apache.bcel.classfile.*; +import org.apache.bcel.*; +import java.io.*; // ino.class.Class.23010.declaration public class Class extends GTVDeclarationContext implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable @@ -49,6 +55,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I protected UsedId pkgName; protected Modifiers modifiers; protected String name; + /* private ClassGen _cg; + + public ClassGen genByteCode() { + ByteCodeResult bc = new ByteCodeResult(); + _cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); + //_cg zurückgeben + bc.append(BCELByteCodeOutput); + return _cg; + }*/ private Menge superif = new Menge(); diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java index cbac8f9f..1c96052f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java +++ b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java @@ -345,8 +345,7 @@ public void istParameterOK( Menge Parameter, Menge KlassenVektor ) return ret.attach("}\n"); } - - + } From 57350e2095d94d6067e2ac02841497260f6c411b Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Fri, 22 May 2015 13:50:43 +0200 Subject: [PATCH 096/186] Fertige class.java ByteCode Generierung --- .classpath | 2 +- .settings/org.eclipse.jdt.core.prefs | 6 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 44 +++++++++++-- .../typeinference/ByteCodeResult.java | 64 +++++++++++++++++++ 4 files changed, 107 insertions(+), 9 deletions(-) create mode 100644 src/de/dhbwstuttgart/typeinference/ByteCodeResult.java diff --git a/.classpath b/.classpath index 17feec47..a88ba6e0 100755 --- a/.classpath +++ b/.classpath @@ -3,7 +3,7 @@ - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index f307ce3c..37e3515b 100755 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -2,12 +2,12 @@ eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 2858dc9b..155337f9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -9,6 +9,11 @@ import java.util.Hashtable; import java.util.Iterator; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; @@ -41,6 +46,8 @@ import org.apache.bcel.classfile.*; import org.apache.bcel.*; import java.io.*; + + // ino.class.Class.23010.declaration public class Class extends GTVDeclarationContext implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable // ino.end @@ -55,15 +62,42 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I protected UsedId pkgName; protected Modifiers modifiers; protected String name; - /* private ClassGen _cg; + //For ByteCode Construction + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; - public ClassGen genByteCode() { - ByteCodeResult bc = new ByteCodeResult(); + //Method created with BCEL to generate ByteCode + public ByteCodeResult genByteCode() throws IOException { + + ByteCodeResult code = new ByteCodeResult(); + + _cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //new String necessary? + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", "bceltesting.leer", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor + il.append(_factory.createInvoke("java.lang.Object", "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + _cg.getJavaClass().dump(out); + code.attach(out.toString()); + + return code; + + /*ByteCodeResult bc = new ByteCodeResult(); _cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //_cg zurückgeben bc.append(BCELByteCodeOutput); - return _cg; - }*/ + return _cg;*/ + } private Menge superif = new Menge(); diff --git a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java new file mode 100644 index 00000000..e0f2b382 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java @@ -0,0 +1,64 @@ +package de.dhbwstuttgart.typeinference; + +import de.dhbwstuttgart.typeinference.Menge; + +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; + +public class ByteCodeResult{ + + private String byteCode = ""; + //TODO: unresolvedTPHs entfernen. BROKEN! + private Menge unresolvedTPHs = new Menge(); + + public ByteCodeResult(){ + + } + + public ByteCodeResult(String byteCode){ + this.byteCode += byteCode; + } + + public String getByteCode(){ + return byteCode; + } + + public ByteCodeResult attach(ByteCodeResult byteCodeResult){ + this.byteCode += byteCodeResult.getByteCode(); + //Alle TPH anfügen: + for(TypePlaceholder tph : byteCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph); + return this; + } + + public ByteCodeResult attach(String javaCode){ + this.byteCode += javaCode; + return this; + } + + public void addUnresolvedTPH(TypePlaceholder typePlaceholder) { + unresolvedTPHs.add(typePlaceholder); + } + + /** + * Liefert alle TPHs, welche in diesem ByteCodeResult nicht zu einem Typ aufgelöst wurden. + * Diese TPHs stehen dadurch im ByteCode als Variablennamen ohne zugeordnetem Typ. + * @return + */ + public Menge getUnresolvedTPH(){ + return unresolvedTPHs; + } + + @Override + public String toString(){ + return getByteCode(); + } + + @Override + public boolean equals(Object obj){ + if(!(obj instanceof ByteCodeResult))return false; + ByteCodeResult equals = (ByteCodeResult)obj; + if(!equals.getByteCode().equals(this.getByteCode()))return false; + if(!equals.getUnresolvedTPH().equals(this.getUnresolvedTPH()))return false; + return true; + } + +} From a94d7326b14bc4c1d01bbde0204bda945993d666 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Fri, 22 May 2015 13:54:46 +0200 Subject: [PATCH 097/186] Kleiner Formfehler korrigiert --- src/de/dhbwstuttgart/syntaxtree/Class.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 155337f9..5acd3c00 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -78,7 +78,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ByteArrayOutputStream out = new ByteArrayOutputStream(); InstructionList il = new InstructionList(); - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", "bceltesting.leer", il, _cp); + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", pkgName.get_Name() + "." + name, il, _cp); InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor il.append(_factory.createInvoke("java.lang.Object", "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); From a6d9fdcafd4d1bd40a968bec36c13c97f0723fcf Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Mon, 25 May 2015 19:11:40 +0200 Subject: [PATCH 098/186] =?UTF-8?q?BCEL-Library=20zu=20/lib/=20hinzuf?= =?UTF-8?q?=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 22 +++++++++++----------- lib/bcel-5.2.jar | Bin 0 -> 533339 bytes 2 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 lib/bcel-5.2.jar diff --git a/.classpath b/.classpath index a88ba6e0..f142a181 100755 --- a/.classpath +++ b/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/lib/bcel-5.2.jar b/lib/bcel-5.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..2fa90cebdc06e396031d8e52c77dead0eda02d89 GIT binary patch literal 533339 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%0Dekr$zx=h_pXfY?wJ0?zP+$WZ$48BKq z`&BEJNEATq5ds(%Lsmg*Xs1_(Kd)N$;0PQ*?rbBy1%BZN%-#nCPHjW2G|CX#CQfg- zZ)4)6zhYuU+m}R45ER`<5Q=e$ch2td3bq^!^9p=07#+bM9z7f!yS!K2Z`Ch=tPR)| zEX0OwX8cLojram>Jp-_L==@8A+P|ESk^3*ZN2JQT>#P!{&y2G)M$ZwnlHL#N9<^iE zTtzH;A$2UZwN~*#y|ka|9*baY`T56skUl_RSx=z>A5b6J_{UrhQTV?1(Kk;Uq_oD!x8oIrD9~u%3aH=!OcqJqvGBB{HlVDRcv{~3i8v0grnmM`N>@S;YBYpEsb;T2} zB$pn;!a|cGWy!RsqmlN3T8Ut+u^ARJo)r3`q< zN9M#W8(eeI`1`;}9(tsZ4|%Vmw^+lC`Ym`Zn=UZWSh4AtaQY*ZW&@O%@@ds0mkH#8>^ z6^L?bNR=!ChDwpb@3#=YSI7pe5#?6?O~pElVk-707uzEu2iGy1YTk_KW|TxAMYx z>HzPxSer^)-K)(tUnS&4yNlyRv&*?w&~<3!6-{8qATn9~)00tVyVEZ-IEr;%j=P0L zVS3O$U55m_%r?fM1bIWt0y;D_?5$)q-;LX*Y>^SPUaQe5?OLLU!+xPecs7>@Mb44k zBp>WfbTO;tK4g;?thB|21Ni=P9l2up`vdC&1E^JYyzf8uc&ED7V^rztnG6!tr5cc6>I!!f>a#+PV-ZcUtaX+(B9X`6W(T895%UtypmPx3nO}#y{7ko)Q;$TEYaY6&y=tO}Q}LJ0 zoj-5{zChFfh2UyxSGJpmR~1WhK4joarvkfsCz;szrkmhPYU-Z3K82edIA%lEtPC@} zOkndv+7F8NDN}Qr_h!eR-pV`y>tu(tb|edheYJa@2!Wg^&m~*vgf96Br=J48xH&+q z;Y-y9%XTfJ(tPr@?Id3dfxQ~POMkLk+hMEdxftWU@VfJZSYY_Wcgh9fhR@7b4B)A9 z_x2e)&b8XD010weeoa6`=jSMN0L!YMv~f6e=}wXP>$C)SQXX~}vVU4Y{I{4b&y3s^ zvW|-Zhe&pdnC$eJzg6TtT1}8y1Q@=aCCeCAfIAXSj;h_V#>2eC6@hEDc|T>&R@s+! zI10O&UO}p4yzXm9wDJ~gGKwphbwv}S7{QI%4-^+}A)^67+BekhxeJAcFl*nz6#~L5 z%8%+FqtKD6P-T`%mWwn`r&NbiyGlgSm#8}TS{v6-IK*a+(T}&qf(A&OaUl8*OZEhK z1(+@#PC>3M>0}Tee5Ne+-_6>^8$4iEkJAhgn`nOGP(v^VGEn=rzKaDY9+5=qkmBut zO0lt0{4Hw)`{w>F5wO!2!v0l)MD!O~qY$IW-#X=y@#8Y9e29aeI5VW6AY^1-fzhDY zX2_7>@LI*qazsSJkW}&)Y2(n1a4z+YB=@v0)ZEJF{t#O^h;^rgpgnQ~CMJuY@8fPR zUap^)=zifDTn=i#dWe%E)L9FS#=;oN)XR-)CSsmTxzIA{rRGkwgYQZMDs&7K1gTD55E@NElwEz#)98@#;tZ-_7!XU?J6?W*!A8jvrVdg}~Fx`SeR z{{YJ>xhQ7~=n|w6Fa6Zt)g}|{JQvj%VluWEmapu%^y2Ul8=}amBT>{h4Skn3?(+%4n8_K~OQu_%zC1o=z zS#vJi?XW_G!AsY$868OKMuK%C^&H1XfF|_)Q_xLGLtq#gnZx0il*fG_*}>Q84L-8x z_LO3eoBGcfrlu{SP z$Pm3PR{x(r5OAEdEA4l6cgXxZ1aLMNZo9rpEK;ZgESmy*HDNjH1$ zPOI^)y`CT|RP|on5ZaZA>e1h4w-cc;7c@FMot|UDX^tNPahsE8;x(WijjEja*qad@ zFd3CBLq{s1m5xq96hUzqtlCSAhML~RVBAZkXxT>^JjX@Xx=BaWm2j=}X1mc#;Tx}) zyD{c)=ce`4+zWJqO=eaNH*v)AC^tE81LQ=B^J7}&EYnIyZBfVMa8rtJ4JltIzl`rS zwxh0opnfgFbFg>JdG{eD?Zz37F&#+;eJLhv^+wpvnn9LGikXV-Fq-j|RWq1CK8I6^ zn@kHWbv?GIW8OFr_n!_r9G023*sS!|GQ@Y~?Y^k!Axfh_NI2F4n?+@>foJ+fHc21y z%wWhTkymlS>_e0oV2@HGId~y>#z@6=EjbkPF7Zar;3}W*YljBtcXqCNg)=y&PYQu~ zwe19f zoTAplYr}C1C|cmEE3_JSw4}z@aa%GR>QK&Myu@5Mi6jzyAjXyq9?yi{A9Q1l^XL*) z5e3GUFz{|3TyXh8fUHfDB9Ay|P1$!W4}oynpnD8{i@uB=ER z#3Dy3fAS2~YFMsAby)65vbC2g{>CtX0FHDd?wD{RA)R2Ip_|+_X zSnheT5B9u%^H3vYSPGkrClDsjP+tjkhWNyr^YMe5gef73727Lg^qQ8B)0@Gy-$qb) z@EC`#(`#m$4Lxpa+-Zn*U%N*bm2PMG6VZnTFXs%B3Wr^q;=Q2<={D+@7C#H#mX5Na zSkvh=PLnRUQUvfa+{i{V?p3Ph4)j?X%99byo0w-PHm`XOtTia?~^exh&8dxPps@f)#5FdjxNPT+wc07FU!S0txtxkcQFfe z|Cq0HuAZV5BF&}v_x z8VclNFMX`}F&!3qY4pDGtj-IN0TGW~&(;(_6aBT`lEY{&Jnlw99C$FKOh0MhMA zTbY;=jWMgQ3Wo`O&!_9zJ}ImUz({#+G~5-a^l(z+x;-HX02Y9GJ9-$NuxYb@S^%gLf*^$-2yN&CcH|O;|MlrZjPZzKPuVxz-aC=7EAi9lJxs!D3isug3yzj;fo9l zYa7Rt4dJ}eQ2sL#pi7aQK_Qyilfulq^S0Sal`ihsH!PCw>sp`D?)mmKLW`@x`Thj{g4js z(ZoAC!t0GtwPxCj?v?DXUYhdfz|nS1Fb|c8{(iv;kEBA1r5pzM;ZdmAqzh5#uJ9afC4$b{lm7vsiZ zH1F&+Ux%IB?;w%gmP);}`@maAoyccDxcYT_NFm*#(1cOFB7z0a4ILcvrvu;trNhWZ zAN$r^7=~_lXJ4>;7#)?I08pA*Hkz!Jnow+lKGY~xuB^;y#o2r(QSy((6rr0?F0uTW zUfmDuSbuNgg-~BVG>_I(H(`tiXDwS6{lfdR6C`{^;Z&nBwf8@Va@T$swETMqK$5?T z9)i+xqJIk?K}xF*$oz=hz1F=ZEa1}ZHN@g_gyd$GD*Dfe$ciNb1z|(4^ir|%wUV?j z${(RwIh|@RTM$q3N!+8UnB_sq7sn~HriHS$msOj*KETC#n|-)v%=m=gqeF%)>vG3S zSuMe#!SS)&tg_9r`(iwDaQA;3{lt)@4Hg5x$6m{H7iQ1e`8t7OE~KF;zvQydXzK-O~1@Snu{ zz1`Yjc&sEDD<&;m&M{iFmEm9y-2>)X$q7TbNJf^N_lDflh%;u` zY~P8NKYDJqbXGV5+~hfI(4EP4eS5ECq$GNpG_9)33X0e}fFKNiBB~^ppAX@cEwr@0 z2D^@xB;s-J>y0zLo&gFt{SL~7(x03sUP(xSMQ5DSe}#cX{|iWP={oUf>{=*MW2iS< zJemX!<(B!yp8jQ}GPXlz+6NKj_=cE=tkd5+hcFndmfU^nQy-pvEgQfXF+jq)f&Fez zL+UQ0V~C=Q^y(Fx1$`An=<4o;e{eF7d_KLk#d;C=HJu*YxGMQK3H}e4&>G1oZR+6B zLs}AXm+;cn!aF?THDPqmPc2hjEz@1P3$Vp?gqu3wKhL~zx_7%00;-n~e_6f!cY^zS z?)p!HgGzNX6pqX0lbX`1=(!;hs!+`ohu|(qzDGj<1Xntq%6j^T z;IQ3{{wBCefZ+80S#YcWTY^*aoGn(xim1Gk<$a*qZ^neGY?a3TL8IMF`@ zm-cT2H~&8ij{gtAA^#V_eVrM>2B`^zbq~gA#){)2sj3OB`sv*{Bn$Q=5YxuUgWz~? zk@8?>X9v?Hh%SQ}S^Irt6DgX%t#65JkPfYP|5hc2v`u>cT<(Pq>4GTy-M6ytTVJ89^XnpgY>n z7`T9HqD)Ur95Ur(W97%^)8y|jsBhSV^bS2zE{2fb$)v=8MUez+VRRzxM$m6UJJLi^cA`|PLp`%i zY`J{D*s?*m*zTm?gkho>Yo`Z;fa|(qA)5YJX$6fR8@8z_4jiuak_43t)MQnP)_V3@Fx=}Kc9oFPJk}RY^rE2 z)3_+LPD5~_$$}S#rZ$K)V+poX;v^^#nP=`eU?lBPPKa#X26!MN*raWrl!yhp4L{&Y z>oN;Ldj_By3uCj<=?ncLiwbcQvJmV~wdjzc#_+*_hFdkjW8aYxuF--$J%1T? z)>x}xf;$4Tv&UV|5Lq^&6NuqO9wa+slsPRoHgsJIZI}Ix4r3v*mjXp$tK@He&U_rX+F<}ph*@gy%Z$M5Kk@0hqQx6gG6?u}V zW)cN6QD`TjMiv7v*-srQv;K@O=daQ7>45(q5Xir(mj30>u#mXQKYoTcEdY7$z;AKG zMsZcmyb^4~RkLz&iB^rPQev@iIY{FCvv(s#=DcBGsFv+HuaNf?Pi1?WTHDXF!D&?Me1}C~um{8&$ z#~P_!mI?Vt6bYKkJlhFS%y*)DAv@-2b#i@OsYzwBx^G|)e~JjNi3k>u$pvtX^Mstd zypRbLQ0M~F)q_XLpHCeq_YgKi1cXicWUoU2m73n>VT;PYjKKrPrC)sjkavin7 z7UJVpTgA0r@?bh~T|i1T>S4x|MIpKW3kUkWTeBA}9ox6i&|1}BA(k&ceX$*z`P?^kS>IJH7dZ-rm_3{G2ncpROhujE9U+kA?$yxjhlz0WVgo za>xuWZ_P01`#FKzkW)~8a_sIZOf^`)eIgQcr*hcUrFjCWEKD(feuw9?HS(phIRanv z(<-t)@4LyiZ`Pbrnie#?juv%=)UJf5gv^9$X8A4~N(dRtWA4U*txYlrHHYC|k_%GP zX+@!5`OjDsJK7^y^KcR>tqr&W1mXZ8kDMbP+4sL6p6U$}Aw2XU)-2+`qs&j#JX9LA_Yk_2umEU2>mrkI{>gS0TBj@M$_?Y0CI6gKE0&+y z9>(-7jf{N2#^eS-gq3synWc<_BbQlZgDFp@IVHbTF`iUHLTdxmHFX%+f@cv&`<^f3 zjfbwM1ic@L32^kI4E8jV<1dudho1Z@KlSkUlkWRZ{tdzB%a&zZcQ zkqo$*)%OVN8ZwQ1ojd+L(w}^Dvww&248{e;&2JjMbTxp3sfrzO=(?qL|%gqG?^Com^7guNu&(;%fY}Pcva@nL;zFXmR~OY} z4BG);w@=BE!f$eP`%nz(=rVqCbbYhTmdnLB#IYVw`lJMLbcsV8T{%yVu2ws*flnJ% zyM}|3xD}sTM234gUA$T(7A4{20|y={%|7Ja3;q~D1x`?((xl-Nq2y#o;VB=_HgS>Q zCugzOjn7SM{yKi9y&KxZ z3a3Mq!mW7#`4$mNlb%l12JAwGOHN?fZe&k9E(qg{J>dOMZQ8w_hw z$vj1xGi*SHVKjf&%ZyP>F%@kan+Eq#IfNg>6pX2jH{eay>p>=Lzy~b*$RrpUw;<$S zyYR$~-X%zmKSqHP^s179xV_Z(Pi07s4eQ05|E;I%FEv3y;*ULR_&;2p$nR}J^JrCQ zLy%>6DJk`)lag++uqTqnJ_@16vf{b)Gl%Yuo(DtC$pv`y|}Yt z9hmUESXZ>?yxfzxj5*8;uZ%tso&jDN1JDD~{Cinrw1ZE&R(nV9)cjFM%>%RM2IA1C zbdxoY=NTbp-X3D+ry{W#HmFQfX?_}cE?@iIQ5*Gksgj`apPv%SlQ5l3^wQOO)nYME zJxsHRaqVAumJPYlhQHL$ZW<3}rj7W3S=M&wxt)*zphY1dN*~$Sd7YUmkd$h~l~uid zf%b|@-tEiFoXwx6&fmq$nE*lnTNVG{ugl+BO%6hXY62}p6SC&^*fub7 zvP?9Oij}J%1@gsJM#7*U>tp%!5In39wgdwJLT&Wt@87(8ld?L-z9BC0K3W4^uAVr&vPFa+#1 zSLJDe*)d_-s-LwfJm41S>fVix2n>#TZf7oLOKpdZp2Ms_37znr{ENv=tWAVcArrnN zJ+F}m{H670PxUgv#d1lz1#ccD78#R7YR`3tcB=~TD}(Jn6hSF-;tuDg2oe z2V*yP7C9IHm;boSS323W_v;OHp0&C9&k9t8s$K-pulyGqXm!Jj$&qB0!F zfZ{qeSH(zY{3HRL7pZdVdVB!n^f#<3pQh@GGd8R;f`eDwKr+Nug!{8Av*PjVxO$E) zBH=j^2x6N;&TLbYgf_Uqp2v+yG3yv=I8wrzG1JK0ol-)R=g$OVt zMeR{Ff77FWPrze^AMM*ctHH$q`~=U>!)5{Ic};Mloq>M(msmV%Sls4@K*`#*DvU@L z#b`sAP$Xk1h=XM=WW9OtOfYcnZ% zqo#x`fttJv8!}lufiQ?leqHuJCW}7Ew&1^CHvFXn;GfI6|G5+l5Us-z;SWVFe3ke1 z*N7Oqo*OFCI5=e~vDuenHbupasRE=2)d>6gDKWV*O1_|Bq2(d#6NVEE}e$OoKzLMlZA}+K+&!K zyqC@rU$cH9cSdXqHtQwo*hF5HqF=dF^Y0I}wYKpHz0DhsbK9Dld3!bwfe*Dxhp zU;uDqQRAl60x4mo9ODOkM~*?8)=BArvujLx!|x7^N`CGDOYy^!C6`}xk1J1smo1+@ zA|6Qs5{eewwShv_LTQmpYsU$c;uPLUgaYb`B+h zF7Llo=-_>U2zBm%z7|wf7yZw6KM%SVWDxyhEhydS7xkW#T7o=bHzhl#iqvVCJd4qKWbpTI^kNKKN7?wPSTw9A4$pfZv%1%78>)=$M=%*aSm^N9`s(I=!IOFx2J z$SF0H0`|`J0^LI z#36^Cha5g{Vtt)af(I#WS?rroZJ~#r3}i>xY{E!(${l!YsEul=1!mxChI9?7}{kU~uv*lP1Q;&HV--k!NbeD*4joqi*~(%;nPU9Hx%*>Gob zKuZ8xU@-P((Mg=)5Df<)#{41OB&m!>QBOjV0ib*SE{OJ=L;pk}7ExyVixI1J38Prs z7UC77&sH|WVnP(rm7WKyQm4T8B9d5ySE7PJsPI&Hb87E#Z#$}p{VwtACCLC2XhO*T zElM5<(i6pkC&UfWo%sO_1oN|1RiS?20tfTdoraos=4uF3M^@w;Yo`wZkkKQa$+7!5?mM_e|KiTp3`!gyjkRkv1FYWkWF8bA#SpP-R`#L89)Pg92DM^hJjpIp4 zm|}j_4s2oAfbJi036Bn@POFdusvbVomtXR$n<_FqN7Co-ZZ02S+9h~UP;OX;j73r< zY!Yg<>Xj-hjk5Zf9kL*?1n+RgJL*HXjW7RkNOLmHAzE~|;tD5HTp)A>+2=BIN z$OSP>8&bc!Us>85)ve8)$EiMCl2t^IY24oR`1D%!UlWjHDALE;Qg_*z~Fu0 zgz#Ij`Xfo-s8=!=vExRF7%hV~CY6?k!$72cPEJS>LX>$04clCbyOg zUPH`ar5oZdg_pH>&f1^)YE@^BwTVvNYCCF30*mpkU8AGaO5fU*VOY3und3jmRVEId zqF8A<2svJiA7DUat=Mw{PGz9DO5vm7+VKe=8)glgfGOxRkD}lM&PDgbl(0JAA^$RZ z#yLmtZV>P~6u+P^!Z4}*t$QGi+!Zx9DVj^eS)dy7Pqc1EqHn7>-k@`QN*&VT_hj>8 z=y%jB?Vt_M>?%-%8M7>Ft@q^DyQd8vo^Gvb8bsCse<|y~T+Bgat*^=Qhq#sB%fgD_ z2;^)f*jgt1DtjSNs?7i|0BFS#d5fhvAq(b4<2C(OUH(v!kxhIHb6>bK(u{}mlYfE7 zmHTQanT_PD-SIPP9PFeHqnEOMyD?l4*GT}WcOl^>35$4{LoBJw!IEsC(|evXqm!wa zC0sk_-M2cf@W-4@1x_TyJ-;LN*y8reXX@P}LnCT+L|qQ+opKBOKRJAA@^P)v$nk`f zFWhFc*212XpVnyGpRUE?Ov~ppV}1Mjs2%%E%|gh`ZTSd}!~xsB^tC2iRRkJ#Dm63C zBg=q+yb-$>Bk^cj+cBDdg>I0Z9Y^hCa7vbR;DS=lcUZpIoNIY>Ru;H)yAstH!fid< zY=8Xw7Co#nuJ%k`*+r2tI3R`N9qcbc%&kJo4~X5klD^Ca5g(*p!mhgKiUvCxS=u&h zyGy)gK|Y-^h=f-1MiN!IWWfkT^zAB!bWtgy1z)f(&$WAAfVUr#k?YBDM6(za z#PYoa0W~jh-`RR;I~(E(ixT)oPP9v7_*GZ`$C0h2b8`?1>78I#1V{Yh(`oQ~0>d1w zW^78aZ0KpQV*D@Tz^g-{6D%&Q-ezBjxMo?a!ePZuNpetsumdNz*G`83*H4GQJD2ZN z`O=F4DJFg4?6-84Tmm7>8*i}L#%}6)$@`^`Ht}RYhyFrVO1i_fQso(mYLu{JOn zjKUcDTKc&t>DuGGfZIw6d`pU{Cr%s3O_jfuUlOk&PBx~)?nhFDldVR_u1nEE(6`x3 zo|Oi)Fp-Kfq)8g|ezK_j{9RlBUSxl{GFDgmr$HvK*eQ(p2}LUYoiNUCgka)pB?62L zW<7RFppl%CQA?8PVmobpF3v+DRSu%hXQ2UZ9ZNa(X@Q}Zxfb_3m#zEtOSI47D#)ry zTveZ2(Ba`i5fboY5C@bWNX1%IY}npLEb#S5SbV%04wK&SQPQQZQL9WRNMOXB~$_2U(k* zg~iuAA9~h}-q-hdv%$n*MF(aqh{PP40gFTGfQ{l=1Xpqwhtnb*Z^^b*DK#V+NH6Z~-l#4Zx)QU1<&&1%j5 zzQXDp=9PejtN+3L`&}tTq`T|AwO<|;BBPMSZoBzxv3Sh9Wue!M)dv#mA*F}J{wT{P za>YLEyu+l}ZI|PlBpnFdu013`y;Mt6GCJ$JK|W9hCu`I3^y41tC%d;^o4gm7GO~B{ z_r}qrLO*sI+7&L|c*lGRPVyZ|oE+Xc`nWaCIUqGQaT)CU?%9_$cJ(_EH2k`QVYXRS z;iRmjY}6F>mlB`-s%L(0Ut>{UlRQ-#+DqBkfInD|S4VZJ1a2 zl-pcqXJUIllB4HpPHG$ygfq!Uy@i z?*rj;RFUpebZ!R>y>4hlu{XrD!(vSxTmxUW^Z1MFxQUJ?`V$U6y3^p7OUhZYU~r9D zb2+Z3(~*1B@~?PUIaASa=%C%@#=ZKInNF#QSVqJ%Rk=jdYQ((5&Qs)mDo3y$9$mjQ z5qMMOkI0P@EX81I{mCeor^=50wWS-sf?)1QY%h062I7K~oJKB;YH|u;9a<7G!;2(6 z=alCQKQuir3~~fGjZ&XSc)&}+N`9x5_Xr5FnHZ!InHaR1w8WJowAG7WCJnUYkVh+? zcKXyTx$w^F8gxj!i~B`@RX#&t;ne

    o$*GV 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

    f9mV{ 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 MGTEM0$n|9Z2X)^B`~Uy| literal 0 HcmV?d00001 From 2b6ffdef119bec19bbe3e0b81c7ad44d72666dc7 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 26 May 2015 10:13:35 +0200 Subject: [PATCH 099/186] =?UTF-8?q?Java=20Compliance=20auf=20JRE=208=20erh?= =?UTF-8?q?=C3=B6hen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 2 +- .settings/com.google.gwt.eclipse.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 6 +- bin/log4j.xml | 70 ++-- bin/log4jTesting.xml | 48 +-- .../syntaxtree/statement/StringLiteral.java | 24 +- .../typeinference/ConstraintsSet.java | 55 +++- .../typeinference/OderConstraint.java | 11 +- .../typeinference/OderMenge.java | 15 +- .../typeinference/SingleConstraint.java | 2 +- .../typeinference/UndConstraint.java | 25 +- .../dhbwstuttgart/typeinference/UndMenge.java | 23 +- .../typeinference/unify/Unify.java | 30 +- .../KarthesischesProduktTest.java | 11 + test/unify/UnifyFilter.jav.log | 306 ++++++------------ 15 files changed, 301 insertions(+), 329 deletions(-) create mode 100644 .settings/com.google.gwt.eclipse.core.prefs diff --git a/.classpath b/.classpath index f142a181..bd1be8d1 100755 --- a/.classpath +++ b/.classpath @@ -3,7 +3,7 @@ - + diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 00000000..82c36afe --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +filesCopiedToWebInfLib= diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 37e3515b..552a5c96 100755 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -2,12 +2,12 @@ eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index f1c9b2ff..20803b2d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -1,17 +1,11 @@ -// ino.module.StringLiteral.8653.package + package de.dhbwstuttgart.syntaxtree.statement; -// ino.end -// ino.module.StringLiteral.8653.import -import java.util.Hashtable; + import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.CTypeReconstructionException; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.CharacterType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -19,20 +13,11 @@ import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; -import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; -import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; - - -// ino.class.StringLiteral.26227.declaration public class StringLiteral extends Literal -// ino.end -// ino.class.StringLiteral.26227.body { - // ino.attribute.string.26231.declaration private String string; - // ino.end // ino.attribute.parserlog.26234.declaration protected static Logger parserlog = Logger.getLogger("parser"); @@ -107,6 +92,11 @@ public class StringLiteral extends Literal Menge ret = new Menge(); return ret; } + + @Override + public String toString(){ + return "\""+this.string+"\""; + } } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 6e4a483d..ec32cc37 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -6,18 +6,22 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; +interface Constraint{ + +} -public class ConstraintsSet extends UndMenge{ +public class ConstraintsSet{ + private UndMenge set = new UndMenge<>(); private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); public void add(ConstraintsSet CSet){ - for(KomplexeMenge i : CSet.set){ - this.addItems(i); + for(KomplexeMenge i : CSet.set.set){ + this.set.addItems(i); } } public void add(KomplexeMenge constraint){ - this.addItems(constraint); + this.set.addItems(constraint); } @@ -62,26 +66,59 @@ public class ConstraintsSet extends UndMenge{ } */ + /** + * + * @param unify + */ public void filterWrongConstraints(Unifier unify) { + /* + Menge> newSet = new Menge>(); + for(OderMenge orSet : this.getOrSets()){ + OderMenge filtered = this.filterOrSet(unify, orSet); + newSet.add(filtered); + } + for(KomplexeMenge i : this.set.set){ + newSet.addAll(i.getAndSets()); + } + this.set.set = newSet; + Menge> newSet = new Menge>(); for(OderMenge orSet : this.getOrSets()){ Menge> res = unify.apply(orSet.getItems()); if(res.size()>0){ newSet.add(orSet); }else{ - Logger.getLogger("Filter").debug("Ausgesondertes Constraint: "+orSet, Section.TYPEINFERENCE); + Logger.getLogger(this.getClass().getName()) + .debug("Ausgesondertes Constraint: "+orSet, Section.TYPEINFERENCE); } } for(KomplexeMenge i : set){ newSet.addAll(i.getAndSets()); } this.set = newSet; - /* - for(OderConstraint constraint : this){ - constraint.filterWrongConstraints(unify); - } + */ } + + private OderMenge filterOrSet(Unifier unify, OderMenge orMenge){ + /* + OderMenge ret = new OderMenge(); + for(OderMenge m : orMenge.getOrSets()){ + ret.addItems(this.filterOrSet(unify, m)); + } + for(UndMenge m : orMenge.getAndSets()){ + Menge> res = unify.apply(m.getItems()); + if(res.size()>0){ + ret.addItems(m); + }else{ + Logger.getLogger(this.getClass().getName()) + .debug("Ausgesondertes Constraint: "+m, Section.TYPEINFERENCE); + } + } + return ret; + */ + return orMenge; + } /** * Nimmt alle UndConstraints und filtert mithilfe dieser die falschen Constraints aus den OderConstraints diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index fc4935f8..ca3d2b01 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -9,7 +9,8 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class OderConstraint extends OderMenge{ +public class OderConstraint{ + private OderMenge oSet = new OderMenge(); //private Menge oderConstraintPairs; private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); @@ -58,10 +59,10 @@ public class OderConstraint extends OderMenge{ */ public void addConstraint(ConstraintPair toAdd){ //oderConstraintPairs.add(new SingleConstraint(toAdd)); - this.addItem(toAdd.getPair()); + this.oSet.addItem(toAdd.getPair()); } public void addConstraint(UndConstraint methodConstraint) { - this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint); + this.oSet.addItems(methodConstraint.getConstraints());//oderConstraintPairs.add(methodConstraint); } //TODO: Funktionalität für filter implementieren @@ -89,6 +90,10 @@ public class OderConstraint extends OderMenge{ return null; */ } + + public void addItems(UndConstraint uCons) { + + } /* @Override diff --git a/src/de/dhbwstuttgart/typeinference/OderMenge.java b/src/de/dhbwstuttgart/typeinference/OderMenge.java index 853fa968..54cabb65 100644 --- a/src/de/dhbwstuttgart/typeinference/OderMenge.java +++ b/src/de/dhbwstuttgart/typeinference/OderMenge.java @@ -22,9 +22,6 @@ interface KomplexeMenge{ void addItems(KomplexeMenge item); void addItem(A item); Menge> cartesianProduct(); - Menge getItems(); - Menge> getOrSets(); - Menge> getAndSets(); } public class OderMenge implements KomplexeMenge{ @@ -35,6 +32,7 @@ public class OderMenge implements KomplexeMenge{ set.add(item); } + /* public Menge getItems(){ Menge ret = new Menge<>(); for(KomplexeMenge i : set){ @@ -42,6 +40,7 @@ public class OderMenge implements KomplexeMenge{ } return ret; } + */ @Override public void addItem(A item) { @@ -57,13 +56,14 @@ public class OderMenge implements KomplexeMenge{ return ret; } + /* @Override public Menge> getOrSets() { Menge> ret = new Menge<>(); ret.add(this); - for(KomplexeMenge i : set){ - ret.addAll(i.getOrSets()); - } + //for(KomplexeMenge i : set){ + // ret.addAll(i.getOrSets()); + //} return ret; } @@ -75,12 +75,13 @@ public class OderMenge implements KomplexeMenge{ } return ret; } + */ @Override public String toString(){ String ret = "["; for(KomplexeMenge i : set){ - ret += i.toString() + " |\n"; + ret += i.toString() + " | "; } return ret + "]"; } diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 18232176..491910bc 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -37,7 +37,7 @@ public class SingleConstraint extends EinzelElement{ } public Pair getPair(){ - return this.getItems().firstElement(); + return this.cartesianProduct().firstElement().firstElement(); } /* diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 3e7b241a..99ef38b4 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -11,17 +11,23 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * @author janulrich * */ -public class UndConstraint extends UndMenge implements Iterable{ +public class UndConstraint{ + private UndMenge uSet = new UndMenge(); + public UndConstraint(ConstraintType p1, ConstraintType p2) { //super(p1, p2); - this.addItem(new SingleConstraint(p1,p2).getPair()); + this.uSet.addItem(new SingleConstraint(p1,p2).getPair()); } public UndConstraint() { super(); } + UndMenge getConstraints(){ + return uSet; + } + /* @Override public Menge getUndConstraints() { @@ -35,11 +41,14 @@ public class UndConstraint extends UndMenge implements Iterable{ public String toString(){ //String ret = super.toString(); //return ret.replace('|', ','); + /* String ret = "["; - for(Pair p : this.getItems()){ + for(Pair p : this.uSet.getItems()){ ret += p.toString()+ ", "; } return ret+"]"; + */ + return uSet.toString(); } /* @@ -52,18 +61,18 @@ public class UndConstraint extends UndMenge implements Iterable{ UndConstraint filterUndConstraints(){ return this; } - */ + @Override public Iterator iterator() { - return this.getItems().iterator(); + return this.uSet.getItems().iterator(); } - + */ public void addConstraint(ConstraintType type, ConstraintType type2) { - this.addItem(new ConstraintPair(type,type2).getPair()); + this.uSet.addItem(new ConstraintPair(type,type2).getPair()); } public void addConstraint(ConstraintPair constraintPair) { - this.addItem(constraintPair.getPair()); + this.uSet.addItem(constraintPair.getPair()); } } diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index a8fcc060..fff77db7 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -17,6 +17,7 @@ public class UndMenge implements KomplexeMenge{ set.add(new EinzelElement(item)); } + /* public Menge getItems(){ Menge ret = new Menge<>(); for(KomplexeMenge i : set){ @@ -24,6 +25,7 @@ public class UndMenge implements KomplexeMenge{ } return ret; } + */ @Override public Menge> cartesianProduct() { @@ -43,9 +45,11 @@ public class UndMenge implements KomplexeMenge{ ret = cartesianProduct; } } + if(ret == null)return new Menge>(); return ret; } + /* @Override public Menge> getOrSets() { Menge> ret = new Menge<>(); @@ -59,16 +63,16 @@ public class UndMenge implements KomplexeMenge{ public Menge> getAndSets() { Menge> ret = new Menge<>(); ret.add(this); - for(KomplexeMenge i : set){ - ret.addAll(i.getAndSets()); - } + //for(KomplexeMenge i : set){ + // ret.addAll(i.getAndSets()); + //} return ret; } - + */ public String toString(){ String ret = "["; for(KomplexeMenge item : set){ - ret += item.toString() + "\n"; + ret += item.toString() + " , "; } return ret + "]"; } @@ -87,12 +91,14 @@ class EinzelElement implements KomplexeMenge{ } + /* @Override public Menge getItems() { Menge ret = new Menge<>(); ret.add(item); return ret; } + */ @Override public void addItem(A item) { @@ -109,6 +115,7 @@ class EinzelElement implements KomplexeMenge{ return ret; } + /* @Override public Menge> getOrSets() { Menge> ret = new Menge<>(); @@ -120,5 +127,11 @@ class EinzelElement implements KomplexeMenge{ Menge> ret = new Menge<>(); return ret; } + */ + + @Override + public String toString(){ + return item.toString(); + } } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 852183a6..c44633fe 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -645,18 +645,19 @@ public class Unify cSet.addItems(orConstraints); } + SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); + if(filter){ - SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); - - Unifier filterUnify = (pairs)->{ - String pairsString = pairs.toString(); - Menge> retValue = new Menge<>(); - retValue = Unify.unifyFiltered(pairs,fc_tto,false); - //Unify.unify(pairs, fc_tto, (i)->{}); - log.debug("Filtere Constraints:\n"+pairsString); - log.debug("Ergebnis: "+ retValue); - return retValue;}; - log.debug("Filtere 'WrongConstraints' auf: "+cSet); + Unifier filterUnify = (pairs)->{ + String pairsString = pairs.toString(); + Menge> retValue = new Menge<>(); + retValue = Unify.unifyFiltered(pairs,fc_tto,false); + //Unify.unify(pairs, fc_tto, (i)->{}); + log.debug("Filtere Constraints:\n"+pairsString); + log.debug("Ergebnis: "+ retValue); + return retValue;}; + + log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet); cSet.filterWrongConstraints(filterUnify); } @@ -672,6 +673,10 @@ public class Unify } */ + Menge> bigCartProductErg = cSet.cartesianProduct(); + if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg); + + /* //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet. Menge helpvp; Menge> bigCartProductErg = new Menge>(); @@ -691,7 +696,8 @@ public class Unify } } } - + */ + //Schritt 5: Einsetzen der Subst Regel //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. Menge> changedSets = new Menge>(); diff --git a/test/KomplexeMenge/KarthesischesProduktTest.java b/test/KomplexeMenge/KarthesischesProduktTest.java index 327c37ea..6d48b918 100644 --- a/test/KomplexeMenge/KarthesischesProduktTest.java +++ b/test/KomplexeMenge/KarthesischesProduktTest.java @@ -78,4 +78,15 @@ public class KarthesischesProduktTest { //System.out.println("undMenge:"+oM3.cartesianProduct()); assertTrue(oM3.cartesianProduct().size()==0); } + + @Test + public void test6(){ + OderMenge oM1 = new OderMenge<>(); + OderMenge oM2 = new OderMenge<>(); + UndMenge oM3 = new UndMenge<>(); + oM3.addItems(oM1); + oM3.addItems(oM2); + //System.out.println("undMenge:"+oM3.cartesianProduct()); + assertTrue(oM3.cartesianProduct().size()==0); + } } diff --git a/test/unify/UnifyFilter.jav.log b/test/unify/UnifyFilter.jav.log index be41765b..365cb944 100644 --- a/test/unify/UnifyFilter.jav.log +++ b/test/unify/UnifyFilter.jav.log @@ -846,24 +846,18 @@ Typeinference: Prozessing statement: TPH B [var] - TYPEINFERENCE de.dhbwstuttgart.syntaxtree.Class: Erstellte Constraints: [de.dhbwstuttgart.typeinference.SingleConstraint@7106e68e [[ (void <. TPH ABI), -(TPH B <. Test), ] | -[ +(TPH B <. Test), ] | [ (void <. TPH ABI), -(TPH B <. Klasse1), ] | -[ +(TPH B <. Klasse1), ] | [ (void <. TPH ABI), -(TPH B <. Klasse2), ] | -] +(TPH B <. Klasse2), ] | ] [[ (void <. TPH ABJ), -(TPH B <. Test), ] | -[ +(TPH B <. Test), ] | [ (void <. TPH ABJ), -(TPH B <. Klasse1), ] | -[ +(TPH B <. Klasse1), ] | [ (void <. TPH ABJ), -(TPH B <. Klasse2), ] | -] +(TPH B <. Klasse2), ] | ] de.dhbwstuttgart.typeinference.SingleConstraint@7eda2dbb de.dhbwstuttgart.typeinference.SingleConstraint@6576fe71 ] - TYPEINFERENCE @@ -945,24 +939,18 @@ Typeinference: Übriggebliebene Konstraints: [de.dhbwstuttgart.typeinference.SingleConstraint@7106e68e [[ (void <. TPH ABI), -(TPH B <. Test), ] | -[ +(TPH B <. Test), ] | [ (void <. TPH ABI), -(TPH B <. Klasse1), ] | -[ +(TPH B <. Klasse1), ] | [ (void <. TPH ABI), -(TPH B <. Klasse2), ] | -] +(TPH B <. Klasse2), ] | ] [[ (void <. TPH ABJ), -(TPH B <. Test), ] | -[ +(TPH B <. Test), ] | [ (void <. TPH ABJ), -(TPH B <. Klasse1), ] | -[ +(TPH B <. Klasse1), ] | [ (void <. TPH ABJ), -(TPH B <. Klasse2), ] | -] +(TPH B <. Klasse2), ] | ] de.dhbwstuttgart.typeinference.SingleConstraint@7eda2dbb de.dhbwstuttgart.typeinference.SingleConstraint@6576fe71 de.dhbwstuttgart.typeinference.SingleConstraint@76fb509a @@ -1382,15 +1370,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] [[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -1459,10 +1443,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Test)Equal, @@ -1530,10 +1512,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -1547,8 +1527,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -1580,8 +1559,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2061,15 +2039,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] [[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2138,10 +2112,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse1)Equal, @@ -2209,10 +2181,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -2226,8 +2196,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2259,8 +2228,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2740,15 +2708,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] [[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2817,10 +2781,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse2)Equal, @@ -2888,10 +2850,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -2905,8 +2865,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -2938,8 +2897,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -3419,15 +3377,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] [[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -3496,10 +3450,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Test)Equal, @@ -3567,10 +3519,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -3584,8 +3534,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -3617,8 +3566,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4098,15 +4046,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] [[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4175,10 +4119,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse1)Equal, @@ -4246,10 +4188,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -4263,8 +4203,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4296,8 +4235,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4777,15 +4715,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] [[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4854,10 +4788,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse2)Equal, @@ -4925,10 +4857,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -4942,8 +4872,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -4975,8 +4904,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -5456,15 +5384,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] [[ -(TPH B = Test), ] | -[ -(TPH B = ? extends Test), ] | -] +(TPH B = Test), ] | [ +(TPH B = ? extends Test), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -5533,10 +5457,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Test)Equal, @@ -5604,10 +5526,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Test)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Test), ] | -[ -(Test = ? extends Test), ] | -] - TYPEINFERENCE +(TPH B = Test), ] | [ +(Test = ? extends Test), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -5621,8 +5541,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -5654,8 +5573,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -6135,15 +6053,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] [[ -(TPH B = Klasse1), ] | -[ -(TPH B = ? extends Klasse1), ] | -] +(TPH B = Klasse1), ] | [ +(TPH B = ? extends Klasse1), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -6212,10 +6126,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse1)Equal, @@ -6283,10 +6195,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse1)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse1), ] | -[ -(Klasse1 = ? extends Klasse1), ] | -] - TYPEINFERENCE +(TPH B = Klasse1), ] | [ +(Klasse1 = ? extends Klasse1), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -6300,8 +6210,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -6333,8 +6242,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -6814,15 +6722,11 @@ de.dhbwstuttgart.typeinference.unify.Unify: Menge E ist leer! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] [[ -(TPH B = Klasse2), ] | -[ -(TPH B = ? extends Klasse2), ] | -] +(TPH B = Klasse2), ] | [ +(TPH B = ? extends Klasse2), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -6891,10 +6795,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (TPH B = Klasse2)Equal, @@ -6962,10 +6864,8 @@ de.dhbwstuttgart.typeinference.unify.Unify: Filtere Constraints: (TPH B = ? extends Klasse2)] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Ergebnis: [] - UNIFY Filter: Ausgesondertes Constraint: [[ -(TPH B = Klasse2), ] | -[ -(Klasse2 = ? extends Klasse2), ] | -] - TYPEINFERENCE +(TPH B = Klasse2), ] | [ +(Klasse2 = ? extends Klasse2), ] | ] - TYPEINFERENCE de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { (void <. TPH ABI)Smaller } - UNIFY @@ -6979,8 +6879,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABI = void), ] | -] +(TPH ABI = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { @@ -7012,8 +6911,7 @@ de.dhbwstuttgart.typeinference.unify.Unify: NACH REDUCE2 - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: --> keine Regel anwendbar --> umkopieren !!!!!!!!!!!!!!!!!!!!! - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Filtere 'WrongConstraints' auf: [[[ -(TPH ABJ = void), ] | -] +(TPH ABJ = void), ] | ] ] - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: ******************************* - UNIFY de.dhbwstuttgart.typeinference.unify.Unify: Menge E = { From 15e9fb44b897ba3c95af0d1f90a3d056dabdf9a6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 26 May 2015 21:43:05 +0200 Subject: [PATCH 100/186] Trennung von KomplexeMenge und COnstraintsSet. Experimenteller Zustand --- .../typeinference/ConstraintPair.java | 2 +- .../typeinference/ConstraintsSet.java | 129 ++++-------------- .../typeinference/OderConstraint.java | 84 +++++------- .../typeinference/OderMenge.java | 12 ++ .../typeinference/SingleConstraint.java | 42 +++--- .../typeinference/UndConstraint.java | 42 +----- .../typeinference/unify/Unify.java | 4 +- 7 files changed, 105 insertions(+), 210 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java b/src/de/dhbwstuttgart/typeinference/ConstraintPair.java index f4915139..cadbb845 100644 --- a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintPair.java @@ -7,7 +7,7 @@ public class ConstraintPair { public ConstraintPair(ConstraintType t1, ConstraintType t2){ p = new Pair(t1.getType(), t2.getType()); } - + public Pair getPair(){ return p; } diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index ec32cc37..96beb3be 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -1,123 +1,57 @@ package de.dhbwstuttgart.typeinference; import java.util.Iterator; - -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; +import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; -interface Constraint{ - -} - -public class ConstraintsSet{ - private UndMenge set = new UndMenge<>(); +public class ConstraintsSet implements Iterable{ private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); - - public void add(ConstraintsSet CSet){ - for(KomplexeMenge i : CSet.set.set){ - this.set.addItems(i); - } - } - - public void add(KomplexeMenge constraint){ - this.set.addItems(constraint); - } - - - /* - private UndConstraint constraintsSet; + private Menge constraintsSet; public ConstraintsSet(){ - constraintsSet = new UndConstraint(); + constraintsSet = new Menge(); } public void add(ConstraintsSet CSet){ - constraintsSet.addItems(CSet.getConstraints()); + for(OderConstraint element : CSet) + add(element); } public void add(OderConstraint constraint){ - constraintsSet.addItems(constraint); + constraintsSet.add(constraint); } - public UndConstraint getConstraints(){ - return constraintsSet; - } - */ /** * Liefert alle Constraint-Variationen * @return */ - /* - public Menge> getConstraints(){ - - Menge> ret = new Menge>(); + public Vector> getConstraints(){ + Vector> ret = new Vector>(); for(OderConstraint con : constraintsSet){ ret.add(con.getUndConstraints()); } ret = new KarthesischesProdukt().berechneKarthesischesProdukt(ret); return ret; - } - @Override public String toString(){ - return constraintsSet.toString(); - } - -*/ - /** - * - * @param unify - */ - public void filterWrongConstraints(Unifier unify) { - /* - Menge> newSet = new Menge>(); - for(OderMenge orSet : this.getOrSets()){ - OderMenge filtered = this.filterOrSet(unify, orSet); - newSet.add(filtered); - } - for(KomplexeMenge i : this.set.set){ - newSet.addAll(i.getAndSets()); - } - this.set.set = newSet; - - Menge> newSet = new Menge>(); - for(OderMenge orSet : this.getOrSets()){ - Menge> res = unify.apply(orSet.getItems()); - if(res.size()>0){ - newSet.add(orSet); - }else{ - Logger.getLogger(this.getClass().getName()) - .debug("Ausgesondertes Constraint: "+orSet, Section.TYPEINFERENCE); - } - } - for(KomplexeMenge i : set){ - newSet.addAll(i.getAndSets()); - } - this.set = newSet; - - */ - } - - private OderMenge filterOrSet(Unifier unify, OderMenge orMenge){ - /* - OderMenge ret = new OderMenge(); - for(OderMenge m : orMenge.getOrSets()){ - ret.addItems(this.filterOrSet(unify, m)); - } - for(UndMenge m : orMenge.getAndSets()){ - Menge> res = unify.apply(m.getItems()); - if(res.size()>0){ - ret.addItems(m); - }else{ - Logger.getLogger(this.getClass().getName()) - .debug("Ausgesondertes Constraint: "+m, Section.TYPEINFERENCE); - } + String ret =""; + for(OderConstraint constraint : this){ + ret += constraint.toString()+"\n"; } return ret; - */ - return orMenge; + } + + public Iterator iterator() { + return constraintsSet.iterator(); + } + + public void filterWrongConstraints(Unifier unify) { + for(OderConstraint constraint : this){ + constraint.filterWrongConstraints(unify); + } } /** @@ -125,23 +59,21 @@ public class ConstraintsSet{ * @param unifier */ public void unifyUndConstraints(Unifier unifier) { - /* - Menge uCons = this.filterUndConstraints(); - Menge alleUndConstraints = new Menge<>(); + Vector uCons = this.filterUndConstraints(); + Vector alleUndConstraints = new Vector<>(); for(UndConstraint undConstraint : uCons){ alleUndConstraints.addAll(undConstraint.getConstraintPairs()); } this.filterWrongConstraints( (pairs)->{ - Menge undConstraintsUndPairs = new Menge<>(); + Vector undConstraintsUndPairs = new Vector<>(); undConstraintsUndPairs.addAll(pairs); undConstraintsUndPairs.addAll(alleUndConstraints); log.debug("Versuche Pairs auszusondern:\n"+pairs, Section.TYPEINFERENCE); log.debug("Unifiziere:\n"+undConstraintsUndPairs, Section.TYPEINFERENCE); - Menge> unifyResult = unifier.apply(undConstraintsUndPairs); + Vector> unifyResult = unifier.apply(undConstraintsUndPairs); return unifyResult; }); - */ } /** @@ -149,15 +81,12 @@ public class ConstraintsSet{ * UndConstraints, welche sich nicht innerhalb eines OderConstraints befinden, herausgefiltert * @return [u1, ... , uN] */ - private Menge filterUndConstraints() { - /* - Menge ret = new Menge<>(); + private Vector filterUndConstraints() { + Vector ret = new Vector<>(); for(OderConstraint con : constraintsSet){ UndConstraint filtered = con.filterUndConstraints(); if(filtered != null)ret.add(filtered); } return ret; - */ - return null; } } diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index ca3d2b01..1c734f79 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; @@ -10,42 +10,41 @@ import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.unify.Unifier; public class OderConstraint{ - private OderMenge oSet = new OderMenge(); - //private Menge oderConstraintPairs; + private Menge oderConstraintPairs; private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); /** - * Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu. + * Erstellt ein neues Oder Constraint und f�gt bereits ein Constraint hinzu. * @param p1 * @param p2 */ public OderConstraint(ConstraintType p1, ConstraintType p2){ if(p1 == null || p2 == null)throw new NullPointerException(); ConstraintPair constraintPair = new ConstraintPair(p1,p2); + oderConstraintPairs = new Menge(); this.addConstraint(constraintPair); } public OderConstraint(){ + oderConstraintPairs = new Menge(); } /** - * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren. + * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verkn�pfungen (Oder/Und) verloren. * @return - - public Menge getConstraintPairs(){ - Menge ret = new Menge(); + */ + public Vector getConstraintPairs(){ + Vector ret = new Vector(); for(UndConstraint oC : this.oderConstraintPairs){ ret.addAll(oC.getConstraintPairs()); } return ret; - return this.g } - */ /** - * Fügt ein Pair(p1, p2) dem Constraint hinzu + * F�gt ein Pair(p1, p2) dem Constraint hinzu * @param p1 * @param p2 */ @@ -58,19 +57,37 @@ public class OderConstraint{ * @param toAdd */ public void addConstraint(ConstraintPair toAdd){ - //oderConstraintPairs.add(new SingleConstraint(toAdd)); - this.oSet.addItem(toAdd.getPair()); + oderConstraintPairs.add(new SingleConstraint(toAdd)); } - public void addConstraint(UndConstraint methodConstraint) { - this.oSet.addItems(methodConstraint.getConstraints());//oderConstraintPairs.add(methodConstraint); + + @Override + public String toString(){ + String ret = "["; + for(UndConstraint p : this.getUndConstraints()){ + ret += p.toString()+ "| "; + } + return ret+"]"; } - //TODO: Funktionalität für filter implementieren - void filterWrongConstraints(Unifier unifier) { + public Vector getUndConstraints() { + return this.oderConstraintPairs; /* - Menge filteredConstraints = new Menge<>(); + Vector ret = new Vector(); + for(Pair p : this.getConstraintPairs()){ + ret.add(new UndConstraint(p.TA1,p.TA2)); + } + return ret; + */ + } + + public void addConstraint(UndConstraint methodConstraint) { + oderConstraintPairs.add(methodConstraint); + } + + void filterWrongConstraints(Unifier unifier) { + Vector filteredConstraints = new Vector<>(); for(UndConstraint cons : this.getUndConstraints()){ - Menge> unifierResult = unifier.apply(cons.getItems()); + Vector> unifierResult = unifier.apply(cons.getConstraintPairs()); if(!unifierResult.isEmpty()){ filteredConstraints.add(cons); }else{ @@ -78,42 +95,13 @@ public class OderConstraint{ } } this.oderConstraintPairs = filteredConstraints; - */ } UndConstraint filterUndConstraints() { - return null; - /* if(this.oderConstraintPairs.size()==1){ return this.oderConstraintPairs.firstElement(); } return null; - */ - } - - public void addItems(UndConstraint uCons) { - } - /* - @Override - public String toString(){ - String ret = "["; - for(UndConstraint p : this.getUndConstraints()){ - ret += p.toString()+ " | "; - } - return ret+"]"; - } - - public Menge getUndConstraints() { - return this.set; - - Menge ret = new Menge(); - for(Pair p : this.getConstraintPairs()){ - ret.add(new UndConstraint(p.TA1,p.TA2)); - } - return ret; - - } - */ } diff --git a/src/de/dhbwstuttgart/typeinference/OderMenge.java b/src/de/dhbwstuttgart/typeinference/OderMenge.java index 54cabb65..5d2a3ef9 100644 --- a/src/de/dhbwstuttgart/typeinference/OderMenge.java +++ b/src/de/dhbwstuttgart/typeinference/OderMenge.java @@ -18,10 +18,17 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * Item */ +interface Mapper{ + B applyOrSet(OderMenge i); + B applyAndSet(UndMenge i); + B applySingle(EinzelElement i); +} + interface KomplexeMenge{ void addItems(KomplexeMenge item); void addItem(A item); Menge> cartesianProduct(); + KomplexeMenge map(Mapper m); } public class OderMenge implements KomplexeMenge{ @@ -85,4 +92,9 @@ public class OderMenge implements KomplexeMenge{ } return ret + "]"; } + + @Override + public KomplexeMenge map(Mapper m) { + return m.applyOrSet(this); + } } diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 491910bc..2ab2e624 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import de.dhbwstuttgart.typeinference.Menge; +import java.util.Vector; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; @@ -11,51 +11,47 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; /** - * Beschreibung von Herrn Plümicke: - * "The set of constraints consists of constraints of the form θ R θ' , where θ and - * θ' are Java types and R (R ∈ { < , { - //private Pair constraintPair; //entspricht θ condition θ' +public class SingleConstraint extends UndConstraint{ + private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) public SingleConstraint(ConstraintType p1, ConstraintType p2){ - super(new ConstraintPair(p1,p2).getPair()); //super(p1,p2); - //ConstraintPair constraintPair = new ConstraintPair(p1,p2);//super.getConstraintPairs().firstElement(); - //this.addConstraint(constraintPair); + ConstraintPair constraintPair = new ConstraintPair(p1,p2);//super.getConstraintPairs().firstElement(); + this.addConstraint(constraintPair); } public SingleConstraint(ConstraintPair toAdd) { - super(toAdd.getPair()); - //this.addConstraint(toAdd); + this.addConstraint(toAdd); } public Pair getPair(){ - return this.cartesianProduct().firstElement().firstElement(); + return constraintPair; } - /* - @Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird. - public Menge getConstraintPairs(){ - Menge ret = new Menge(); + @Override //Methode überschreiben, damit immer nur ein Vector mit nur einem Element zurückgeliefert wird. + public Vector getConstraintPairs(){ + Vector ret = new Vector(); ret.add(constraintPair); return ret; } - */ public void addConstraint(ConstraintPair toAdd){ - //if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); + if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); Type p1 = toAdd.getPair().TA1; Type p2 = toAdd.getPair().TA2; if(p1==null || p2 == null)throw new NullPointerException(); - this.addItem(toAdd.getPair()); + //Hier werden die GTVs zu TPH gewandelt. //if(p1 instanceof RefType)((RefType)p1).GTV2TPH(); @@ -64,24 +60,22 @@ public class SingleConstraint extends EinzelElement{ //if((p1 instanceof GenericTypeVar))p1 = ((GenericTypeVar)p1).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// //if((p2 instanceof GenericTypeVar))p2 = ((GenericTypeVar)p2).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// - // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. + // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1); //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2); //if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2))) - //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: + //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: // throw new TypinferenzException("Ein Constraint darf nur aus TypePlaceholdern und Reftypes bestehen"); //} //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); - //constraintPair = new Pair(p1,p2); + constraintPair = new Pair(p1,p2); } - /* @Override public String toString(){ return ""+constraintPair.TA1.toString()+" < "+constraintPair.TA2.toString(); } - */ } diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 99ef38b4..6dd7ec14 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -1,57 +1,43 @@ package de.dhbwstuttgart.typeinference; -import java.util.Iterator; +import java.util.Vector; -import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.unify.Unifier; /** - * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. + * Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft. * @author janulrich * */ -public class UndConstraint{ +public class UndConstraint extends OderConstraint { - private UndMenge uSet = new UndMenge(); - public UndConstraint(ConstraintType p1, ConstraintType p2) { - //super(p1, p2); - this.uSet.addItem(new SingleConstraint(p1,p2).getPair()); + super(p1, p2); } public UndConstraint() { super(); } - UndMenge getConstraints(){ - return uSet; - } - - /* @Override - public Menge getUndConstraints() { - Menge ret = new Menge(); + public Vector getUndConstraints() { + Vector ret = new Vector(); ret.add(this); return ret; } - */ @Override public String toString(){ //String ret = super.toString(); //return ret.replace('|', ','); - /* String ret = "["; - for(Pair p : this.uSet.getItems()){ + for(Pair p : this.getConstraintPairs()){ ret += p.toString()+ ", "; } return ret+"]"; - */ - return uSet.toString(); } - /* @Override void filterWrongConstraints(Unifier unifier) { //In einem UndConstraint gibt es keine falschen Constraints @@ -61,18 +47,4 @@ public class UndConstraint{ UndConstraint filterUndConstraints(){ return this; } - - - @Override - public Iterator iterator() { - return this.uSet.getItems().iterator(); - } - */ - public void addConstraint(ConstraintType type, ConstraintType type2) { - this.uSet.addItem(new ConstraintPair(type,type2).getPair()); - } - - public void addConstraint(ConstraintPair constraintPair) { - this.uSet.addItem(constraintPair.getPair()); - } } diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index c44633fe..5ddca360 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -638,9 +638,9 @@ public class Unify for(Menge pairs : vecvecpair){ UndConstraint uCons = new UndConstraint(); for(Pair p : pairs){ - uCons.addItem(p); + uCons.addConstraint(new ConstraintPair(p)); } - orConstraints.addItems(uCons); + orConstraints.addConstraint(uCons); } cSet.addItems(orConstraints); } From 8692a01c508424702643267aee4013501180fa6b Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 26 May 2015 21:45:47 +0200 Subject: [PATCH 101/186] =?UTF-8?q?BCEL-Library=20anf=C3=BCgen=20und=20Com?= =?UTF-8?q?pliance=20auf=20Java=208=20erh=C3=B6hen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 22 ++++----- .settings/org.eclipse.jdt.core.prefs | 6 +-- bin/log4j.xml | 70 +++++++++++++-------------- bin/log4jTesting.xml | 48 +++++++++--------- lib/bcel-5.2.jar | Bin 0 -> 533339 bytes 5 files changed, 73 insertions(+), 73 deletions(-) create mode 100644 lib/bcel-5.2.jar diff --git a/.classpath b/.classpath index a88ba6e0..f142a181 100755 --- a/.classpath +++ b/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 37e3515b..552a5c96 100755 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -2,12 +2,12 @@ eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/bcel-5.2.jar b/lib/bcel-5.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..2fa90cebdc06e396031d8e52c77dead0eda02d89 GIT binary patch literal 533339 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%0Dekr$zx=h_pXfY?wJ0?zP+$WZ$48BKq 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

    wIt2YNQ9eN26pb<@=K?pl30M;kT8^DT9uJ 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

    o$*GV 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

    f9mV{ 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 MGTEM0$n|9Z2X)^B`~Uy| literal 0 HcmV?d00001 From 6030682400e6db1bbd569529136a9581939cf445 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 27 May 2015 12:53:47 +0200 Subject: [PATCH 102/186] =?UTF-8?q?Test=20f=C3=BCr=20Bytecode=20anf=C3=BCg?= =?UTF-8?q?en.=20Beispielhaft=20generateBytecode-Methode=20in=20MyCompiler?= =?UTF-8?q?=20implementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/core/MyCompiler.java | 18 +++++++++ src/de/dhbwstuttgart/core/MyCompilerAPI.java | 4 +- test/bytecode/EmptyClass.jav | 2 + test/bytecode/EmptyClass.java | 42 ++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/bytecode/EmptyClass.jav create mode 100644 test/bytecode/EmptyClass.java diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 4304e55a..1b776429 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -36,6 +36,7 @@ import de.dhbwstuttgart.syntaxtree.type.ITypeContainer; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.ByteCodeResult; import de.dhbwstuttgart.typeinference.FunNInterface; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.ResultSet; @@ -852,5 +853,22 @@ public class MyCompiler implements MyCompilerAPI this.m_AbstractSyntaxTree.add(ret); return ret; } + + @Override + public ByteCodeResult generateBytecode() { + /* + * TODO Für das Bytecode-Team: + * - generateBytecode-Methode implementieren + * - Sich einen passenden Container für den Bytecode überlegen + * - Dieser wird von generateBytecode zurückgeliefert und sollte die Möglichkeit zum schreiben von Bytecode in eine Datei bieten. + * - wird der Rückgabetyp von generateBytecode in MyCompiler geändert, so muss auch der Rückgabetyp im Interface MyCompilerAPI geändert werden + */ + try { + return this.m_AbstractSyntaxTree.firstElement().KlassenVektor.firstElement().genByteCode(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } } // ino.end diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index 760c1929..2898b3ba 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -6,12 +6,13 @@ package de.dhbwstuttgart.core; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaParser; import de.dhbwstuttgart.syntaxtree.SourceFile; +import de.dhbwstuttgart.typeinference.ByteCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.exceptions.ParserError; @@ -121,5 +122,6 @@ public interface MyCompilerAPI */ public SourceFile parse(String sourceCode) throws ParserError; + public ByteCodeResult generateBytecode(); } // ino.end diff --git a/test/bytecode/EmptyClass.jav b/test/bytecode/EmptyClass.jav new file mode 100644 index 00000000..29d3c626 --- /dev/null +++ b/test/bytecode/EmptyClass.jav @@ -0,0 +1,2 @@ +class EmptyClass{ +} \ No newline at end of file diff --git a/test/bytecode/EmptyClass.java b/test/bytecode/EmptyClass.java new file mode 100644 index 00000000..44c78d50 --- /dev/null +++ b/test/bytecode/EmptyClass.java @@ -0,0 +1,42 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class EmptyClass { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "EmptyClass.jav"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration(); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From f3a324fb3865b3c7287001bd669ff5fb63fbb59b Mon Sep 17 00:00:00 2001 From: stan Date: Wed, 27 May 2015 15:57:15 +0200 Subject: [PATCH 103/186] =?UTF-8?q?genByteCode=20f=C3=BCr=20Constructor=20?= =?UTF-8?q?implementiert.=20Unfertig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/core/MyCompiler.java | 4 ++- src/de/dhbwstuttgart/syntaxtree/Class.java | 32 +++++++++---------- .../dhbwstuttgart/syntaxtree/Constructor.java | 30 ++++++++++++++++- src/de/dhbwstuttgart/syntaxtree/Field.java | 9 +++++- .../syntaxtree/FieldDeclaration.java | 9 +++++- src/de/dhbwstuttgart/syntaxtree/Method.java | 12 +++++-- .../syntaxtree/statement/MethodCall.java | 1 - .../typeinference/ByteCodeResult.java | 28 ++++------------ test/bytecode/EmptyClass.java | 9 ++++-- 9 files changed, 86 insertions(+), 48 deletions(-) diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 1b776429..5c066cee 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -864,7 +864,9 @@ public class MyCompiler implements MyCompilerAPI * - wird der Rückgabetyp von generateBytecode in MyCompiler geändert, so muss auch der Rückgabetyp im Interface MyCompilerAPI geändert werden */ try { - return this.m_AbstractSyntaxTree.firstElement().KlassenVektor.firstElement().genByteCode(); + SourceFile parsedFile = this.m_AbstractSyntaxTree.firstElement(); + Class parsedClass = parsedFile.KlassenVektor.firstElement(); + return parsedClass.genByteCode(); } catch (IOException e) { e.printStackTrace(); return null; diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 5acd3c00..fecde547 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -16,9 +16,9 @@ import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.logger.SectionLogger; import de.dhbwstuttgart.core.AClassOrInterface; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; @@ -37,13 +37,16 @@ import de.dhbwstuttgart.typeinference.*; import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.DebugException; +import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.unify.FC_TTO; import de.dhbwstuttgart.typeinference.unify.Unify; + import org.apache.bcel.generic.*; import org.apache.bcel.classfile.*; import org.apache.bcel.*; + import java.io.*; @@ -70,26 +73,21 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //Method created with BCEL to generate ByteCode public ByteCodeResult genByteCode() throws IOException { - ByteCodeResult code = new ByteCodeResult(); - _cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //new String necessary? + + SectionLogger logger = Logger.getSectionLogger(this.getClass().getName(), Section.CODEGEN); + logger.debug("Test"); + + if(pkgName != null)throw new NotImplementedException(); + _cg = new ClassGen(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //new String necessary? _cp = _cg.getConstantPool(); _factory = new InstructionFactory(_cg, _cp); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - InstructionList il = new InstructionList(); - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", pkgName.get_Name() + "." + name, il, _cp); - - InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor - il.append(_factory.createInvoke("java.lang.Object", "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); - InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor - method.setMaxStack(); - method.setMaxLocals(); - _cg.addMethod(method.getMethod()); - il.dispose(); - _cg.getJavaClass().dump(out); - code.attach(out.toString()); - + for(Field field : this.fielddecl){ + field.genByteCode(_cg); + } + + ByteCodeResult code = new ByteCodeResult(_cg); return code; /*ByteCodeResult bc = new ByteCodeResult(); diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index e7b29569..958a0f30 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -1,7 +1,15 @@ package de.dhbwstuttgart.syntaxtree; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.Constants; +import org.apache.bcel.classfile.ConstantPool; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.MethodGen; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.misc.DeclId; @@ -42,6 +50,26 @@ public class Constructor extends Method { ret.addAssumption(new ConstructorAssumption(this, parentClass)); return ret; } + + @Override + public void genByteCode(ClassGen cg) { + ConstantPoolGen _cp = cg.getConstantPool(); + InstructionFactory _factory = new InstructionFactory(cg, _cp); + InstructionList il = new InstructionList(); + Class parentClass = this.getParentClass(); + //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", parentClass.name, il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor + il.append(_factory.createInvoke(this.getParentClass().superclassid.toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor + method.setMaxStack(); + method.setMaxLocals(); + cg.addMethod(method.getMethod()); + il.dispose(); + } + + /* @Override public void parserPostProcessing(SyntaxTreeNode parent){ diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 2b40a085..cfce0dad 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -1,7 +1,8 @@ package de.dhbwstuttgart.syntaxtree; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -171,4 +172,10 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta public boolean isClass() { return false; } + + /** + * Fügt das das Feld zu ClassGen hinzu + * @param cg + */ + public abstract void genByteCode(ClassGen cg); } diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index b452e3fc..eefd7482 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -1,7 +1,8 @@ package de.dhbwstuttgart.syntaxtree; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.statement.Expr; @@ -157,4 +158,10 @@ public class FieldDeclaration extends Field{ if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben } + @Override + public void genByteCode(ClassGen cg) { + // TODO Auto-generated method stub + + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index a288aa98..88c3478c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -710,6 +711,13 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable if(!this.parameterlist.equals(equals.parameterlist))return false; return super.equals(obj); } + + @Override + public void genByteCode(ClassGen cg) { + // TODO Auto-generated method stub + + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 76461859..8860f9b2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -48,7 +48,6 @@ public class MethodCall extends Expr } // ino.end - // ino.attribute.receiver.25639.declaration /** * Diese Variable speichert die Expression, welche die Klasse von welcher die Methode aufgerufen wird darstellt. diff --git a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java index e0f2b382..b83a5d65 100644 --- a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java +++ b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java @@ -1,38 +1,24 @@ package de.dhbwstuttgart.typeinference; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; public class ByteCodeResult{ - private String byteCode = ""; + private ClassGen byteCode; //TODO: unresolvedTPHs entfernen. BROKEN! private Menge unresolvedTPHs = new Menge(); - public ByteCodeResult(){ - + public ByteCodeResult(ClassGen byteCode){ + this.byteCode = byteCode; } - public ByteCodeResult(String byteCode){ - this.byteCode += byteCode; - } - - public String getByteCode(){ + public ClassGen getByteCode(){ return byteCode; } - public ByteCodeResult attach(ByteCodeResult byteCodeResult){ - this.byteCode += byteCodeResult.getByteCode(); - //Alle TPH anfügen: - for(TypePlaceholder tph : byteCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph); - return this; - } - - public ByteCodeResult attach(String javaCode){ - this.byteCode += javaCode; - return this; - } public void addUnresolvedTPH(TypePlaceholder typePlaceholder) { unresolvedTPHs.add(typePlaceholder); @@ -49,7 +35,7 @@ public class ByteCodeResult{ @Override public String toString(){ - return getByteCode(); + return getByteCode().toString(); } @Override diff --git a/test/bytecode/EmptyClass.java b/test/bytecode/EmptyClass.java index 44c78d50..affdf31d 100644 --- a/test/bytecode/EmptyClass.java +++ b/test/bytecode/EmptyClass.java @@ -13,6 +13,7 @@ import plugindevelopment.TypeInsertTester; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.typeinference.ByteCodeResult; import de.dhbwstuttgart.typeinference.Menge; @@ -23,16 +24,18 @@ public class EmptyClass { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; public final static String testFile = "EmptyClass.jav"; - + public final static String outputFile = "EmptyClass.class"; + @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration(); + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); + //compiler.typeReconstruction(); ByteCodeResult bytecode = compiler.generateBytecode(); System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); } catch (IOException | yyException e) { e.printStackTrace(); TestCase.fail(); From e6606d08eeb7cdac29be58008165a6dfa3255957 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 3 Jun 2015 11:27:39 +0200 Subject: [PATCH 104/186] ConstraintPair erbt von Pair --- .../typeinference/ConstraintPair.java | 10 +-- .../typeinference/ConstraintsSet.java | 30 ++++--- .../typeinference/OderConstraint.java | 16 ++-- .../typeinference/OderMenge.java | 63 ++------------- .../typeinference/SingleConstraint.java | 28 ++----- .../typeinference/UndConstraint.java | 31 +++++-- .../dhbwstuttgart/typeinference/UndMenge.java | 81 ++----------------- .../typeinference/unify/Unify.java | 18 ++--- 8 files changed, 77 insertions(+), 200 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java b/src/de/dhbwstuttgart/typeinference/ConstraintPair.java index cadbb845..220e5673 100644 --- a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintPair.java @@ -1,15 +1,9 @@ package de.dhbwstuttgart.typeinference; -public class ConstraintPair { +public class ConstraintPair extends Pair{ - private Pair p; - public ConstraintPair(ConstraintType t1, ConstraintType t2){ - p = new Pair(t1.getType(), t2.getType()); - } - - public Pair getPair(){ - return p; + super(t1.getType(), t2.getType()); } } diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 96beb3be..48d4c4dc 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -6,7 +6,7 @@ import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class ConstraintsSet implements Iterable{ +public class ConstraintsSet extends UndMenge implements Iterable{ private static final Logger log = Logger.getLogger(ConstraintsSet.class.getName()); private Menge constraintsSet; @@ -21,19 +21,6 @@ public class ConstraintsSet implements Iterable{ public void add(OderConstraint constraint){ constraintsSet.add(constraint); } - - /** - * Liefert alle Constraint-Variationen - * @return - */ - public Vector> getConstraints(){ - Vector> ret = new Vector>(); - for(OderConstraint con : constraintsSet){ - ret.add(con.getUndConstraints()); - } - ret = new KarthesischesProdukt().berechneKarthesischesProdukt(ret); - return ret; - } @Override public String toString(){ @@ -66,12 +53,12 @@ public class ConstraintsSet implements Iterable{ } this.filterWrongConstraints( (pairs)->{ - Vector undConstraintsUndPairs = new Vector<>(); + Menge undConstraintsUndPairs = new Menge<>(); undConstraintsUndPairs.addAll(pairs); undConstraintsUndPairs.addAll(alleUndConstraints); log.debug("Versuche Pairs auszusondern:\n"+pairs, Section.TYPEINFERENCE); log.debug("Unifiziere:\n"+undConstraintsUndPairs, Section.TYPEINFERENCE); - Vector> unifyResult = unifier.apply(undConstraintsUndPairs); + Menge> unifyResult = unifier.apply(undConstraintsUndPairs); return unifyResult; }); } @@ -89,4 +76,15 @@ public class ConstraintsSet implements Iterable{ } return ret; } + + public void add(UndConstraint singleConstraint) { + OderConstraint toAdd = new OderConstraint(); + toAdd.addConstraint(singleConstraint); + constraintsSet.add(toAdd); + } + + @Override + public Menge> getSet() { + return this.constraintsSet; + } } diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index 1c734f79..0c631095 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -9,7 +9,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.unify.Unifier; -public class OderConstraint{ +public class OderConstraint extends OderMenge{ private Menge oderConstraintPairs; private final static Logger logger = Logger.getLogger(OderConstraint.class.getName()); @@ -35,8 +35,8 @@ public class OderConstraint{ * Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verkn�pfungen (Oder/Und) verloren. * @return */ - public Vector getConstraintPairs(){ - Vector ret = new Vector(); + public Menge getConstraintPairs(){ + Menge ret = new Menge(); for(UndConstraint oC : this.oderConstraintPairs){ ret.addAll(oC.getConstraintPairs()); } @@ -85,9 +85,9 @@ public class OderConstraint{ } void filterWrongConstraints(Unifier unifier) { - Vector filteredConstraints = new Vector<>(); + Menge filteredConstraints = new Menge<>(); for(UndConstraint cons : this.getUndConstraints()){ - Vector> unifierResult = unifier.apply(cons.getConstraintPairs()); + Menge> unifierResult = unifier.apply(cons.getConstraintPairs()); if(!unifierResult.isEmpty()){ filteredConstraints.add(cons); }else{ @@ -103,5 +103,11 @@ public class OderConstraint{ } return null; } + + @Override + public Menge> getSet() { + return this.oderConstraintPairs; + } + } diff --git a/src/de/dhbwstuttgart/typeinference/OderMenge.java b/src/de/dhbwstuttgart/typeinference/OderMenge.java index 5d2a3ef9..ecaaead0 100644 --- a/src/de/dhbwstuttgart/typeinference/OderMenge.java +++ b/src/de/dhbwstuttgart/typeinference/OderMenge.java @@ -18,83 +18,32 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * Item */ -interface Mapper{ - B applyOrSet(OderMenge i); - B applyAndSet(UndMenge i); - B applySingle(EinzelElement i); -} interface KomplexeMenge{ - void addItems(KomplexeMenge item); - void addItem(A item); + Menge> getSet(); Menge> cartesianProduct(); - KomplexeMenge map(Mapper m); } -public class OderMenge implements KomplexeMenge{ - Menge> set = new Menge<>(); - - @Override - public void addItems(KomplexeMenge item) { - set.add(item); - } - - /* - public Menge getItems(){ - Menge ret = new Menge<>(); - for(KomplexeMenge i : set){ - ret.addAll(i.getItems()); - } - return ret; - } - */ - - @Override - public void addItem(A item) { - set.add(new EinzelElement(item)); - } +public abstract class OderMenge implements KomplexeMenge{ + + public abstract Menge> getSet(); @Override public Menge> cartesianProduct() { Menge> ret = new Menge<>(); - for(KomplexeMenge km : this.set){ + for(KomplexeMenge km : this.getSet()){ ret.addAll(km.cartesianProduct()); } return ret; } - - /* - @Override - public Menge> getOrSets() { - Menge> ret = new Menge<>(); - ret.add(this); - //for(KomplexeMenge i : set){ - // ret.addAll(i.getOrSets()); - //} - return ret; - } - - @Override - public Menge> getAndSets() { - Menge> ret = new Menge<>(); - for(KomplexeMenge i : set){ - ret.addAll(i.getAndSets()); - } - return ret; - } - */ @Override public String toString(){ String ret = "["; - for(KomplexeMenge i : set){ + for(KomplexeMenge i : this.getSet()){ ret += i.toString() + " | "; } return ret + "]"; } - @Override - public KomplexeMenge map(Mapper m) { - return m.applyOrSet(this); - } } diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 2ab2e624..6ac5b4f6 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -21,6 +21,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; * */ public class SingleConstraint extends UndConstraint{ + private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) @@ -39,8 +40,8 @@ public class SingleConstraint extends UndConstraint{ } @Override //Methode überschreiben, damit immer nur ein Vector mit nur einem Element zurückgeliefert wird. - public Vector getConstraintPairs(){ - Vector ret = new Vector(); + public Menge getConstraintPairs(){ + Menge ret = new Menge(); ret.add(constraintPair); return ret; } @@ -48,28 +49,9 @@ public class SingleConstraint extends UndConstraint{ public void addConstraint(ConstraintPair toAdd){ if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); - Type p1 = toAdd.getPair().TA1; - Type p2 = toAdd.getPair().TA2; + Type p1 = toAdd.TA1; + Type p2 = toAdd.TA2; if(p1==null || p2 == null)throw new NullPointerException(); - - - //Hier werden die GTVs zu TPH gewandelt. - //if(p1 instanceof RefType)((RefType)p1).GTV2TPH(); - //if(p2 instanceof RefType)((RefType)p2).GTV2TPH(); - - //if((p1 instanceof GenericTypeVar))p1 = ((GenericTypeVar)p1).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// - //if((p2 instanceof GenericTypeVar))p2 = ((GenericTypeVar)p2).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");// - - // BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert. - //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1); - //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2); - - //if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2))) - //{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind: - // throw new TypinferenzException("Ein Constraint darf nur aus TypePlaceholdern und Reftypes bestehen"); - //} - //if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); - //if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden"); constraintPair = new Pair(p1,p2); } diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index 6dd7ec14..a204b426 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -1,8 +1,10 @@ package de.dhbwstuttgart.typeinference; +import java.util.Collection; import java.util.Vector; import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; import de.dhbwstuttgart.typeinference.unify.Unifier; /** @@ -10,14 +12,32 @@ import de.dhbwstuttgart.typeinference.unify.Unifier; * @author janulrich * */ -public class UndConstraint extends OderConstraint { +public class UndConstraint extends UndMenge { - public UndConstraint(ConstraintType p1, ConstraintType p2) { - super(p1, p2); + Menge> set = new Menge<>(); + + @Override + public Menge> getSet() { + return set; } - public UndConstraint() { - super(); + public Menge getConstraintPairs() { + Menge> ret = this.cartesianProduct(); + if(ret.size() != 1){ + //UndConstraints enthalten nur SingleConstraints, wodurch das Karthesische Produkt nur aus einem Element bestehen kann. + throw new DebugException("Fehler in ConstraintPairs-Bildung"); + } + return ret.firstElement(); + } + + public void addConstraint(ConstraintType type, ConstraintType rT) { + Pair p = new ConstraintPair(type, rT); + this.set.add(new EinzelElement(p)); + } + +/* + public UndConstraint(ConstraintType p1, ConstraintType p2) { + super(p1, p2); } @Override @@ -47,4 +67,5 @@ public class UndConstraint extends OderConstraint { UndConstraint filterUndConstraints(){ return this; } +*/ } diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index fff77db7..98168c1c 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -5,33 +5,15 @@ import java.util.Iterator; import com.rits.cloning.Cloner; -public class UndMenge implements KomplexeMenge{ - Menge> set = new Menge<>(); - - @Override - public void addItems(KomplexeMenge item) { - set.add(item); - } - - public void addItem(A item){ - set.add(new EinzelElement(item)); - } - - /* - public Menge getItems(){ - Menge ret = new Menge<>(); - for(KomplexeMenge i : set){ - ret.addAll(i.getItems()); - } - return ret; - } - */ +public abstract class UndMenge implements KomplexeMenge{ + + public abstract Menge> getSet(); @Override public Menge> cartesianProduct() { Menge> ret = null; Cloner cloner = new Cloner(); - for(KomplexeMenge km : this.set){ + for(KomplexeMenge km : this.getSet()){ if(ret == null){ ret = km.cartesianProduct(); }else{ @@ -49,29 +31,9 @@ public class UndMenge implements KomplexeMenge{ return ret; } - /* - @Override - public Menge> getOrSets() { - Menge> ret = new Menge<>(); - for(KomplexeMenge i : set){ - ret.addAll(i.getOrSets()); - } - return ret; - } - - @Override - public Menge> getAndSets() { - Menge> ret = new Menge<>(); - ret.add(this); - //for(KomplexeMenge i : set){ - // ret.addAll(i.getAndSets()); - //} - return ret; - } - */ public String toString(){ String ret = "["; - for(KomplexeMenge item : set){ + for(KomplexeMenge item : this.getSet()){ ret += item.toString() + " , "; } return ret + "]"; @@ -85,25 +47,12 @@ class EinzelElement implements KomplexeMenge{ public EinzelElement(A element){ item = element; } - - @Override - public void addItems(KomplexeMenge item) { - - } - /* - @Override - public Menge getItems() { - Menge ret = new Menge<>(); - ret.add(item); + public Menge> getSet(){ + Menge> ret = new Menge<>(); + ret.add(this); return ret; } - */ - - @Override - public void addItem(A item) { - - } @Override public Menge> cartesianProduct() { @@ -115,20 +64,6 @@ class EinzelElement implements KomplexeMenge{ return ret; } - /* - @Override - public Menge> getOrSets() { - Menge> ret = new Menge<>(); - return ret; - } - - @Override - public Menge> getAndSets() { - Menge> ret = new Menge<>(); - return ret; - } - */ - @Override public String toString(){ return item.toString(); diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 5ddca360..6569360f 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -630,6 +630,8 @@ public class Unify } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. + + /* //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); @@ -661,22 +663,12 @@ public class Unify cSet.filterWrongConstraints(filterUnify); } - /* - for (Menge> vecvecpair : cartProduktSets){ - OderConstraint orConstraints = new OderConstraint(); - for(Menge pairs : vecvecpair){ - UndConstraint uCons = new UndConstraint(); - for(Pair p : pairs){ - uCons.addConstraint(new ConstraintPair(p.TA1)); - } - } - } - */ Menge> bigCartProductErg = cSet.cartesianProduct(); if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg); + */ - /* + ///* //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet. Menge helpvp; Menge> bigCartProductErg = new Menge>(); @@ -696,7 +688,7 @@ public class Unify } } } - */ + //*/ //Schritt 5: Einsetzen der Subst Regel //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. From 6bb01f012f89b4ea5de56642846a2d41d1c4cc2d Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 3 Jun 2015 14:10:12 +0200 Subject: [PATCH 105/186] =?UTF-8?q?ConstraintsSet=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typeinference/ConstraintsSet.java | 2 +- .../typeinference/OderMenge.java | 13 ---- .../typeinference/SingleConstraint.java | 7 ++ .../dhbwstuttgart/typeinference/UndMenge.java | 30 -------- .../KarthesischesProduktTest.java | 73 ++++++++++++++----- 5 files changed, 63 insertions(+), 62 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 48d4c4dc..032b8f56 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -21,7 +21,7 @@ public class ConstraintsSet extends UndMenge implements Iterable{ - Menge> getSet(); - Menge> cartesianProduct(); -} - public abstract class OderMenge implements KomplexeMenge{ public abstract Menge> getSet(); diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index 6ac5b4f6..f405b9ee 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -31,6 +31,13 @@ public class SingleConstraint extends UndConstraint{ this.addConstraint(constraintPair); } + @Override + public Menge> getSet() { + Menge> ret = new Menge<>(); + ret.add(new EinzelElement<>(constraintPair)); + return ret; + } + public SingleConstraint(ConstraintPair toAdd) { this.addConstraint(toAdd); } diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index 98168c1c..0dd2c06c 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -40,33 +40,3 @@ public abstract class UndMenge implements KomplexeMenge{ } } - -class EinzelElement implements KomplexeMenge{ - private A item; - - public EinzelElement(A element){ - item = element; - } - - public Menge> getSet(){ - Menge> ret = new Menge<>(); - ret.add(this); - return ret; - } - - @Override - public Menge> cartesianProduct() { - Cloner cloner = new Cloner(); - Menge> ret = new Menge<>(); - Menge i = new Menge(); - i.add(cloner.deepClone(item)); - ret.add(i); - return ret; - } - - @Override - public String toString(){ - return item.toString(); - } - -} \ No newline at end of file diff --git a/test/KomplexeMenge/KarthesischesProduktTest.java b/test/KomplexeMenge/KarthesischesProduktTest.java index 6d48b918..89979df8 100644 --- a/test/KomplexeMenge/KarthesischesProduktTest.java +++ b/test/KomplexeMenge/KarthesischesProduktTest.java @@ -4,17 +4,54 @@ import static org.junit.Assert.*; import org.junit.Test; +import de.dhbwstuttgart.typeinference.EinzelElement; +import de.dhbwstuttgart.typeinference.KomplexeMenge; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.OderMenge; import de.dhbwstuttgart.typeinference.UndMenge; +class TestOderMenge extends OderMenge{ + Menge set = new Menge<>(); + + @Override + public Menge> getSet() { + return set; + } + + public void addItem(String string) { + TestUndMenge toAdd = new TestUndMenge(); + toAdd.addItem(string); + set.add(toAdd); + } + public void addItems(TestUndMenge undMenge) { + set.add(undMenge); + } +} + +class TestUndMenge extends UndMenge{ + Menge> set = new Menge<>(); + + @Override + public Menge> getSet() { + return set; + } + public void addItem(String string) { + set.add(new EinzelElement(string)); + } + + public void addItems(KomplexeMenge oderMenge) { + set.add(oderMenge); + } +} + public class KarthesischesProduktTest { + @Test public void test() { - OderMenge oM1 = new OderMenge<>(); - OderMenge oM2 = new OderMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestOderMenge oM1 = new TestOderMenge(); + TestOderMenge oM2 = new TestOderMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM1.addItem("Menge 1, Item 1"); oM1.addItem("Menge 1, Item 2"); oM2.addItem("Menge 2, Item 1"); @@ -27,9 +64,9 @@ public class KarthesischesProduktTest { @Test public void test2(){ - UndMenge oM1 = new UndMenge<>(); - UndMenge oM2 = new UndMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestUndMenge oM1 = new TestUndMenge(); + TestUndMenge oM2 = new TestUndMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM1.addItem("Menge 1, Item 1"); oM1.addItem("Menge 1, Item 2"); oM2.addItem("Menge 2, Item 1"); @@ -42,9 +79,9 @@ public class KarthesischesProduktTest { @Test public void test3(){ - OderMenge oM1 = new OderMenge<>(); - UndMenge oM2 = new UndMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestOderMenge oM1 = new TestOderMenge(); + TestUndMenge oM2 = new TestUndMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM1.addItem("Menge 1, Item 1"); oM1.addItem("Menge 1, Item 2"); oM2.addItem("Menge 2, Item 1"); @@ -57,9 +94,9 @@ public class KarthesischesProduktTest { @Test public void test4(){ - OderMenge oM1 = new OderMenge<>(); - UndMenge oM2 = new UndMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestOderMenge oM1 = new TestOderMenge(); + TestUndMenge oM2 = new TestUndMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM2.addItem("Menge 2, Item 1"); oM2.addItem("Menge 2, Item 2"); oM3.addItems(oM1); @@ -70,9 +107,9 @@ public class KarthesischesProduktTest { @Test public void test5(){ - OderMenge oM1 = new OderMenge<>(); - UndMenge oM2 = new UndMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestOderMenge oM1 = new TestOderMenge(); + TestUndMenge oM2 = new TestUndMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM3.addItems(oM1); oM3.addItems(oM2); //System.out.println("undMenge:"+oM3.cartesianProduct()); @@ -81,9 +118,9 @@ public class KarthesischesProduktTest { @Test public void test6(){ - OderMenge oM1 = new OderMenge<>(); - OderMenge oM2 = new OderMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestOderMenge oM1 = new TestOderMenge(); + TestOderMenge oM2 = new TestOderMenge(); + TestUndMenge oM3 = new TestUndMenge(); oM3.addItems(oM1); oM3.addItems(oM2); //System.out.println("undMenge:"+oM3.cartesianProduct()); From 356a2295739c8011ec7c31a983d2af159e21aa3e Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 3 Jun 2015 14:10:34 +0200 Subject: [PATCH 106/186] =?UTF-8?q?ConstraintsSet=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typeinference/EinzelElement.java | 33 +++++++++++++++++++ .../typeinference/KomplexeMenge.java | 6 ++++ .../TypeInsertTests/LambdaTest28.jav | 11 +++++++ .../TypeInsertTests/LambdaTest28.java | 18 ++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/de/dhbwstuttgart/typeinference/EinzelElement.java create mode 100644 src/de/dhbwstuttgart/typeinference/KomplexeMenge.java create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest28.jav create mode 100644 test/plugindevelopment/TypeInsertTests/LambdaTest28.java diff --git a/src/de/dhbwstuttgart/typeinference/EinzelElement.java b/src/de/dhbwstuttgart/typeinference/EinzelElement.java new file mode 100644 index 00000000..58f4970d --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/EinzelElement.java @@ -0,0 +1,33 @@ +package de.dhbwstuttgart.typeinference; + +import com.rits.cloning.Cloner; + +public class EinzelElement implements KomplexeMenge{ + private A item; + + public EinzelElement(A element){ + item = element; + } + + public Menge> getSet(){ + Menge> ret = new Menge<>(); + ret.add(this); + return ret; + } + + @Override + public Menge> cartesianProduct() { + Cloner cloner = new Cloner(); + Menge> ret = new Menge<>(); + Menge i = new Menge(); + i.add(cloner.deepClone(item)); + ret.add(i); + return ret; + } + + @Override + public String toString(){ + return item.toString(); + } + +} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/typeinference/KomplexeMenge.java b/src/de/dhbwstuttgart/typeinference/KomplexeMenge.java new file mode 100644 index 00000000..25ca29e8 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/KomplexeMenge.java @@ -0,0 +1,6 @@ +package de.dhbwstuttgart.typeinference; + +public interface KomplexeMenge{ + Menge> getSet(); + Menge> cartesianProduct(); +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest28.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest28.jav new file mode 100644 index 00000000..c91288ab --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest28.jav @@ -0,0 +1,11 @@ +class Klasse{ + main(param){ + return param.methode(); + } +} + +class Klasse1{ + A methode(){ + return null; + } +} diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest28.java b/test/plugindevelopment/TypeInsertTests/LambdaTest28.java new file mode 100644 index 00000000..ae9353a9 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest28.java @@ -0,0 +1,18 @@ +package plugindevelopment.TypeInsertTests; + +import de.dhbwstuttgart.typeinference.Menge; + +import org.junit.Test; + +public class LambdaTest28 { + + private static final String TEST_FILE = "LambdaTest28.jav"; + + @Test + public void run(){ + Menge mustContain = new Menge(); + //mustContain.add("A a"); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + } + +} From 21cf019ac45490f87aefc9e21dd06a589d7595e3 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 10 Jun 2015 11:36:40 +0200 Subject: [PATCH 107/186] =?UTF-8?q?Unn=C3=B6tige=20Typen=20gel=C3=B6scht.?= =?UTF-8?q?=20char,=20int,=20bool,=20etc.=20K=C3=B6nnen=20vom=20Unify-Algo?= =?UTF-8?q?rithmus=20nicht=20verwertet=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/ParameterList.java | 1 - .../dhbwstuttgart/syntaxtree/SourceFile.java | 1 - .../syntaxtree/modifier/Modifiers.java | 1 - .../syntaxtree/operator/AddOp.java | 1 - .../syntaxtree/operator/AndOp.java | 2 - .../syntaxtree/operator/LogOp.java | 1 - .../syntaxtree/statement/BoolLiteral.java | 3 +- .../syntaxtree/statement/CharLiteral.java | 3 +- .../syntaxtree/statement/DoubleLiteral.java | 5 +- .../syntaxtree/statement/FloatLiteral.java | 3 +- .../syntaxtree/statement/IfStmt.java | 1 - .../syntaxtree/statement/InstanceOf.java | 3 +- .../syntaxtree/statement/IntLiteral.java | 3 +- .../statement/LambdaExpression.java | 1 - .../syntaxtree/statement/LongLiteral.java | 4 +- .../syntaxtree/statement/NotExpr.java | 1 - .../syntaxtree/statement/WhileStmt.java | 1 - .../syntaxtree/type/BaseType.java | 93 ------------------- .../syntaxtree/type/BooleanType.java | 64 ------------- .../syntaxtree/type/CharacterType.java | 64 ------------- .../syntaxtree/type/DoubleType.java | 64 ------------- .../syntaxtree/type/FloatType.java | 64 ------------- .../type/FreshExtendsWildcardType.java | 36 +++---- .../syntaxtree/type/IntegerType.java | 64 ------------- .../syntaxtree/type/LongType.java | 65 ------------- .../syntaxtree/type/ReturnType.java | 64 ------------- 26 files changed, 25 insertions(+), 588 deletions(-) delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/BaseType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/FloatType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/LongType.java delete mode 100755 src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index a19889d0..cdf632e1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -7,7 +7,6 @@ import de.dhbwstuttgart.typeinference.Menge; import java.util.Iterator; -import de.dhbwstuttgart.syntaxtree.type.BaseType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 25599b4c..8d9a0d4d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -24,7 +24,6 @@ import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.misc.UsedId; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; import de.dhbwstuttgart.syntaxtree.modifier.Public; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/src/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.java b/src/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.java index ff77d8a6..c61fd97b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.java +++ b/src/de/dhbwstuttgart/syntaxtree/modifier/Modifiers.java @@ -5,7 +5,6 @@ package de.dhbwstuttgart.syntaxtree.modifier; // ino.module.Modifiers.8588.import import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.syntaxtree.type.BaseType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java index 52bc2d38..f7bf8281 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java @@ -11,7 +11,6 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintType; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java index 6884d20b..fdb01d2c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AndOp.java @@ -5,8 +5,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.Expr; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.SingleConstraint; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java index 7f1c421f..a497feb4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java @@ -14,7 +14,6 @@ import de.dhbwstuttgart.syntaxtree.statement.Expr; import de.dhbwstuttgart.syntaxtree.statement.NotExpr; import de.dhbwstuttgart.syntaxtree.statement.Null; import de.dhbwstuttgart.syntaxtree.statement.Statement; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintType; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index c2a7eb92..e0f08783 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -10,7 +10,6 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -44,7 +43,7 @@ public class BoolLiteral extends Literal super(-1,-1); // #JB# 20.04.2005 // ########################################################### - this.setType(new BooleanType(this)); + this.setType(new RefType("Boolean",this,this.getOffset())); //this.setType(new Type("boolean")); // ########################################################### } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index b0aa0568..a5a296a2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -9,7 +9,6 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.CharacterType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -43,7 +42,7 @@ public class CharLiteral extends Literal super(-1,-1); // #JB# 20.04.2005 // ########################################################### - this.setType(new CharacterType(this)); + this.setType(new RefType("Char",this,this.getOffset())); //this.setType(new Type("char")); // ########################################################### } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index ca888b97..60961af4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -12,10 +12,7 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.DoubleType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; -import de.dhbwstuttgart.syntaxtree.type.LongType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -47,7 +44,7 @@ public class DoubleLiteral extends Literal { super(-1,-1); - this.setType(new DoubleType(this)); + this.setType(new RefType("Double",this,this.getOffset())); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index ed809fab..88c3ee66 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -11,7 +11,6 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.FloatType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -43,7 +42,7 @@ public class FloatLiteral extends Literal { super(-1,-1); - this.setType(new FloatType(this)); + this.setType(new RefType("Float",this,this.getOffset())); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 5e23f141..f65f09b4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -18,7 +18,6 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.operator.LogOp; import de.dhbwstuttgart.syntaxtree.operator.Operator; import de.dhbwstuttgart.syntaxtree.operator.RelOp; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java index e000fe24..ff32848b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java @@ -13,7 +13,6 @@ 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.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -52,7 +51,7 @@ public class InstanceOf extends BinaryExpr super(offset,variableLength); // #JB# 20.04.2005 // ########################################################### - this.setType(new BooleanType(this)); + this.setType(new RefType("Boolean",this,this.getOffset())); //this.setType(new Type("boolean")); // ########################################################### } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index e9632e9b..dea4cf9b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -11,7 +11,6 @@ import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -44,7 +43,7 @@ public class IntLiteral extends Literal super(-1,-1); // #JB# 20.04.2005 // ########################################################### - this.setType(new IntegerType(this)); + this.setType(new RefType("Integer",this,this.getOffset())); //this.setType(new Type("int")); // ########################################################### } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 133fe6d0..9015e34c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -12,7 +12,6 @@ import de.dhbwstuttgart.syntaxtree.FormalParameter; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.ParameterList; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.DoubleType; import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.ObjectType; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index cb9f4272..ed99418f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -13,8 +13,6 @@ import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.IntegerType; -import de.dhbwstuttgart.syntaxtree.type.LongType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintsSet; @@ -46,7 +44,7 @@ public class LongLiteral extends Literal { super(-1,-1); - this.setType(new LongType(this)); + this.setType(new RefType("Long",this,this.getOffset())); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index a3cfbb67..b5757119 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -13,7 +13,6 @@ 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.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 2de82c39..f000dfbd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -18,7 +18,6 @@ import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.operator.LogOp; import de.dhbwstuttgart.syntaxtree.operator.Operator; import de.dhbwstuttgart.syntaxtree.operator.RelOp; -import de.dhbwstuttgart.syntaxtree.type.BooleanType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java b/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java deleted file mode 100755 index 5297dcec..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/BaseType.java +++ /dev/null @@ -1,93 +0,0 @@ -// ino.module.BaseType.8667.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.core.IItemWithOffset; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; - -// ino.end -// ino.class.BaseType.26435.declaration -public abstract class BaseType extends Type -// ino.end -// ino.class.BaseType.26435.body -{ - /** - * Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden - * Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V - * Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden - * Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V - */ - private boolean IsArray = false; - - // ino.method.BaseType.26439.definition - public BaseType(SyntaxTreeNode parent, int offset) - // ino.end - // ino.method.BaseType.26439.body - { - super(parent, offset); - } - // ino.end - - // ino.method.BaseType.26442.definition - public BaseType(String name,SyntaxTreeNode parent,int offset) - // ino.end - // ino.method.BaseType.26442.body - { - super(name,parent, offset); - } - // ino.end - - // ino.method.equals.26445.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26445.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26445.body - { - if(obj instanceof BaseType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26448.declaration - public abstract BaseType clone(); - // ino.end - - /** - * Author: Daniel Feinler
    - * Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - * wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht. - * @return the IsArray - */ - public boolean IsArray() { - return IsArray; - } - - /** - * Author: Daniel Feinler
    - * Handelt ab, ob der Typ eines Objekts ein Array ist, wenn true dann - * wird im Bytecode ein flag gesetzt wenn nicht, dann halt nicht. - * @param IsArray the IsArray to set - */ - public void setArray(boolean IsArray) { - this.IsArray = IsArray; - } - - @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden. - } - - -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java b/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java deleted file mode 100755 index b2038516..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/BooleanType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.BooleanType.8668.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.BooleanType.26451.declaration -public class BooleanType extends BaseType -// ino.end -// ino.class.BooleanType.26451.body -{ - // ino.method.BooleanType.26455.definition - public BooleanType(SyntaxTreeNode parent) - // ino.end - // ino.method.BooleanType.26455.body - { - super("boolean",parent, -1); - } - // ino.end - - // ino.method.equals.26458.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26458.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26458.body - { - if(obj instanceof BooleanType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26461.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26461.definition - public BooleanType clone() - // ino.end - // ino.method.clone.26461.body - { - return new BooleanType(this.getParent()); - } - // ino.end - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("boolean"); - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java b/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java deleted file mode 100755 index 025863fb..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/CharacterType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.CharacterType.8670.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.CharacterType.26492.declaration -public class CharacterType extends BaseType -// ino.end -// ino.class.CharacterType.26492.body -{ - // ino.method.CharacterType.26496.definition - public CharacterType(SyntaxTreeNode parent) - // ino.end - // ino.method.CharacterType.26496.body - { - super("char",parent,-1); - } - // ino.end - - // ino.method.equals.26499.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26499.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26499.body - { - if(obj instanceof CharacterType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26502.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26502.definition - public CharacterType clone() - // ino.end - // ino.method.clone.26502.body - { - return new CharacterType(this.getParent()); - } - // ino.end - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("char"); - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java b/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java deleted file mode 100755 index 36e0f047..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/DoubleType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.IntegerType.8672.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.IntegerType.26527.declaration -public class DoubleType extends BaseType -// ino.end -// ino.class.IntegerType.26527.body -{ - // ino.method.IntegerType.26531.definition - public DoubleType(SyntaxTreeNode parent) - // ino.end - // ino.method.IntegerType.26531.body - { - super("double",parent,-1); - } - // ino.end - - // ino.method.equals.26534.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26534.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26534.body - { - if(obj instanceof DoubleType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26537.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26537.definition - public DoubleType clone() - // ino.end - // ino.method.clone.26537.body - { - return new DoubleType(this.getParent()); - } - // ino.end - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("double"); - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java b/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java deleted file mode 100755 index 299589fd..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/FloatType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.IntegerType.8672.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.IntegerType.26527.declaration -public class FloatType extends BaseType -// ino.end -// ino.class.IntegerType.26527.body -{ - // ino.method.IntegerType.26531.definition - public FloatType(SyntaxTreeNode parent) - // ino.end - // ino.method.IntegerType.26531.body - { - super("float", parent,-1); - } - // ino.end - - // ino.method.equals.26534.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26534.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26534.body - { - if(obj instanceof FloatType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26537.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26537.definition - public FloatType clone() - // ino.end - // ino.method.clone.26537.body - { - return new FloatType(this.getParent()); - } - // ino.end - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("float"); - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java index 2a455363..4c5d8e4f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/FreshExtendsWildcardType.java @@ -7,8 +7,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc private ObjectType extendsBoundType; /** - * Author: Arne Lüdtke
    - * Standard Konstruktor für eine FreshExtendsWildcard + * Author: Arne Lüdtke
    + * Standard Konstruktor für eine FreshExtendsWildcard */ public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset) { @@ -17,8 +17,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Privater Konstruktor für clone + * Author: Arne Lüdtke
    + * Privater Konstruktor für clone */ private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name) { @@ -27,8 +27,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt String Entsprechung zurück. + * Author: Arne Lüdtke
    + * Gibt String Entsprechung zurück. */ public String toString() { @@ -40,8 +40,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt einen Klon der Wildcard zurück. + * Author: Arne Lüdtke
    + * Gibt einen Klon der Wildcard zurück. * Der Innere Typ wird auch geklont */ public FreshExtendsWildcardType clone() @@ -50,8 +50,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die Grenze der Wildcard zurück + * Author: Arne Lüdtke
    + * Gibt die Grenze der Wildcard zurück */ public ObjectType get_ExtendsBound() { @@ -59,8 +59,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH + * Author: Arne Lüdtke
    + * Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH */ public boolean equals(Object obj) { @@ -74,9 +74,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt die passende ExtendsWildcardType Klasse zurück. - * Wird für smaller4 verwendet + * Author: Arne Lüdtke
    + * Gibt die passende ExtendsWildcardType Klasse zurück. + * Wird für smaller4 verwendet */ public ExtendsWildcardType get_WildcardType() { @@ -84,9 +84,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc } /** - * Author: Arne Lüdtke
    - * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. - * Wird über IMatchable implementiert. + * Author: Arne Lüdtke
    + * Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll. + * Wird über IMatchable implementiert. */ public Type getMatchType() { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java b/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java deleted file mode 100755 index 6fb86103..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/IntegerType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.IntegerType.8672.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.IntegerType.26527.declaration -public class IntegerType extends BaseType -// ino.end -// ino.class.IntegerType.26527.body -{ - // ino.method.IntegerType.26531.definition - public IntegerType(SyntaxTreeNode parent) - // ino.end - // ino.method.IntegerType.26531.body - { - super("int",parent,-1); - } - // ino.end - - // ino.method.equals.26534.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26534.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26534.body - { - if(obj instanceof IntegerType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26537.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26537.definition - public IntegerType clone() - // ino.end - // ino.method.clone.26537.body - { - return new IntegerType(this.getParent()); - } - // ino.end - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("int"); - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java b/src/de/dhbwstuttgart/syntaxtree/type/LongType.java deleted file mode 100755 index 8184ee47..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/LongType.java +++ /dev/null @@ -1,65 +0,0 @@ -// ino.module.IntegerType.8672.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.IntegerType.26527.declaration -public class LongType extends BaseType -// ino.end -// ino.class.IntegerType.26527.body -{ - // ino.method.IntegerType.26531.definition - public LongType(SyntaxTreeNode parent) - // ino.end - // ino.method.IntegerType.26531.body - { - super("long", parent,-1); - } - // ino.end - - // ino.method.equals.26534.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26534.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26534.body - { - if(obj instanceof LongType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26537.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26537.definition - public LongType clone() - // ino.end - // ino.method.clone.26537.body - { - return new LongType(this.getParent()); - } - // ino.end - - @Override -public JavaCodeResult printJavaCode(ResultSet resultSet) { - // TODO Auto-generated method stub - return null; - } -} -// ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java b/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java deleted file mode 100755 index 379b8999..00000000 --- a/src/de/dhbwstuttgart/syntaxtree/type/ReturnType.java +++ /dev/null @@ -1,64 +0,0 @@ -// ino.module.ReturnType.8676.package -package de.dhbwstuttgart.syntaxtree.type; - -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; - -// ino.end -// ino.class.ReturnType.26703.declaration -public class ReturnType extends Type -// ino.end -// ino.class.ReturnType.26703.body -{ - // ino.method.ReturnType.26707.definition - public ReturnType(int offset) - // ino.end - // ino.method.ReturnType.26707.body - { - super(null,offset); - } - // ino.end - - // ino.method.equals.26710.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param Object - * @return - */ - // ino.end - // ino.method.equals.26710.definition - public boolean equals(Object obj) - // ino.end - // ino.method.equals.26710.body - { - if(obj instanceof ReturnType){ - return super.equals(obj); - } - else{ - return false; - } - } - // ino.end - - // ino.method.clone.26713.defdescription type=javadoc - /** - *
    Author: J�rg B�uerle - * @return - */ - // ino.end - // ino.method.clone.26713.definition - public ReturnType clone() - // ino.end - // ino.method.clone.26713.body - { - return new ReturnType(getOffset()); - } - // ino.end - - @Override -public JavaCodeResult printJavaCode(ResultSet resultSet) { - // TODO Auto-generated method stub - return null; - } -} -// ino.end From aa5bb3c07326b25c3bca61af69314911141b097e Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 10 Jun 2015 13:17:06 +0200 Subject: [PATCH 108/186] Fehler im Parser behoben: castexpression und primitive Typen entfernt --- src/de/dhbwstuttgart/parser/JavaParser.java | 2534 +++++++++---------- src/de/dhbwstuttgart/parser/JavaParser.jay | 70 +- 2 files changed, 1241 insertions(+), 1363 deletions(-) diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 00e3854a..7cd658e9 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -46,7 +46,7 @@ void initUsedIdsToCheck() { } //PL 05-07-30 eingefuegt. ENDE -//LUAR 07-05-29 Anfang für Wildcard Test +//LUAR 07-05-29 Anfang f�r Wildcard Test public Menge testPair = new Menge(); //LUAR 07-05-29 Ende // line 53 "-" @@ -189,7 +189,7 @@ public Menge testPair = new Menge(); */ //t protected jay.yydebug.yyDebug yydebug; - protected static final int yyFinal = 15; + protected static final int yyFinal = 12; //t public static final String yyRule [] = { //t "$accept : compilationunit", //t "compilationunit : typedeclarations", @@ -327,8 +327,6 @@ public Menge testPair = new Menge(); //t "methodheader : modifiers methoddeclarator", //t "methodheader : methoddeclarator throws", //t "methodheader : modifiers methoddeclarator throws", -//t "type : primitivetype", -//t "type : primitivetype '[' ']'", //t "type : referencetype", //t "type : referencetype '[' ']'", //t "variabledeclarators : variabledeclarator", @@ -346,8 +344,6 @@ public Menge testPair = new Menge(); //t "classtypelist : classtypelist ',' classtype", //t "methoddeclarator : IDENTIFIER '(' ')'", //t "methoddeclarator : IDENTIFIER '(' formalparameterlist ')'", -//t "primitivetype : BOOLEAN", -//t "primitivetype : numerictype", //t "referencetype : classorinterfacetype", //t "variabledeclarator : variabledeclaratorid", //t "blockstatement : localvariabledeclarationstatement", @@ -356,7 +352,6 @@ public Menge testPair = new Menge(); //t "formalparameter : variabledeclaratorid", //t "argumentlist : expression", //t "argumentlist : argumentlist ',' expression", -//t "numerictype : integraltype", //t "variabledeclaratorid : IDENTIFIER", //t "variableinitializer : expression", //t "localvariabledeclarationstatement : localvariabledeclaration ';'", @@ -368,8 +363,6 @@ public Menge testPair = new Menge(); //t "statement : explicitconstructorinvocation", //t "expression : assignmentexpression", //t "expression : classinstancecreationexpression", -//t "integraltype : INT", -//t "integraltype : CHAR", //t "localvariabledeclaration : type variabledeclarators", //t "localvariabledeclaration : variabledeclarators", //t "statementwithouttrailingsubstatement : block", @@ -452,7 +445,6 @@ public Menge testPair = new Menge(); //t "primarynonewarray : lambdaexpression", //t "unaryexpressionnotplusminus : postfixexpression", //t "unaryexpressionnotplusminus : '!' unaryexpression", -//t "unaryexpressionnotplusminus : castexpression", //t "exclusiveorexpression : andexpression", //t "exclusiveorexpression : exclusiveorexpression '^' andexpression", //t "literal : INTLITERAL", @@ -463,7 +455,6 @@ public Menge testPair = new Menge(); //t "literal : FLOATLITERAL", //t "literal : DOUBLELITERAL", //t "literal : JNULL", -//t "castexpression : '(' primitivetype ')' unaryexpression", //t "andexpression : equalityexpression", //t "andexpression : andexpression '&' equalityexpression", //t "equalityexpression : relationalexpression", @@ -684,20 +675,20 @@ public Menge testPair = new Menge(); yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: - // line 247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 249 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 2: - // line 251 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 253 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((SourceFile)yyVals[0+yyTop]).addImports(((ImportDeclarations)yyVals[-1+yyTop])); yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 3: - // line 256 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 258 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ ((SourceFile)yyVals[0+yyTop]).setPackageName(((UsedId)yyVals[-2+yyTop])); @@ -706,7 +697,7 @@ case 3: } break; case 4: - // line 263 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 265 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ ((SourceFile)yyVals[0+yyTop]).setPackageName(((UsedId)yyVals[-1+yyTop])); @@ -714,21 +705,21 @@ case 4: } break; case 5: - // line 269 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 271 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { this.testPair.add(new Pair(((Type)yyVals[-2+yyTop]),((Type)yyVals[-1+yyTop]))); yyVal=((SourceFile)yyVals[0+yyTop]); } break; case 6: - // line 275 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 277 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Package*/ yyVal = ((UsedId)yyVals[-1+yyTop]); } break; case 7: - // line 281 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 283 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ImportDeclarations declarations=new ImportDeclarations(); declarations.addElement(((UsedId)yyVals[0+yyTop])); @@ -736,20 +727,20 @@ case 7: } break; case 8: - // line 287 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 289 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ImportDeclarations)yyVals[-1+yyTop]).addElement(((UsedId)yyVals[0+yyTop])); yyVal=((ImportDeclarations)yyVals[-1+yyTop]); } break; case 9: - // line 293 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 295 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[-1+yyTop]); } break; case 10: - // line 298 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 300 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SourceFile Scfile = new SourceFile(); Scfile.addElement(((AClassOrInterface)yyVals[0+yyTop])); @@ -757,39 +748,39 @@ case 10: } break; case 11: - // line 304 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 306 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((SourceFile)yyVals[-1+yyTop]).addElement(((AClassOrInterface)yyVals[0+yyTop])); yyVal=((SourceFile)yyVals[-1+yyTop]); } break; case 12: - // line 310 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 312 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; case 13: - // line 314 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 316 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; case 14: - // line 319 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 321 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Class)yyVals[0+yyTop]); } break; case 15: - // line 323 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 325 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal=((Interface)yyVals[0+yyTop]); } break; case 16: - // line 330 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 332 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name(((Token)yyVals[0+yyTop]).getLexem()); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -797,7 +788,7 @@ case 16: } break; case 17: - // line 337 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 339 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name(((Token)yyVals[0+yyTop]).getLexem()); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -805,7 +796,7 @@ case 17: } break; case 18: - // line 343 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 345 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((UsedId)yyVals[-2+yyTop]).set_Name("*"); ((UsedId)yyVals[-2+yyTop]).setOffset(((UsedId)yyVals[-2+yyTop]).getOffset()); @@ -813,16 +804,16 @@ case 18: } break; case 19: - // line 351 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 353 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() ); - UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ yyVal = UI; } break; case 20: - // line 359 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 361 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Um das hier uebersichtlicher zu halten,*/ /* gibt es einen allumfassenden Konstruktor fuer Class*/ @@ -841,7 +832,7 @@ case 20: } break; case 21: - // line 376 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 378 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaMenge(), ((Token)yyVals[-2+yyTop]).getOffset()); this.initContainedTypes(); @@ -849,7 +840,7 @@ case 21: } break; case 22: - // line 382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 384 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -857,7 +848,7 @@ case 22: } break; case 23: - // line 388 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 390 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -865,7 +856,7 @@ case 23: } break; case 24: - // line 395 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 397 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -873,7 +864,7 @@ case 24: } break; case 25: - // line 401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 403 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaMenge(), ((Token)yyVals[-3+yyTop]).getOffset()); this.initContainedTypes(); @@ -881,7 +872,7 @@ case 25: } break; case 26: - // line 407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 409 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaMenge(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); @@ -889,7 +880,7 @@ case 26: } break; case 27: - // line 413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 415 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeMenge(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaMenge(), ((Token)yyVals[-4+yyTop]).getOffset()); this.initContainedTypes(); @@ -897,7 +888,7 @@ case 27: } break; case 28: - // line 420 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 422 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* HOTI*/ /* Verbindet den Namen eines Interfaces mit einer optionalen Parameterliste*/ @@ -905,13 +896,13 @@ case 28: } break; case 29: - // line 426 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 428 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new InterfaceAndParameter(((Token)yyVals[-3+yyTop]).getLexem(), ((ParaList)yyVals[-1+yyTop])); } break; case 30: - // line 431 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 433 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Hilfskonstrukt, um die Grammatik ueberschaubar zu halten*/ /* Verbindet den Namen einer Klasse mit einer optionalen Parameterliste*/ @@ -919,13 +910,13 @@ case 30: } break; case 31: - // line 437 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 439 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = new ClassAndParameter(((Token)yyVals[-3+yyTop]).getLexem(), ((ParaList)yyVals[-1+yyTop])); } break; case 32: - // line 442 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 444 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Token)yyVals[-2+yyTop]).getOffset()); @@ -937,7 +928,7 @@ case 32: } break; case 33: - // line 452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 454 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((Token)yyVals[-2+yyTop]).getOffset()); ic.setInterfaceBody(((InterfaceBody)yyVals[0+yyTop])); @@ -948,7 +939,7 @@ case 33: } break; case 34: - // line 461 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 463 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Token)yyVals[-3+yyTop]).getOffset()); ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaMenge()); @@ -960,7 +951,7 @@ case 34: } break; case 35: - // line 471 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Interface ic = new Interface(((InterfaceAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((Token)yyVals[-3+yyTop]).getOffset()); ic.setParaList(((InterfaceAndParameter)yyVals[-2+yyTop]).getParaMenge()); @@ -972,7 +963,7 @@ case 35: } break; case 36: - // line 482 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 484 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); /* #JB# 05.04.2005 */ @@ -980,23 +971,23 @@ case 36: pl.getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null, ((Token)yyVals[0+yyTop]).getOffset())); /*pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER); yyVal = pl; } break; case 37: - // line 493 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 495 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); pl.getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal = pl; } break; case 38: - // line 502 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 504 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList pl = new ParaList(); pl.getParalist().addElement(((WildcardType)yyVals[0+yyTop])); @@ -1004,7 +995,7 @@ case 38: } break; case 39: - // line 508 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 510 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* #JB# 05.04.2005 */ @@ -1012,30 +1003,30 @@ case 39: ((ParaList)yyVals[-2+yyTop]).getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(), null,((Token)yyVals[0+yyTop]).getOffset())); /*$1.getParalist().addElement(new TypePlaceholder($3.getLexem()));*/ /* ########################################################### */ - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER); de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist: " + ((ParaList)yyVals[-2+yyTop]).getParalist(), Section.PARSER); yyVal=((ParaList)yyVals[-2+yyTop]); } break; case 40: - // line 521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 523 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() ); t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() ); ((ParaList)yyVals[-5+yyTop]).getParalist().addElement(t); - de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); + de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER); yyVal=((ParaList)yyVals[-5+yyTop]); } break; case 41: - // line 529 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 531 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParaList)yyVals[-2+yyTop]).getParalist().addElement(((WildcardType)yyVals[0+yyTop])); yyVal=((ParaList)yyVals[-2+yyTop]); } break; case 42: - // line 535 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 537 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Luar 29.11.06 Offset auf -1, da keine Angabe vorhanden*/ WildcardType wc = new WildcardType(null,null,-1); @@ -1043,34 +1034,34 @@ case 42: } break; case 43: - // line 541 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 543 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ExtendsWildcardType ewc = new ExtendsWildcardType(((Token)yyVals[-1+yyTop]).getOffset(),((RefType)yyVals[0+yyTop])); yyVal = ewc; } break; case 44: - // line 546 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 548 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SuperWildcardType swc = new SuperWildcardType(((Token)yyVals[-1+yyTop]).getOffset(),((RefType)yyVals[0+yyTop])); yyVal = swc; } break; case 45: - // line 552 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 554 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ClassBody CB = new ClassBody(); yyVal = CB; } break; case 46: - // line 558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 560 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((ClassBody)yyVals[-1+yyTop]); } break; case 47: - // line 563 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 565 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Modifiers Mod = new Modifiers(); Mod.addModifier(((Modifier)yyVals[0+yyTop])); @@ -1078,20 +1069,20 @@ case 47: } break; case 48: - // line 569 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 571 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Modifiers)yyVals[-1+yyTop]).addModifier(((Modifier)yyVals[0+yyTop])); yyVal = ((Modifiers)yyVals[-1+yyTop]); } break; case 49: - // line 575 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 577 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((UsedId)yyVals[0+yyTop]); } break; case 50: - // line 580 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 582 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceList il = new InterfaceList(); @@ -1100,27 +1091,27 @@ case 50: } break; case 51: - // line 587 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 589 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceList)yyVals[-2+yyTop]).addInterface(((UsedId)yyVals[0+yyTop])); yyVal = ((InterfaceList)yyVals[-2+yyTop]); } break; case 52: - // line 593 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 595 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal = new InterfaceBody(); } break; case 53: - // line 598 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 600 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((InterfaceBody)yyVals[-1+yyTop]); } break; case 54: - // line 605 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 607 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceList il = new InterfaceList(); @@ -1129,14 +1120,14 @@ case 54: } break; case 55: - // line 612 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 614 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceList)yyVals[-2+yyTop]).addInterface(((UsedId)yyVals[0+yyTop])); yyVal = ((InterfaceList)yyVals[-2+yyTop]); } break; case 56: - // line 619 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 621 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ClassBody CB = new ClassBody(); CB.addField( ((Field)yyVals[0+yyTop]) ); @@ -1144,55 +1135,55 @@ case 56: } break; case 57: - // line 625 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 627 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ClassBody)yyVals[-1+yyTop]).addField(((Field)yyVals[0+yyTop])); yyVal = ((ClassBody)yyVals[-1+yyTop]); } break; case 58: - // line 632 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 634 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Public Pub = new Public(); yyVal=Pub; } break; case 59: - // line 637 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 639 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Protected Pro = new Protected(); yyVal=Pro; } break; case 60: - // line 642 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 644 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Private Pri = new Private(); yyVal=Pri; } break; case 61: - // line 647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 649 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Static Sta = new Static(); yyVal=Sta; } break; case 62: - // line 652 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 654 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Abstract Abs = new Abstract(); yyVal=Abs; } break; case 63: - // line 657 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 659 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Final fin = new Final(); yyVal = fin; } break; case 64: - // line 663 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 665 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*PL 05-07-30 eingefuegt containedTypes ANFANG*/ RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); @@ -1207,7 +1198,7 @@ case 64: } break; case 65: - // line 678 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 680 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ InterfaceBody ib = new InterfaceBody(); @@ -1216,43 +1207,43 @@ case 65: } break; case 66: - // line 685 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 687 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((InterfaceBody)yyVals[-1+yyTop]).addElement(((Field)yyVals[0+yyTop])); yyVal = ((InterfaceBody)yyVals[-1+yyTop]); } break; case 67: - // line 691 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 693 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interfaces*/ yyVal = ((UsedId)yyVals[0+yyTop]); } break; case 68: - // line 697 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 699 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 69: - // line 702 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 704 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Method)yyVals[0+yyTop]); } break; case 70: - // line 706 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 708 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 71: - // line 712 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 714 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((Menge)yyVals[0+yyTop]) != null) { /*$1.set_ParaList($2.get_ParaList());*/ - ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/ + ((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*�nderung von Andreas Stadelmeier. Type statt GenericVarType*/ /* otth: originale (also diese) Parameterliste retten */ /*((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() );*/ } @@ -1260,7 +1251,7 @@ case 71: } break; case 72: - // line 723 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 725 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Menge tl = new Menge(); tl.add(((Type)yyVals[0+yyTop])); @@ -1268,21 +1259,21 @@ case 72: } break; case 73: - // line 729 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 731 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Menge)yyVals[-2+yyTop]).add(((Type)yyVals[0+yyTop])); yyVal=((Menge)yyVals[-2+yyTop]); } break; case 74: - // line 734 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 736 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Menge)yyVals[-2+yyTop]).add(((WildcardType)yyVals[0+yyTop])); yyVal=((Menge)yyVals[-2+yyTop]); } break; case 75: - // line 739 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 741 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Menge tl = new Menge(); tl.add(((WildcardType)yyVals[0+yyTop])); @@ -1290,42 +1281,42 @@ case 75: } break; case 76: - // line 747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 749 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = null; } break; case 77: - // line 749 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 751 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((Menge)yyVals[-1+yyTop]); } break; case 78: - // line 754 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 756 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interfaces, Spezialform Konstantendef.*/ yyVal = ((Constant)yyVals[0+yyTop]); } break; case 79: - // line 759 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 761 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((Method)yyVals[0+yyTop]); } break; case 80: - // line 764 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 766 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Field)yyVals[0+yyTop]); } break; case 81: - // line 768 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 770 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Method)yyVals[0+yyTop]); } break; case 82: - // line 773 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 775 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method STAT = new Method(((Token)yyVals[-1+yyTop]).getOffset()); DeclId DST = new DeclId(); @@ -1340,14 +1331,14 @@ case 82: } break; case 83: - // line 787 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 789 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Constructor)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); yyVal = ((Constructor)yyVals[-1+yyTop]); } break; case 84: - // line 792 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 794 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Constructor)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); ((Constructor)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); @@ -1355,7 +1346,7 @@ case 84: } break; case 85: - // line 799 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 801 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ Constant c = new Constant(((Token)yyVals[-3+yyTop]).getLexem(), ((Modifiers)yyVals[-5+yyTop])); @@ -1365,14 +1356,14 @@ case 85: } break; case 86: - // line 808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 810 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /* SCJU: Interface*/ yyVal = ((Method)yyVals[-1+yyTop]); } break; case 87: - // line 833 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 835 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration ret = new FieldDeclaration(((DeclId)yyVals[-2+yyTop]).getOffset()); ret.set_DeclId(((DeclId)yyVals[-2+yyTop])); @@ -1381,7 +1372,7 @@ case 87: } break; case 88: - // line 840 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 842 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration ret = new FieldDeclaration(((DeclId)yyVals[0+yyTop]).getOffset()); ret.set_DeclId(((DeclId)yyVals[0+yyTop])); @@ -1389,41 +1380,41 @@ case 88: } break; case 89: - // line 847 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 849 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { GenericDeclarationList ret = new GenericDeclarationList(((GenericVarDeclarationList)yyVals[-1+yyTop]).getElements(),((GenericVarDeclarationList)yyVals[-1+yyTop]).getEndOffset()); yyVal = ret; } break; case 90: - // line 854 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 856 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 91: - // line 859 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 861 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 92: - // line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - {/*angefügt von Andreas Stadelmeier*/ + // line 865 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + {/*angef�gt von Andreas Stadelmeier*/ ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 93: - // line 870 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 872 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((FieldDeclaration)yyVals[-1+yyTop]); } break; case 94: - // line 875 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 877 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->fielddeclaration ...: type " + ((Type)yyVals[-2+yyTop]), Section.PARSER); ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1431,7 +1422,7 @@ case 94: } break; case 95: - // line 882 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 884 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); for(int i=0;i<(((FieldDeclaration)yyVals[-1+yyTop]).getDeclIdMenge().size());i++) @@ -1442,27 +1433,27 @@ case 95: } break; case 96: - // line 892 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 894 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Block(((Block)yyVals[0+yyTop])); yyVal=((Method)yyVals[-1+yyTop]); } break; case 97: - // line 899 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 901 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block Bl = new Block(); yyVal=Bl; } break; case 98: - // line 905 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 907 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[-1+yyTop]); } break; case 99: - // line 910 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 912 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Constructor CON = new Constructor(null); /*TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen...*/ DeclId DIDCon = new DeclId(); @@ -1472,7 +1463,7 @@ case 99: } break; case 100: - // line 918 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 920 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Constructor CONpara = new Constructor(null); DeclId DIconpara = new DeclId(); @@ -1483,14 +1474,14 @@ case 100: } break; case 101: - // line 928 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 930 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBL = new Block(); yyVal=CBL; } break; case 102: - // line 933 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 935 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBLexpl = new Block(); CBLexpl.set_Statement(((Statement)yyVals[-1+yyTop])); @@ -1498,13 +1489,13 @@ case 102: } break; case 103: - // line 939 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 941 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[-1+yyTop]); } break; case 104: - // line 943 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 945 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block CBes = new Block(); CBes.set_Statement(((Statement)yyVals[-2+yyTop])); @@ -1516,7 +1507,7 @@ case 104: } break; case 105: - // line 954 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 956 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ExceptionList EL = new ExceptionList(); EL.set_addElem(((RefType)yyVals[0+yyTop])); @@ -1524,13 +1515,13 @@ case 105: } break; case 106: - // line 961 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 963 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal = ((GenericTypeVar)yyVals[0+yyTop]); } break; case 107: - // line 966 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 968 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParaList p = new ParaList(); p.add_ParaList(((GenericTypeVar)yyVals[0+yyTop])); @@ -1538,20 +1529,20 @@ case 107: } break; case 108: - // line 972 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 974 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParaList)yyVals[-2+yyTop]).add_ParaList(((GenericTypeVar)yyVals[0+yyTop])); yyVal=((ParaList)yyVals[-2+yyTop]); } break; case 109: - // line 979 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 981 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null,((Token)yyVals[0+yyTop]).getOffset()); } break; case 110: - // line 983 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 985 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { BoundedGenericTypeVar gtv=new BoundedGenericTypeVar(((Token)yyVals[-2+yyTop]).getLexem(), ((BoundedClassIdentifierList)yyVals[0+yyTop]),null, ((Token)yyVals[-2+yyTop]).getOffset() ,((BoundedClassIdentifierList)yyVals[0+yyTop]).getEndOffset()); /*gtv.setBounds($3);*/ @@ -1559,7 +1550,7 @@ case 110: } break; case 111: - // line 990 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 992 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Menge vec=new Menge(); vec.addElement(((RefType)yyVals[0+yyTop])); @@ -1568,7 +1559,7 @@ case 111: } break; case 112: - // line 997 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 999 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((BoundedClassIdentifierList)yyVals[-2+yyTop]).addElement(((RefType)yyVals[0+yyTop])); ((BoundedClassIdentifierList)yyVals[-2+yyTop]).addOffsetOff(((RefType)yyVals[0+yyTop])); @@ -1577,7 +1568,7 @@ case 112: } break; case 113: - // line 1005 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1007 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { GenericVarDeclarationList vec=new GenericVarDeclarationList(); vec.addElement(((GenericTypeVar)yyVals[0+yyTop])); @@ -1585,14 +1576,14 @@ case 113: } break; case 114: - // line 1011 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1013 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((GenericVarDeclarationList)yyVals[-2+yyTop]).addElement(((GenericTypeVar)yyVals[0+yyTop])); yyVal=((GenericVarDeclarationList)yyVals[-2+yyTop]); } break; case 115: - // line 1019 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1021 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-2+yyTop])); @@ -1600,14 +1591,14 @@ case 115: } break; case 116: - // line 1025 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1027 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); yyVal=((Method)yyVals[0+yyTop]); } break; case 117: - // line 1030 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1032 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); ((Method)yyVals[0+yyTop]).setType(((Type)yyVals[-1+yyTop])); @@ -1615,7 +1606,7 @@ case 117: } break; case 118: - // line 1036 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1038 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-2+yyTop])); @@ -1624,7 +1615,7 @@ case 118: } break; case 119: - // line 1043 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1045 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); ((Method)yyVals[-1+yyTop]).set_ExceptionList(((ExceptionList)yyVals[0+yyTop])); @@ -1632,7 +1623,7 @@ case 119: } break; case 120: - // line 1049 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1051 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1641,7 +1632,7 @@ case 120: } break; case 121: - // line 1056 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1058 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); ((Method)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop])); @@ -1650,7 +1641,7 @@ case 121: } break; case 122: - // line 1063 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1065 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-4+yyTop])); ((Method)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop])); @@ -1660,7 +1651,7 @@ case 122: } break; case 123: - // line 1071 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1073 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void Voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).setType(Voit); @@ -1668,7 +1659,7 @@ case 123: } break; case 124: - // line 1077 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1079 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); @@ -1677,7 +1668,7 @@ case 124: } break; case 125: - // line 1084 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1086 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyt = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).setType(voyt); @@ -1686,7 +1677,7 @@ case 125: } break; case 126: - // line 1091 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1093 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyd = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); @@ -1696,7 +1687,7 @@ case 126: } break; case 127: - // line 1099 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1101 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void Voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).setType(Voit); @@ -1705,7 +1696,7 @@ case 127: } break; case 128: - // line 1106 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1108 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voit = new Void(((Method)yyVals[0+yyTop]),((Token)yyVals[-1+yyTop]).getOffset()); ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-3+yyTop])); @@ -1715,7 +1706,7 @@ case 128: } break; case 129: - // line 1114 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1116 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyt = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).setType(voyt); @@ -1725,7 +1716,7 @@ case 129: } break; case 130: - // line 1122 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1124 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Void voyd = new Void(((Method)yyVals[-1+yyTop]),((Token)yyVals[-2+yyTop]).getOffset()); ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-4+yyTop])); @@ -1736,14 +1727,14 @@ case 130: } break; case 131: - // line 1132 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1134 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $1.setType(TypePlaceholder.fresh()); */ yyVal=((Method)yyVals[0+yyTop]); } break; case 132: - // line 1137 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1139 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $4.setType(TypePlaceholder.fresh());*/ ((Method)yyVals[0+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-1+yyTop])); @@ -1751,7 +1742,7 @@ case 132: } break; case 133: - // line 1144 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1146 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[0+yyTop]).set_Modifiers(((Modifiers)yyVals[-1+yyTop])); /*auskommentiert von Andreas Stadelmeier (a10023) $2.setType(TypePlaceholder.fresh());*/ @@ -1759,7 +1750,7 @@ case 133: } break; case 134: - // line 1150 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1152 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*auskommentiert von Andreas Stadelmeier (a10023) $1.setType(TypePlaceholder.fresh());*/ ((Method)yyVals[-1+yyTop]).set_ExceptionList(((ExceptionList)yyVals[0+yyTop])); @@ -1767,7 +1758,7 @@ case 134: } break; case 135: - // line 1156 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1158 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Method)yyVals[-1+yyTop]).set_Modifiers(((Modifiers)yyVals[-2+yyTop])); /*auskommentiert von Andreas Stadelmeier (a10023) $2.setType(TypePlaceholder.fresh());*/ @@ -1776,31 +1767,19 @@ case 135: } break; case 136: - // line 1165 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((BaseType)yyVals[0+yyTop]); - } - break; -case 137: - // line 1169 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - ((BaseType)yyVals[-2+yyTop]).setArray(true); - } - break; -case 138: - // line 1173 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + // line 1167 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((RefType)yyVals[0+yyTop]); } break; -case 139: - // line 1177 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 137: + // line 1171 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((RefType)yyVals[-2+yyTop]).setArray(true); } break; -case 140: - // line 1181 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 138: + // line 1186 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FieldDeclaration IVD = new FieldDeclaration(((DeclId)yyVals[0+yyTop]).getOffset()); IVD.getDeclIdMenge().addElement( ((DeclId)yyVals[0+yyTop]) ); @@ -1808,81 +1787,81 @@ case 140: yyVal = IVD; } break; -case 141: - // line 1188 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 139: + // line 1193 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((FieldDeclaration)yyVals[-2+yyTop]).getDeclIdMenge().addElement(((DeclId)yyVals[0+yyTop])); yyVal=((FieldDeclaration)yyVals[-2+yyTop]); } break; -case 142: - // line 1194 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 140: + // line 1199 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 143: - // line 1199 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 141: + // line 1204 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Block Blstat = new Block(); Blstat.set_Statement(((Statement)yyVals[0+yyTop])); yyVal=Blstat; } break; -case 144: - // line 1206 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 142: + // line 1211 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((Block)yyVals[-1+yyTop]).set_Statement(((Statement)yyVals[0+yyTop])); yyVal=((Block)yyVals[-1+yyTop]); } break; -case 145: - // line 1212 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 143: + // line 1217 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ParameterList PL = new ParameterList(); PL.set_AddParameter(((FormalParameter)yyVals[0+yyTop])); yyVal = PL; } break; -case 146: - // line 1218 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 144: + // line 1223 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ParameterList)yyVals[-2+yyTop]).set_AddParameter(((FormalParameter)yyVals[0+yyTop])); yyVal = ((ParameterList)yyVals[-2+yyTop]); } break; -case 147: - // line 1224 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 145: + // line 1229 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ThisCall THCON = new ThisCall(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); yyVal=THCON; } break; -case 148: - // line 1229 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 146: + // line 1234 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ThisCall THCONargl = new ThisCall(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); THCONargl.set_ArgumentList(((ArgumentList)yyVals[-2+yyTop])); yyVal=THCONargl; } break; -case 149: - // line 1235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 147: + // line 1240 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SuperCall sCall = new SuperCall(((Token)yyVals[-3+yyTop]).getOffset(),((Token)yyVals[-3+yyTop]).getLexem().length()); yyVal=sCall; } break; -case 150: - // line 1240 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 148: + // line 1245 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { SuperCall sCall = new SuperCall(((Token)yyVals[-4+yyTop]).getOffset(),((Token)yyVals[-4+yyTop]).getLexem().length()); sCall.set_ArgumentList(((ArgumentList)yyVals[-2+yyTop])); yyVal=sCall; } break; -case 151: - // line 1247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 149: + // line 1252 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*RefType RT = new RefType(RT.get_UsedId().get_Name_1Element(),null,-1);*/ RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).get_Name_1Element(),null,-1); @@ -1891,22 +1870,22 @@ case 151: yyVal=RT; } break; -case 152: - // line 1255 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 150: + // line 1260 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((RefType)yyVals[-2+yyTop]).set_UsedId(((UsedId)yyVals[0+yyTop])); ((RefType)yyVals[-2+yyTop]).setName(((RefType)yyVals[-2+yyTop]).get_UsedId().get_Name_1Element()); yyVal=((RefType)yyVals[-2+yyTop]); } break; -case 153: - // line 1262 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 151: + // line 1267 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method met = new Method(((Token)yyVals[-2+yyTop]).getOffset()); /* #JB# 10.04.2005 */ /* ########################################################### */ met.setLineNumber(((Token)yyVals[-2+yyTop]).getLineNumber()); - met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId DImethod = new DeclId(); DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem()); @@ -1914,14 +1893,14 @@ case 153: yyVal = met; } break; -case 154: - // line 1275 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 152: + // line 1280 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Method met_para = new Method(((Token)yyVals[-3+yyTop]).getOffset()); /* #JB# 10.04.2005 */ /* ########################################################### */ met_para.setLineNumber(((Token)yyVals[-3+yyTop]).getLineNumber()); - met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DeclId Dimet_para = new DeclId(); Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem()); @@ -1930,25 +1909,8 @@ case 154: yyVal = met_para; } break; -case 155: - // line 1290 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - BooleanType BT = new BooleanType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - /*BT.setName($1.getLexem());*/ - /* ########################################################### */ - yyVal=BT; - } - break; -case 156: - // line 1299 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((BaseType)yyVals[0+yyTop]); - } - break; -case 157: - // line 1305 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 153: + // line 1308 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("T->Parser->referenctype: " + ((UsedId)yyVals[0+yyTop]), Section.PARSER); RefType RT = new RefType(((UsedId)yyVals[0+yyTop]).getQualifiedName(),null,((UsedId)yyVals[0+yyTop]).getOffset()); @@ -1967,35 +1929,35 @@ case 157: yyVal=RT; } break; -case 158: - // line 1327 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 154: + // line 1330 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((DeclId)yyVals[0+yyTop]); } break; -case 159: - // line 1348 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 155: + // line 1351 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((LocalVarDecl)yyVals[0+yyTop]); } break; -case 160: - // line 1352 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 156: + // line 1355 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 161: - // line 1357 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 157: + // line 1360 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop])); FP.setType(((Type)yyVals[-1+yyTop])); - /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/ + /*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter �bergeben.*/ yyVal=FP; } break; -case 162: - // line 1382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 158: + // line 1385 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nFunktionsdeklaration mit typlosen Parametern: " + ((DeclId)yyVals[0+yyTop]).name, Section.PARSER); @@ -2014,124 +1976,96 @@ case 162: yyVal=FP; } break; -case 163: - // line 1401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 159: + // line 1404 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ArgumentList AL = new ArgumentList(); AL.expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=AL; } break; -case 164: - // line 1407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 160: + // line 1410 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ((ArgumentList)yyVals[-2+yyTop]).expr.addElement(((Expr)yyVals[0+yyTop])); yyVal=((ArgumentList)yyVals[-2+yyTop]); } break; -case 165: - // line 1413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((BaseType)yyVals[0+yyTop]); - } - break; -case 166: - // line 1418 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 161: + // line 1422 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DeclId DI = new DeclId(); /* #JB# 10.04.2005 */ /* ########################################################### */ DI.setLineNumber(((Token)yyVals[0+yyTop]).getLineNumber()); - DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ + DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/ /* ########################################################### */ DI.set_Name(((Token)yyVals[0+yyTop]).getLexem()); yyVal=DI; } break; -case 167: - // line 1430 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 162: + // line 1434 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 168: - // line 1435 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 163: + // line 1439 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((LocalVarDecl)yyVals[-1+yyTop]); } break; -case 169: - // line 1440 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 164: + // line 1444 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 170: - // line 1444 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((IfStmt)yyVals[0+yyTop]); - } - break; -case 171: +case 165: // line 1448 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((IfStmt)yyVals[0+yyTop]); } break; -case 172: +case 166: // line 1452 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((IfStmt)yyVals[0+yyTop]); + } + break; +case 167: + // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((WhileStmt)yyVals[0+yyTop]); } break; -case 173: - // line 1456 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 168: + // line 1460 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ForStmt)yyVals[0+yyTop]); } break; -case 174: - // line 1459 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 169: + // line 1463 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 175: - // line 1464 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 170: + // line 1468 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 176: - // line 1468 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 171: + // line 1472 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((NewClass)yyVals[0+yyTop]); } break; -case 177: - // line 1473 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - IntegerType IT = new IntegerType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - /*IT.setName($1.getLexem());*/ - /* ########################################################### */ - yyVal=IT; - } - break; -case 178: - // line 1482 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - CharacterType CT = new CharacterType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - /*CT.setName($1.getLexem());*/ - /* ########################################################### */ - yyVal=CT; - } - break; -case 179: - // line 1492 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 172: + // line 1490 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((Type)yyVals[-1+yyTop]).getOffset(),((Type)yyVals[-1+yyTop]).getVariableLength()); @@ -2140,8 +2074,8 @@ case 179: yyVal = LVD; } break; -case 180: - // line 1503 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 173: + // line 1501 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("P -> Lokale Variable angelegt!", Section.PARSER); LocalVarDecl LVD = new LocalVarDecl(((FieldDeclaration)yyVals[0+yyTop]).getOffset(),((FieldDeclaration)yyVals[0+yyTop]).getVariableLength()); @@ -2150,32 +2084,32 @@ case 180: yyVal = LVD; } break; -case 181: - // line 1513 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 174: + // line 1511 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 182: - // line 1517 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 175: + // line 1515 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((EmptyStmt)yyVals[0+yyTop]); } break; -case 183: - // line 1521 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 176: + // line 1519 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ExprStmt)yyVals[0+yyTop]); } break; -case 184: - // line 1525 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 177: + // line 1523 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Return)yyVals[0+yyTop]); } break; -case 185: - // line 1530 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 178: + // line 1528 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt Ifst = new IfStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Ifst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2183,8 +2117,8 @@ case 185: yyVal=Ifst; } break; -case 186: - // line 1538 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 179: + // line 1536 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfstElst = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfstElst.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2193,8 +2127,8 @@ case 186: yyVal=IfstElst; } break; -case 187: - // line 1547 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 180: + // line 1545 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whlst = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whlst.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2202,8 +2136,8 @@ case 187: yyVal=Whlst; } break; -case 188: - // line 1558 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 181: + // line 1556 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-6+yyTop]).getOffset(),((Expr)yyVals[-6+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-6+yyTop])); @@ -2215,8 +2149,8 @@ case 188: yyVal = Fst; } break; -case 189: - // line 1570 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 182: + // line 1568 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2227,8 +2161,8 @@ case 189: yyVal = Fst; } break; -case 190: - // line 1581 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 183: + // line 1579 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-5+yyTop])); @@ -2239,8 +2173,8 @@ case 190: yyVal = Fst; } break; -case 191: - // line 1592 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 184: + // line 1590 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-4+yyTop])); @@ -2251,8 +2185,8 @@ case 191: yyVal = Fst; } break; -case 192: - // line 1603 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 185: + // line 1601 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); Fst.set_head_Initializer(((Expr)yyVals[-4+yyTop])); @@ -2262,8 +2196,8 @@ case 192: yyVal = Fst; } break; -case 193: - // line 1613 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 186: + // line 1611 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-3+yyTop]).getOffset(),((Expr)yyVals[-3+yyTop]).getVariableLength()); Fst.set_head_Condition(((Expr)yyVals[-3+yyTop])); @@ -2273,8 +2207,8 @@ case 193: yyVal = Fst; } break; -case 194: - // line 1623 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 187: + // line 1621 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Fst.set_head_Loop_expr(((Expr)yyVals[-2+yyTop])); @@ -2284,8 +2218,8 @@ case 194: yyVal = Fst; } break; -case 195: - // line 1633 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 188: + // line 1631 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ForStmt Fst = new ForStmt(((Statement)yyVals[0+yyTop]).getOffset(),((Statement)yyVals[0+yyTop]).getVariableLength()); Fst.set_body_Loop_block(((Statement)yyVals[0+yyTop])); @@ -2294,73 +2228,73 @@ case 195: yyVal = Fst; } break; -case 196: - // line 1642 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 189: + // line 1640 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("conditionalexpression", Section.PARSER); yyVal=((Expr)yyVals[0+yyTop]); } break; -case 197: - // line 1647 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 190: + // line 1645 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 198: - // line 1653 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 191: + // line 1651 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { EmptyStmt Empst = new EmptyStmt(); yyVal=Empst; } break; -case 199: - // line 1659 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 192: + // line 1657 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[-1+yyTop]); } break; -case 200: - // line 1664 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 193: + // line 1662 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return ret = new Return(-1,-1); yyVal= ret; } break; -case 201: - // line 1669 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 194: + // line 1667 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Return retexp = new Return(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); retexp.set_ReturnExpr(((Expr)yyVals[-1+yyTop])); yyVal=retexp; } break; -case 202: - // line 1676 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 195: + // line 1674 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Statement)yyVals[0+yyTop]); } break; -case 203: - // line 1680 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 196: + // line 1678 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((IfStmt)yyVals[0+yyTop]); } break; -case 204: - // line 1684 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 197: + // line 1682 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((WhileStmt)yyVals[0+yyTop]); } break; -case 205: - // line 1689 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 198: + // line 1687 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 206: - // line 1695 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 199: + // line 1693 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("\nParser --> Zuweisung1!\n", Section.PARSER); Assign Ass = new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2386,8 +2320,8 @@ case 206: yyVal=Ass; } break; -case 207: - // line 1720 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 200: + // line 1718 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Assign Ass =new Assign(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); LocalOrFieldVar LOFV = new LocalOrFieldVar(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2410,44 +2344,44 @@ case 207: yyVal=Ass; } break; -case 208: - // line 1743 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 201: + // line 1741 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Assign)yyVals[0+yyTop]); } break; -case 209: - // line 1747 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 202: + // line 1745 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 210: - // line 1751 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 203: + // line 1749 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 211: - // line 1755 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 204: + // line 1753 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 212: - // line 1759 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 205: + // line 1757 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 213: - // line 1763 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 206: + // line 1761 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 214: - // line 1774 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 207: + // line 1772 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { IfStmt IfElno = new IfStmt(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); IfElno.set_Expr(((Expr)yyVals[-4+yyTop])); @@ -2456,8 +2390,8 @@ case 214: yyVal=IfElno; } break; -case 215: - // line 1783 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 208: + // line 1781 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { WhileStmt Whstno = new WhileStmt(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); Whstno.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -2465,14 +2399,14 @@ case 215: yyVal=Whstno; } break; -case 216: - // line 1791 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 209: + // line 1789 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 217: - // line 1795 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 210: + // line 1793 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LogOr = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); OrOp OrO = new OrOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2483,20 +2417,20 @@ case 217: yyVal=LogOr; } break; -case 218: - // line 1808 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 211: + // line 1806 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 219: - // line 1813 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 212: + // line 1811 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Block)yyVals[0+yyTop]); } break; -case 220: - // line 1817 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 213: + // line 1815 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { /*Lambdabody kann auch nur aus einer Expression bestehen. In diesem Fall wird ein Block erstellt, welcher als einziges Statement ein return statment mit der expression hat.*/ /*Bsp.: Aus der Expression |var=="hallo"| wird: |{return var=="hallo";}|*/ @@ -2506,20 +2440,20 @@ case 220: yyVal=ret; } break; -case 221: - // line 1827 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 214: + // line 1825 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 222: - // line 1831 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 215: + // line 1829 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((ParameterList)yyVals[-1+yyTop]); } break; -case 223: - // line 1836 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 216: + // line 1834 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LambdaExpression lambda = new LambdaExpression(/*((ParameSterList)$2).getOffset(),((ParameterList)$2).getVariableLength()*/0,0); if(((ParameterList)yyVals[-2+yyTop])!=null)lambda.setParameterList(((ParameterList)yyVals[-2+yyTop])); @@ -2527,87 +2461,87 @@ case 223: yyVal=lambda; } break; -case 224: - // line 1855 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 217: + // line 1853 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((UsedId)yyVals[0+yyTop]); } break; -case 225: - // line 1860 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 218: + // line 1858 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=null; } break; -case 226: - // line 1864 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 219: + // line 1862 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { TimesOp TEO = new TimesOp(-1,-1); yyVal=TEO; } break; -case 227: - // line 1869 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 220: + // line 1867 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DivideOp DEO = new DivideOp(-1,-1); yyVal=DEO; } break; -case 228: - // line 1874 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 221: + // line 1872 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { ModuloOp MEO = new ModuloOp(-1,-1); yyVal=MEO; } break; -case 229: - // line 1879 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 222: + // line 1877 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PlusOp PEO = new PlusOp(-1,-1); yyVal=PEO; } break; -case 230: - // line 1884 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 223: + // line 1882 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { MinusOp MEO = new MinusOp(-1,-1); yyVal=MEO; } break; -case 231: - // line 1896 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 224: + // line 1894 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreIncExpr PRINC = new PreIncExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRINC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRINC; } break; -case 232: - // line 1903 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 225: + // line 1901 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PreDecExpr PRDEC = new PreDecExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); PRDEC.set_Expr(((Expr)yyVals[0+yyTop])); yyVal=PRDEC; } break; -case 233: - // line 1910 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 226: + // line 1908 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostIncExpr PIE = new PostIncExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PIE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PIE; } break; -case 234: - // line 1917 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 227: + // line 1915 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PostDecExpr PDE = new PostDecExpr(((Expr)yyVals[-1+yyTop]).getOffset(),((Expr)yyVals[-1+yyTop]).getVariableLength()); PDE.set_Expr(((Expr)yyVals[-1+yyTop])); yyVal=PDE; } break; -case 235: - // line 1925 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 228: + // line 1923 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M1", Section.PARSER); MethodCall MC = new MethodCall(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); @@ -2638,8 +2572,8 @@ case 235: yyVal=MC; } break; -case 236: - // line 1955 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 229: + // line 1953 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M2", Section.PARSER); MethodCall MCarg = new MethodCall(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); @@ -2671,8 +2605,8 @@ case 236: yyVal=MCarg; } break; -case 237: - // line 1986 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 230: + // line 1984 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M3", Section.PARSER); MethodCall MCpr = new MethodCall(((Expr)yyVals[-4+yyTop]).getOffset(),((Expr)yyVals[-4+yyTop]).getVariableLength()); @@ -2692,8 +2626,8 @@ case 237: yyVal=MCpr; } break; -case 238: - // line 2005 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 231: + // line 2003 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { de.dhbwstuttgart.logger.Logger.getLogger("parser").debug("M4", Section.PARSER); MethodCall MCPA = new MethodCall(((Expr)yyVals[-5+yyTop]).getOffset(),((Expr)yyVals[-5+yyTop]).getVariableLength()); @@ -2714,8 +2648,8 @@ case 238: yyVal=MCPA; } break; -case 239: - // line 2028 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 232: + // line 2026 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NC = new NewClass(((UsedId)yyVals[-2+yyTop]).getOffset(),((UsedId)yyVals[-2+yyTop]).getVariableLength()); NC.set_UsedId(((UsedId)yyVals[-2+yyTop])); @@ -2724,8 +2658,8 @@ case 239: yyVal=NC; } break; -case 240: - // line 2036 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 233: + // line 2034 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NewClass NCarg = new NewClass(((UsedId)yyVals[-3+yyTop]).getOffset(),((UsedId)yyVals[-3+yyTop]).getVariableLength()); NCarg.set_UsedId(((UsedId)yyVals[-3+yyTop])); @@ -2735,14 +2669,14 @@ case 240: yyVal=NCarg; } break; -case 241: - // line 2046 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 234: + // line 2044 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 242: - // line 2050 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 235: + // line 2048 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary And = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); AndOp AndO = new AndOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2753,20 +2687,20 @@ case 242: yyVal=And; } break; -case 243: - // line 2066 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 236: + // line 2064 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 244: - // line 2070 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 237: + // line 2068 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 245: - // line 2074 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 238: + // line 2072 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { PositivExpr POSEX=new PositivExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryPlus UP= new UnaryPlus(); @@ -2775,8 +2709,8 @@ case 245: yyVal=POSEX; } break; -case 246: - // line 2082 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 239: + // line 2080 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { NegativeExpr NEGEX=new NegativeExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryMinus UM=new UnaryMinus(); @@ -2785,20 +2719,20 @@ case 246: yyVal=NEGEX; } break; -case 247: - // line 2090 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 240: + // line 2088 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 248: - // line 2095 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 241: + // line 2093 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 249: - // line 2099 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 242: + // line 2097 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { if (((UsedId)yyVals[0+yyTop]).get_Name().size() > 1) { @@ -2817,38 +2751,38 @@ case 249: } } break; -case 250: - // line 2117 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 243: + // line 2115 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 251: - // line 2121 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 244: + // line 2119 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 252: - // line 2126 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 245: + // line 2124 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 253: - // line 2131 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 246: + // line 2129 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 255: - // line 2137 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 248: + // line 2135 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Literal)yyVals[0+yyTop]); } break; -case 256: - // line 2141 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 249: + // line 2139 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { This T = new This(((Token)yyVals[0+yyTop]).getOffset(),((Token)yyVals[0+yyTop]).getLexem().length()); UsedId UT = new UsedId(((Token)yyVals[0+yyTop]).getOffset()); @@ -2857,24 +2791,24 @@ case 256: yyVal=T; } break; -case 257: - // line 2162 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 250: + // line 2160 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((MethodCall)yyVals[0+yyTop]); } break; -case 258: - // line 2166 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 251: + // line 2164 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 259: - // line 2171 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 252: + // line 2169 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 260: - // line 2173 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 253: + // line 2171 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {NotExpr NE=new NotExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); UnaryNot UN=new UnaryNot(); NE.set_UnaryNot(UN); @@ -2882,36 +2816,32 @@ case 260: yyVal=NE; } break; -case 261: - // line 2179 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - {yyVal=((CastExpr)yyVals[0+yyTop]);} - break; -case 262: +case 254: // line 2181 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {yyVal=((Expr)yyVals[0+yyTop]);} break; -case 264: +case 256: // line 2186 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {IntLiteral IL = new IntLiteral(); IL.set_Int(((Token)yyVals[0+yyTop]).String2Int()); yyVal = IL; } break; -case 265: +case 257: // line 2191 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {BoolLiteral BL = new BoolLiteral(); BL.set_Bool(((Token)yyVals[0+yyTop]).String2Bool()); yyVal = BL; } break; -case 266: +case 258: // line 2195 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" {CharLiteral CL = new CharLiteral(); CL.set_Char(((Token)yyVals[0+yyTop]).CharInString()); yyVal=CL; } break; -case 267: +case 259: // line 2200 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { StringLiteral ST = new StringLiteral(); @@ -2919,14 +2849,14 @@ case 267: yyVal=ST; } break; -case 268: +case 260: // line 2205 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { LongLiteral LL = new LongLiteral(); LL.set_Long(((Token)yyVals[0+yyTop]).String2Long()); yyVal = LL; } break; -case 269: +case 261: // line 2209 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { FloatLiteral FL = new FloatLiteral(); @@ -2934,7 +2864,7 @@ case 269: yyVal = FL; } break; -case 270: +case 262: // line 2214 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { DoubleLiteral DL = new DoubleLiteral(); @@ -2942,41 +2872,32 @@ case 270: yyVal = DL; } break; -case 271: +case 263: // line 2220 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Null NN = new Null(); yyVal=NN; } break; -case 272: - // line 2226 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - CastExpr CaEx=new CastExpr(((Expr)yyVals[0+yyTop]).getOffset(),((Expr)yyVals[0+yyTop]).getVariableLength()); - CaEx.set_Type(((BaseType)yyVals[-2+yyTop])); - CaEx.set_Expr(((Expr)yyVals[0+yyTop])); - yyVal=CaEx; - } - break; -case 273: - // line 2235 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 274: +case 264: // line 2239 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { + yyVal=((Expr)yyVals[0+yyTop]); } break; -case 275: +case 265: // line 2243 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + } + break; +case 266: + // line 2247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 276: - // line 2247 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 267: + // line 2251 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary EQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); EqualOp EO = new EqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2987,8 +2908,8 @@ case 276: yyVal=EQ; } break; -case 277: - // line 2257 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 268: + // line 2261 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary NEQ = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); NotEqualOp NEO = new NotEqualOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -2999,14 +2920,14 @@ case 277: yyVal=NEQ; } break; -case 278: - // line 2268 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 269: + // line 2272 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 279: - // line 2272 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 270: + // line 2276 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessOp LOO = new LessOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3017,8 +2938,8 @@ case 279: yyVal=LO; } break; -case 280: - // line 2282 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 271: + // line 2286 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GO = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterOp GOO = new GreaterOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3029,8 +2950,8 @@ case 280: yyVal=GO; } break; -case 281: - // line 2292 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 272: + // line 2296 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary LE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); LessEquOp LEO = new LessEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3041,8 +2962,8 @@ case 281: yyVal=LE; } break; -case 282: - // line 2302 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 273: + // line 2306 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary GE = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); GreaterEquOp GEO = new GreaterEquOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3053,8 +2974,8 @@ case 282: yyVal=GE; } break; -case 283: - // line 2312 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 274: + // line 2316 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { InstanceOf ISO=new InstanceOf(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ISO.set_Expr(((Expr)yyVals[-2+yyTop])); @@ -3062,20 +2983,20 @@ case 283: yyVal=ISO; } break; -case 284: - // line 2320 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 275: + // line 2324 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 285: - // line 2325 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" - { - yyVal=((Expr)yyVals[0+yyTop]); - } - break; -case 286: +case 276: // line 2329 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" + { + yyVal=((Expr)yyVals[0+yyTop]); + } + break; +case 277: + // line 2333 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary AD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); PlusOp PO = new PlusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3086,8 +3007,8 @@ case 286: yyVal=AD; } break; -case 287: - // line 2339 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 278: + // line 2343 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MI = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); MinusOp MO = new MinusOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3098,14 +3019,14 @@ case 287: yyVal=MI; } break; -case 288: - // line 2350 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 279: + // line 2354 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { yyVal=((Expr)yyVals[0+yyTop]); } break; -case 289: - // line 2354 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 280: + // line 2358 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary ML = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); TimesOp TO = new TimesOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3116,8 +3037,8 @@ case 289: yyVal=ML; } break; -case 290: - // line 2364 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 281: + // line 2368 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary DV = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); DivideOp DO = new DivideOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3128,8 +3049,8 @@ case 290: yyVal = DV; } break; -case 291: - // line 2374 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" +case 282: + // line 2378 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { Binary MD = new Binary(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); ModuloOp MO = new ModuloOp(((Expr)yyVals[-2+yyTop]).getOffset(),((Expr)yyVals[-2+yyTop]).getVariableLength()); @@ -3140,7 +3061,7 @@ case 291: yyVal =MD; } break; - // line 3144 "-" + // line 3065 "-" } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; @@ -3171,36 +3092,35 @@ case 291: } protected static final short yyLhs [] = { -1, - 0, 0, 0, 0, 0, 99, 27, 27, 26, 93, - 93, 28, 28, 106, 106, 24, 25, 25, 23, 1, + 0, 0, 0, 0, 0, 96, 27, 27, 26, 90, + 90, 28, 28, 103, 103, 24, 25, 25, 23, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 8, - 8, 2, 2, 2, 2, 113, 113, 113, 113, 113, - 113, 116, 116, 116, 7, 7, 41, 41, 29, 33, - 33, 3, 3, 34, 34, 16, 16, 42, 42, 42, - 42, 42, 42, 30, 4, 4, 32, 17, 17, 17, - 31, 114, 114, 114, 114, 115, 115, 5, 5, 18, - 18, 111, 107, 107, 10, 6, 20, 20, 11, 12, - 12, 12, 12, 12, 12, 14, 43, 43, 108, 108, - 109, 109, 109, 109, 49, 95, 98, 98, 94, 94, - 96, 96, 97, 97, 13, 13, 13, 13, 13, 13, + 8, 2, 2, 2, 2, 109, 109, 109, 109, 109, + 109, 112, 112, 112, 7, 7, 38, 38, 29, 33, + 33, 3, 3, 34, 34, 16, 16, 39, 39, 39, + 39, 39, 39, 30, 4, 4, 32, 17, 17, 17, + 31, 110, 110, 110, 110, 111, 111, 5, 5, 18, + 18, 108, 104, 104, 10, 6, 20, 20, 11, 12, + 12, 12, 12, 12, 12, 14, 40, 40, 105, 105, + 106, 106, 106, 106, 46, 92, 95, 95, 91, 91, + 93, 93, 94, 94, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 40, 40, 40, 40, 19, - 19, 44, 45, 45, 51, 51, 110, 110, 110, 110, - 39, 39, 15, 15, 37, 37, 38, 21, 81, 81, - 50, 50, 104, 104, 36, 22, 79, 47, 82, 82, - 82, 82, 82, 82, 72, 72, 35, 35, 48, 48, - 80, 80, 80, 80, 87, 88, 84, 85, 85, 85, - 85, 85, 85, 85, 85, 70, 70, 90, 78, 91, - 91, 83, 83, 83, 69, 100, 100, 73, 73, 73, - 73, 73, 73, 89, 86, 68, 68, 102, 46, 46, - 52, 52, 71, 103, 101, 101, 101, 101, 101, 101, - 74, 75, 76, 77, 105, 105, 105, 105, 92, 92, - 67, 67, 58, 58, 58, 58, 58, 56, 56, 56, - 56, 55, 66, 66, 54, 54, 54, 54, 57, 57, - 57, 65, 65, 53, 53, 53, 53, 53, 53, 53, - 53, 112, 64, 64, 63, 63, 63, 62, 62, 62, - 62, 62, 62, 61, 60, 60, 60, 59, 59, 59, - 59, + 13, 13, 13, 13, 13, 37, 37, 19, 19, 41, + 42, 42, 48, 48, 107, 107, 107, 107, 36, 36, + 15, 15, 35, 21, 78, 78, 47, 47, 101, 101, + 22, 76, 44, 79, 79, 79, 79, 79, 79, 69, + 69, 45, 45, 77, 77, 77, 77, 84, 85, 81, + 82, 82, 82, 82, 82, 82, 82, 82, 67, 67, + 87, 75, 88, 88, 80, 80, 80, 66, 97, 97, + 70, 70, 70, 70, 70, 70, 86, 83, 65, 65, + 99, 43, 43, 49, 49, 68, 100, 98, 98, 98, + 98, 98, 98, 71, 72, 73, 74, 102, 102, 102, + 102, 89, 89, 64, 64, 55, 55, 55, 55, 55, + 53, 53, 53, 53, 52, 63, 63, 51, 51, 51, + 51, 54, 54, 62, 62, 50, 50, 50, 50, 50, + 50, 50, 50, 61, 61, 60, 60, 60, 59, 59, + 59, 59, 59, 59, 58, 57, 57, 57, 56, 56, + 56, 56, }; protected static final short yyLen [] = { 2, 1, 2, 3, 2, 3, 3, 1, 2, 3, 1, @@ -3217,858 +3137,812 @@ case 291: 1, 3, 1, 3, 3, 2, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 2, 3, 1, 3, 1, 3, 1, - 3, 1, 1, 2, 1, 3, 4, 5, 4, 5, - 1, 3, 3, 4, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 3, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 5, 7, 5, 9, 8, 8, - 8, 7, 7, 7, 6, 1, 1, 1, 2, 2, - 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 7, 5, 1, 3, 1, 1, 1, - 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 4, 5, 6, 4, 5, - 1, 3, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 1, 1, 1, 1, 2, - 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 3, 1, 3, 3, 1, 3, 3, - 3, 3, 3, 1, 1, 3, 3, 1, 3, 3, - 3, + 1, 2, 1, 3, 4, 5, 4, 5, 1, 3, + 3, 4, 1, 1, 1, 1, 2, 1, 1, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 5, 7, 5, + 9, 8, 8, 8, 7, 7, 7, 6, 1, 1, + 1, 2, 2, 3, 1, 1, 1, 1, 3, 3, + 1, 1, 1, 1, 1, 1, 7, 5, 1, 3, + 1, 1, 1, 2, 3, 3, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 3, 4, 5, + 6, 4, 5, 1, 3, 1, 1, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 3, 3, 1, 3, + 3, 3, 3, 3, 1, 1, 3, 3, 1, 3, + 3, 3, }; protected static final short yyDefRed [] = { 0, - 62, 155, 178, 0, 63, 177, 60, 59, 58, 0, - 0, 0, 61, 19, 0, 14, 15, 13, 12, 7, - 0, 0, 157, 165, 156, 0, 0, 0, 0, 47, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 71, 0, 0, 0, 0, 0, - 48, 11, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 6, 9, 0, 0, 0, 0, 32, 0, 16, - 0, 72, 0, 75, 137, 139, 5, 0, 0, 0, - 0, 106, 107, 0, 49, 64, 67, 50, 0, 0, - 0, 0, 45, 0, 80, 0, 81, 0, 0, 56, - 68, 0, 0, 0, 158, 0, 0, 0, 70, 0, - 69, 22, 0, 0, 24, 0, 18, 0, 54, 0, - 52, 0, 65, 79, 78, 0, 0, 0, 0, 0, - 34, 0, 0, 0, 77, 21, 0, 0, 33, 0, - 0, 0, 31, 0, 82, 0, 0, 0, 113, 0, - 0, 132, 0, 142, 96, 0, 134, 46, 57, 0, - 93, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 26, 51, 29, 53, 66, - 0, 86, 0, 55, 43, 44, 73, 74, 23, 0, - 25, 35, 111, 0, 108, 0, 0, 0, 0, 0, - 0, 264, 268, 270, 269, 265, 271, 266, 267, 0, - 0, 0, 198, 97, 0, 0, 140, 0, 0, 181, - 0, 159, 0, 0, 255, 252, 0, 0, 258, 0, - 209, 210, 0, 0, 183, 169, 143, 160, 172, 173, - 170, 171, 182, 184, 208, 0, 0, 174, 125, 153, - 162, 0, 145, 0, 0, 89, 0, 0, 0, 0, - 151, 0, 166, 141, 0, 256, 0, 0, 0, 0, - 0, 0, 247, 288, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 196, 175, 87, 243, 244, 250, - 251, 176, 197, 257, 261, 99, 0, 119, 94, 90, + 62, 0, 63, 60, 59, 58, 0, 0, 0, 61, + 19, 0, 14, 15, 13, 12, 7, 0, 0, 153, + 0, 0, 0, 47, 0, 0, 10, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 71, 0, + 0, 0, 0, 48, 11, 0, 0, 0, 0, 0, + 0, 20, 0, 0, 6, 9, 0, 0, 0, 0, + 32, 0, 16, 0, 72, 0, 75, 137, 5, 0, + 0, 0, 0, 106, 107, 0, 49, 64, 67, 50, + 0, 0, 0, 0, 45, 0, 80, 0, 81, 0, + 0, 56, 68, 0, 0, 0, 154, 0, 0, 0, + 70, 0, 69, 22, 0, 0, 24, 0, 18, 0, + 54, 0, 52, 0, 65, 79, 78, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 77, 21, 0, 0, + 33, 0, 0, 0, 31, 0, 82, 0, 0, 0, + 113, 0, 0, 132, 0, 140, 96, 0, 134, 46, + 57, 0, 93, 91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 83, 26, 51, 29, + 53, 66, 0, 86, 0, 55, 43, 44, 73, 74, + 23, 0, 25, 35, 111, 0, 108, 0, 0, 0, + 0, 0, 0, 256, 260, 262, 261, 257, 263, 258, + 259, 0, 0, 0, 191, 97, 0, 0, 138, 0, + 0, 174, 0, 155, 0, 0, 248, 245, 0, 0, + 251, 0, 202, 203, 0, 0, 176, 164, 141, 156, + 167, 168, 165, 166, 175, 177, 201, 0, 0, 169, + 125, 151, 158, 0, 143, 0, 0, 89, 0, 0, + 0, 0, 149, 0, 161, 139, 0, 249, 0, 0, + 0, 0, 0, 240, 279, 0, 0, 269, 0, 0, + 0, 0, 0, 0, 0, 189, 170, 87, 236, 237, + 243, 244, 171, 190, 250, 99, 0, 119, 94, 90, 0, 0, 0, 135, 0, 0, 84, 101, 0, 0, - 0, 27, 0, 0, 0, 200, 0, 0, 0, 0, - 0, 231, 232, 221, 0, 0, 0, 98, 144, 168, - 218, 0, 0, 233, 234, 199, 229, 230, 226, 227, - 228, 225, 0, 161, 0, 154, 114, 129, 120, 92, - 0, 0, 0, 245, 246, 260, 0, 0, 0, 0, + 0, 27, 0, 0, 0, 193, 0, 0, 0, 0, + 0, 224, 225, 214, 0, 0, 0, 98, 142, 163, + 211, 0, 0, 226, 227, 192, 222, 223, 219, 220, + 221, 218, 0, 157, 0, 152, 114, 129, 120, 92, + 0, 0, 238, 239, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 100, 126, 0, 0, 121, 95, 103, - 102, 0, 0, 112, 0, 0, 0, 201, 0, 163, - 0, 0, 0, 0, 222, 235, 0, 219, 223, 220, - 0, 206, 207, 146, 152, 0, 0, 289, 290, 291, - 0, 0, 283, 281, 282, 279, 280, 0, 0, 0, - 0, 0, 0, 0, 130, 122, 104, 0, 0, 0, - 0, 0, 149, 0, 0, 147, 0, 0, 236, 0, - 239, 0, 272, 85, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 0, 204, 203, 164, 150, 148, 187, - 237, 0, 240, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 238, 194, 193, 0, 192, 0, 0, - 0, 0, 0, 186, 191, 190, 189, 0, 0, 0, - 188, 0, 215, 0, 214, + 0, 0, 100, 126, 0, 0, 121, 95, 103, 102, + 0, 0, 112, 0, 0, 0, 194, 0, 159, 0, + 0, 0, 0, 215, 228, 0, 212, 216, 213, 0, + 199, 200, 144, 150, 0, 280, 281, 282, 0, 0, + 274, 272, 273, 270, 271, 0, 0, 0, 0, 0, + 0, 0, 130, 122, 104, 0, 0, 0, 0, 0, + 147, 0, 0, 145, 0, 0, 229, 0, 232, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 178, + 0, 197, 196, 160, 148, 146, 180, 230, 0, 233, + 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 231, 187, 186, 0, 185, 0, 0, 0, 0, 0, + 179, 184, 183, 182, 0, 0, 0, 181, 0, 208, + 0, 207, }; - protected static final short yyDgoto [] = { 15, - 16, 17, 68, 122, 123, 124, 59, 35, 40, 125, - 94, 95, 96, 97, 98, 99, 100, 101, 216, 103, - 217, 105, 18, 19, 37, 20, 21, 271, 60, 85, - 23, 88, 61, 69, 24, 25, 26, 27, 262, 219, - 29, 30, 220, 155, 221, 399, 222, 223, 157, 253, - 325, 224, 225, 226, 227, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 229, 390, 230, 288, 289, 290, 291, 235, 0, 236, - 237, 238, 454, 239, 240, 455, 241, 242, 456, 243, - 244, 292, 31, 82, 83, 194, 150, 84, 32, 293, - 343, 332, 246, 391, 294, 33, 109, 110, 175, 248, - 111, 295, 0, 73, 45, 74, + protected static final short yyDgoto [] = { 12, + 13, 14, 61, 114, 115, 116, 52, 29, 34, 117, + 86, 87, 88, 89, 90, 91, 92, 93, 208, 95, + 209, 97, 15, 16, 31, 17, 18, 262, 53, 77, + 20, 80, 54, 62, 21, 254, 211, 23, 24, 212, + 147, 213, 388, 214, 215, 149, 245, 246, 216, 217, + 218, 219, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 221, 379, 222, + 279, 280, 281, 282, 227, 0, 228, 229, 230, 441, + 231, 232, 442, 233, 234, 443, 235, 236, 283, 25, + 74, 75, 186, 142, 76, 26, 284, 333, 322, 238, + 380, 285, 27, 101, 102, 167, 240, 103, 0, 66, + 39, 67, }; - protected static final short yySindex [] = { 1370, - 0, 0, 0, -232, 0, 0, 0, 0, 0, -228, - -228, -198, 0, 0, 0, 0, 0, 0, 0, 0, - 1095, 104, 0, 0, 0, 60, 103, -23, 1210, 0, - 1557, 1095, 0, 99, -92, 256, 215, 233, 247, -80, - 0, 1557, 11, -59, 0, 208, 236, 1370, -232, -198, - 0, 0, 1095, 1557, 33, -228, -228, 2576, 0, -93, - -12, 0, 0, -34, 33, -228, 2606, 0, 18, 0, - -47, 0, 162, 0, 0, 0, 0, -92, -80, 1557, - 72, 0, 0, 192, 0, 0, 0, 0, 222, 56, - 356, 33, 0, 234, 0, 222, 0, 150, 2642, 0, - 0, 40, 404, 409, 0, 431, 172, 1875, 0, 351, - 0, 0, -12, -228, 0, 0, 0, 228, 0, 356, - 0, 2679, 0, 0, 0, 234, 416, 56, 1875, -228, - 0, -228, -228, -59, 0, 0, -93, -12, 0, 18, - -228, 33, 0, 2133, 0, 356, 150, -25, 0, 237, - 56, 0, 172, 0, 0, -228, 0, 0, 0, 176, - 0, 0, 967, 185, 356, 150, 49, 432, 56, 343, - 150, 172, 351, 2177, 0, 0, 0, 0, 0, 0, - 56, 0, 194, 0, 0, 0, 0, 0, 0, -12, - 0, 0, 0, 462, 0, 461, 465, 481, 467, 469, - 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 994, 994, 0, 0, 232, 458, 0, 52, 176, 0, - 2221, 0, 459, 188, 0, 0, 473, 137, 0, 464, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 176, 0, 203, 33, 0, 150, 150, 468, 409, - 0, 476, 0, 0, -228, 0, 232, 994, 994, 994, - 206, 137, 0, 0, 358, 334, 0, 117, 96, 490, - 442, 413, 231, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, - 150, 56, 56, 0, 150, 291, 0, 0, 2277, 2333, - 164, 0, -228, 537, 967, 0, 488, 624, 641, 967, - 206, 0, 0, 0, 345, 668, 458, 0, 0, 0, - 0, 697, 252, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 967, 0, 241, 0, 0, 0, 0, 0, - -228, 518, 55, 0, 0, 0, 994, 994, 994, 994, - 994, -228, 994, 994, 994, 994, 994, 994, 994, 994, - 994, 994, 994, 0, 0, 150, 150, 0, 0, 0, - 0, 2377, 967, 0, 724, 500, 521, 0, 507, 0, - 363, 508, 383, 530, 0, 0, 388, 0, 0, 0, - 535, 0, 0, 0, 0, 751, 994, 0, 0, 0, - 358, 358, 0, 0, 0, 0, 0, 117, 117, 96, - 490, 442, 413, 231, 0, 0, 0, 517, 768, 522, - 807, 2421, 0, 967, 524, 0, 525, 2465, 0, 824, - 0, 397, 0, 0, 2465, 545, 860, 911, 528, 548, - 552, 0, 0, 326, 0, 0, 0, 0, 0, 0, - 0, 410, 0, 0, 2465, 2465, 553, 2465, 557, 938, - 967, 967, 2465, 0, 0, 0, 2465, 0, 2465, 2465, - 561, 562, 567, 0, 0, 0, 0, 2465, 2421, 2421, - 0, 348, 0, 2421, 0, + protected static final short yySindex [] = { 411, + 0, -224, 0, 0, 0, 0, -208, -208, -184, 0, + 0, 0, 0, 0, 0, 0, 0, 233, 165, 0, + 73, -208, 727, 0, 993, 233, 0, 110, -96, 332, + 117, 141, 135, -87, 0, 993, -66, -46, 0, 154, + 411, -224, -184, 0, 0, 233, 993, -45, -208, -208, + -50, 0, -92, -11, 0, 0, -42, -45, -208, 681, + 0, 9, 0, -200, 0, 168, 0, 0, 0, -96, + -87, 993, 20, 0, 0, 187, 0, 0, 0, 0, + 163, 21, 250, -45, 0, 33, 0, 163, 0, 52, + 2325, 0, 0, 271, 261, 309, 0, 336, 81, 2354, + 0, 272, 0, 0, -11, -208, 0, 0, 0, 206, + 0, 250, 0, 2328, 0, 0, 0, 33, 348, 21, + 2354, -208, 0, -208, -208, -46, 0, 0, -92, -11, + 0, 9, -208, -45, 0, 1960, 0, 250, 52, -34, + 0, 209, 21, 0, 81, 0, 0, -208, 0, 0, + 0, 136, 0, 0, 906, -29, 250, 52, 284, 359, + 21, 143, 52, 81, 272, 2029, 0, 0, 0, 0, + 0, 0, 21, 0, 164, 0, 0, 0, 0, 0, + 0, -11, 0, 0, 0, 394, 0, 424, 426, 409, + 431, 432, 436, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 923, 923, 0, 0, -22, 433, 0, 279, + 136, 0, 2070, 0, 422, 162, 0, 0, 457, 105, + 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, + 0, 0, 0, 136, 0, 72, -45, 0, 52, 52, + 448, 309, 0, 471, 0, 0, -208, 0, 923, 923, + 923, 30, 105, 0, 0, 406, 39, 0, 34, 131, + 478, 427, 404, 222, 234, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, + 52, 21, 21, 0, 52, 285, 0, 0, 2104, 2139, + 59, 0, -208, 449, 906, 0, 488, 543, 590, 906, + 30, 0, 0, 0, 444, 619, 433, 0, 0, 0, + 0, 636, 248, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 906, 0, 253, 0, 0, 0, 0, 0, + -208, 520, 0, 0, 0, 923, 923, 923, 923, 923, + -208, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 0, 0, 52, 52, 0, 0, 0, 0, + 2171, 906, 0, 492, 506, 525, 0, 510, 0, 454, + 513, 456, 532, 0, 0, 460, 0, 0, 0, 534, + 0, 0, 0, 0, 680, 0, 0, 0, 406, 406, + 0, 0, 0, 0, 0, 34, 34, 131, 478, 427, + 404, 222, 0, 0, 0, 516, 720, 518, 737, 2211, + 0, 906, 519, 0, 523, 2250, 0, 764, 0, 482, + 0, 2250, 546, 781, 833, 544, 553, 562, 0, 0, + 338, 0, 0, 0, 0, 0, 0, 0, 514, 0, + 0, 2250, 2250, 566, 2250, 567, 860, 906, 906, 2250, + 0, 0, 0, 2250, 0, 2250, 2250, 568, 569, 580, + 0, 0, 0, 0, 2250, 2211, 2211, 0, 355, 0, + 2211, 0, }; protected static final short yyRindex [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1054, 0, + 2299, 0, 0, 0, 625, 0, 0, -93, 0, 0, + 0, 0, -77, 0, 0, 628, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1133, 0, 0, 0, 2519, 2548, 0, 0, 0, - 619, 0, 0, -77, 0, 0, 0, 0, -75, 0, - 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, + 0, 637, 331, 0, 0, 0, 0, 0, 0, 0, + 2358, 0, -12, 0, 0, 0, 0, 0, 0, -15, + 0, 0, 0, 0, 0, 324, 0, -32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, + 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 251, 0, 0, 0, 0, 0, 0, 0, 0, 622, - 279, 0, 0, 0, 0, 0, 0, 0, 2709, 0, - -9, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 338, 0, -5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 297, 0, 0, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 366, 24, 0, 0, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, + 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -3, 0, 0, 0, 0, 0, 577, 0, 303, + 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, + 0, 0, 0, 0, -24, -14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 50, + 0, 583, 0, 51, 0, 0, 0, 0, 0, 0, + 0, 554, 1971, 0, 0, 1607, 1644, 0, 1754, 1681, + 1201, 1129, 1246, 1305, 1331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 369, 47, 0, 0, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 293, 0, 0, 0, 0, 0, -44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 564, 0, 101, 0, 0, - 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, - 0, 0, -49, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 88, 0, 574, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 569, 2064, 0, 0, 1969, 1694, 0, 1855, 1738, 1274, - 1300, 1384, -20, 1410, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 125, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1421, 0, 0, 0, 0, 0, 576, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 175, 0, 0, 0, + 1368, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1989, 2026, 0, 0, 0, 0, 0, 1895, 1914, 1749, - 1464, 1552, 1578, 1622, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2089, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1880, 1917, + 0, 0, 0, 0, 0, 1773, 1809, 1718, 1479, 1407, + 1521, 1584, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, }; - protected static final short yyGindex [] = { 589, - 0, 0, -15, 0, 529, 0, 452, 591, 593, 0, - 277, 0, 4, 0, 1737, 0, 547, 0, -24, -37, - 3, 333, 20, 0, 0, 68, 623, 1, 578, -128, - -51, 25, -13, 575, 0, 0, 391, -56, 0, 551, - 30, 9, -82, 0, -138, 0, 0, 0, 505, 315, - 79, 0, 0, 0, 0, -141, 0, 734, 92, 0, - 119, 93, 292, 296, 299, 290, 295, 0, 0, 329, - 0, -154, 0, -54, -1, 66, 84, 0, 0, -376, - -202, 1052, -102, 0, 0, 0, 0, 0, 0, 0, - 0, 332, 177, -72, 541, 0, 0, 614, 0, 159, - 0, 0, 0, -266, 259, 165, 0, 579, 515, 516, - 0, 0, 0, 0, 0, 555, + protected static final short yyGindex [] = { 598, + 0, 0, -8, 0, 530, 0, 646, 611, 613, 0, + 14, 0, 31, 0, 2551, 0, 563, 0, 4, 84, + 47, -138, 102, 0, 0, 191, 631, 1, 588, -124, + -44, 267, 19, 592, 18, 0, 80, 232, 44, -68, + 0, -145, 0, 0, 0, 1498, 326, -51, 0, 0, + 0, 0, -55, 0, 386, 97, 0, 107, 94, 307, + 308, 306, 310, 311, 0, 0, 339, 0, -126, 0, + -36, 3, 67, 86, 0, 0, -238, -209, 2226, -75, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 362, + -59, 536, 0, 0, 624, 0, 104, 0, 0, 0, + -243, 174, 185, 0, 585, 512, 517, 0, 0, 0, + 0, 560, }; - protected static final short yyTable [] = { 257, - 22, 256, 228, 71, 86, 87, 145, 117, 287, 211, - 36, 38, 213, 154, 87, 250, 216, 216, 329, 149, - 216, 216, 216, 216, 216, 216, 216, 261, 22, 58, - 58, 114, 228, 102, 166, 309, 19, 51, 216, 216, - 13, 216, 67, 317, 22, 30, 113, 28, 22, 166, - 19, 166, 393, 131, 13, 452, 22, 22, 22, 397, - 104, 130, 87, 139, 138, 342, 22, 22, 34, 168, - 127, 131, 14, 216, 102, 185, 186, 106, 87, 228, - 212, 19, 167, 160, 193, 13, 19, 108, 41, 231, - 119, 326, 160, 123, 22, 407, 129, 43, 161, 22, - 19, 104, 39, 216, 86, 116, 329, 299, 22, 104, - 58, 44, 452, 452, 22, 259, 51, 452, 106, 231, - 41, 133, 22, 190, 192, 127, 22, 106, 108, 22, - 22, 19, 22, 22, 22, 131, 352, 51, 177, 442, - 67, 22, 232, 127, 218, 46, 115, 306, 22, 43, - 46, 129, 105, 124, 184, 260, 22, 123, 55, 386, - 387, 224, 264, 44, 22, 394, 231, 228, 228, 116, - 22, 382, 232, 462, 218, 56, 365, 400, 366, 329, - 19, 166, 347, 117, 166, 133, 19, 66, 57, 57, - 30, 76, 28, 47, 327, 52, 128, 42, 2, 166, - 19, 19, 3, 148, 30, 134, 52, 127, 54, 233, - 115, 321, 321, 86, 6, 22, 105, 124, 52, 232, - 132, 218, 405, 135, 383, 296, 254, 234, 428, 80, - 430, 19, 2, 118, 2, 142, 3, 133, 3, 233, - 228, 14, 297, 346, 52, 326, 345, 117, 6, 398, - 6, 43, 216, 143, 231, 231, 384, 234, 250, 250, - 128, 257, 257, 256, 256, 22, 116, 22, 321, 321, - 321, 142, 324, 63, 446, 210, 449, 14, 64, 457, - 255, 216, 216, 216, 216, 216, 233, 216, 216, 178, - 228, 19, 467, 469, 42, 13, 228, 118, 256, 86, - 75, 43, 245, 228, 234, 413, 65, 232, 232, 218, - 218, 70, 42, 22, 62, 481, 482, 483, 337, 338, - 339, 340, 109, 228, 228, 341, 228, 231, 76, 251, - 251, 228, 245, 81, 160, 228, 110, 228, 228, 141, - 109, 19, 16, 126, 144, 22, 228, 228, 228, 379, - 374, 22, 228, 345, 110, 17, 146, 321, 321, 321, - 321, 321, 22, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 233, 233, 360, 231, 361, 245, - 232, 140, 218, 231, 170, 395, 492, 493, 345, 362, - 231, 495, 234, 234, 359, 148, 88, 367, 126, 357, - 368, 76, 247, 435, 358, 170, 434, 321, 249, 249, - 231, 231, 166, 231, 224, 224, 224, 224, 231, 363, - 364, 224, 231, 437, 231, 231, 434, 166, 439, 166, - 232, 434, 247, 231, 231, 231, 232, 463, 156, 231, - 434, 19, 2, 232, 334, 335, 3, 233, 19, 19, - 474, 411, 412, 434, 19, 19, 19, 19, 6, 418, - 419, 19, 162, 232, 232, 234, 232, 245, 245, 163, - 164, 232, 165, 174, 182, 232, 263, 232, 232, 247, - 251, 414, 415, 416, 417, 210, 232, 232, 232, 2, - 300, 2, 232, 3, 311, 3, 251, 233, 2, 313, - 314, 160, 3, 233, 315, 6, 318, 6, 319, 320, - 233, 112, 115, 270, 6, 234, 331, 330, 333, 351, - 267, 234, 336, 268, 151, 269, 350, 369, 234, 136, - 233, 233, 210, 233, 120, 370, 371, 372, 233, 316, - 245, 210, 233, 373, 233, 233, 388, 251, 234, 234, - 28, 234, 401, 233, 233, 233, 234, 406, 431, 233, - 234, 432, 234, 234, 176, 433, 436, 247, 247, 270, - 438, 234, 234, 234, 440, 444, 267, 234, 48, 268, - 447, 269, 458, 459, 344, 465, 470, 471, 189, 191, - 245, 472, 473, 477, 72, 385, 245, 479, 28, 251, - 2, 488, 489, 245, 3, 249, 249, 490, 107, 249, - 249, 249, 249, 249, 494, 249, 6, 128, 1, 2, - 4, 3, 180, 245, 245, 136, 245, 249, 249, 224, - 249, 245, 88, 302, 179, 245, 77, 245, 245, 78, - 247, 312, 79, 14, 153, 159, 245, 245, 245, 107, - 180, 249, 245, 140, 53, 137, 270, 353, 172, 404, - 420, 423, 249, 267, 389, 421, 268, 424, 269, 422, - 298, 402, 128, 270, 403, 304, 181, 251, 118, 183, - 267, 392, 195, 268, 187, 269, 173, 307, 188, 310, - 247, 0, 249, 0, 0, 0, 247, 0, 252, 0, - 270, 0, 0, 247, 0, 0, 0, 267, 396, 0, - 268, 0, 269, 0, 252, 0, 0, 0, 0, 0, - 303, 0, 0, 247, 247, 0, 247, 0, 0, 270, - 0, 247, 0, 0, 0, 247, 267, 247, 247, 268, - 0, 269, 0, 0, 0, 0, 247, 247, 247, 0, - 0, 0, 247, 0, 0, 265, 270, 0, 0, 0, - 0, 348, 349, 267, 0, 252, 268, 266, 269, 0, - 0, 0, 0, 202, 203, 204, 205, 206, 207, 208, - 209, 14, 429, 270, 0, 0, 0, 0, 211, 212, - 267, 441, 0, 268, 0, 269, 0, 0, 0, 0, - 270, 0, 0, 0, 0, 375, 0, 267, 445, 378, - 268, 265, 269, 0, 0, 0, 0, 252, 0, 144, - 0, 0, 0, 266, 0, 0, 0, 0, 0, 202, - 203, 204, 205, 206, 207, 208, 209, 14, 0, 270, - 0, 249, 0, 0, 211, 212, 267, 0, 0, 268, - 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, - 0, 0, 0, 267, 461, 448, 268, 0, 269, 0, - 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, - 425, 426, 224, 224, 224, 224, 0, 0, 0, 224, - 0, 0, 270, 0, 0, 252, 0, 0, 265, 267, - 466, 0, 268, 0, 269, 0, 0, 0, 0, 0, - 266, 0, 0, 0, 0, 265, 202, 203, 204, 205, - 206, 207, 208, 209, 14, 0, 0, 266, 0, 0, - 0, 211, 212, 202, 203, 204, 205, 206, 207, 208, - 209, 14, 265, 270, 322, 323, 0, 0, 211, 212, - 267, 468, 0, 268, 266, 269, 0, 0, 0, 0, - 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, - 270, 265, 0, 0, 0, 211, 212, 267, 480, 0, - 268, 0, 269, 266, 0, 0, 0, 0, 0, 202, - 203, 204, 205, 206, 207, 208, 209, 14, 265, 270, - 0, 354, 355, 356, 211, 212, 267, 0, 0, 268, - 266, 269, 0, 0, 0, 0, 202, 203, 204, 205, - 206, 207, 208, 209, 14, 265, 270, 0, 0, 0, - 0, 211, 212, 267, 0, 0, 268, 266, 269, 0, - 0, 0, 265, 202, 203, 204, 205, 206, 207, 208, - 209, 14, 0, 0, 266, 0, 0, 0, 211, 212, - 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, - 0, 0, 0, 0, 0, 211, 212, 0, 0, 0, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 408, 409, 410, 266, 0, 0, 0, 0, 265, 202, - 203, 204, 205, 206, 207, 208, 209, 14, 0, 0, - 266, 0, 0, 0, 211, 212, 202, 203, 204, 205, - 206, 207, 208, 209, 14, 0, 0, 0, 0, 0, - 0, 211, 212, 0, 265, 0, 0, 0, 0, 0, - 443, 0, 0, 0, 0, 0, 266, 0, 0, 0, - 0, 0, 202, 203, 204, 205, 206, 207, 208, 209, - 14, 0, 0, 0, 0, 0, 0, 211, 212, 76, - 76, 0, 76, 76, 76, 76, 76, 76, 0, 76, - 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, - 0, 76, 0, 0, 76, 0, 0, 266, 0, 0, - 0, 0, 0, 202, 203, 204, 205, 206, 207, 208, - 209, 14, 265, 0, 0, 0, 0, 0, 211, 212, - 0, 0, 0, 76, 266, 0, 76, 0, 0, 0, - 202, 203, 204, 205, 206, 207, 208, 209, 14, 0, - 0, 265, 0, 0, 0, 211, 212, 0, 0, 0, - 0, 0, 0, 266, 0, 76, 76, 0, 0, 202, - 203, 204, 205, 206, 207, 208, 209, 14, 0, 0, - 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, - 266, 0, 0, 0, 0, 0, 202, 203, 204, 205, - 206, 207, 208, 209, 14, 0, 0, 0, 0, 248, - 248, 211, 212, 248, 248, 248, 248, 248, 0, 248, - 262, 0, 0, 0, 262, 262, 262, 262, 262, 262, - 262, 248, 248, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 262, 262, 0, 262, 253, 253, 0, 0, - 253, 253, 253, 253, 253, 253, 253, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 248, 4, 253, 253, - 0, 253, 0, 5, 0, 0, 0, 262, 0, 0, - 7, 8, 9, 0, 11, 12, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 248, 0, 0, 76, - 76, 0, 0, 0, 76, 76, 0, 262, 0, 0, - 0, 76, 0, 0, 0, 76, 76, 0, 76, 76, - 76, 76, 76, 76, 76, 0, 76, 0, 0, 0, - 241, 241, 0, 253, 241, 241, 241, 241, 241, 241, - 241, 0, 0, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 241, 241, 0, 241, 205, 205, 0, 0, - 205, 205, 205, 205, 205, 205, 205, 249, 249, 0, - 0, 249, 249, 249, 249, 249, 1, 249, 205, 205, - 0, 205, 49, 0, 0, 0, 0, 241, 5, 249, - 249, 0, 249, 453, 0, 7, 8, 9, 0, 460, - 50, 0, 0, 13, 0, 0, 464, 0, 0, 0, - 263, 0, 0, 205, 263, 263, 263, 263, 263, 263, - 263, 0, 0, 0, 249, 0, 475, 476, 0, 478, - 0, 0, 263, 263, 484, 263, 0, 0, 485, 0, - 486, 487, 0, 205, 0, 248, 0, 0, 0, 491, - 453, 460, 0, 0, 249, 484, 262, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, - 0, 0, 0, 0, 248, 248, 248, 248, 248, 248, - 248, 248, 253, 0, 0, 262, 262, 262, 262, 262, - 262, 262, 262, 0, 0, 0, 0, 263, 254, 254, - 0, 0, 254, 254, 254, 254, 254, 254, 254, 0, - 0, 253, 253, 253, 253, 253, 253, 253, 253, 0, - 254, 254, 0, 254, 242, 242, 0, 0, 242, 242, - 242, 242, 242, 242, 242, 0, 1, 2, 0, 0, - 0, 3, 4, 0, 0, 0, 242, 242, 5, 242, - 0, 0, 0, 6, 0, 7, 8, 9, 10, 11, - 12, 0, 0, 13, 0, 0, 241, 0, 217, 217, - 0, 0, 217, 217, 217, 217, 217, 217, 217, 0, - 14, 242, 0, 0, 0, 254, 0, 0, 0, 0, - 217, 217, 205, 217, 0, 241, 241, 241, 241, 241, - 241, 241, 241, 249, 0, 0, 0, 0, 0, 0, + protected static final short yyTable [] = { 109, + 19, 243, 250, 319, 78, 79, 242, 30, 32, 84, + 249, 286, 137, 13, 79, 206, 64, 243, 314, 146, + 299, 332, 19, 253, 141, 19, 51, 13, 278, 30, + 51, 161, 106, 19, 204, 60, 19, 161, 19, 19, + 161, 19, 19, 131, 205, 28, 161, 19, 161, 19, + 19, 19, 122, 123, 94, 161, 19, 19, 13, 19, + 19, 79, 131, 307, 123, 382, 44, 124, 243, 316, + 19, 105, 386, 118, 85, 37, 28, 79, 19, 22, + 220, 349, 116, 350, 125, 133, 19, 19, 130, 319, + 119, 19, 11, 354, 94, 355, 127, 96, 140, 223, + 19, 41, 159, 78, 287, 334, 19, 131, 115, 105, + 220, 51, 336, 162, 19, 335, 33, 65, 19, 372, + 22, 19, 19, 184, 19, 19, 19, 118, 123, 223, + 99, 60, 342, 19, 162, 124, 210, 96, 224, 120, + 19, 177, 178, 44, 119, 96, 116, 182, 19, 133, + 185, 430, 98, 117, 371, 315, 19, 220, 128, 118, + 127, 319, 19, 40, 44, 145, 210, 296, 224, 48, + 99, 49, 115, 105, 30, 56, 223, 375, 376, 164, + 59, 439, 160, 383, 449, 50, 57, 337, 30, 50, + 28, 252, 98, 120, 58, 389, 243, 173, 256, 124, + 175, 98, 225, 311, 311, 179, 1, 19, 35, 45, + 37, 126, 78, 210, 317, 224, 394, 117, 3, 244, + 45, 226, 128, 118, 38, 4, 5, 6, 251, 127, + 134, 45, 225, 81, 63, 244, 35, 439, 439, 237, + 82, 293, 439, 220, 220, 416, 68, 418, 135, 134, + 83, 226, 247, 387, 11, 73, 45, 19, 108, 311, + 311, 311, 223, 223, 250, 250, 202, 170, 13, 237, + 248, 202, 249, 249, 327, 328, 329, 330, 202, 225, + 19, 331, 100, 243, 243, 136, 244, 133, 19, 140, + 433, 121, 436, 244, 244, 444, 78, 19, 226, 210, + 210, 224, 224, 19, 19, 19, 351, 454, 456, 239, + 19, 19, 19, 19, 152, 220, 237, 19, 316, 154, + 373, 138, 100, 143, 37, 111, 42, 152, 152, 153, + 468, 469, 470, 112, 223, 19, 352, 353, 38, 239, + 148, 19, 289, 368, 42, 121, 311, 311, 311, 311, + 311, 19, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 217, 220, 225, 225, 138, 401, 155, + 220, 210, 169, 224, 109, 156, 220, 37, 16, 36, + 110, 157, 88, 223, 226, 226, 239, 47, 176, 223, + 55, 17, 109, 76, 166, 223, 220, 220, 110, 220, + 479, 480, 237, 237, 220, 482, 174, 72, 220, 161, + 220, 220, 324, 325, 244, 223, 223, 290, 223, 220, + 220, 220, 224, 223, 161, 220, 161, 223, 224, 223, + 223, 303, 356, 292, 224, 357, 255, 225, 223, 223, + 223, 261, 348, 11, 223, 399, 400, 346, 207, 406, + 407, 259, 347, 260, 224, 224, 226, 224, 402, 403, + 404, 405, 224, 304, 301, 305, 224, 306, 224, 224, + 308, 309, 239, 239, 237, 310, 152, 224, 224, 224, + 320, 261, 363, 224, 384, 335, 225, 335, 207, 1, + 321, 259, 225, 260, 423, 2, 425, 422, 225, 422, + 427, 3, 323, 422, 326, 226, 340, 374, 4, 5, + 6, 226, 8, 9, 341, 358, 10, 226, 225, 225, + 359, 225, 450, 237, 261, 422, 225, 360, 361, 237, + 225, 207, 225, 225, 259, 237, 260, 226, 226, 362, + 226, 225, 225, 225, 239, 226, 377, 225, 390, 226, + 417, 226, 226, 202, 461, 237, 237, 422, 237, 395, + 226, 226, 226, 237, 419, 420, 226, 237, 421, 237, + 237, 424, 426, 428, 431, 261, 434, 445, 237, 237, + 237, 446, 207, 378, 237, 259, 452, 260, 312, 313, + 242, 242, 458, 239, 242, 242, 242, 242, 242, 239, + 242, 459, 457, 76, 460, 239, 464, 466, 475, 476, + 242, 242, 242, 242, 217, 242, 217, 217, 217, 217, + 477, 481, 261, 217, 1, 239, 239, 2, 239, 207, + 381, 4, 259, 239, 260, 173, 3, 239, 69, 239, + 239, 88, 172, 172, 343, 344, 345, 242, 239, 239, + 239, 261, 70, 151, 239, 71, 46, 129, 207, 385, + 393, 259, 132, 260, 408, 410, 409, 1, 261, 187, + 411, 391, 412, 2, 392, 207, 297, 242, 259, 3, + 260, 110, 300, 257, 165, 180, 4, 5, 6, 7, + 8, 9, 0, 0, 10, 258, 0, 0, 104, 107, + 0, 194, 195, 196, 197, 198, 199, 200, 201, 11, + 0, 11, 261, 0, 0, 128, 203, 204, 0, 207, + 429, 0, 259, 257, 260, 0, 0, 0, 0, 0, + 0, 396, 397, 398, 0, 258, 0, 0, 0, 0, + 84, 194, 195, 196, 197, 198, 199, 200, 201, 11, + 168, 0, 261, 0, 0, 0, 203, 204, 136, 207, + 432, 0, 259, 0, 260, 0, 257, 0, 0, 261, + 0, 0, 0, 0, 181, 183, 207, 0, 258, 259, + 0, 260, 0, 0, 194, 195, 196, 197, 198, 199, + 200, 201, 11, 0, 0, 435, 261, 0, 0, 203, + 204, 0, 0, 207, 448, 113, 259, 0, 260, 0, + 0, 0, 0, 261, 0, 0, 0, 257, 0, 0, + 207, 453, 0, 259, 0, 260, 242, 302, 0, 258, + 0, 0, 0, 0, 0, 194, 195, 196, 197, 198, + 199, 200, 201, 11, 0, 0, 0, 0, 0, 0, + 203, 204, 0, 0, 0, 242, 242, 242, 242, 242, + 242, 242, 242, 0, 257, 261, 0, 217, 217, 217, + 217, 0, 207, 455, 217, 259, 258, 260, 0, 0, + 0, 0, 194, 195, 196, 197, 198, 199, 200, 201, + 11, 0, 261, 257, 0, 0, 0, 203, 204, 207, + 467, 0, 259, 0, 260, 258, 0, 0, 0, 0, + 257, 194, 195, 196, 197, 198, 199, 200, 201, 11, + 0, 0, 258, 0, 0, 0, 203, 204, 194, 195, + 196, 197, 198, 199, 200, 201, 11, 1, 261, 0, + 0, 0, 0, 203, 204, 207, 0, 0, 259, 3, + 260, 0, 0, 0, 257, 261, 4, 5, 6, 0, + 0, 0, 207, 0, 10, 259, 258, 260, 0, 0, + 0, 82, 194, 195, 196, 197, 198, 199, 200, 201, + 11, 112, 0, 1, 0, 0, 0, 203, 204, 42, + 0, 0, 0, 0, 257, 3, 0, 0, 0, 0, + 0, 0, 4, 5, 6, 0, 258, 43, 0, 0, + 10, 257, 194, 195, 196, 197, 198, 199, 200, 201, + 11, 0, 0, 258, 0, 0, 0, 203, 204, 194, + 195, 196, 197, 198, 199, 200, 201, 11, 257, 0, + 0, 0, 0, 0, 203, 204, 0, 0, 0, 0, + 258, 0, 0, 0, 0, 257, 194, 195, 196, 197, + 198, 199, 200, 201, 11, 0, 0, 258, 0, 0, + 0, 203, 204, 194, 195, 196, 197, 198, 199, 200, + 201, 11, 0, 0, 0, 0, 0, 0, 203, 204, + 76, 76, 0, 76, 76, 76, 76, 76, 76, 0, + 76, 0, 0, 0, 0, 0, 0, 257, 0, 0, + 0, 0, 76, 0, 0, 76, 0, 0, 0, 258, + 0, 0, 0, 0, 0, 194, 195, 196, 197, 198, + 199, 200, 201, 11, 257, 0, 0, 0, 0, 0, + 203, 204, 0, 0, 76, 0, 258, 76, 0, 0, + 0, 0, 194, 195, 196, 197, 198, 199, 200, 201, + 11, 0, 0, 0, 0, 246, 246, 203, 204, 246, + 246, 246, 246, 246, 246, 246, 76, 76, 0, 0, + 257, 0, 0, 0, 0, 0, 0, 246, 246, 0, + 246, 0, 258, 0, 0, 0, 0, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 11, 0, 0, 258, + 0, 0, 0, 203, 204, 194, 195, 196, 197, 198, + 199, 200, 201, 11, 0, 0, 0, 0, 241, 241, + 203, 204, 241, 241, 241, 241, 241, 254, 241, 0, + 0, 254, 254, 254, 254, 254, 254, 254, 0, 1, + 241, 241, 246, 241, 0, 2, 0, 0, 0, 254, + 254, 3, 254, 0, 0, 0, 0, 0, 4, 5, + 6, 0, 0, 9, 0, 0, 10, 0, 0, 0, + 0, 0, 234, 234, 0, 241, 234, 234, 234, 234, + 234, 234, 234, 0, 254, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 234, 0, 234, 0, 0, + 76, 0, 0, 0, 0, 241, 76, 0, 0, 0, + 0, 0, 76, 0, 254, 0, 76, 0, 0, 76, + 76, 76, 76, 76, 76, 76, 0, 76, 0, 234, + 0, 209, 209, 0, 0, 209, 209, 209, 209, 209, + 209, 209, 0, 0, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 209, 209, 0, 209, 198, 198, 0, + 0, 198, 198, 198, 198, 198, 198, 198, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 198, 0, 198, 0, 0, 0, 0, 0, 209, 0, + 0, 246, 0, 0, 242, 242, 0, 0, 242, 242, + 242, 242, 242, 0, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 198, 0, 242, 242, 209, 242, + 246, 246, 246, 246, 246, 246, 246, 246, 0, 0, + 0, 0, 0, 247, 247, 0, 0, 247, 247, 247, + 247, 247, 247, 247, 198, 0, 0, 0, 0, 0, + 0, 242, 0, 0, 241, 247, 247, 0, 247, 0, + 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 205, 205, 205, 205, 217, 205, 205, 205, 0, - 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, - 284, 284, 0, 0, 284, 284, 263, 284, 0, 284, - 284, 0, 0, 0, 0, 217, 0, 0, 0, 0, - 0, 0, 284, 284, 0, 284, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 263, 263, 263, 263, 263, - 263, 263, 263, 0, 273, 273, 0, 0, 273, 273, - 273, 273, 273, 273, 273, 274, 274, 284, 0, 274, - 274, 274, 274, 274, 274, 274, 273, 273, 0, 273, - 0, 0, 0, 0, 0, 0, 0, 274, 274, 0, - 274, 0, 0, 1, 0, 0, 0, 284, 0, 4, - 0, 0, 0, 0, 254, 5, 147, 0, 0, 0, - 152, 273, 7, 8, 9, 0, 0, 12, 0, 0, - 13, 0, 274, 166, 171, 0, 0, 0, 0, 0, - 242, 0, 0, 254, 254, 254, 254, 254, 254, 254, - 254, 273, 152, 0, 166, 171, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 242, - 242, 242, 242, 242, 242, 242, 242, 257, 0, 258, - 0, 275, 275, 0, 217, 275, 275, 275, 275, 275, - 275, 275, 0, 0, 0, 301, 0, 0, 305, 0, - 0, 0, 0, 275, 0, 0, 0, 258, 0, 305, - 0, 0, 0, 217, 217, 217, 217, 217, 0, 217, - 217, 276, 276, 0, 92, 276, 276, 276, 276, 276, - 276, 276, 0, 0, 0, 0, 0, 0, 275, 0, - 277, 277, 0, 276, 277, 277, 277, 277, 277, 277, - 277, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 0, 277, 0, 0, 0, 0, 0, 275, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 284, 284, 284, 284, 284, - 284, 284, 284, 0, 0, 0, 285, 277, 0, 285, - 273, 285, 285, 285, 285, 0, 0, 0, 276, 0, - 0, 274, 0, 0, 0, 0, 286, 285, 285, 286, - 285, 286, 286, 286, 286, 0, 0, 277, 376, 377, - 273, 273, 0, 273, 273, 273, 273, 286, 286, 0, - 286, 274, 274, 0, 274, 274, 274, 274, 0, 0, - 0, 0, 285, 287, 0, 0, 287, 0, 287, 287, - 287, 287, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 286, 0, 287, 287, 0, 287, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, - 259, 259, 0, 0, 259, 259, 259, 259, 259, 259, - 259, 0, 286, 0, 0, 0, 0, 0, 0, 287, - 0, 0, 259, 259, 0, 259, 0, 0, 169, 0, - 0, 1, 2, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 169, 6, 287, - 7, 8, 9, 0, 0, 0, 275, 259, 13, 275, - 275, 275, 275, 275, 0, 169, 0, 0, 0, 0, - 0, 0, 215, 0, 0, 120, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, - 0, 213, 0, 0, 0, 0, 276, 0, 0, 276, - 276, 276, 276, 276, 0, 0, 0, 0, 0, 0, - 0, 169, 0, 169, 0, 277, 215, 0, 277, 277, - 277, 277, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, - 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 144, 0, 214, 0, 0, - 215, 286, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 285, 285, 285, 285, 285, 285, 285, 0, 213, + 0, 242, 0, 241, 241, 241, 241, 241, 241, 241, + 241, 0, 254, 254, 254, 254, 254, 254, 254, 254, + 0, 0, 0, 0, 0, 255, 0, 0, 234, 255, + 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, + 247, 0, 0, 0, 0, 0, 0, 255, 255, 0, + 255, 0, 0, 0, 0, 0, 0, 234, 234, 234, + 234, 234, 234, 234, 234, 0, 0, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 0, 0, + 0, 0, 255, 0, 0, 0, 0, 209, 0, 235, + 235, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 286, 286, 286, 286, 286, 286, 286, 286, 287, 144, - 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 287, 287, - 287, 287, 287, 287, 287, 213, 259, 0, 0, 0, - 0, 0, 0, 144, 0, 328, 169, 0, 0, 0, - 169, 0, 0, 0, 0, 202, 0, 0, 0, 169, - 169, 0, 169, 0, 0, 259, 259, 259, 259, 259, - 259, 169, 215, 169, 0, 169, 0, 0, 0, 0, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 2, 213, 0, 0, 3, 0, 169, 169, 0, 144, - 0, 380, 0, 196, 197, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 215, 199, 0, 200, - 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 2, 213, 0, 0, 3, 0, - 211, 212, 0, 0, 0, 0, 0, 196, 197, 0, - 6, 0, 0, 0, 0, 144, 0, 381, 0, 198, - 215, 199, 0, 200, 0, 0, 0, 0, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 2, 213, - 0, 0, 3, 0, 211, 212, 0, 0, 0, 0, - 0, 196, 197, 0, 6, 0, 0, 0, 0, 144, - 0, 427, 0, 198, 215, 199, 0, 200, 0, 0, - 0, 0, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 0, 213, 0, 0, 0, 0, 211, 212, - 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, - 0, 0, 0, 144, 0, 0, 0, 196, 197, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 199, 136, 200, 0, 0, 0, 0, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 0, 0, - 136, 0, 0, 0, 211, 212, 0, 144, 0, 0, - 2, 138, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 197, 0, 6, 0, 0, 138, - 0, 0, 0, 0, 0, 198, 0, 199, 0, 200, - 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 2, 92, 0, 0, 3, 0, - 211, 212, 0, 0, 0, 0, 0, 196, 197, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 199, 0, 200, 0, 92, 0, 0, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 0, 0, - 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, - 0, 196, 450, 0, 0, 0, 0, 0, 0, 0, - 93, 92, 0, 198, 0, 199, 0, 200, 0, 0, - 0, 0, 451, 202, 203, 204, 205, 206, 207, 208, - 209, 14, 0, 0, 0, 0, 0, 0, 211, 212, - 121, 0, 0, 0, 0, 196, 197, 0, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, - 0, 200, 0, 0, 0, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 14, 158, 0, 61, 0, - 0, 0, 211, 212, 0, 136, 136, 0, 0, 0, - 136, 136, 0, 0, 0, 0, 0, 136, 0, 0, - 0, 0, 136, 0, 136, 136, 136, 136, 136, 136, - 0, 0, 136, 179, 138, 138, 0, 0, 0, 138, - 138, 0, 0, 0, 0, 0, 138, 0, 0, 136, - 0, 138, 0, 138, 138, 138, 138, 138, 138, 0, - 0, 138, 1, 2, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 138, 6, - 0, 7, 8, 9, 0, 0, 0, 0, 0, 89, - 0, 0, 1, 2, 0, 0, 90, 3, 0, 0, - 0, 0, 0, 0, 5, 0, 91, 0, 0, 6, - 0, 7, 8, 9, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 90, 0, 1, 2, - 0, 0, 0, 3, 0, 0, 120, 0, 0, 0, - 5, 0, 0, 0, 0, 6, 0, 7, 8, 9, - 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, - 0, 0, 90, 0, 0, 1, 2, 0, 0, 0, - 3, 0, 91, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 6, 0, 7, 8, 9, 0, 0, 0, - 0, 0, 13, 0, 0, 61, 61, 0, 0, 90, - 61, 0, 0, 0, 0, 0, 0, 61, 0, 120, - 0, 0, 61, 0, 61, 61, 61, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, + 0, 0, 255, 198, 0, 0, 209, 209, 209, 209, + 209, 0, 209, 209, 235, 0, 0, 0, 0, 0, + 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, + 210, 0, 198, 198, 198, 198, 241, 198, 198, 198, + 242, 0, 210, 210, 276, 210, 0, 276, 0, 276, + 276, 276, 276, 0, 0, 288, 0, 0, 0, 0, + 294, 0, 0, 0, 0, 276, 276, 0, 276, 242, + 242, 242, 242, 242, 242, 242, 242, 210, 0, 247, + 275, 275, 0, 0, 275, 275, 0, 275, 0, 275, + 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 276, 0, 275, 275, 0, 275, 0, 210, 247, 247, + 247, 247, 247, 247, 247, 247, 0, 264, 264, 0, + 0, 264, 264, 264, 264, 264, 264, 264, 0, 0, + 276, 0, 0, 0, 0, 0, 0, 275, 0, 264, + 264, 0, 264, 0, 0, 0, 338, 339, 0, 0, + 0, 255, 0, 0, 265, 265, 0, 0, 265, 265, + 265, 265, 265, 265, 265, 0, 0, 275, 0, 0, + 0, 0, 0, 0, 264, 0, 265, 265, 0, 265, + 255, 255, 255, 255, 255, 255, 255, 255, 364, 0, + 266, 266, 367, 235, 266, 266, 266, 266, 266, 266, + 266, 0, 0, 0, 264, 0, 0, 0, 0, 267, + 267, 265, 266, 267, 267, 267, 267, 267, 267, 267, + 0, 0, 235, 235, 235, 235, 235, 235, 235, 235, + 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 0, 0, 0, 268, 268, 266, 0, 268, + 268, 268, 268, 268, 268, 268, 210, 0, 0, 0, + 0, 0, 413, 414, 0, 0, 267, 268, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 266, 0, 276, + 164, 0, 0, 0, 0, 210, 210, 210, 210, 210, + 0, 210, 210, 0, 0, 0, 267, 0, 0, 164, + 0, 0, 268, 0, 0, 0, 0, 0, 276, 276, + 276, 276, 276, 276, 276, 276, 275, 277, 0, 0, + 277, 0, 277, 277, 277, 277, 0, 0, 0, 0, + 0, 0, 268, 0, 0, 0, 0, 0, 277, 277, + 0, 277, 0, 0, 0, 275, 275, 275, 275, 275, + 275, 275, 275, 264, 278, 0, 0, 278, 0, 278, + 278, 278, 278, 164, 0, 164, 0, 0, 0, 0, + 0, 0, 0, 277, 0, 278, 278, 0, 278, 0, + 0, 0, 0, 264, 264, 0, 264, 264, 264, 264, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 0, 0, 0, 277, 0, 0, 0, 252, 252, 0, + 278, 252, 252, 252, 252, 252, 252, 252, 205, 0, + 265, 265, 0, 265, 265, 265, 265, 0, 0, 252, + 252, 0, 252, 0, 0, 0, 0, 0, 0, 0, + 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 266, 0, 0, 266, 266, + 266, 266, 266, 0, 252, 0, 0, 0, 207, 0, + 0, 0, 0, 0, 267, 0, 0, 267, 267, 267, + 267, 267, 136, 0, 206, 0, 0, 205, 0, 0, + 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 207, + 268, 164, 164, 268, 268, 268, 268, 268, 0, 0, + 0, 0, 0, 164, 0, 164, 0, 164, 205, 0, + 0, 0, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 0, 207, 0, 0, 0, 0, 164, 164, + 0, 136, 277, 298, 0, 0, 0, 0, 0, 0, + 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, + 0, 277, 277, 277, 277, 277, 277, 277, 277, 278, + 0, 0, 136, 0, 318, 0, 0, 205, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 207, 0, 0, 0, 0, 0, 0, 0, 278, 278, + 278, 278, 278, 278, 278, 278, 136, 0, 369, 205, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 190, 252, 191, 0, 192, 0, 0, 0, + 207, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 136, 0, 370, 0, 0, 0, 203, 204, 205, + 0, 0, 252, 252, 252, 252, 252, 252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 0, 0, 0, 136, 0, 415, 0, 0, 0, 188, + 189, 0, 0, 0, 0, 0, 0, 0, 205, 0, + 0, 190, 0, 191, 0, 192, 0, 0, 0, 0, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 0, 0, 0, 136, 0, 0, 203, 204, 0, 0, + 188, 189, 136, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 190, 0, 191, 0, 192, 0, 0, 0, + 136, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 0, 136, 0, 188, 189, 0, 203, 204, 0, + 0, 0, 0, 0, 84, 0, 190, 84, 191, 0, + 192, 0, 0, 0, 0, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 0, 0, 0, 0, 188, + 189, 203, 204, 84, 0, 0, 0, 61, 0, 0, + 0, 190, 0, 191, 0, 192, 0, 0, 0, 0, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 0, 188, 189, 0, 0, 0, 203, 204, 0, 150, + 0, 0, 171, 190, 0, 191, 0, 192, 0, 0, + 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 0, 0, 0, 0, 0, 0, 203, 204, + 0, 188, 437, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 190, 0, 191, 0, 192, 0, 0, + 0, 0, 438, 194, 195, 196, 197, 198, 199, 200, + 201, 11, 0, 0, 0, 0, 0, 0, 203, 204, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 190, 0, 191, 0, 192, 0, 0, 0, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 11, 0, 0, 0, 0, 136, 0, 203, 204, 0, + 0, 136, 0, 0, 0, 0, 0, 136, 0, 0, + 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, + 0, 1, 136, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 3, 0, 0, 136, + 4, 5, 6, 4, 5, 6, 0, 0, 81, 0, + 1, 10, 0, 0, 61, 82, 0, 0, 82, 0, + 0, 0, 3, 0, 0, 83, 61, 0, 112, 4, + 5, 6, 139, 61, 61, 61, 144, 10, 0, 0, + 0, 61, 0, 0, 161, 440, 0, 0, 61, 158, + 163, 447, 0, 0, 112, 0, 0, 451, 61, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, + 158, 163, 0, 0, 0, 0, 0, 462, 463, 0, + 465, 0, 0, 0, 0, 471, 0, 0, 0, 472, + 0, 473, 474, 249, 0, 250, 0, 0, 0, 0, + 478, 440, 447, 0, 0, 0, 471, 0, 0, 0, + 0, 291, 0, 0, 295, 0, 0, 0, 0, 0, + 0, 0, 0, 250, 0, 295, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 365, 366, }; - protected short yyCheck[] = new short[3011]; + protected short yyCheck[] = new short[2845]; } class yyCheck0 { - protected static final short yyCheck0 [] = { 46, - 0, 46, 144, 63, 56, 57, 89, 42, 163, 59, - 10, 11, 59, 96, 66, 41, 37, 38, 221, 92, - 41, 42, 43, 44, 45, 46, 47, 156, 28, 123, - 123, 44, 174, 58, 44, 174, 46, 29, 59, 60, - 46, 62, 123, 198, 44, 123, 60, 123, 48, 59, - 60, 61, 319, 69, 60, 432, 56, 57, 58, 326, - 58, 44, 114, 79, 78, 61, 66, 67, 301, 107, - 67, 59, 301, 94, 99, 132, 133, 58, 130, 221, - 59, 91, 107, 44, 141, 91, 46, 58, 21, 144, - 66, 40, 44, 59, 94, 41, 67, 46, 59, 99, - 60, 99, 301, 124, 156, 59, 309, 59, 108, 107, - 123, 60, 489, 490, 114, 153, 108, 494, 99, 174, - 53, 59, 122, 137, 140, 122, 126, 108, 99, 129, - 130, 91, 132, 133, 134, 123, 265, 129, 114, 406, - 123, 141, 144, 59, 144, 91, 59, 172, 148, 46, - 91, 122, 59, 59, 130, 153, 156, 123, 60, 314, - 315, 61, 160, 60, 164, 320, 221, 309, 310, 123, - 170, 310, 174, 440, 174, 268, 60, 332, 62, 382, - 40, 41, 255, 59, 44, 123, 46, 268, 282, 282, - 268, 91, 268, 91, 219, 31, 59, 21, 258, 59, - 60, 61, 262, 40, 282, 44, 42, 123, 32, 144, - 123, 211, 212, 265, 274, 215, 123, 123, 54, 221, - 268, 221, 351, 62, 61, 41, 148, 144, 383, 53, - 385, 91, 258, 59, 258, 44, 262, 285, 262, 174, - 382, 301, 164, 41, 80, 40, 44, 123, 274, 332, - 274, 46, 273, 62, 309, 310, 313, 174, 308, 309, - 123, 308, 309, 308, 309, 265, 301, 267, 268, 269, - 270, 44, 41, 59, 429, 301, 431, 301, 46, 434, - 44, 302, 303, 304, 305, 306, 221, 308, 309, 62, - 432, 301, 447, 448, 44, 301, 438, 123, 62, 351, - 93, 46, 144, 445, 221, 362, 60, 309, 310, 309, - 310, 301, 62, 313, 59, 470, 471, 472, 314, 315, - 316, 317, 44, 465, 466, 321, 468, 382, 93, 308, - 309, 473, 174, 301, 44, 477, 44, 479, 480, 268, - 62, 301, 46, 67, 123, 345, 488, 489, 490, 59, - 41, 351, 494, 44, 62, 59, 301, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 309, 310, 43, 432, 45, 221, - 382, 44, 382, 438, 108, 41, 489, 490, 44, 273, - 445, 494, 309, 310, 37, 40, 59, 302, 122, 42, - 305, 301, 144, 41, 47, 129, 44, 407, 308, 309, - 465, 466, 44, 468, 314, 315, 316, 317, 473, 303, - 304, 321, 477, 41, 479, 480, 44, 59, 41, 61, - 432, 44, 174, 488, 489, 490, 438, 41, 289, 494, - 44, 301, 258, 445, 308, 309, 262, 382, 308, 309, - 41, 360, 361, 44, 314, 315, 316, 317, 274, 367, - 368, 321, 59, 465, 466, 382, 468, 309, 310, 61, - 40, 473, 301, 123, 59, 477, 301, 479, 480, 221, - 148, 363, 364, 365, 366, 301, 488, 489, 490, 258, - 59, 258, 494, 262, 301, 262, 164, 432, 258, 38, - 40, 44, 262, 438, 40, 274, 40, 274, 40, 40, - 445, 60, 61, 33, 274, 432, 329, 59, 46, 44, - 40, 438, 59, 43, 291, 45, 59, 38, 445, 78, - 465, 466, 301, 468, 301, 94, 124, 307, 473, 59, - 382, 301, 477, 306, 479, 480, 59, 215, 465, 466, - 0, 468, 301, 488, 489, 490, 473, 40, 59, 494, - 477, 41, 479, 480, 113, 59, 59, 309, 310, 33, - 41, 488, 489, 490, 40, 59, 40, 494, 28, 43, - 59, 45, 59, 59, 252, 41, 59, 40, 137, 138, - 432, 40, 267, 41, 44, 59, 438, 41, 48, 267, - 258, 41, 41, 445, 262, 37, 38, 41, 58, 41, - 42, 43, 44, 45, 267, 47, 274, 67, 0, 0, - 0, 0, 59, 465, 466, 301, 468, 59, 60, 61, - 62, 473, 59, 291, 59, 477, 48, 479, 480, 49, - 382, 190, 50, 301, 94, 99, 488, 489, 490, 99, - 122, 147, 494, 79, 32, 78, 33, 267, 108, 345, - 369, 372, 94, 40, 41, 370, 43, 373, 45, 371, - 166, 343, 122, 33, 343, 171, 126, 345, 65, 129, - 40, 41, 142, 43, 134, 45, 108, 173, 134, 174, - 432, -1, 124, -1, -1, -1, 438, -1, 148, -1, - 33, -1, -1, 445, -1, -1, -1, 40, 41, -1, - 43, -1, 45, -1, 164, -1, -1, -1, -1, -1, - 170, -1, -1, 465, 466, -1, 468, -1, -1, 33, - -1, 473, -1, -1, -1, 477, 40, 479, 480, 43, - -1, 45, -1, -1, -1, -1, 488, 489, 490, -1, - -1, -1, 494, -1, -1, 275, 33, -1, -1, -1, - -1, 257, 258, 40, -1, 215, 43, 287, 45, -1, - -1, -1, -1, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 59, 33, -1, -1, -1, -1, 308, 309, - 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, - 33, -1, -1, -1, -1, 301, -1, 40, 41, 305, - 43, 275, 45, -1, -1, -1, -1, 267, -1, 123, - -1, -1, -1, 287, -1, -1, -1, -1, -1, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, 33, - -1, 273, -1, -1, 308, 309, 40, -1, -1, 43, - -1, 45, -1, -1, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, 41, 59, 43, -1, 45, -1, - 302, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 376, 377, 314, 315, 316, 317, -1, -1, -1, 321, - -1, -1, 33, -1, -1, 345, -1, -1, 275, 40, - 41, -1, 43, -1, 45, -1, -1, -1, -1, -1, - 287, -1, -1, -1, -1, 275, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, 287, -1, -1, - -1, 308, 309, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 275, 33, 211, 212, -1, -1, 308, 309, - 40, 41, -1, 43, 287, 45, -1, -1, -1, -1, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - 33, 275, -1, -1, -1, 308, 309, 40, 41, -1, - 43, -1, 45, 287, -1, -1, -1, -1, -1, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 275, 33, + protected static final short yyCheck0 [] = { 42, + 0, 140, 46, 213, 49, 50, 41, 7, 8, 60, + 46, 41, 81, 46, 59, 59, 63, 156, 41, 88, + 166, 61, 22, 148, 84, 46, 123, 60, 155, 123, + 123, 44, 44, 46, 59, 123, 40, 41, 38, 60, + 44, 41, 46, 59, 59, 123, 59, 60, 61, 49, + 50, 51, 44, 62, 51, 59, 60, 61, 91, 59, + 60, 106, 71, 190, 59, 309, 23, 268, 207, 40, + 91, 53, 316, 60, 125, 46, 301, 122, 91, 0, + 136, 43, 59, 45, 285, 59, 86, 91, 70, 299, + 60, 91, 301, 60, 91, 62, 59, 51, 40, 136, + 100, 22, 99, 148, 156, 244, 106, 123, 59, 59, + 166, 123, 41, 100, 114, 44, 301, 38, 118, 61, + 41, 121, 122, 132, 124, 125, 126, 114, 123, 166, + 51, 123, 257, 133, 121, 59, 136, 91, 136, 60, + 140, 124, 125, 100, 114, 99, 123, 129, 148, 123, + 133, 395, 51, 59, 300, 207, 156, 213, 59, 59, + 123, 371, 162, 91, 121, 86, 166, 164, 166, 60, + 91, 268, 123, 123, 268, 59, 213, 304, 305, 100, + 268, 420, 99, 310, 428, 282, 46, 247, 282, 282, + 268, 145, 91, 114, 60, 322, 335, 118, 152, 123, + 121, 100, 136, 203, 204, 126, 257, 207, 18, 25, + 46, 44, 257, 213, 211, 213, 341, 123, 269, 140, + 36, 136, 123, 123, 60, 276, 277, 278, 145, 62, + 44, 47, 166, 284, 301, 156, 46, 476, 477, 136, + 291, 162, 481, 299, 300, 372, 93, 374, 62, 44, + 301, 166, 44, 322, 301, 301, 72, 257, 301, 259, + 260, 261, 299, 300, 308, 309, 301, 62, 301, 166, + 62, 301, 308, 309, 314, 315, 316, 317, 301, 213, + 301, 321, 51, 308, 309, 123, 207, 268, 301, 40, + 417, 60, 419, 308, 309, 422, 341, 301, 213, 299, + 300, 299, 300, 303, 308, 309, 273, 434, 435, 136, + 314, 315, 316, 317, 44, 371, 213, 321, 40, 59, + 303, 301, 91, 291, 46, 59, 44, 44, 44, 59, + 457, 458, 459, 301, 371, 335, 303, 304, 60, 166, + 289, 341, 59, 59, 62, 114, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 61, 420, 299, 300, 44, 351, 61, + 426, 371, 106, 371, 44, 40, 432, 46, 46, 18, + 44, 301, 59, 420, 299, 300, 213, 26, 122, 426, + 59, 59, 62, 91, 123, 432, 452, 453, 62, 455, + 476, 477, 299, 300, 460, 481, 59, 46, 464, 44, + 466, 467, 308, 309, 335, 452, 453, 59, 455, 475, + 476, 477, 420, 460, 59, 481, 61, 464, 426, 466, + 467, 38, 302, 291, 432, 305, 301, 371, 475, 476, + 477, 33, 37, 301, 481, 349, 350, 42, 40, 356, + 357, 43, 47, 45, 452, 453, 371, 455, 352, 353, + 354, 355, 460, 40, 301, 40, 464, 59, 466, 467, + 40, 40, 299, 300, 371, 40, 44, 475, 476, 477, + 59, 33, 41, 481, 41, 44, 420, 44, 40, 257, + 329, 43, 426, 45, 41, 263, 41, 44, 432, 44, + 41, 269, 46, 44, 59, 420, 59, 59, 276, 277, + 278, 426, 280, 281, 44, 38, 284, 432, 452, 453, + 94, 455, 41, 420, 33, 44, 460, 124, 307, 426, + 464, 40, 466, 467, 43, 432, 45, 452, 453, 306, + 455, 475, 476, 477, 371, 460, 59, 481, 301, 464, + 59, 466, 467, 301, 41, 452, 453, 44, 455, 40, + 475, 476, 477, 460, 59, 41, 481, 464, 59, 466, + 467, 59, 41, 40, 59, 33, 59, 59, 475, 476, + 477, 59, 40, 41, 481, 43, 41, 45, 203, 204, + 37, 38, 40, 420, 41, 42, 43, 44, 45, 426, + 47, 40, 59, 301, 267, 432, 41, 41, 41, 41, + 308, 309, 59, 60, 61, 62, 314, 315, 316, 317, + 41, 267, 33, 321, 0, 452, 453, 0, 455, 40, + 41, 0, 43, 460, 45, 59, 0, 464, 41, 466, + 467, 59, 59, 114, 259, 260, 261, 94, 475, 476, + 477, 33, 42, 91, 481, 43, 26, 70, 40, 41, + 335, 43, 71, 45, 358, 360, 359, 257, 33, 134, + 361, 333, 362, 263, 333, 40, 165, 124, 43, 269, + 45, 58, 166, 275, 100, 126, 276, 277, 278, 279, + 280, 281, -1, -1, 284, 287, -1, -1, 53, 54, + -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, 301, 33, -1, -1, 70, 308, 309, -1, 40, + 41, -1, 43, 275, 45, -1, -1, -1, -1, -1, + -1, 346, 347, 348, -1, 287, -1, -1, -1, -1, + 60, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 105, -1, 33, -1, -1, -1, 308, 309, 123, 40, + 41, -1, 43, -1, 45, -1, 275, -1, -1, 33, + -1, -1, -1, -1, 129, 130, 40, -1, 287, 43, + -1, 45, -1, -1, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, 59, 33, -1, -1, 308, + 309, -1, -1, 40, 41, 125, 43, -1, 45, -1, + -1, -1, -1, 33, -1, -1, -1, 275, -1, -1, + 40, 41, -1, 43, -1, 45, 273, 182, -1, 287, + -1, -1, -1, -1, -1, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, -1, -1, -1, -1, + 308, 309, -1, -1, -1, 302, 303, 304, 305, 306, + 307, 308, 309, -1, 275, 33, -1, 314, 315, 316, + 317, -1, 40, 41, 321, 43, 287, 45, -1, -1, + -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, 33, 275, -1, -1, -1, 308, 309, 40, + 41, -1, 43, -1, 45, 287, -1, -1, -1, -1, + 275, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, 287, -1, -1, -1, 308, 309, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 257, 33, -1, + -1, -1, -1, 308, 309, 40, -1, -1, 43, 269, + 45, -1, -1, -1, 275, 33, 276, 277, 278, -1, + -1, -1, 40, -1, 284, 43, 287, 45, -1, -1, + -1, 291, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 301, -1, 257, -1, -1, -1, 308, 309, 263, + -1, -1, -1, -1, 275, 269, -1, -1, -1, -1, }; } class yyCheck1 { protected static final short yyCheck1 [] = { -1, - 268, 269, 270, 308, 309, 40, -1, -1, 43, 287, - 45, -1, -1, -1, -1, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 275, 33, -1, -1, -1, -1, - 308, 309, 40, -1, -1, 43, 287, 45, -1, -1, - -1, 275, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, 287, -1, -1, -1, 308, 309, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, -1, 308, 309, -1, -1, -1, -1, - 275, -1, -1, -1, -1, -1, -1, -1, -1, 357, - 358, 359, 287, -1, -1, -1, -1, 275, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, 287, - -1, -1, -1, 308, 309, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, -1, -1, - 308, 309, -1, 275, -1, -1, -1, -1, -1, 407, - -1, -1, -1, -1, -1, 287, -1, -1, -1, -1, - -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, -1, 308, 309, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, 275, -1, -1, -1, -1, -1, - 59, -1, -1, 62, -1, -1, 287, -1, -1, -1, - -1, -1, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 275, -1, -1, -1, -1, -1, 308, 309, -1, - -1, -1, 91, 287, -1, 94, -1, -1, -1, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - 275, -1, -1, -1, 308, 309, -1, -1, -1, -1, - -1, -1, 287, -1, 123, 124, -1, -1, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, + -1, 276, 277, 278, -1, 287, 281, -1, -1, 284, + 275, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, 287, -1, -1, -1, 308, 309, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 275, -1, -1, -1, -1, -1, 308, 309, -1, -1, -1, -1, 287, - -1, -1, -1, -1, -1, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, 37, 38, - 308, 309, 41, 42, 43, 44, 45, -1, 47, 37, - -1, -1, -1, 41, 42, 43, 44, 45, 46, 47, - 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, - -1, 59, 60, -1, 62, 37, 38, -1, -1, 41, - 42, 43, 44, 45, 46, 47, -1, -1, -1, -1, - 257, -1, -1, -1, -1, 94, 263, 59, 60, -1, - 62, -1, 269, -1, -1, -1, 94, -1, -1, 276, - 277, 278, -1, 280, 281, -1, -1, 284, -1, -1, - -1, -1, -1, -1, -1, 124, -1, -1, 257, 258, - -1, -1, -1, 262, 263, -1, 124, -1, -1, -1, - 269, -1, -1, -1, 273, 274, -1, 276, 277, 278, - 279, 280, 281, 282, -1, 284, -1, -1, -1, 37, - 38, -1, 124, 41, 42, 43, 44, 45, 46, 47, - -1, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 59, 60, -1, 62, 37, 38, -1, -1, 41, - 42, 43, 44, 45, 46, 47, 37, 38, -1, -1, - 41, 42, 43, 44, 45, 257, 47, 59, 60, -1, - 62, 263, -1, -1, -1, -1, 94, 269, 59, 60, - -1, 62, 432, -1, 276, 277, 278, -1, 438, 281, - -1, -1, 284, -1, -1, 445, -1, -1, -1, 37, - -1, -1, 94, 41, 42, 43, 44, 45, 46, 47, - -1, -1, -1, 94, -1, 465, 466, -1, 468, -1, - -1, 59, 60, 473, 62, -1, -1, 477, -1, 479, - 480, -1, 124, -1, 273, -1, -1, -1, 488, 489, - 490, -1, -1, 124, 494, 273, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, - -1, -1, -1, 302, 303, 304, 305, 306, 307, 308, - 309, 273, -1, -1, 302, 303, 304, 305, 306, 307, - 308, 309, -1, -1, -1, -1, 124, 37, 38, -1, - -1, 41, 42, 43, 44, 45, 46, 47, -1, -1, - 302, 303, 304, 305, 306, 307, 308, 309, -1, 59, - 60, -1, 62, 37, 38, -1, -1, 41, 42, 43, - 44, 45, 46, 47, -1, 257, 258, -1, -1, -1, - 262, 263, -1, -1, -1, 59, 60, 269, 62, -1, - -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, - -1, -1, 284, -1, -1, 273, -1, 37, 38, -1, - -1, 41, 42, 43, 44, 45, 46, 47, -1, 301, - 94, -1, -1, -1, 124, -1, -1, -1, -1, 59, - 60, 273, 62, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 273, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 302, 303, 304, 305, 94, 307, 308, 309, -1, -1, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 37, - 38, -1, -1, 41, 42, 273, 44, -1, 46, 47, - -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, - -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, - 308, 309, -1, 37, 38, -1, -1, 41, 42, 43, - 44, 45, 46, 47, 37, 38, 94, -1, 41, 42, - 43, 44, 45, 46, 47, 59, 60, -1, 62, -1, + -1, -1, -1, -1, 275, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, 287, -1, -1, -1, + 308, 309, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, -1, -1, -1, -1, -1, 308, 309, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, -1, 275, -1, -1, -1, + -1, 59, -1, -1, 62, -1, -1, -1, 287, -1, + -1, -1, -1, -1, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 275, -1, -1, -1, -1, -1, 308, + 309, -1, -1, 91, -1, 287, 94, -1, -1, -1, + -1, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, 37, 38, 308, 309, 41, 42, + 43, 44, 45, 46, 47, 123, 124, -1, -1, 275, -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, - -1, -1, 257, -1, -1, -1, 124, -1, 263, -1, - -1, -1, -1, 273, 269, 90, -1, -1, -1, 94, - 94, 276, 277, 278, -1, -1, 281, -1, -1, 284, - -1, 94, 107, 108, -1, -1, -1, -1, -1, 273, - -1, -1, 302, 303, 304, 305, 306, 307, 308, 309, - 124, 126, -1, 128, 129, -1, -1, -1, -1, -1, - -1, 124, -1, -1, -1, -1, -1, -1, 302, 303, - 304, 305, 306, 307, 308, 309, 151, -1, 153, -1, - 37, 38, -1, 273, 41, 42, 43, 44, 45, 46, - 47, -1, -1, -1, 169, -1, -1, 172, -1, -1, - -1, -1, 59, -1, -1, -1, 181, -1, 183, -1, - -1, -1, 302, 303, 304, 305, 306, -1, 308, 309, - 37, 38, -1, 60, 41, 42, 43, 44, 45, 46, - 47, -1, -1, -1, -1, -1, -1, 94, -1, 37, - 38, -1, 59, 41, 42, 43, 44, 45, 46, 47, - -1, -1, -1, -1, -1, 273, -1, -1, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, - -1, -1, -1, -1, 302, 303, 304, 305, 306, 307, + -1, 287, -1, -1, -1, -1, -1, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, 287, -1, + -1, -1, 308, 309, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, -1, -1, 37, 38, 308, + 309, 41, 42, 43, 44, 45, 37, 47, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, 257, 59, + 60, 124, 62, -1, 263, -1, -1, -1, 59, 60, + 269, 62, -1, -1, -1, -1, -1, 276, 277, 278, + -1, -1, 281, -1, -1, 284, -1, -1, -1, -1, + -1, 37, 38, -1, 94, 41, 42, 43, 44, 45, + 46, 47, -1, 94, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, 257, + -1, -1, -1, -1, 124, 263, -1, -1, -1, -1, + -1, 269, -1, 124, -1, 273, -1, -1, 276, 277, + 278, 279, 280, 281, 282, -1, 284, -1, 94, -1, + 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, + 47, -1, -1, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 59, 60, -1, 62, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, 94, -1, -1, + 273, -1, -1, 37, 38, -1, -1, 41, 42, 43, + 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 94, -1, 59, 60, 124, 62, 302, + 303, 304, 305, 306, 307, 308, 309, -1, -1, -1, + -1, -1, 37, 38, -1, -1, 41, 42, 43, 44, + 45, 46, 47, 124, -1, -1, -1, -1, -1, -1, + 94, -1, -1, 273, 59, 60, -1, 62, -1, -1, + -1, -1, 273, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, 302, 303, 304, 305, 306, 307, 308, 309, + -1, 302, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, -1, 37, -1, -1, 273, 41, 42, + 43, 44, 45, 46, 47, -1, -1, -1, -1, 124, + -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, + -1, -1, -1, -1, -1, -1, 302, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, + -1, 94, -1, -1, -1, -1, 273, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, 273, -1, -1, 302, 303, 304, 305, 306, + -1, 308, 309, 94, -1, -1, -1, -1, -1, 37, + 38, -1, -1, 41, 42, 43, 44, 45, 46, 47, + -1, 302, 303, 304, 305, 139, 307, 308, 309, 273, + -1, 59, 60, 38, 62, -1, 41, -1, 43, 44, + 45, 46, -1, -1, 158, -1, -1, -1, -1, 163, + -1, -1, -1, -1, 59, 60, -1, 62, 302, 303, + 304, 305, 306, 307, 308, 309, 94, -1, 273, 37, + 38, -1, -1, 41, 42, -1, 44, -1, 46, 47, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, + -1, 59, 60, -1, 62, -1, 124, 302, 303, 304, + 305, 306, 307, 308, 309, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, 124, + -1, -1, -1, -1, -1, -1, 94, -1, 59, 60, + -1, 62, -1, -1, -1, 249, 250, -1, -1, -1, + 273, -1, -1, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, -1, -1, 124, -1, -1, -1, + -1, -1, -1, 94, -1, 59, 60, -1, 62, 302, + 303, 304, 305, 306, 307, 308, 309, 291, -1, 37, + 38, 295, 273, 41, 42, 43, 44, 45, 46, 47, + -1, -1, -1, 124, -1, -1, -1, -1, 37, 38, + 94, 59, 41, 42, 43, 44, 45, 46, 47, -1, + -1, 302, 303, 304, 305, 306, 307, 308, 309, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, -1, -1, 37, 38, 94, -1, 41, 42, + 43, 44, 45, 46, 47, 273, -1, -1, -1, -1, + -1, 365, 366, -1, -1, 94, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 124, -1, 273, 40, + -1, -1, -1, -1, 302, 303, 304, 305, 306, -1, + 308, 309, -1, -1, -1, 124, -1, -1, 59, -1, + -1, 94, -1, -1, -1, -1, -1, 302, 303, 304, + 305, 306, 307, 308, 309, 273, 38, -1, -1, 41, + -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, 59, 60, -1, + 62, -1, -1, -1, 302, 303, 304, 305, 306, 307, + 308, 309, 273, 38, -1, -1, 41, -1, 43, 44, + 45, 46, 123, -1, 125, -1, -1, -1, -1, -1, + -1, -1, 94, -1, 59, 60, -1, 62, -1, -1, + -1, -1, 303, 304, -1, 306, 307, 308, 309, 273, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, }; } class yyCheck2 { - protected static final short yyCheck2 [] = { 308, - 309, -1, -1, -1, 38, 94, -1, 41, 273, 43, - 44, 45, 46, -1, -1, -1, 124, -1, -1, 273, - -1, -1, -1, -1, 38, 59, 60, 41, 62, 43, - 44, 45, 46, -1, -1, 124, 302, 303, 303, 304, - -1, 306, 307, 308, 309, 59, 60, -1, 62, 303, - 304, -1, 306, 307, 308, 309, -1, -1, -1, -1, - 94, 38, -1, -1, 41, -1, 43, 44, 45, 46, + protected static final short yyCheck2 [] = { -1, + -1, 124, -1, -1, -1, 37, 38, -1, 94, 41, + 42, 43, 44, 45, 46, 47, 59, -1, 303, 304, + -1, 306, 307, 308, 309, -1, -1, 59, 60, -1, + 62, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 94, -1, 59, 60, -1, 62, -1, -1, -1, -1, - 124, -1, -1, -1, -1, -1, -1, -1, 37, 38, - -1, -1, 41, 42, 43, 44, 45, 46, 47, -1, - 124, -1, -1, -1, -1, -1, -1, 94, -1, -1, - 59, 60, -1, 62, -1, -1, 40, -1, -1, 257, - 258, -1, -1, -1, 262, -1, -1, -1, -1, -1, - -1, 269, -1, -1, -1, 59, 274, 124, 276, 277, - 278, -1, -1, -1, 302, 94, 284, 305, 306, 307, - 308, 309, -1, 291, -1, -1, -1, -1, -1, -1, - 40, -1, -1, 301, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, -1, -1, -1, 59, - -1, -1, -1, -1, 302, -1, -1, 305, 306, 307, - 308, 309, -1, -1, -1, -1, -1, -1, -1, 123, - -1, 125, -1, 302, 40, -1, 305, 306, 307, 308, - 309, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 273, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 123, -1, 125, -1, -1, 40, 273, - -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, - 304, 305, 306, 307, 308, 309, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, - 304, 305, 306, 307, 308, 309, 273, 123, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 59, 273, -1, -1, -1, -1, -1, - -1, 123, -1, 125, 258, -1, -1, -1, 262, -1, - -1, -1, -1, 267, -1, -1, -1, 271, 272, -1, - 274, -1, -1, 302, 303, 304, 305, 306, 307, 283, - 40, 285, -1, 287, -1, -1, -1, -1, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 258, 59, - -1, -1, 262, -1, 308, 309, -1, 123, -1, 125, - -1, 271, 272, -1, 274, -1, -1, -1, -1, -1, - -1, -1, -1, 283, 40, 285, -1, 287, -1, -1, - -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 258, 59, -1, -1, 262, -1, 308, 309, - -1, -1, -1, -1, -1, 271, 272, -1, 274, -1, - -1, -1, -1, 123, -1, 125, -1, 283, 40, 285, - -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 258, 59, -1, -1, - 262, -1, 308, 309, -1, -1, -1, -1, -1, 271, - 272, -1, 274, -1, -1, -1, -1, 123, -1, 125, - -1, 283, 40, 285, -1, 287, -1, -1, -1, -1, + -1, -1, -1, 302, -1, -1, 305, 306, 307, 308, + 309, -1, 94, -1, -1, -1, 40, -1, -1, -1, + -1, -1, 302, -1, -1, 305, 306, 307, 308, 309, + 123, -1, 125, -1, -1, 59, -1, -1, -1, -1, + -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 267, -1, 40, 302, 271, + 272, 305, 306, 307, 308, 309, -1, -1, -1, -1, + -1, 283, -1, 285, -1, 287, 59, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 59, -1, -1, -1, -1, 308, 309, -1, -1, - -1, -1, 258, -1, -1, -1, 262, -1, -1, -1, - -1, 123, -1, -1, -1, 271, 272, -1, 274, -1, - -1, -1, -1, -1, -1, -1, -1, 283, -1, 285, - 44, 287, -1, -1, -1, -1, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, 62, -1, - -1, -1, 308, 309, -1, 123, -1, -1, 258, 44, - -1, -1, 262, -1, -1, -1, -1, -1, -1, -1, - -1, 271, 272, -1, 274, -1, -1, 62, -1, -1, - -1, -1, -1, 283, -1, 285, -1, 287, -1, -1, - -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 258, 60, -1, -1, 262, -1, 308, 309, - -1, -1, -1, -1, -1, 271, 272, -1, 274, -1, - -1, -1, -1, -1, -1, -1, -1, 283, -1, 285, - -1, 287, -1, 60, -1, -1, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, -1, 308, 309, -1, -1, -1, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, 125, 60, + -1, 40, -1, -1, -1, -1, 308, 309, -1, 123, + 273, 125, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 40, -1, -1, 302, + 303, 304, 305, 306, 307, 308, 309, 273, -1, -1, + 123, -1, 125, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, 302, 303, 304, 305, + 306, 307, 308, 309, 123, -1, 125, 59, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 283, 273, 285, -1, 287, -1, -1, -1, 40, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 123, + -1, 125, -1, -1, -1, 308, 309, 59, -1, -1, + 302, 303, 304, 305, 306, 307, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, + -1, 123, -1, 125, -1, -1, -1, 271, 272, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, 283, + -1, 285, -1, 287, -1, -1, -1, -1, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, 123, -1, -1, 308, 309, -1, -1, 271, 272, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 283, -1, 285, -1, 287, -1, -1, -1, 62, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + 123, -1, 271, 272, -1, 308, 309, -1, -1, -1, + -1, -1, 60, -1, 283, 60, 285, -1, 287, -1, + -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, -1, -1, 271, 272, 308, + 309, 60, -1, -1, -1, 60, -1, -1, -1, 283, + -1, 285, -1, 287, -1, -1, -1, -1, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, 271, + 272, -1, -1, -1, 308, 309, -1, 125, -1, -1, + 125, 283, -1, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, -1, -1, 308, 309, -1, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, -1, 308, 309, 125, -1, - -1, -1, -1, 271, 272, -1, 60, -1, -1, -1, - -1, -1, -1, -1, -1, 283, -1, 285, -1, 287, - -1, -1, -1, -1, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 125, -1, 60, -1, -1, -1, - 308, 309, -1, 257, 258, -1, -1, -1, 262, 263, + -1, -1, -1, -1, -1, -1, 308, 309, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 283, -1, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + -1, -1, -1, 257, -1, 308, 309, -1, -1, 263, -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, - 274, -1, 276, 277, 278, 279, 280, 281, -1, -1, - 284, 125, 257, 258, -1, -1, -1, 262, 263, -1, - -1, -1, -1, -1, 269, -1, -1, 301, -1, 274, - -1, 276, 277, 278, 279, 280, 281, -1, -1, 284, - 257, 258, -1, -1, -1, 262, -1, -1, -1, -1, - -1, -1, 269, -1, -1, -1, 301, 274, -1, 276, - 277, 278, -1, -1, -1, -1, -1, 284, -1, -1, - 257, 258, -1, -1, 291, 262, -1, -1, -1, -1, - -1, -1, 269, -1, 301, -1, -1, 274, -1, 276, - 277, 278, -1, -1, -1, -1, -1, 284, -1, -1, - -1, -1, -1, -1, 291, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 301, -1, -1, -1, 269, -1, - -1, -1, -1, 274, -1, 276, 277, 278, -1, -1, - -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, - 291, -1, -1, 257, 258, -1, -1, -1, 262, -1, - 301, -1, -1, -1, -1, 269, -1, -1, -1, -1, - 274, -1, 276, 277, 278, -1, -1, -1, -1, -1, - 284, -1, -1, 257, 258, -1, -1, 291, 262, -1, - -1, -1, -1, -1, -1, 269, -1, 301, -1, -1, - 274, -1, 276, 277, 278, -1, -1, -1, -1, -1, - 284, -1, -1, -1, -1, -1, -1, 291, -1, -1, - }; -} -class yyCheck3 { - protected static final short yyCheck3 [] = { -1, - -1, -1, -1, -1, -1, -1, 301, + -1, -1, 276, 277, 278, 279, 280, 281, -1, 257, + 284, -1, 257, -1, -1, -1, -1, -1, -1, -1, + -1, 269, -1, -1, 269, -1, -1, 301, 276, 277, + 278, 276, 277, 278, -1, -1, 284, -1, 257, 284, + -1, -1, 257, 291, -1, -1, 291, -1, -1, -1, + 269, -1, -1, 301, 269, -1, 301, 276, 277, 278, + 82, 276, 277, 278, 86, 284, -1, -1, -1, 284, + -1, -1, 291, 420, -1, -1, 291, 99, 100, 426, + -1, -1, 301, -1, -1, 432, 301, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 118, -1, 120, 121, + -1, -1, -1, -1, -1, 452, 453, -1, 455, -1, + -1, -1, -1, 460, -1, -1, -1, 464, -1, 466, + 467, 143, -1, 145, -1, -1, -1, -1, 475, 476, + 477, -1, -1, -1, 481, -1, -1, -1, -1, 161, + -1, -1, 164, -1, -1, -1, -1, -1, -1, -1, + -1, 173, -1, 175, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 292, 293, }; } class yyCheckInit { - static short[] yyCheck = new short[3011]; + static short[] yyCheck = new short[2845]; protected static void yyCheckInit () { int numyycheck; int yyCheckerun = 0; for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 3011) { + if (yyCheckerun < 2845) { yyCheck[yyCheckerun] = yyCheck0.yyCheck0[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 3011) { + if (yyCheckerun < 2845) { yyCheck[yyCheckerun] = yyCheck1.yyCheck1[numyycheck]; yyCheckerun++; } } for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 3011) { + if (yyCheckerun < 2845) { yyCheck[yyCheckerun] = yyCheck2.yyCheck2[numyycheck]; yyCheckerun++; } } - for (numyycheck = 0; numyycheck <= 1000; numyycheck++) { - if (yyCheckerun < 3011) { - yyCheck[yyCheckerun] = yyCheck3.yyCheck3[numyycheck]; - yyCheckerun++; - } - } } } diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index 8df87947..df9d3990 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -44,7 +44,7 @@ void initUsedIdsToCheck() { } //PL 05-07-30 eingefuegt. ENDE -//LUAR 07-05-29 Anfang für Wildcard Test +//LUAR 07-05-29 Anfang f�r Wildcard Test public Menge testPair = new Menge(); //LUAR 07-05-29 Ende %} @@ -158,9 +158,11 @@ public Menge testPair = new Menge(); %type interfacetype %type interfaces %type extendsinterfaces +/* %type integraltype %type numerictype %type primitivetype +*/ %type referencetype %type classtypelist %type type @@ -236,7 +238,7 @@ public Menge testPair = new Menge(); %type constructorbody %type explicitconstructorinvocation %type staticinitializer -%type castexpression +// %type castexpression // auskommentiert von Andreas Stadelmeier %type paralist %type typelist parameter %type wildcardparameter @@ -712,7 +714,7 @@ classorinterfacetype : name parameter { if ($2 != null) { //$1.set_ParaList($2.get_ParaList()); - $1.set_ParaList($2);//Änderung von Andreas Stadelmeier. Type statt GenericVarType + $1.set_ParaList($2);//�nderung von Andreas Stadelmeier. Type statt GenericVarType /* otth: originale (also diese) Parameterliste retten */ //((UsedId)$1).vParaOrg = new Menge( $2.get_ParaList() ); } @@ -743,7 +745,7 @@ typelist : type } /* PL 05-07-28 erg�nzt, weil jeder classorinterfacetype auch parametrisiert sein kann */ -//TODO: Das hier ist möglicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes +//TODO: Das hier ist m�glicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes parameter : { $$ = null; } | '<' typelist '>' //'<'paralist'>'//typelist statt { @@ -812,9 +814,9 @@ abstractmethoddeclaration : methodheader ';' ; /* added by Andreas Stadelmeier, a10023 -Bei Lokalen Variablen ist eine initialisierung der Variablen während der Deklarisierung nicht erlaubt. +Bei Lokalen Variablen ist eine initialisierung der Variablen w�hrend der Deklarisierung nicht erlaubt. Beispiel: var = 2; -Bei einer lokalen Variable lässt sich hier nicht ermitteln ob die Variable deklariert werden soll oder bereits deklariert wurde und ihr nur ein Wert zugewiesen werden soll. +Bei einer lokalen Variable l�sst sich hier nicht ermitteln ob die Variable deklariert werden soll oder bereits deklariert wurde und ihr nur ein Wert zugewiesen werden soll. Dieses Problem ist bei Feldern nicht der Fall. */ fielddeclarator : @@ -860,7 +862,7 @@ fielddeclaration : type fielddeclarator ';' $$=$1; } | genericdeclarationlist type fielddeclarator ';' - {//angefügt von Andreas Stadelmeier + {//angef�gt von Andreas Stadelmeier $3.setType($2); $3.setGenericParameter($1); $$=$3; @@ -1161,15 +1163,7 @@ methodheader :genericdeclarationlist type methoddeclarator } -type : primitivetype - { - $$=$1; - } - |primitivetype '[' ']' - { - $1.setArray(true); - } - |referencetype +type : referencetype { $$=$1; } @@ -1177,6 +1171,17 @@ type : primitivetype { $1.setArray(true); } + /* auskommentiert von Andreas Stadelmeier + |primitivetype + { + $$=$1; + } + |primitivetype '[' ']' + { + $1.setArray(true); + } + */ + variabledeclarators : variabledeclarator { FieldDeclaration IVD = new FieldDeclaration($1.getOffset()); @@ -1286,20 +1291,18 @@ methoddeclarator :IDENTIFIER '(' ')' $$ = met_para; } +/* auskommentiert von Andreas Stadelmeier primitivetype :BOOLEAN { BooleanType BT = new BooleanType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - //BT.setName($1.getLexem()); - /* ########################################################### */ $$=BT; } + |numerictype { $$=$1; } - +*/ referencetype :classorinterfacetype { @@ -1357,7 +1360,7 @@ formalparameter : type variabledeclaratorid { FormalParameter FP = new FormalParameter($2); FP.setType($1); - //FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben. + //FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter �bergeben. $$=FP; } @@ -1408,11 +1411,12 @@ argumentlist : expression $1.expr.addElement($3); $$=$1; } - +/* auskommentiert von Andreas Stadelmeier numerictype :integraltype { $$=$1; } +*/ variabledeclaratorid : IDENTIFIER { @@ -1469,24 +1473,18 @@ expression :assignmentexpression $$=$1; } +/* auskommentiert von Andreas Stadelmeier integraltype :INT { IntegerType IT = new IntegerType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - //IT.setName($1.getLexem()); - /* ########################################################### */ $$=IT; } | CHAR { CharacterType CT = new CharacterType(null); - /* #JB# 05.04.2005 */ - /* ########################################################### */ - //CT.setName($1.getLexem()); - /* ########################################################### */ $$=CT; } +*/ localvariabledeclaration : type variabledeclarators { @@ -1802,7 +1800,7 @@ conditionalorexpression : conditionalandexpression $$=LogOr; } -// LambdaExpression eingefügt von Andreas Stadelmeier, a10023: +// LambdaExpression eingef�gt von Andreas Stadelmeier, a10023: lambdaassignmentoperator : LAMBDAASSIGNMENT { @@ -2176,7 +2174,9 @@ unaryexpressionnotplusminus : postfixexpression {$$=$1;} NE.set_Expr($2); $$=NE; } + /* auskommentiert von Andreas Stadelmeier | castexpression {$$=$1;} + */ exclusiveorexpression :andexpression {$$=$1;} | exclusiveorexpression '^' andexpression //{ @@ -2222,13 +2222,17 @@ literal : INTLITERAL {IntLiteral IL = new IntLiteral(); $$=NN; } -castexpression : '(' primitivetype ')' unaryexpression +/* auskommentiert von Andreas Stadelmeier +//Anmerkung: Ursprünglich Stand hier: "castexpression : '(' primitivetype ')' unaryexpression" +//Dies ist allerdings falsch. Der jetzige Stand führt jedoch zu reduce-Konflikt mit Lambda Expression +castexpression : '(' type ')' unaryexpression { CastExpr CaEx=new CastExpr($4.getOffset(),$4.getVariableLength()); CaEx.set_Type($2); CaEx.set_Expr($4); $$=CaEx; } +*/ //| '(' expression ')' unaryexpressionnotplusminus andexpression :equalityexpression From 76b575fedcdac54f8f9c3fa2ea00f430801e416b Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 10 Jun 2015 14:12:32 +0200 Subject: [PATCH 109/186] Kommentar --- src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java index 5c1e5064..5b3b1dbe 100644 --- a/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ObjectType.java @@ -2,6 +2,11 @@ package de.dhbwstuttgart.syntaxtree.type; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +/** + * Der ObjectType repräsentiert einen Typ ohne Wildcards. + * Eine Trennung zwischen Wildcard-Typen und anderen Typen ist notwendig. + * Ein WildcardTyp kann nur ObjectTypes aufnehmen: ? extends ObjectType + */ public abstract class ObjectType extends Type { public ObjectType(String s, SyntaxTreeNode parent, int offset) { From 1d9f58b196dd254e4578014283a8a3138f502ceb Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Tue, 16 Jun 2015 11:55:15 +0200 Subject: [PATCH 110/186] Notizen und Codeschnipsel GenByteCode --- .classpath | 22 +++--- bin/log4j.xml | 70 +++++++++---------- bin/log4jTesting.xml | 48 ++++++------- src/de/dhbwstuttgart/syntaxtree/Class.java | 16 ++--- .../dhbwstuttgart/syntaxtree/Constructor.java | 53 +++++++------- src/de/dhbwstuttgart/syntaxtree/Field.java | 1 + .../syntaxtree/FieldDeclaration.java | 6 ++ src/de/dhbwstuttgart/syntaxtree/Method.java | 21 +++++- .../syntaxtree/statement/Block.java | 34 ++++++++- .../syntaxtree/statement/Statement.java | 16 ++++- test/bytecode/EmptyClass.jav | 5 ++ test/bytecode/EmptyClass.java | 4 +- 12 files changed, 186 insertions(+), 110 deletions(-) diff --git a/.classpath b/.classpath index f142a181..fd7ce265 100755 --- a/.classpath +++ b/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/bin/log4j.xml b/bin/log4j.xml index 64e7c5db..f36fb342 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index dc30c245..ef849218 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index fecde547..6cb761af 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -60,8 +60,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I * Log4j - Loggerinstanzen */ protected static Logger inferencelog = Logger.getLogger("inference"); - //protected static Logger codegenlog = Logger.getLogger("codegen"); - //protected static Logger parserlog = Logger.getLogger("parser"); + protected static Logger codegenlog = Logger.getLogger("codegen"); + protected static Logger parserlog = Logger.getLogger("parser"); protected UsedId pkgName; protected Modifiers modifiers; protected String name; @@ -72,9 +72,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //Method created with BCEL to generate ByteCode public ByteCodeResult genByteCode() throws IOException { - - - + SectionLogger logger = Logger.getSectionLogger(this.getClass().getName(), Section.CODEGEN); logger.debug("Test"); @@ -90,11 +88,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ByteCodeResult code = new ByteCodeResult(_cg); return code; - /*ByteCodeResult bc = new ByteCodeResult(); - _cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); + //ByteCodeResult bc = new ByteCodeResult(); + //_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //_cg zurückgeben - bc.append(BCELByteCodeOutput); - return _cg;*/ + //bc.append(BCELByteCodeOutput); + //return _cg; } private Menge superif = new Menge(); diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 958a0f30..f09ccd30 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -58,19 +58,22 @@ public class Constructor extends Method { InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] { }, "", parentClass.name, il, _cp); + + //Hier müsste drin stehen: Kreiere einen Block, welcher ein Statement enthält, welches ein Super Statement ist. + + + // MethodGen 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); - InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor - il.append(_factory.createInvoke(this.getParentClass().superclassid.toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); - InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor - method.setMaxStack(); - method.setMaxLocals(); - cg.addMethod(method.getMethod()); + il.dispose(); } + // 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 + - /* @Override public void parserPostProcessing(SyntaxTreeNode parent){ if(this.parameterlist != null){ @@ -82,7 +85,7 @@ public class Constructor extends Method { gtv.parserPostProcessing(this); } } - */ + @Override public ConstraintsSet TYPE(TypeAssumptions ass) { //super.setType(this.getParentClass().getType()); @@ -95,13 +98,13 @@ public class Constructor extends Method { //throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); //this.methode.setType(t); } - /* - public Constructor(Method methode){ + + /*public Constructor(Method methode){ super(methode.getOffset()); this.methode = methode; this.setDeclIdMenge(methode.getDeclIdMenge()); this.methode.setType(this.methode.getParentClass().getType()); - } + }*/ @Override public Menge getGenericParameter() { @@ -226,11 +229,11 @@ public class Constructor extends Method { this.methode.setOverloadedID(overloadedID); } - @Override + /*@Override public String get_codegen_Param_Type(Menge paralist) { return this.methode.get_codegen_Param_Type(paralist); - } + }*/ @Override public String get_Method_Name() { @@ -244,12 +247,12 @@ public class Constructor extends Method { return this.methode.get_Type_Paralist(); } - @Override + /*@Override public void codegen(ClassFile classfile, Menge paralist) throws JVMCodeException { this.methode.codegen(classfile, paralist); - } + }*/ @Override public int getLineNumber() { @@ -317,11 +320,11 @@ public class Constructor extends Method { this.methode.set_Method_Name(string); } - public ConstraintsSet TYPE(TypeAssumptions ass) { + /*public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = new ConstraintsSet(); ret.add(this.methode.get_Block().TYPEStmt(ass)); return ret; - } + }*/ @Override public String getTypeInformation() { @@ -335,24 +338,24 @@ public class Constructor extends Method { return this.methode.printJavaCode(resultSet); } - @Override + /*@Override public TypeAssumptions createTypeAssumptions(Class classmember) { Class parentClass = this.getParentClass(); TypeAssumptions ret = new TypeAssumptions(); ret.addAssumption(new ConstructorAssumption(this, parentClass)); return ret; - } + }*/ @Override public SyntaxTreeNode getParent(){ return this.methode.getParent(); } - @Override + /*@Override public void parserPostProcessing(SyntaxTreeNode parent) { this.methode.parserPostProcessing(parent); - } + }*/ @Override public Menge getChildren() { @@ -360,11 +363,11 @@ public class Constructor extends Method { return this.methode.getChildren(); } - @Override + /*@Override public void setType(Type t) { throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); //this.methode.setType(t); - } + }*/ @Override public Type getType() { @@ -418,7 +421,7 @@ public class Constructor extends Method { public Class getParentClass() { return this.methode.getParentClass(); } - */ + } diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index cfce0dad..55c553ac 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -179,3 +179,4 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta */ public abstract void genByteCode(ClassGen cg); } + diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index eefd7482..8d321a04 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -164,4 +164,10 @@ public class FieldDeclaration extends Field{ } + /*@Override + public void genByteCode(ClassGen cg) { + // TODO Auto-generated method stub + + }*/ + } diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 88c3478c..8d7a8e90 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -6,7 +6,13 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; +import org.apache.bcel.Constants; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -20,6 +26,7 @@ import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; import de.dhbwstuttgart.syntaxtree.statement.Block; import de.dhbwstuttgart.syntaxtree.statement.Return; +import de.dhbwstuttgart.syntaxtree.statement.Statement; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -714,8 +721,20 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void genByteCode(ClassGen cg) { - // TODO Auto-generated method stub + ConstantPoolGen _cp = cg.getConstantPool(); + InstructionFactory _factory = new InstructionFactory(cg, _cp); + InstructionList il = new InstructionList(); + Class parentClass = this.getParentClass(); + //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln + MethodGen 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); + + //GenByteCode Constructor + + method.setMaxStack(); + method.setMaxLocals(); + cg.addMethod(method.getMethod()); + il.dispose(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 639a98c2..4ab83011 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -5,8 +5,16 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.Constants; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.MethodGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -14,6 +22,7 @@ import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; import de.dhbwstuttgart.myexception.SCStatementException; import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.Field; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -37,6 +46,9 @@ public class Block extends Statement // ino.end // ino.class.Block.25037.body { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; // ino.method.Block.25041.definition public Block() @@ -79,6 +91,7 @@ public class Block extends Statement } // ino.end + // ino.method.set_Statement.25068.definition @@ -224,6 +237,7 @@ public class Block extends Statement ret.attach(stmt.printJavaCode(resultSet)); ret.attach((stmt instanceof ExprStmt ? ";" : "") + "\n"); } + return ret.attach("}"); } @@ -241,5 +255,23 @@ public class Block extends Statement public String getDescription(){ return "Block"; } + + @Override + public void genByteCode(ClassGen cg) { + + ConstantPoolGen _cp = cg.getConstantPool(); + InstructionFactory _factory = new InstructionFactory(cg, _cp); + InstructionList il = new InstructionList(); + Class parentClass = this.getParentClass(); + //Instructionhandle dynamisch + //Frage: Wenn Block von Statements erbt, und Block selbst keinen BCEL Code besitzt, ist das hier dann nicht eine Sackgasse? + + for(Statement statements : this.statements){ + statements.genByteCode(_cg); + } + + } } // ino.end + + diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index b844a30f..70d3e540 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -4,8 +4,13 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Statement.8652.import import java.util.Enumeration; import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -122,5 +127,12 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse public Type getReturnType(){ return new de.dhbwstuttgart.syntaxtree.type.Void(this,-1); } -} + + + public abstract void genByteCode(ClassGen _cg); + +} + + + // ino.end diff --git a/test/bytecode/EmptyClass.jav b/test/bytecode/EmptyClass.jav index 29d3c626..44dfecf2 100644 --- a/test/bytecode/EmptyClass.jav +++ b/test/bytecode/EmptyClass.jav @@ -1,2 +1,7 @@ class EmptyClass{ + +public EmptyClass(){} + +public void leckMichAmArsch(){} + } \ No newline at end of file diff --git a/test/bytecode/EmptyClass.java b/test/bytecode/EmptyClass.java index affdf31d..5ce92d79 100644 --- a/test/bytecode/EmptyClass.java +++ b/test/bytecode/EmptyClass.java @@ -24,7 +24,7 @@ public class EmptyClass { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; public final static String testFile = "EmptyClass.jav"; - public final static String outputFile = "EmptyClass.class"; + public final static String outputFile = "EmptyClassTest.class"; @Test public void test() { @@ -32,7 +32,7 @@ public class EmptyClass { MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + testFile)); - //compiler.typeReconstruction(); + compiler.typeReconstruction(); ByteCodeResult bytecode = compiler.generateBytecode(); System.out.println(bytecode); bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); From 2fac549cf590793d69bfb53d47828f6cde5788c7 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Tue, 16 Jun 2015 13:08:11 +0200 Subject: [PATCH 111/186] =?UTF-8?q?Zus=C3=A4tzliche=20Kommentare=20und=20g?= =?UTF-8?q?eringf=C3=BCgige=20=C3=84nderungen=20in=20der=20=C3=9Cberlegung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Constructor.java | 11 +++++------ src/de/dhbwstuttgart/syntaxtree/Method.java | 15 ++++++++++----- .../dhbwstuttgart/syntaxtree/statement/Block.java | 12 ++++++------ 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index f09ccd30..253788bd 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -53,19 +53,18 @@ public class Constructor extends Method { @Override public void genByteCode(ClassGen cg) { - ConstantPoolGen _cp = cg.getConstantPool(); - InstructionFactory _factory = new InstructionFactory(cg, _cp); - InstructionList il = new InstructionList(); + //ConstantPoolGen _cp = cg.getConstantPool(); + //InstructionFactory _factory = new InstructionFactory(cg, _cp); + //InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln //Hier müsste drin stehen: Kreiere einen Block, welcher ein Statement enthält, welches ein Super Statement ist. - - // MethodGen 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); + MethodGen 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); - il.dispose(); + //il.dispose(); } // super statement muss drin sein // stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 8d7a8e90..4b2f159a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -721,20 +721,25 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void genByteCode(ClassGen cg) { - ConstantPoolGen _cp = cg.getConstantPool(); - InstructionFactory _factory = new InstructionFactory(cg, _cp); - InstructionList il = new InstructionList(); + //ConstantPoolGen _cp = cg.getConstantPool(); + //InstructionFactory _factory = new InstructionFactory(cg, _cp); + //InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln - MethodGen 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); + //Über Statements iterieren um den Block abzurufen + for(Statement statements : ){ + statements.genByteCode(cg); + } + + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(Constructor.createEmptyMethod(getTypeInformation(), parent).getType().get_Name()), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); //GenByteCode Constructor method.setMaxStack(); method.setMaxLocals(); cg.addMethod(method.getMethod()); - il.dispose(); + // il.dispose(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 4ab83011..47f5a709 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -258,17 +258,17 @@ public class Block extends Statement @Override public void genByteCode(ClassGen cg) { - - ConstantPoolGen _cp = cg.getConstantPool(); + //ConstantPoolGen _cp = cg.getConstantPool(); InstructionFactory _factory = new InstructionFactory(cg, _cp); InstructionList il = new InstructionList(); - Class parentClass = this.getParentClass(); //Instructionhandle dynamisch //Frage: Wenn Block von Statements erbt, und Block selbst keinen BCEL Code besitzt, ist das hier dann nicht eine Sackgasse? - for(Statement statements : this.statements){ - statements.genByteCode(_cg); - } + InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor + il.append(_factory.createInvoke(this.getParentClass().superclassid.toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor + + il.dispose(); } } From e9c6170d1541442594ec148919ffea0409976d75 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Tue, 16 Jun 2015 13:19:01 +0200 Subject: [PATCH 112/186] =?UTF-8?q?Iteration=20=C3=BCber=20Statements=20in?= =?UTF-8?q?nerhalb=20method.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Method.java | 3 ++- src/de/dhbwstuttgart/syntaxtree/statement/Block.java | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 4b2f159a..f618ce0c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -728,7 +728,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln //Über Statements iterieren um den Block abzurufen - for(Statement statements : ){ + //Muss dafür ein Statement Array erstellt werden, sodass ich über alle Statements in einem Block iterieren kann? + for(Statement statements : block.get_Statement()){ statements.genByteCode(cg); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 47f5a709..6ec92ad5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -261,12 +261,13 @@ public class Block extends Statement //ConstantPoolGen _cp = cg.getConstantPool(); InstructionFactory _factory = new InstructionFactory(cg, _cp); InstructionList il = new InstructionList(); - //Instructionhandle dynamisch + //Frage: Wenn Block von Statements erbt, und Block selbst keinen BCEL Code besitzt, ist das hier dann nicht eine Sackgasse? - InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor + //Instructionhandle dynamisch + InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); il.append(_factory.createInvoke(this.getParentClass().superclassid.toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); - InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor + InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); il.dispose(); From c6502600cc31cf83aad28ad9bebb83810da7c787 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Tue, 16 Jun 2015 13:53:32 +0200 Subject: [PATCH 113/186] =?UTF-8?q?Weitere=20=C3=9Cberlegung=20im=20Bereic?= =?UTF-8?q?h=20Constructor=20/=20Method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Constructor.java | 4 ++-- src/de/dhbwstuttgart/syntaxtree/Method.java | 16 +++++++++------- .../dhbwstuttgart/syntaxtree/SyntaxTreeNode.java | 5 ++++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 253788bd..b775ba2e 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -53,9 +53,9 @@ public class Constructor extends Method { @Override public void genByteCode(ClassGen cg) { - //ConstantPoolGen _cp = cg.getConstantPool(); + ConstantPoolGen _cp = cg.getConstantPool(); //InstructionFactory _factory = new InstructionFactory(cg, _cp); - //InstructionList il = new InstructionList(); + InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index f618ce0c..e8588859 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -727,14 +727,16 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable Class parentClass = this.getParentClass(); //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln - //Über Statements iterieren um den Block abzurufen - //Muss dafür ein Statement Array erstellt werden, sodass ich über alle Statements in einem Block iterieren kann? - for(Statement statements : block.get_Statement()){ - statements.genByteCode(cg); - } - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(Constructor.createEmptyMethod(getTypeInformation(), parent).getType().get_Name()), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); - + //Über Constructor iterieren, um alle Methoden zu bekommen + for(Method methode : ){ + + //Über Statements iterieren um den Block abzurufen + for(Statement statements : block.get_Statement()){ + statements.genByteCode(cg); + } + } + //GenByteCode Constructor method.setMaxStack(); diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index 5a8e494a..deb03d89 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -1,7 +1,8 @@ package de.dhbwstuttgart.syntaxtree; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -126,4 +127,6 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ return this.getParent().getGTVDeclarationContext(); } + + } From 62a1a9b871a94dd84be24a5f78847932c90dea4a Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 16 Jun 2015 14:22:13 +0200 Subject: [PATCH 114/186] =?UTF-8?q?Constraint=20Type=20gel=C3=B6scht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/Block.java | 2 -- .../typeinference/ConstraintType.java | 25 ------------------- 2 files changed, 27 deletions(-) delete mode 100644 src/de/dhbwstuttgart/typeinference/ConstraintType.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 639a98c2..556b3e3d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -19,7 +19,6 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.Void; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -143,7 +142,6 @@ public class Block extends Statement for(int i=0;i Date: Tue, 16 Jun 2015 14:23:32 +0200 Subject: [PATCH 115/186] Versuch, MethodGen in Method.java zu implementieren --- src/de/dhbwstuttgart/syntaxtree/Method.java | 1225 ++++++++++--------- 1 file changed, 621 insertions(+), 604 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index e8588859..d0f954ba 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -1,5 +1,6 @@ // ino.module.Method.8564.package package de.dhbwstuttgart.syntaxtree; + // ino.end // ino.module.Method.8564.import import java.util.Enumeration; @@ -42,13 +43,12 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; - - - // ino.class.Method.23482.declaration /** - * Stellt eine Methode dar. - * Problem: Parser kann nicht zwischen Methode und Konstruktor unterscheiden. Daher kann diese Klasse beides sein. Dies wird mit dem ParserPostProcessing behoben. + * Stellt eine Methode dar. Problem: Parser kann nicht zwischen Methode und + * Konstruktor unterscheiden. Daher kann diese Klasse beides sein. Dies wird mit + * dem ParserPostProcessing behoben. + * * @author janulrich * */ @@ -56,619 +56,628 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.class.Method.23482.body { - // ino.attribute.block.23488.declaration - private Block block; - // ino.end - // ino.attribute.parameterlist.23491.declaration - public ParameterList parameterlist = new ParameterList(); - // ino.end - // ino.attribute.exceptionlist.23494.declaration - private ExceptionList exceptionlist; - // ino.end - // ino.attribute.returntype.23497.declaration - private Type returntype; - // ino.end - - // ino.attribute.genericMethodParameters.23500.decldescription type=javadoc - /** - * HOTI 4.5.06 - * Dieser Vektor beinhaltet alle Generischen Typen und v.a. die - * F-Bounded-Generics, die die Methode besitzt - * size()==0, falls es keine gibt - */ - // ino.end - // ino.attribute.genericMethodParameters.23500.declaration - //private Menge genericMethodParameters=new Menge(); - // ino.end - - // ino.attribute.overloadedID.23503.declaration - private int overloadedID; - // ino.end - // ino.attribute.isAbstract.23506.declaration - private boolean isAbstract = false; - // ino.end - // ino.attribute.types_in_parameterlist.23509.declaration - private Menge types_in_parameterlist = new Menge(); - // ino.end - // ino.attribute.m_LineNumber.23512.declaration - private int m_LineNumber = MyCompiler.NO_LINENUMBER; - // ino.end - private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006 - // ino.attribute.inferencelog.23515.declaration - protected static Logger inferencelog = Logger.getLogger("inference"); - // ino.end - // ino.attribute.parserlog.23518.declaration - protected static Logger parserlog = Logger.getLogger("parser"); - // ino.end - - public Method(int offset){ - super(offset); - } - - public Method(String name, Type returnType, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, int offset){ - this(offset); - /* - if(parameterList != null)parameterList.parserPostProcessing(this); - if(block != null)block.parserPostProcessing(this); - if(gtvDeclarations != null)gtvDeclarations.parserPostProcessing(this); - */ - this.set_Method_Name(name); - this.setParameterList(parameterList); - this.set_Block(block); - this.setGenericParameter(gtvDeclarations); - this.setReturnType(returnType); - } - - /* - // ino.method.setGenericMethodParameters.23521.definition - public void setGenericMethodParameters(Menge genericMethodParameters) - // ino.end - // ino.method.setGenericMethodParameters.23521.body - { - this.genericMethodParameters=genericMethodParameters; - } - // ino.end - // ino.method.getGenericMethodParameters.23524.definition - public Menge getGenericMethodParameters() - // ino.end - // ino.method.getGenericMethodParameters.23524.body - { - return(genericMethodParameters); - } - // ino.end - */ - /* - // ino.method.sc_init_parameterlist.23530.definition - public void sc_init_parameterlist(boolean ext) - // ino.end - // ino.method.sc_init_parameterlist.23530.body - { - DeclId hilf=null; - Menge list; - FormalParameter para; - String typeofpara; - int i=1; - if(this.getParameterList()!=null) //es gibt Parameter, dann: - { - hilf=declid.elementAt(0); - if(ext) - parserlog.debug("Semantik-Check hat in Methode "+hilf.get_Name()+" bergabewerte gefunden:"); - list=this.getParameterList().sc_get_Formalparalist(); //Menge Formalparalist aus FormalParameterList wird zwischen gesichert - for(Enumeration el2=list.elements(); el2.hasMoreElements();) - { - para=el2.nextElement(); - typeofpara=para.getTypeName(); - if(ext) - parserlog.debug(" "+i+". Parameter hat Typ "+typeofpara); - types_in_parameterlist.addElement(typeofpara); //Typ der Parameter werden im Menge abgelegt - i++; - } - } - else //keine Parameter vorhanden: - { - if(ext) - { - hilf=declid.elementAt(0); - parserlog.debug("Semantik-Check hat in Methode "+hilf.get_Name()+" keine bergabewerte gefunden."); - } - } - if(ext) - { - parserlog.debug("Semantik-Check hat in Methode "+hilf.get_Name()+" "+ types_in_parameterlist.size()+" bergabeparameter gefunden."); - parserlog.debug(" namentlich: "+types_in_parameterlist.toString()); - } - } - // ino.end - */ - // ino.method.getTypeName.23533.defdescription type=line - // Eine der beiden Funktionen ist ueberflssig. Wer sich daran strt kann die - // get_ReturnType() auf eigene Gefahr lschen. - // ino.end - - // ino.method.getTypeName.23533.definition - public JavaClassName getTypeName() - // ino.end - // ino.method.getTypeName.23533.body - { - if( this.getType() == null ) - return null; - else - return this.getType().getName(); - } - // ino.end + // ino.attribute.block.23488.declaration + private Block block; + // ino.end + // ino.attribute.parameterlist.23491.declaration + public ParameterList parameterlist = new ParameterList(); + // ino.end + // ino.attribute.exceptionlist.23494.declaration + private ExceptionList exceptionlist; + // ino.end + // ino.attribute.returntype.23497.declaration + private Type returntype; + // ino.end - // ino.method.get_Block.23536.definition - public Block get_Block() - // ino.end - // ino.method.get_Block.23536.body - { - return block; - } - // ino.end - - // ino.method.setReturnType.23539.defdescription type=javadoc - /** - *
    Author: Jrg Buerle - * @param type - */ - // ino.end - // ino.method.setReturnType.23539.definition - private void setReturnType(Type type) - // ino.end - // ino.method.setReturnType.23539.body - { - this.returntype = type; - } - // ino.end + // ino.attribute.genericMethodParameters.23500.decldescription type=javadoc + /** + * HOTI 4.5.06 Dieser Vektor beinhaltet alle Generischen Typen und v.a. die + * F-Bounded-Generics, die die Methode besitzt size()==0, falls es keine + * gibt + */ + // ino.end + // ino.attribute.genericMethodParameters.23500.declaration + // private Menge genericMethodParameters=new + // Menge(); + // ino.end - // ino.method.set_Block.23542.definition - public void set_Block( Block blo) - // ino.end - // ino.method.set_Block.23542.body - { - if(blo.getType() == null)blo.setType(this.returntype); - this.block = blo; - } - // ino.end + // ino.attribute.overloadedID.23503.declaration + private int overloadedID; + // ino.end + // ino.attribute.isAbstract.23506.declaration + private boolean isAbstract = false; + // ino.end + // ino.attribute.types_in_parameterlist.23509.declaration + private Menge types_in_parameterlist = new Menge(); + // ino.end + // ino.attribute.m_LineNumber.23512.declaration + private int m_LineNumber = MyCompiler.NO_LINENUMBER; + // ino.end + private int m_Offset = -1; // hinzugef�gt hoth: 07.04.2006 + // ino.attribute.inferencelog.23515.declaration + protected static Logger inferencelog = Logger.getLogger("inference"); + // ino.end + // ino.attribute.parserlog.23518.declaration + protected static Logger parserlog = Logger.getLogger("parser"); - // ino.method.set_Modifiers.23545.definition - public void set_Modifiers(Modifiers modif) - // ino.end - // ino.method.set_Modifiers.23545.body - { - declid.firstElement().set_Modifiers(modif); - // this.modi = modif; - } - // ino.end + // ino.end - // ino.method.set_ExceptionList.23548.definition - public void set_ExceptionList(ExceptionList exlist) - // ino.end - // ino.method.set_ExceptionList.23548.body - { - this.exceptionlist = exlist; - } - // ino.end + public Method(int offset) { + super(offset); + } - // ino.method.setParameterList.23551.definition - public void setParameterList( ParameterList paralist ) - // ino.end - // ino.method.setParameterList.23551.body - { - this.parameterlist = paralist; - } - // ino.end + public Method(String name, Type returnType, ParameterList parameterList, + Block block, GenericDeclarationList gtvDeclarations, int offset) { + this(offset); + /* + * if(parameterList != null)parameterList.parserPostProcessing(this); + * if(block != null)block.parserPostProcessing(this); if(gtvDeclarations + * != null)gtvDeclarations.parserPostProcessing(this); + */ + this.set_Method_Name(name); + this.setParameterList(parameterList); + this.set_Block(block); + this.setGenericParameter(gtvDeclarations); + this.setReturnType(returnType); + } - // ino.method.getParameterList.23554.definition - public ParameterList getParameterList( ) - // ino.end - // ino.method.getParameterList.23554.body - { - // otth: gibt die Parameterliste zurueck - return this.parameterlist; - } - // ino.end - - // ino.method.getParameterCount.23557.defdescription type=javadoc - /** - * Author: Jrg Buerle
    - * @return Die Anzahl der Methoden-Paramater - */ - // ino.end - // ino.method.getParameterCount.23557.definition - public int getParameterCount() - // ino.end - // ino.method.getParameterCount.23557.body - { - if(this.getParameterList() == null) - return 0; - else - return this.getParameterList().getParameterCount(); - } - // ino.end + /* + * // ino.method.setGenericMethodParameters.23521.definition public void + * setGenericMethodParameters(Menge genericMethodParameters) + * // ino.end // ino.method.setGenericMethodParameters.23521.body { + * this.genericMethodParameters=genericMethodParameters; } // ino.end // + * ino.method.getGenericMethodParameters.23524.definition public + * Menge getGenericMethodParameters() // ino.end // + * ino.method.getGenericMethodParameters.23524.body { + * return(genericMethodParameters); } // ino.end + */ + /* + * // ino.method.sc_init_parameterlist.23530.definition public void + * sc_init_parameterlist(boolean ext) // ino.end // + * ino.method.sc_init_parameterlist.23530.body { DeclId hilf=null; + * Menge list; FormalParameter para; String typeofpara; int + * i=1; if(this.getParameterList()!=null) //es gibt Parameter, dann: { + * hilf=declid.elementAt(0); if(ext) + * parserlog.debug("Semantik-Check hat in Methode " + * +hilf.get_Name()+" bergabewerte gefunden:"); + * list=this.getParameterList().sc_get_Formalparalist(); //Menge + * Formalparalist aus FormalParameterList wird zwischen gesichert + * for(Enumeration el2=list.elements(); + * el2.hasMoreElements();) { para=el2.nextElement(); + * typeofpara=para.getTypeName(); if(ext) + * parserlog.debug(" "+i+". Parameter hat Typ "+typeofpara); + * types_in_parameterlist.addElement(typeofpara); //Typ der Parameter werden + * im Menge abgelegt i++; } } else //keine Parameter vorhanden: { if(ext) { + * hilf=declid.elementAt(0); + * parserlog.debug("Semantik-Check hat in Methode " + * +hilf.get_Name()+" keine bergabewerte gefunden."); } } if(ext) { + * parserlog.debug("Semantik-Check hat in Methode "+hilf.get_Name()+" "+ + * types_in_parameterlist.size()+" bergabeparameter gefunden."); + * parserlog.debug + * (" namentlich: "+types_in_parameterlist.toString()); } } // + * ino.end + */ + // ino.method.getTypeName.23533.defdescription type=line + // Eine der beiden Funktionen ist ueberflssig. Wer sich daran strt kann die + // get_ReturnType() auf eigene Gefahr lschen. + // ino.end - // ino.method.get_ExceptionList.23560.definition - public ExceptionList get_ExceptionList() - // ino.end - // ino.method.get_ExceptionList.23560.body - { - // otth: gibt die Exceptionliste zurueck - return this.exceptionlist; - } - // ino.end - - // ino.method.getOverloadedID.23563.definition - public int getOverloadedID() - // ino.end - // ino.method.getOverloadedID.23563.body - { - return(overloadedID); - } - // ino.end + // ino.method.getTypeName.23533.definition + public JavaClassName getTypeName() + // ino.end + // ino.method.getTypeName.23533.body + { + if (this.getType() == null) + return null; + else + return this.getType().getName(); + } - // ino.method.setOverloadedID.23566.definition - public void setOverloadedID(int overloadedID) - // ino.end - // ino.method.setOverloadedID.23566.body - { - this.overloadedID=overloadedID; - } - // ino.end - + // ino.end - - - - // ino.method.get_Method_Name.23575.definition - public String get_Method_Name() - // ino.end - // ino.method.get_Method_Name.23575.body - { - DeclId hilf=declid.elementAt(0); - return hilf.get_Name(); - } - // ino.end + // ino.method.get_Block.23536.definition + public Block get_Block() + // ino.end + // ino.method.get_Block.23536.body + { + return block; + } - // ino.method.get_Type_Paralist.23578.definition - public Menge get_Type_Paralist() - // ino.end - // ino.method.get_Type_Paralist.23578.body - { - return types_in_parameterlist; - } - // ino.end - - + // ino.end - // ino.method.getLineNumber.23584.definition - public int getLineNumber() - // ino.end - // ino.method.getLineNumber.23584.body - { - return m_LineNumber; - } - // ino.end - - // ino.method.setLineNumber.23587.definition - public void setLineNumber(int lineNumber) - // ino.end - // ino.method.setLineNumber.23587.body - { - m_LineNumber = lineNumber; - } - // ino.end - - // ino.method.getOffset.23590.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 - // ino.end - // ino.method.getOffset.23590.definition - public int getOffset() - // ino.end - // ino.method.getOffset.23590.body - { - return m_Offset; - } - // ino.end - - // ino.method.getVariableLength.23593.definition - public int getVariableLength() - // ino.end - // ino.method.getVariableLength.23593.body - { - return get_Method_Name().length(); - } - // ino.end - - // ino.method.setOffset.23596.defdescription type=line - // hinzugef�gt hoth: 07.04.2006 - // ino.end - // ino.method.setOffset.23596.definition - public void setOffset(int Offset) - // ino.end - // ino.method.setOffset.23596.body - { - m_Offset = Offset; - } - // ino.end + // ino.method.setReturnType.23539.defdescription type=javadoc + /** + *
    + * Author: Jrg Buerle + * + * @param type + */ + // ino.end + // ino.method.setReturnType.23539.definition + private void setReturnType(Type type) + // ino.end + // ino.method.setReturnType.23539.body + { + this.returntype = type; + } - - // ino.method.getTypeLineNumber.23602.defdescription type=javadoc - /** - *
    Author: Jrg Buerle - * @return - */ - // ino.end - // ino.method.getTypeLineNumber.23602.definition - public int getTypeLineNumber() - // ino.end - // ino.method.getTypeLineNumber.23602.body - { - return this.getLineNumber(); - } - // ino.end + // ino.end + + // ino.method.set_Block.23542.definition + public void set_Block(Block blo) + // ino.end + // ino.method.set_Block.23542.body + { + if (blo.getType() == null) + blo.setType(this.returntype); + this.block = blo; + } + + // ino.end + + // ino.method.set_Modifiers.23545.definition + public void set_Modifiers(Modifiers modif) + // ino.end + // ino.method.set_Modifiers.23545.body + { + declid.firstElement().set_Modifiers(modif); + // this.modi = modif; + } + + // ino.end + + // ino.method.set_ExceptionList.23548.definition + public void set_ExceptionList(ExceptionList exlist) + // ino.end + // ino.method.set_ExceptionList.23548.body + { + this.exceptionlist = exlist; + } + + // ino.end + + // ino.method.setParameterList.23551.definition + public void setParameterList(ParameterList paralist) + // ino.end + // ino.method.setParameterList.23551.body + { + this.parameterlist = paralist; + } + + // ino.end + + // ino.method.getParameterList.23554.definition + public ParameterList getParameterList() + // ino.end + // ino.method.getParameterList.23554.body + { + // otth: gibt die Parameterliste zurueck + return this.parameterlist; + } + + // ino.end + + // ino.method.getParameterCount.23557.defdescription type=javadoc + /** + * Author: Jrg Buerle
    + * + * @return Die Anzahl der Methoden-Paramater + */ + // ino.end + // ino.method.getParameterCount.23557.definition + public int getParameterCount() + // ino.end + // ino.method.getParameterCount.23557.body + { + if (this.getParameterList() == null) + return 0; + else + return this.getParameterList().getParameterCount(); + } + + // ino.end + + // ino.method.get_ExceptionList.23560.definition + public ExceptionList get_ExceptionList() + // ino.end + // ino.method.get_ExceptionList.23560.body + { + // otth: gibt die Exceptionliste zurueck + return this.exceptionlist; + } + + // ino.end + + // ino.method.getOverloadedID.23563.definition + public int getOverloadedID() + // ino.end + // ino.method.getOverloadedID.23563.body + { + return (overloadedID); + } + + // ino.end + + // ino.method.setOverloadedID.23566.definition + public void setOverloadedID(int overloadedID) + // ino.end + // ino.method.setOverloadedID.23566.body + { + this.overloadedID = overloadedID; + } + + // ino.end + + // ino.method.get_Method_Name.23575.definition + public String get_Method_Name() + // ino.end + // ino.method.get_Method_Name.23575.body + { + DeclId hilf = declid.elementAt(0); + return hilf.get_Name(); + } + + // ino.end + + // ino.method.get_Type_Paralist.23578.definition + public Menge get_Type_Paralist() + // ino.end + // ino.method.get_Type_Paralist.23578.body + { + return types_in_parameterlist; + } + + // ino.end + + // ino.method.getLineNumber.23584.definition + public int getLineNumber() + // ino.end + // ino.method.getLineNumber.23584.body + { + return m_LineNumber; + } + + // ino.end + + // ino.method.setLineNumber.23587.definition + public void setLineNumber(int lineNumber) + // ino.end + // ino.method.setLineNumber.23587.body + { + m_LineNumber = lineNumber; + } + + // ino.end + + // ino.method.getOffset.23590.defdescription type=line + // hinzugef�gt hoth: 07.04.2006 + // ino.end + // ino.method.getOffset.23590.definition + public int getOffset() + // ino.end + // ino.method.getOffset.23590.body + { + return m_Offset; + } + + // ino.end + + // ino.method.getVariableLength.23593.definition + public int getVariableLength() + // ino.end + // ino.method.getVariableLength.23593.body + { + return get_Method_Name().length(); + } + + // ino.end + + // ino.method.setOffset.23596.defdescription type=line + // hinzugef�gt hoth: 07.04.2006 + // ino.end + // ino.method.setOffset.23596.definition + public void setOffset(int Offset) + // ino.end + // ino.method.setOffset.23596.body + { + m_Offset = Offset; + } + + // ino.end + + // ino.method.getTypeLineNumber.23602.defdescription type=javadoc + /** + *
    + * Author: Jrg Buerle + * + * @return + */ + // ino.end + // ino.method.getTypeLineNumber.23602.definition + public int getTypeLineNumber() + // ino.end + // ino.method.getTypeLineNumber.23602.body + { + return this.getLineNumber(); + } + + // ino.end + + // ino.method.toString.23605.defdescription type=javadoc + /** + *
    + * Author: Martin Pl�micke + * + * @return + */ + // ino.end + // ino.method.toString.23605.definition + public String toString() + // ino.end + // ino.method.toString.23605.body + { + return this.getType() + " " + this.get_Name() + + ((block != null) ? block.toString() : ""); + } + + // ino.end + + // ino.method.setAbstract.23608.defdescription type=javadoc + /** + * Legt fuer die ByteCodeGen fest, ob Bytecode innerhalb der Methode + * generiert wird. + */ + // ino.end + // ino.method.setAbstract.23608.definition + public void setAbstract(boolean b) + // ino.end + // ino.method.setAbstract.23608.body + { + isAbstract = b; + } + + // ino.end + + // ino.method.isAbstract.23611.defdescription type=javadoc + /** + * Gibt zurueck, ob ByteCode innerhabl der Methode generiert wird. + */ + // ino.end + // ino.method.isAbstract.23611.definition + public boolean isAbstract() + // ino.end + // ino.method.isAbstract.23611.body + { + return isAbstract; + } + + @Override + public void wandleRefTypeAttributes2GenericAttributes( + Menge classParalist) { + /* + * Menge paralist = new Menge();//Mit den Generischen Typen + * der Methode paralist.addAll(classParalist); + * paralist.addAll(this.genericMethodParameters); + * + * // Zuerst Returntype untersuchen Type returnType=getType(); Type + * pendantReturnType = null; if(returnType instanceof + * RefType)pendantReturnType = + * ((RefType)returnType).findGenericType(paralist, new + * Menge()); //GenericTypeVar + * pendantReturnType=ClassHelper.findGenericType(returnType, + * paralist,genericMethodParameters); if(pendantReturnType!=null){ + * //Wenn generisch, dann modifizieren setReturnType(pendantReturnType); + * } + * + * // Dann parameterlist untersuchen for(int + * par=0;par()); //GenericTypeVar + * pendantPara=ClassHelper.findGenericType + * (fpType,paralist,genericMethodParameters); if(pendantPara!=null){ + * //Wenn generisch, dann modifizieren fp.setType(pendantPara); } } + * + * // Zuletzt alle Lokalen Variablendeklarationen durchgehen + * if(block!=null){ + * block.wandleRefTypeAttributes2GenericAttributes(paralist + * ,genericMethodParameters); } + */ + } + + public void set_Method_Name(String string) { + if (declid.size() == 0) + declid.add(0, new DeclId(string)); + declid.set(0, new DeclId(string)); + } - // ino.method.toString.23605.defdescription type=javadoc - /** - *
    Author: Martin Pl�micke - * @return - */ - // ino.end - // ino.method.toString.23605.definition - public String toString() - // ino.end - // ino.method.toString.23605.body - { - return this.getType() + " "+ this.get_Name() +( (block!=null)?block.toString():""); - } - // ino.end - - // ino.method.setAbstract.23608.defdescription type=javadoc - /** - * Legt fuer die ByteCodeGen fest, ob Bytecode - * innerhalb der Methode generiert wird. - */ - // ino.end - // ino.method.setAbstract.23608.definition - public void setAbstract(boolean b) - // ino.end - // ino.method.setAbstract.23608.body - { - isAbstract = b; - } - // ino.end - - // ino.method.isAbstract.23611.defdescription type=javadoc - /** - * Gibt zurueck, ob ByteCode innerhabl der Methode - * generiert wird. - */ - // ino.end - // ino.method.isAbstract.23611.definition - public boolean isAbstract() - // ino.end - // ino.method.isAbstract.23611.body - { - return isAbstract; - } - - @Override - public void wandleRefTypeAttributes2GenericAttributes(Menge classParalist) - { - /* - Menge paralist = new Menge();//Mit den Generischen Typen der Methode - paralist.addAll(classParalist); - paralist.addAll(this.genericMethodParameters); - - // Zuerst Returntype untersuchen - Type returnType=getType(); - Type pendantReturnType = null; - if(returnType instanceof RefType)pendantReturnType = ((RefType)returnType).findGenericType(paralist, new Menge()); - //GenericTypeVar pendantReturnType=ClassHelper.findGenericType(returnType, paralist,genericMethodParameters); - if(pendantReturnType!=null){ //Wenn generisch, dann modifizieren - setReturnType(pendantReturnType); - } - - // Dann parameterlist untersuchen - for(int par=0;par()); - //GenericTypeVar pendantPara=ClassHelper.findGenericType(fpType,paralist,genericMethodParameters); - if(pendantPara!=null){ //Wenn generisch, dann modifizieren - fp.setType(pendantPara); - } - } - - // Zuletzt alle Lokalen Variablendeklarationen durchgehen - if(block!=null){ - block.wandleRefTypeAttributes2GenericAttributes(paralist,genericMethodParameters); - } - */ - } - - public void set_Method_Name(String string) - { - if(declid.size()==0)declid.add(0, new DeclId(string)); - declid.set(0,new DeclId(string)); - } - - - public ConstraintsSet TYPE(TypeAssumptions ass) { ConstraintsSet ret = new ConstraintsSet(); TypeAssumptions localAss = new TypeAssumptions(); - localAss.add(ass); //Die globalen Assumptions anhängen - //Generische Parameterdeklarationen den Assumptions anfügen: - for(GenericTypeVar gtv : this.getGenericParameter()){ + localAss.add(ass); // Die globalen Assumptions anhängen + // Generische Parameterdeklarationen den Assumptions anfügen: + for (GenericTypeVar gtv : this.getGenericParameter()) { localAss.add(gtv.createAssumptions()); } - for(GenericTypeVar gtv : this.getGenericParameter()){ + for (GenericTypeVar gtv : this.getGenericParameter()) { ret.add(gtv.TYPE(localAss)); } - - //TypeCheck, falls es sich um einen RefType handelt: + + // TypeCheck, falls es sich um einen RefType handelt: this.returntype = this.returntype.checkTYPE(localAss, this); /* - if(this.returntype!=null && (this.returntype instanceof RefType)&& - !(this.returntype instanceof mycompiler.mytype.Void)){//Sonderfall der Methode: Ihr Typ darf Void definiert werden. - Type replaceType = null; - replaceType = ass.getTypeFor((RefType)this.returntype); - if(replaceType == null)throw new TypeinferenceException("Der Typ "+this.getType().getName()+" ist nicht korrekt",this); - this.returntype = replaceType; - } - */ - //Die Parameter zu den Assumptions hinzufügen: - if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){ - - param.setType(param.getType().checkTYPE(localAss, this)); - /* - if(param.getType() instanceof RefType) - { - Type replaceType = null; - replaceType = ass.getTypeFor((RefType)param.getType()); - if(replaceType == null) - throw new TypeinferenceException("Der Typ "+param.getType().getName()+" ist nicht korrekt",param); - param.setType(replaceType); + * if(this.returntype!=null && (this.returntype instanceof RefType)&& + * !(this.returntype instanceof mycompiler.mytype.Void)){//Sonderfall + * der Methode: Ihr Typ darf Void definiert werden. Type replaceType = + * null; replaceType = ass.getTypeFor((RefType)this.returntype); + * if(replaceType == null)throw new + * TypeinferenceException("Der Typ "+this + * .getType().getName()+" ist nicht korrekt",this); this.returntype = + * replaceType; } + */ + // Die Parameter zu den Assumptions hinzufügen: + if (this.parameterlist != null) + for (FormalParameter param : this.parameterlist) { + + param.setType(param.getType().checkTYPE(localAss, this)); + /* + * if(param.getType() instanceof RefType) { Type replaceType = + * null; replaceType = ass.getTypeFor((RefType)param.getType()); + * if(replaceType == null) throw new + * TypeinferenceException("Der Typ " + * +param.getType().getName()+" ist nicht korrekt",param); + * param.setType(replaceType); } + */ + + localAss.addAssumption(new ParameterAssumption(param)); } - */ - - localAss.addAssumption(new ParameterAssumption(param)); - } ret.add(this.block.TYPEStmt(localAss)); - //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: - ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this))); + // eine Verknüpfung mit der Type Assumption aus dem Assumption Set + // und dem ermittelten Typ der Methode: + ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), + this.returntype.TYPE(localAss, this))); return ret; } - + /** * @author Andreas Stadelmeier, a10023 * @return die TypInformationen der Statements dieser Methode. */ - public String getTypeInformation(){ - if(this.parameterlist!=null)return "Methode "+this.get_Name()+ " Parameter: "+this.parameterlist.getTypeInformation()+", Block: "+this.block.getTypeInformation(); - return "Methode "+this.get_Name()+" : "+this.getType()+", Block: "+this.block.getTypeInformation(); + public String getTypeInformation() { + if (this.parameterlist != null) + return "Methode " + this.get_Name() + " Parameter: " + + this.parameterlist.getTypeInformation() + ", Block: " + + this.block.getTypeInformation(); + return "Methode " + this.get_Name() + " : " + this.getType() + + ", Block: " + this.block.getTypeInformation(); } - + @Override public JavaCodeResult printJavaCode(ResultSet resultSet) { JavaCodeResult ret = new JavaCodeResult(); - ret.attach(this.getType().printJavaCode(resultSet)).attach(" ").attach(this.get_Method_Name()).attach("(").attach(this.getParameterList().printJavaCode(resultSet)).attach(")\n"); + ret.attach(this.getType().printJavaCode(resultSet)).attach(" ") + .attach(this.get_Method_Name()).attach("(") + .attach(this.getParameterList().printJavaCode(resultSet)) + .attach(")\n"); ret.attach(this.block.printJavaCode(resultSet)); return ret; } - + /** * Liefert die MethodAssumption zu dieser Methode */ @Override public TypeAssumptions createTypeAssumptions(Class classmember) { - Class parentClass = classmember;//this.getParentClass(); + Class parentClass = classmember;// this.getParentClass(); TypeAssumptions ret = new TypeAssumptions(); ret.addAssumption(new MethodAssumption(this, parentClass)); return ret; /* - TypeAssumptions assumptions = new TypeAssumptions(); - this.assumedType = null; - //if((this.get_Method_Name().equals(classmember.getName()) || this.get_Method_Name().equals("")) && ((this.getType().equals(new mycompiler.mytype.Void(0))) || this.getType() instanceof TypePlaceholder)){ - if((this.get_Method_Name().equals(classmember.getName()) || this.get_Method_Name().equals(""))) { - this.set_Method_Name(""); - this.assumedType = new RefType(classmember.getName(),0); - this.setReturnType(this.assumedType); - this.assumedType = new RefType("void",0); - //Return constructorReturnStatement = new Return(0,0); - //constructorReturnStatement.retexpr = - //this.block.statements.add(constructorReturnStatement); - } - //hoth: 06.04.2006 - //durchlaufe Block und suche nach Objektvariablen fuer Offset-Markierung - Iterator fieldVarIterator = assumptions.iterator(); - while (fieldVarIterator.hasNext()) - { - //Wenn ObjektVariable - CTypeAssumption dieAssum = fieldVarIterator.next(); - if(dieAssum instanceof CInstVarTypeAssumption) - { - Class.isFirstLocalVarDecl=false; - if(this.get_Block() != null) - this.get_Block().addOffsetsToAssumption(dieAssum,dieAssum.getIdentifier(),true); - } - } - - //methodList.addElement(method); - - //F�r V_fields_methods: - CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Menge(),this.getGenericMethodParameters()); // Typannahme bauen... - - - //Methode in V_Fields_methods ablegen - //Dabei wird die OverloadedMethodID ermittelt !! - //=> Method setzenuct - - - assumptions.add(methodAssum); - this.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); - - - //F�r die V_i: - CTypeAssumptionSet localAssum = new CTypeAssumptionSet(); - - //Bauen... - ParameterList parameterList = this.getParameterList(); - if(parameterList!=null){ - for(int i=0; i()); - //fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006 - Class.isFirstLocalVarDecl=false; - - if(this.get_Block() != null) - this.get_Block().addOffsetsToAssumption(paraAssum,paraAssum.getIdentifier(),true); - - methodAssum.addParaAssumption(paraAssum); - - // F�r die V_i: - CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge()); - localAssum.addElement(varAssum); - //rememberLocals.addElement(varAssum); - } - } - //...und hinzuf�gen: - - assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen - - //Hier wird der Typ der als Assumption eingetragen wird in die Variable assumedType dieser Klasse geschrieben: - if(this.assumedType == null) // Falls der Typ nicht schon gesetzt ist. Das ist der Fall, falls die Methode ein Konstruktor ist - this.assumedType = methodAssum.getAssumedType(); - - return assumptions; - */ + * TypeAssumptions assumptions = new TypeAssumptions(); this.assumedType + * = null; //if((this.get_Method_Name().equals(classmember.getName()) || + * this.get_Method_Name().equals("")) && + * ((this.getType().equals(new mycompiler.mytype.Void(0))) || + * this.getType() instanceof TypePlaceholder)){ + * if((this.get_Method_Name().equals(classmember.getName()) || + * this.get_Method_Name().equals(""))) { + * this.set_Method_Name(""); this.assumedType = new + * RefType(classmember.getName(),0); + * this.setReturnType(this.assumedType); this.assumedType = new + * RefType("void",0); //Return constructorReturnStatement = new + * Return(0,0); //constructorReturnStatement.retexpr = + * //this.block.statements.add(constructorReturnStatement); } //hoth: + * 06.04.2006 //durchlaufe Block und suche nach Objektvariablen fuer + * Offset-Markierung Iterator fieldVarIterator = + * assumptions.iterator(); while (fieldVarIterator.hasNext()) { //Wenn + * ObjektVariable CTypeAssumption dieAssum = fieldVarIterator.next(); + * if(dieAssum instanceof CInstVarTypeAssumption) { + * Class.isFirstLocalVarDecl=false; if(this.get_Block() != null) + * this.get_Block + * ().addOffsetsToAssumption(dieAssum,dieAssum.getIdentifier(),true); } + * } + * + * //methodList.addElement(method); + * + * //F�r V_fields_methods: CMethodTypeAssumption methodAssum + * = new CMethodTypeAssumption(classmember.getType(), + * this.get_Method_Name(), this.getType(), + * this.getParameterCount(),this.getLineNumber(),this.getOffset(),new + * Menge(),this.getGenericMethodParameters()); // Typannahme + * bauen... + * + * + * //Methode in V_Fields_methods ablegen //Dabei wird die + * OverloadedMethodID ermittelt !! //=> Method setzenuct + * + * + * assumptions.add(methodAssum); + * this.setOverloadedID(methodAssum.getHashSetKey + * ().getOverloadedMethodID()); + * + * + * //F�r die V_i: CTypeAssumptionSet localAssum = new + * CTypeAssumptionSet(); + * + * //Bauen... ParameterList parameterList = this.getParameterList(); + * if(parameterList!=null){ for(int i=0; + * i()); //fuege Offsets fuer Parameter hinzu, hoth: + * 06.04.2006 Class.isFirstLocalVarDecl=false; + * + * if(this.get_Block() != null) + * this.get_Block().addOffsetsToAssumption(paraAssum + * ,paraAssum.getIdentifier(),true); + * + * methodAssum.addParaAssumption(paraAssum); + * + * // F�r die V_i: CLocalVarTypeAssumption varAssum = new + * CLocalVarTypeAssumption(classmember.getName(), + * this.get_Method_Name(), this.getParameterCount(), + * this.getOverloadedID(),"1", para.get_Name(),para.getType(), + * para.getLineNumber(),para.getOffset(),new Menge()); + * localAssum.addElement(varAssum); + * //rememberLocals.addElement(varAssum); } } //...und + * hinzuf�gen: + * + * assumptions.add(localAssum);//Assumptions für lokale Variablen den + * Assumptions hinzufügen + * + * //Hier wird der Typ der als Assumption eingetragen wird in die + * Variable assumedType dieser Klasse geschrieben: if(this.assumedType + * == null) // Falls der Typ nicht schon gesetzt ist. Das ist der Fall, + * falls die Methode ein Konstruktor ist this.assumedType = + * methodAssum.getAssumedType(); + * + * return assumptions; + */ } - - + @Override - public void parserPostProcessing(SyntaxTreeNode parent){ - if(this.getType()==null)this.setType(TypePlaceholder.fresh(this)); - //Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung: - //Class parentClass = (Class)parent; - if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this); + public void parserPostProcessing(SyntaxTreeNode parent) { + if (this.getType() == null) + this.setType(TypePlaceholder.fresh(this)); + // Bei dem Elterntyp der Methode darf es sich nur um eine Klasse + // handeln, daher Cast ohne Prüfung: + // Class parentClass = (Class)parent; + if (this.returntype == null) + this.returntype = TypePlaceholder.fresh(this); super.parserPostProcessing(parent); /* - this.returntype.parserPostProcessing(this); - if(this.parameterlist != null){ - for(FormalParameter fp : this.parameterlist){ - fp.parserPostProcessing(this); - } - } - for(GenericTypeVar gtv : this.getGenericParameter()){ - gtv.parserPostProcessing(this); - } - */ + * this.returntype.parserPostProcessing(this); if(this.parameterlist != + * null){ for(FormalParameter fp : this.parameterlist){ + * fp.parserPostProcessing(this); } } for(GenericTypeVar gtv : + * this.getGenericParameter()){ gtv.parserPostProcessing(this); } + */ } - + @Override public Menge getChildren() { Menge ret = new Menge(); @@ -678,74 +687,82 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable ret.add(this.returntype); return ret; } - + @Override - public void setType(Type t){ + public void setType(Type t) { // Methode und Block teilen sich einen ReturnType: - //this.block.setType(t); + // this.block.setType(t); this.returntype = t; - this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern) + this.returntype.parent = this; // TODO: Dieser Hack sollte nicht + // nötig sein. (Parser ändern) } - + /** * Der Typ einer Methode ist ihr Returntype */ @Override - public Type getType(){ - //Methode und Block teilen sich einen ReturnType: + public Type getType() { + // Methode und Block teilen sich einen ReturnType: return this.returntype; } - - public static Method createEmptyMethod(String withSignature, Class parent){ + + public static Method createEmptyMethod(String withSignature, Class parent) { Method ret = new Method(0); DeclId DImethod = new DeclId(); DImethod.set_Name(withSignature); ret.set_DeclId(DImethod); Block tempBlock = new Block(); - //tempBlock.setType(new RefType(parent.getName(),0)); + // tempBlock.setType(new RefType(parent.getName(),0)); ret.set_Block(tempBlock); ret.parserPostProcessing(parent); return ret; } - + @Override - public boolean equals(Object obj){ - if(!(obj instanceof Method))return false; + public boolean equals(Object obj) { + if (!(obj instanceof Method)) + return false; Method equals = (Method) obj; - if((this.returntype!=null && equals.returntype==null))return false; - if((this.returntype==null && equals.returntype!=null))return false; - if(this.returntype!=null && equals.returntype!=null)if(!this.returntype.equals(equals.returntype))return false; - if(!this.parameterlist.equals(equals.parameterlist))return false; + if ((this.returntype != null && equals.returntype == null)) + return false; + if ((this.returntype == null && equals.returntype != null)) + return false; + if (this.returntype != null && equals.returntype != null) + if (!this.returntype.equals(equals.returntype)) + return false; + if (!this.parameterlist.equals(equals.parameterlist)) + return false; return super.equals(obj); } @Override public void genByteCode(ClassGen cg) { - //ConstantPoolGen _cp = cg.getConstantPool(); - //InstructionFactory _factory = new InstructionFactory(cg, _cp); - //InstructionList il = new InstructionList(); + ConstantPoolGen _cp = cg.getConstantPool(); + // InstructionFactory _factory = new InstructionFactory(cg, _cp); + InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); - //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln + // TODO: Hier return type und Argument-Typen dynamisch generieren. + // return type mittels method.getReturnType() ermitteln + + for (Statement statements : block.get_Statement()) { + statements.genByteCode(cg); + } + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, + org.apache.bcel.generic.Type.getReturnType(Method method.getType() + .get_Name()), org.apache.bcel.generic.Type.NO_ARGS, + new String[] {}, "", parentClass.name, il, _cp); + + // Über Statements iterieren um den Block abzurufen - //Über Constructor iterieren, um alle Methoden zu bekommen - for(Method methode : ){ - - //Über Statements iterieren um den Block abzurufen - for(Statement statements : block.get_Statement()){ - statements.genByteCode(cg); - } - } - - //GenByteCode Constructor - - method.setMaxStack(); - method.setMaxLocals(); - cg.addMethod(method.getMethod()); - // il.dispose(); + + // GenByteCode Constructor + + method.setMaxStack(); + method.setMaxLocals(); + cg.addMethod(method.getMethod()); + // il.dispose(); } - - } // ino.end From c9f1dd2449b7ef32630c3b650392acf478e9a7ef Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Tue, 16 Jun 2015 14:58:27 +0200 Subject: [PATCH 116/186] =?UTF-8?q?=C3=9Cberall=20genByteCode=20Methode=20?= =?UTF-8?q?deklarieren,=20sodass=20Fehler=20verschwinden.=20Korrektur=20Me?= =?UTF-8?q?thod.java=20und=20Constructor.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dhbwstuttgart/syntaxtree/Constructor.java | 15 +++++---- src/de/dhbwstuttgart/syntaxtree/Method.java | 32 ++++++------------- .../syntaxtree/statement/Assign.java | 15 +++++++-- .../syntaxtree/statement/Binary.java | 13 ++++++-- .../syntaxtree/statement/BoolLiteral.java | 14 ++++++-- .../syntaxtree/statement/CastExpr.java | 12 ++++++- .../syntaxtree/statement/CharLiteral.java | 10 ++++++ .../syntaxtree/statement/DoubleLiteral.java | 12 +++++-- .../syntaxtree/statement/EmptyStmt.java | 12 +++++-- .../syntaxtree/statement/FloatLiteral.java | 11 +++++-- .../syntaxtree/statement/ForStmt.java | 11 +++++-- .../syntaxtree/statement/IfStmt.java | 13 ++++++-- .../syntaxtree/statement/InstVar.java | 11 +++++-- .../syntaxtree/statement/InstanceOf.java | 11 +++++-- .../syntaxtree/statement/IntLiteral.java | 10 +++++- .../statement/LambdaExpression.java | 10 +++++- .../syntaxtree/statement/LocalOrFieldVar.java | 10 +++++- .../syntaxtree/statement/LocalVarDecl.java | 11 +++++-- .../syntaxtree/statement/LongLiteral.java | 12 +++++-- .../syntaxtree/statement/MethodCall.java | 10 +++++- .../syntaxtree/statement/NegativeExpr.java | 11 +++++-- .../syntaxtree/statement/NewArray.java | 11 +++++-- .../syntaxtree/statement/NewClass.java | 11 +++++-- .../syntaxtree/statement/NotExpr.java | 11 +++++-- .../syntaxtree/statement/Null.java | 11 +++++-- .../syntaxtree/statement/PositivExpr.java | 11 +++++-- .../syntaxtree/statement/PostDecExpr.java | 11 +++++-- .../syntaxtree/statement/PostIncExpr.java | 11 +++++-- .../syntaxtree/statement/PreDecExpr.java | 10 ++++-- .../syntaxtree/statement/PreIncExpr.java | 11 +++++-- .../syntaxtree/statement/Return.java | 10 +++++- .../syntaxtree/statement/StringLiteral.java | 11 +++++-- .../syntaxtree/statement/This.java | 10 +++++- .../syntaxtree/statement/WhileStmt.java | 11 +++++-- 34 files changed, 320 insertions(+), 86 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index b775ba2e..0635bdbd 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -55,16 +55,17 @@ public class Constructor extends Method { public void genByteCode(ClassGen cg) { ConstantPoolGen _cp = cg.getConstantPool(); //InstructionFactory _factory = new InstructionFactory(cg, _cp); - InstructionList il = new InstructionList(); + InstructionList il = new InstructionList(); //sollte nicht new sein sondern aus Block kommen Class parentClass = this.getParentClass(); - //TODO: Hier return type und Argument-Typen dynamisch generieren. return type mittels method.getReturnType() ermitteln - + //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); - MethodGen 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); - - - //il.dispose(); + methode.genByteCode(cg); //Aufrufen um Iteration über Block zu starten + } // super statement muss drin sein // stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index d0f954ba..796bb800 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -68,7 +68,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.attribute.returntype.23497.declaration private Type returntype; // ino.end - + protected MethodGen method; // ino.attribute.genericMethodParameters.23500.decldescription type=javadoc /** * HOTI 4.5.06 Dieser Vektor beinhaltet alle Generischen Typen und v.a. die @@ -737,31 +737,19 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void genByteCode(ClassGen cg) { - ConstantPoolGen _cp = cg.getConstantPool(); - // InstructionFactory _factory = new InstructionFactory(cg, _cp); - InstructionList il = new InstructionList(); - Class parentClass = this.getParentClass(); - // TODO: Hier return type und Argument-Typen dynamisch generieren. - // return type mittels method.getReturnType() ermitteln - + /*ConstantPoolGen _cp = cg.getConstantPool(); + * InstructionFactory _factory = new InstructionFactory(cg, _cp); + * InstructionList il = new InstructionList(); + * Class parentClass = this.getParentClass(); + */ + + //oben steht MethodGen method als Variable (Z. 71) + + // Über Statements iterieren um Block abzurufen for (Statement statements : block.get_Statement()) { statements.genByteCode(cg); } - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, - org.apache.bcel.generic.Type.getReturnType(Method method.getType() - .get_Name()), org.apache.bcel.generic.Type.NO_ARGS, - new String[] {}, "", parentClass.name, il, _cp); - - // Über Statements iterieren um den Block abzurufen - - - // GenByteCode Constructor - - method.setMaxStack(); - method.setMaxLocals(); - cg.addMethod(method.getMethod()); - // il.dispose(); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 03551933..2bfab538 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -166,5 +167,15 @@ public class Assign extends Expr return ret; } + + + + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index 2283b0da..c71fbe04 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -210,6 +211,14 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { ret.add(this.expr2); return ret; } + + + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index c2a7eb92..efcd682a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.BoolLiteral.8626.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -28,7 +30,15 @@ public class BoolLiteral extends Literal // ino.end // ino.class.BoolLiteral.25089.body { - // ino.attribute.Bool.25093.declaration + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + + + + // ino.attribute.Bool.25093.declaration private boolean Bool; // ino.end // ino.attribute.parserlog.25096.declaration diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java index d2b0fedd..71002127 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java @@ -4,8 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.CastExpr.8627.import import java.util.Hashtable; import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -117,6 +119,14 @@ public class CastExpr extends UnaryExpr return ret; } + + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index b0aa0568..594dc495 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -3,6 +3,9 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.CharLiteral.8628.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -107,5 +110,12 @@ public class CharLiteral extends Literal Menge paralist, Menge genericMethodParameters) { } + + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index ca888b97..cd2ac8a0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -3,11 +3,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -130,5 +130,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java index 67c80dc7..a6dc7bbc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java @@ -3,10 +3,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.EmptyStmt.8629.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -85,5 +86,12 @@ public class EmptyStmt extends Statement return new Menge(); } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index ed809fab..5ad61fa1 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -3,10 +3,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -126,5 +127,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java index cbbb7075..723295c3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java @@ -3,10 +3,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -115,4 +116,10 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { //throw new NotImplementedException(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 5e23f141..559dbcb4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -160,5 +161,13 @@ public class IfStmt extends Statement if(this.then_block!=null)ret.add(this.then_block); return ret; } + + + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java index a223621d..94e49231 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -214,5 +215,11 @@ public class InstVar extends Expr ret.add(this.expr); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java index e000fe24..fae17dbf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.InstanceOf.8633.import import java.util.Enumeration; import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -114,6 +115,12 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { ret.add(this.expr); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index e9632e9b..3c804482 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -128,5 +130,11 @@ public class IntLiteral extends Literal Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 133fe6d0..07d2a1a0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -1,8 +1,10 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -206,4 +208,10 @@ public class LambdaExpression extends Expr{ return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 23ada8aa..107c5a3c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -4,8 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.LocalOrFieldVar.8637.import import java.util.Enumeration; import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -133,5 +135,11 @@ public class LocalOrFieldVar extends Expr return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 14b7e3fe..464a692a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.LocalVarDecl.8638.import import java.util.Enumeration; import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -422,5 +423,11 @@ public class LocalVarDecl extends Statement implements TypeInsertable ResultSet resultSet) { return new TypeInsertPoint(this, this, resultSet.getTypeEqualTo(tph),resultSet); } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index cb9f4272..dcb14c4a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -3,11 +3,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.IntLiteral.8635.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Class; @@ -125,5 +125,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 8860f9b2..3815d88b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.MethodCall.8639.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Method; @@ -301,6 +303,12 @@ public class MethodCall extends Expr public void parserPostProcessing(SyntaxTreeNode parent) { super.parserPostProcessing(parent); } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java index 8e84ce7f..2562c862 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.NegativeExpr.8640.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -107,5 +108,11 @@ public class NegativeExpr extends UnaryExpr return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 3349dd04..6c60bc9c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -3,9 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.NewArray.8641.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -142,5 +143,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index 91c7d912..cb2c6935 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -5,9 +5,10 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -201,6 +202,12 @@ public class NewClass extends Expr } return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index a3cfbb67..d2d2397a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.NotExpr.8643.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -132,5 +133,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 325e6727..5cac43a3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -3,9 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Null.8644.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -89,5 +90,11 @@ public class Null extends Literal return new Menge(); } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java index ab5b1712..deb5ccfe 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java @@ -3,9 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.PositivExpr.8645.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -115,5 +116,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java index 3a006cd0..8996932f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PostDecExpr.8646.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -88,5 +89,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java index 1899fe91..ac16826f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PostIncExpr.8647.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -94,5 +95,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java index 1f7fd415..78f6647b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PreDecExpr.8648.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -86,6 +87,11 @@ public class PreDecExpr extends UnaryExpr ret.add(this.expr); return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java index 49df77d5..6b66c5af 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java @@ -4,10 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PreIncExpr.8649.import import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -89,5 +90,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 57ed3ac5..2246614a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Return.8651.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -126,5 +128,11 @@ public class Return extends Statement public Type getReturnType(){ return this.getType(); } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index f1c9b2ff..baabb853 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -3,9 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - - import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -107,6 +108,12 @@ public class StringLiteral extends Literal Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index cc13362f..dfb5f32a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -3,8 +3,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.This.8654.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -139,5 +141,11 @@ public class This extends Expr Menge ret = new Menge(); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 2de82c39..44d1eca3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -5,10 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; + +import org.apache.bcel.generic.ClassGen; + import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.logger.Logger; - import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -133,5 +134,11 @@ public class WhileStmt extends Statement ret.add(this.loop_block); return ret; } + + @Override + public void genByteCode(ClassGen _cg) { + // TODO Auto-generated method stub + + } } // ino.end From 1c2ac73dbda647f567e67ff07d1a2bc0dcf97fd8 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 16 Jun 2015 17:44:27 +0200 Subject: [PATCH 117/186] =?UTF-8?q?Standardkonstruktor=20enth=C3=A4lt=20nu?= =?UTF-8?q?n=20SuperCall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 7 ++++++- src/de/dhbwstuttgart/syntaxtree/Constructor.java | 7 +++---- src/de/dhbwstuttgart/syntaxtree/Method.java | 8 ++++++-- 3 files changed, 15 insertions(+), 7 deletions(-) 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); } From 2c4f7359358f52012d496489dc8445a91c1a3f46 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 16 Jun 2015 22:08:17 +0200 Subject: [PATCH 118/186] ConstraintType entfernt. Constructor erbt jetzt von Methode. Fehler in Constructor.pareserPostProcessing behoben --- .../dhbwstuttgart/syntaxtree/Constructor.java | 316 +----------------- .../syntaxtree/FieldDeclaration.java | 5 +- .../dhbwstuttgart/syntaxtree/SourceFile.java | 20 +- .../syntaxtree/operator/AddOp.java | 5 +- .../syntaxtree/operator/LogOp.java | 5 +- .../syntaxtree/operator/MulOp.java | 5 +- .../syntaxtree/operator/Operator.java | 3 +- .../syntaxtree/operator/RelOp.java | 5 +- .../syntaxtree/statement/Binary.java | 5 +- .../syntaxtree/statement/Block.java | 4 +- .../syntaxtree/statement/LocalVarDecl.java | 4 +- .../syntaxtree/statement/MethodCall.java | 5 +- .../type/BoundedGenericTypeVar.java | 5 +- .../syntaxtree/type/ExtendsWildcardType.java | 5 +- .../syntaxtree/type/GenericTypeVar.java | 3 +- .../syntaxtree/type/RefType.java | 5 +- .../syntaxtree/type/SuperWildcardType.java | 5 +- .../dhbwstuttgart/syntaxtree/type/Type.java | 5 +- .../syntaxtree/type/TypePlaceholder.java | 5 +- .../dhbwstuttgart/syntaxtree/type/Void.java | 5 +- .../syntaxtree/type/WildcardType.java | 7 +- .../typeinference/ConstraintPair.java | 9 - .../typeinference/OderConstraint.java | 13 +- .../typeinference/SingleConstraint.java | 9 +- .../typeinference/UndConstraint.java | 4 +- .../assumptions/TypeAssumptions.java | 31 +- .../typeinference/unify/FC_TTO.java | 4 +- .../typeinference/unify/Unify.java | 1 - 28 files changed, 82 insertions(+), 416 deletions(-) delete mode 100644 src/de/dhbwstuttgart/typeinference/ConstraintPair.java diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index e56619a7..cb5914ad 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -33,8 +33,6 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; import de.dhbwstuttgart.syntaxtree.type.Void; public class Constructor extends Method { - private Method methode; - /** * Parser kann nicht zwischen einem Konstruktor und einer Methode unterscheiden. * Diese Klasse beherbegt den als Methode geparsten Konstruktor und wandelt sein verhalten zu dem eines Konstruktors ab. @@ -62,9 +60,9 @@ public class Constructor extends Method { //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); + this.method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(this.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 + super.genByteCode(cg); //Aufrufen um Iteration �ber Block zu starten } // super statement muss drin sein @@ -76,6 +74,7 @@ public class Constructor extends Method { @Override public void parserPostProcessing(SyntaxTreeNode parent){ + super.parserPostProcessing(parent); if(this.parameterlist != null){ for(FormalParameter fp : this.parameterlist){ fp.parserPostProcessing(this); @@ -106,321 +105,12 @@ public class Constructor extends Method { this.methode.setType(this.methode.getParentClass().getType()); }*/ - @Override - public Menge getGenericParameter() { - return this.methode.getGenericParameter(); - } - - - @Override - public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, - ResultSet resultSet) { - return this.methode.createTypeInsertPoint(tph, resultSet); - } - - - @Override - public boolean isPublic() { - return this.methode.isPublic(); - } - - - @Override - public String getGenericVarDeclarationString(String genericVarDeclaration) { - return this.methode.getGenericVarDeclarationString(genericVarDeclaration); - } - - - @Override - public int getGenericVarDeclarationOffset() { - return this.methode.getGenericVarDeclarationOffset(); - } - - - @Override - public void setGenericParameter(GenericDeclarationList params) { - this.methode.setGenericParameter(params); - } - - - @Override - public GTVDeclarationContext getGTVDeclarationContext() { - return this; - } - - - @Override - public void addTypeInsertPoints(TypeInsertSet insertSet, ResultSet result) { - this.methode.addTypeInsertPoints(insertSet, result); - } - - - @Override - public boolean seesType(Type tA2) { - return this.methode.seesType(tA2); - } - @Override public JavaClassName getTypeName() { return this.getType().getName(); } - - @Override - public Block get_Block() { - - return this.methode.get_Block(); - } - - - - @Override - public void set_Block(Block blo) { - - this.methode.set_Block(blo); - } - - @Override - public void set_Modifiers(Modifiers modif) { - - this.methode.set_Modifiers(modif); - } - - @Override - public void set_ExceptionList(ExceptionList exlist) { - - this.methode.set_ExceptionList(exlist); - } - - @Override - public void setParameterList(ParameterList paralist) { - - this.methode.setParameterList(paralist); - } - - @Override - public ParameterList getParameterList() { - - return this.methode.getParameterList(); - } - - @Override - public int getParameterCount() { - - return this.methode.getParameterCount(); - } - - @Override - public ExceptionList get_ExceptionList() { - - return this.methode.get_ExceptionList(); - } - - @Override - public int getOverloadedID() { - - return this.methode.getOverloadedID(); - } - - @Override - public void setOverloadedID(int overloadedID) { - - this.methode.setOverloadedID(overloadedID); - } - - /*@Override - public String get_codegen_Param_Type(Menge paralist) { - - return this.methode.get_codegen_Param_Type(paralist); - }*/ - - @Override - public String get_Method_Name() { - - return this.methode.get_Method_Name(); - } - - @Override - public Menge get_Type_Paralist() { - - return this.methode.get_Type_Paralist(); - } - - /*@Override - public void codegen(ClassFile classfile, Menge paralist) - throws JVMCodeException { - - this.methode.codegen(classfile, paralist); - }*/ - - @Override - public int getLineNumber() { - - return this.methode.getLineNumber(); - } - - @Override - public void setLineNumber(int lineNumber) { - - this.methode.setLineNumber(lineNumber); - } - - @Override - public int getOffset() { - - return this.methode.getOffset(); - } - - @Override - public int getVariableLength() { - - return this.methode.getVariableLength(); - } - - @Override - public void setOffset(int Offset) { - - this.methode.setOffset(Offset); - } - - @Override - public int getTypeLineNumber() { - - return this.methode.getTypeLineNumber(); - } - - @Override - public String toString() { - - return this.methode.toString(); - } - - @Override - public void setAbstract(boolean b) { - - this.methode.setAbstract(b); - } - - @Override - public boolean isAbstract() { - - return this.methode.isAbstract(); - } - - @Override - public void wandleRefTypeAttributes2GenericAttributes(Menge paralist) { - - this.methode.wandleRefTypeAttributes2GenericAttributes(paralist); - } - - @Override - public void set_Method_Name(String string) { - this.methode.set_Method_Name(string); - } - - /*public ConstraintsSet TYPE(TypeAssumptions ass) { - ConstraintsSet ret = new ConstraintsSet(); - ret.add(this.methode.get_Block().TYPEStmt(ass)); - return ret; - }*/ - - @Override - public String getTypeInformation() { - - return this.methode.getTypeInformation(); - } - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - - return this.methode.printJavaCode(resultSet); - } - - /*@Override - public TypeAssumptions createTypeAssumptions(Class classmember) { - Class parentClass = this.getParentClass(); - TypeAssumptions ret = new TypeAssumptions(); - ret.addAssumption(new ConstructorAssumption(this, parentClass)); - return ret; - }*/ - - @Override - public SyntaxTreeNode getParent(){ - return this.methode.getParent(); - } - - /*@Override - public void parserPostProcessing(SyntaxTreeNode parent) { - - this.methode.parserPostProcessing(parent); - }*/ - - @Override - public Menge getChildren() { - - return this.methode.getChildren(); - } - - /*@Override - public void setType(Type t) { - throw new TypeinferenceException("Einem Konstruktor kann kein Typ zugewiesen werden", this); - //this.methode.setType(t); - }*/ - - @Override - public Type getType() { - return this.methode.getType(); - } - - - @Override - public boolean equals(Object obj) { - return this.methode.equals(obj); - } - - - @Override - public void set_DeclId(DeclId did) { - this.methode.set_DeclId(did); - } - - - @Override - public Menge get_Name() { - return this.methode.get_Name(); - } - - - @Override - public Menge getDeclIdMenge() { - return this.methode.getDeclIdMenge(); - } - - - @Override - public void setDeclIdMenge(Menge vDeclId) { - this.methode.setDeclIdMenge(vDeclId); - } - - - @Override - public String getIdentifier() { - return this.methode.getIdentifier(); - } - - - @Override - public String getDescription() { - return this.methode.getDescription(); - } - - - @Override - public Class getParentClass() { - return this.methode.getParentClass(); - } - } diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 8d321a04..99f00a94 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -10,7 +10,6 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.OderConstraint; @@ -130,8 +129,8 @@ public class FieldDeclaration extends Field{ */ //TypeCheck, falls es sich um einen RefType handelt: - ConstraintType thisType = this.getType().TYPE(localAssumptions, this); - this.setType(thisType.getType()); + Type thisType = this.getType().TYPE(localAssumptions, this); + this.setType(thisType); /* if(this.getType()!=null && (this.getType() instanceof RefType)){ Type replaceType = null; diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 8d9a0d4d..7dbc0864 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -267,12 +267,12 @@ public class SourceFile new RefType( superclassName.toString(), superclassParaOrg,-1) ); */ - Pair P = new Pair(baseClass.getType().TYPE(ass, baseClass).getType(), superclass.TYPE(ass, baseClass).getType()); + Pair P = new Pair(baseClass.getType().TYPE(ass, baseClass), superclass.TYPE(ass, baseClass)); //PL 04-12-29 freshe Variablen ANFANG RefType r1 = (RefType)P.getTA1Copy(); RefType r2 = (RefType)P.getTA2Copy(); - r1 = (RefType) r1.TYPE(ass, baseClass).getType(); - r2 = (RefType) r2.TYPE(ass, baseClass).getType(); + r1 = (RefType) r1.TYPE(ass, baseClass); + r2 = (RefType) r2.TYPE(ass, baseClass); // #JB# 05.04.2005 // ########################################################### Hashtable substHash = new Hashtable(); //fuer jedes Paar komplett neue Variablen @@ -310,12 +310,12 @@ public class SourceFile // 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen Menge ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen. - ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType()); - ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType()); - ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType()); - ignoreTypes.add(new RefType("String",null,-1).TYPE(globalAssumptions, parent).getType()); - ignoreTypes.add(new RefType("Integer",null,-1).TYPE(globalAssumptions, parent).getType()); - ignoreTypes.add(new RefType("Object",null,-1).TYPE(globalAssumptions, parent).getType()); + ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent)); + ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent)); + ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent)); + ignoreTypes.add(new RefType("String",null,-1).TYPE(globalAssumptions, parent)); + ignoreTypes.add(new RefType("Integer",null,-1).TYPE(globalAssumptions, parent)); + ignoreTypes.add(new RefType("Object",null,-1).TYPE(globalAssumptions, parent)); Menge basicAssumptionsClassMenge = new Menge<>(); //die Klassen aus den BasicAssumptions und den Importierten Klassen for(ClassAssumption cAss : ass.getClassAssumptions()){ @@ -324,7 +324,7 @@ public class SourceFile Pair p = new Pair(t1, t2); //System.out.println("FCPair: "+p); if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen. - Type superTypeFromAssumptions = ass.getTypeFor(t2, t2).getType(); //In den Assumptions den SuperTyp nachschlagen + Type superTypeFromAssumptions = ass.getTypeFor(t2, t2); //In den Assumptions den SuperTyp nachschlagen if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt. vFC.add(p); } diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java index f7bf8281..c9e95ee3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/AddOp.java @@ -13,7 +13,6 @@ import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.statement.Expr; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.SingleConstraint; @@ -52,8 +51,8 @@ public abstract class AddOp extends Operator } @Override - public HashMap getReturnTypes(TypeAssumptions ass) { - HashMap ret = new HashMap(); + public HashMap getReturnTypes(TypeAssumptions ass) { + HashMap ret = new HashMap(); ret.put(new RefType("java.lang.Integer",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Double",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Float",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java index a497feb4..afea3229 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/LogOp.java @@ -16,7 +16,6 @@ import de.dhbwstuttgart.syntaxtree.statement.Null; import de.dhbwstuttgart.syntaxtree.statement.Statement; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.SingleConstraint; @@ -54,8 +53,8 @@ public abstract class LogOp extends Operator } @Override - public HashMap getReturnTypes(TypeAssumptions ass) { - HashMap ret = new HashMap<>(); + public HashMap getReturnTypes(TypeAssumptions ass) { + HashMap ret = new HashMap<>(); ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Boolean",this,-1).TYPE(ass, this)); return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java index b25c8044..d031b647 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/MulOp.java @@ -12,7 +12,6 @@ import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.DebugException; @@ -41,8 +40,8 @@ public abstract class MulOp extends Operator } @Override - public HashMap getReturnTypes(TypeAssumptions ass) { - HashMap ret = new HashMap<>(); + public HashMap getReturnTypes(TypeAssumptions ass) { + HashMap ret = new HashMap<>(); ret.put(new RefType("java.lang.Integer",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Double",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Float",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java index dd1559ec..8639bb8f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/Operator.java @@ -16,7 +16,6 @@ import de.dhbwstuttgart.syntaxtree.statement.Expr; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Pair; @@ -85,7 +84,7 @@ public abstract class Operator extends SyntaxTreeNode * @param ass * @return */ - public abstract HashMap getReturnTypes(TypeAssumptions ass); + public abstract HashMap getReturnTypes(TypeAssumptions ass); @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java index 64a07c17..eb9178d7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java +++ b/src/de/dhbwstuttgart/syntaxtree/operator/RelOp.java @@ -13,7 +13,6 @@ import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.statement.Binary; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.DebugException; @@ -45,8 +44,8 @@ public abstract class RelOp extends Operator } @Override - public HashMap getReturnTypes(TypeAssumptions ass) { - HashMap ret = new HashMap<>(); + public HashMap getReturnTypes(TypeAssumptions ass) { + HashMap ret = new HashMap<>(); ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Integer",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Double",this,-1).TYPE(ass, this)); ret.put(new RefType("java.lang.Boolean",this,-1).TYPE(ass, this), new RefType("java.lang.Float",this,-1).TYPE(ass, this)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index c71fbe04..9e7d1acf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -25,7 +25,6 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.OderConstraint; @@ -179,8 +178,8 @@ public class Binary extends BinaryExpr */ if(this.getType()==null)this.set_Type(TypePlaceholder.fresh(this)); OderConstraint oderCons = new OderConstraint(); - HashMap rMap = this.op.getReturnTypes(assumptions); - for(ConstraintType rT : rMap.keySet()){ + HashMap rMap = this.op.getReturnTypes(assumptions); + for(Type rT : rMap.keySet()){ UndConstraint c = new UndConstraint(); c.addConstraint(this.getType().TYPE(assumptions, this),rT); c.addConstraint(this.expr1.getType().TYPE(assumptions, this), rMap.get(rT)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index 348e0724..ab311454 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -186,8 +186,8 @@ public class Block extends Statement } else { TypePlaceholder tph = TypePlaceholder.fresh(this); - ret.add(new SingleConstraint(this.getType().TYPE(assumptions, this), new ConstraintType(tph))); - ret.add(new SingleConstraint(stmt.getType().TYPE(assumptions, this), new ConstraintType(tph))); + ret.add(new SingleConstraint(this.getType().TYPE(assumptions, this), tph)); + ret.add(new SingleConstraint(stmt.getType().TYPE(assumptions, this), tph)); this.setType(tph); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 464a692a..494bffd5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -29,6 +29,7 @@ import de.dhbwstuttgart.typeinference.SingleConstraint; import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.assumptions.LocalVarAssumption; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; @@ -367,6 +368,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable this.setType(replaceType); } assumptions.addAssumption(new LocalVarAssumption(this, this.getType())); //Bevor der Typ auf Void gesetzt wird. + //if(this.getType() == null)throw new DebugException("Parser Post Processing nicht aufgerufen"); ret.add(new SingleConstraint(this.getType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this))); //assumptions.remove(null); // falls Variable mit diesem Namen bereits vorhanden. this.setReturnType(new Void(this,0)); //Return typ einer Variablendeklaration ist Void @@ -381,7 +383,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable } @Override - public void parserPostProcessing(SyntaxTreeNode parent) { + public void parserPostProcessing(SyntaxTreeNode parent) { super.parserPostProcessing(parent); if(this.getType()==null || this.getType() instanceof TypePlaceholder)this.setType(TypePlaceholder.fresh(this)); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 3815d88b..e1b03479 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -16,7 +16,6 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.Void; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.OderConstraint; @@ -254,8 +253,8 @@ public class MethodCall extends Expr //Ein Constraint für die Parameter der Methode... for(int i=0; i tempBounds = new Menge<>(); if(this.bounds != null){ for(ObjectType ev : this.bounds){ - ConstraintType extendsType = ev.TYPE(ass, this); + Type extendsType = ev.TYPE(ass, this); if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this); //TODO: ??? stimmt der Cast??? - tempBounds.add((ObjectType)extendsType.getType()); + tempBounds.add((ObjectType)extendsType); //ret.add(new SingleConstraint(ass.getTypeFor(this, this), extendsType )); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index a48046b0..f91d6179 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -4,7 +4,6 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; @@ -152,9 +151,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer, } @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { //Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten. - this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); + this.innerType = (ObjectType) this.innerType.TYPE(ass, parent); return super.TYPE(ass, parent); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java index 331c8831..f97dc6dd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/GenericTypeVar.java @@ -7,7 +7,6 @@ import java.util.HashMap; import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.Pair; @@ -211,7 +210,7 @@ public class GenericTypeVar extends ObjectType } @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden. return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index e4cb9869..a4ce2738 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -14,7 +14,6 @@ import de.dhbwstuttgart.myexception.SCException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; @@ -783,8 +782,8 @@ public class RefType extends ObjectType implements IMatchable } @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ - ConstraintType t = super.TYPE(ass,parent); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ + Type t = super.TYPE(ass,parent); //((RefType)t.getType()).set_ParaList(this.get_ParaList()); return t; } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 5c97ea97..50f2d7d5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -3,7 +3,6 @@ package de.dhbwstuttgart.syntaxtree.type; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; @@ -149,8 +148,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I } @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType(); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + this.innerType = (ObjectType) this.innerType.TYPE(ass, parent); return super.TYPE(ass, parent); } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index ccb0a626..7b577602 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -9,7 +9,6 @@ import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.misc.UsedId; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; @@ -280,8 +279,8 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset } */ //TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen. - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ - ConstraintType t = ass.getTypeFor(this, parent); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ + Type t = ass.getTypeFor(this, parent); if(t==null) throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); return t; diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 8ea21928..d93160b9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -11,7 +11,6 @@ import de.dhbwstuttgart.logger.*; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; @@ -44,8 +43,8 @@ public class TypePlaceholder extends ObjectType @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - return new ConstraintType(this); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + return this; } // ino.method.TypePlaceholder.26794.defdescription type=javadoc diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Void.java b/src/de/dhbwstuttgart/syntaxtree/type/Void.java index 77b3234f..773a5fe8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Void.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Void.java @@ -4,7 +4,6 @@ package de.dhbwstuttgart.syntaxtree.type; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; @@ -71,8 +70,8 @@ public class Void extends RefType // ino.end @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ - return new ConstraintType(this); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent){ + return this; } @Override diff --git a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java index a6e4566d..8fc40804 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/WildcardType.java @@ -3,7 +3,6 @@ package de.dhbwstuttgart.syntaxtree.type; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; @@ -83,9 +82,9 @@ public class WildcardType extends Type{ } @Override - public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { - this.innerType = (ObjectType) innerType.TYPE(ass, this).getType(); - return new ConstraintType(this); + public Type TYPE(TypeAssumptions ass, SyntaxTreeNode parent) { + this.innerType = (ObjectType) innerType.TYPE(ass, this); + return this; } public boolean equals(Object obj) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java b/src/de/dhbwstuttgart/typeinference/ConstraintPair.java deleted file mode 100644 index 220e5673..00000000 --- a/src/de/dhbwstuttgart/typeinference/ConstraintPair.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.dhbwstuttgart.typeinference; - -public class ConstraintPair extends Pair{ - - public ConstraintPair(ConstraintType t1, ConstraintType t2){ - super(t1.getType(), t2.getType()); - } - -} diff --git a/src/de/dhbwstuttgart/typeinference/OderConstraint.java b/src/de/dhbwstuttgart/typeinference/OderConstraint.java index 0c631095..686a3eb9 100755 --- a/src/de/dhbwstuttgart/typeinference/OderConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/OderConstraint.java @@ -18,13 +18,14 @@ public class OderConstraint extends OderMenge{ * Erstellt ein neues Oder Constraint und f�gt bereits ein Constraint hinzu. * @param p1 * @param p2 - */ - public OderConstraint(ConstraintType p1, ConstraintType p2){ + + public OderConstraint(Pair p1, Pair p2){ if(p1 == null || p2 == null)throw new NullPointerException(); - ConstraintPair constraintPair = new ConstraintPair(p1,p2); + Pair constraintPair = new Pair(p1,p2); oderConstraintPairs = new Menge(); this.addConstraint(constraintPair); } + */ public OderConstraint(){ oderConstraintPairs = new Menge(); @@ -48,15 +49,15 @@ public class OderConstraint extends OderMenge{ * @param p1 * @param p2 */ - public void addConstraint(ConstraintType p1, ConstraintType p2){ - addConstraint(new ConstraintPair(p1,p2)); + public void addConstraint(Type p1, Type p2){ + addConstraint(new Pair(p1,p2)); } /** * Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw. TypePlaceholder sind, so werden sie in einen RefType umgewandelt. * @param toAdd */ - public void addConstraint(ConstraintPair toAdd){ + public void addConstraint(Pair toAdd){ oderConstraintPairs.add(new SingleConstraint(toAdd)); } diff --git a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java index f405b9ee..b8714689 100755 --- a/src/de/dhbwstuttgart/typeinference/SingleConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/SingleConstraint.java @@ -25,9 +25,10 @@ public class SingleConstraint extends UndConstraint{ private Pair constraintPair; //entspricht θ condition θ' //private R condition; //entspricht der condition (R) - public SingleConstraint(ConstraintType p1, ConstraintType p2){ + public SingleConstraint(Type p1, Type p2){ //super(p1,p2); - ConstraintPair constraintPair = new ConstraintPair(p1,p2);//super.getConstraintPairs().firstElement(); + if(p1 == null || p2 == null)throw new NullPointerException(); + Pair constraintPair = new Pair(p1,p2);//super.getConstraintPairs().firstElement(); this.addConstraint(constraintPair); } @@ -38,7 +39,7 @@ public class SingleConstraint extends UndConstraint{ return ret; } - public SingleConstraint(ConstraintPair toAdd) { + public SingleConstraint(Pair toAdd) { this.addConstraint(toAdd); } @@ -53,7 +54,7 @@ public class SingleConstraint extends UndConstraint{ return ret; } - public void addConstraint(ConstraintPair toAdd){ + public void addConstraint(Pair toAdd){ if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich."); Type p1 = toAdd.TA1; diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index a204b426..a6deb253 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -30,8 +30,8 @@ public class UndConstraint extends UndMenge { return ret.firstElement(); } - public void addConstraint(ConstraintType type, ConstraintType rT) { - Pair p = new ConstraintPair(type, rT); + public void addConstraint(Type type, Type rT) { + Pair p = new Pair(type, rT); this.set.add(new EinzelElement(p)); } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 1f7043d2..2fea0a02 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -15,7 +15,6 @@ import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; -import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.FunNInterface; import de.dhbwstuttgart.typeinference.FunNMethod; @@ -284,7 +283,7 @@ public class TypeAssumptions { * @param t * @return null, falls der Typ nicht vorhanden ist. */ - public ConstraintType getTypeFor(Type t, SyntaxTreeNode inNode){ + public Type getTypeFor(Type t, SyntaxTreeNode inNode){ /* if(t instanceof WildcardType){ WildcardType wt = (WildcardType)t; @@ -315,12 +314,12 @@ public class TypeAssumptions { //Der RefType muss zusätzlich seine Parameter prüfen. Menge parameterList = new Menge<>(); if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){ - ConstraintType ct = param.TYPE(this, inNode); - parameterList.add(ct.getType()); + Type ct = param.TYPE(this, inNode); + parameterList.add(ct); } ret.set_ParaList(parameterList); - return new ConstraintType(ret); + return ret; } } //Auch die generischen Variablen durchsuchen: @@ -343,11 +342,11 @@ public class TypeAssumptions { if(sameContext){ TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); - return new ConstraintType(ass.getAssumedType()); + return ass.getAssumedType(); }else{ TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: - return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); + return ass.getAssumedType().getTypePlaceHolder(inNode); } } } @@ -357,17 +356,17 @@ public class TypeAssumptions { String name = t.getName().toString(); switch(name){ case "int": - return new ConstraintType(new RefType("java.lang.Integer",t.getParent(),t.getOffset())); + return new RefType("java.lang.Integer",t.getParent(),t.getOffset()); case "boolean": - return new ConstraintType(new RefType("java.lang.Boolean",t.getParent(),t.getOffset())); + return new RefType("java.lang.Boolean",t.getParent(),t.getOffset()); case "double": - return new ConstraintType(new RefType("java.lang.Double",t.getParent(),t.getOffset())); + return new RefType("java.lang.Double",t.getParent(),t.getOffset()); case "float": - return new ConstraintType(new RefType("java.lang.Float",t.getParent(),t.getOffset())); + return new RefType("java.lang.Float",t.getParent(),t.getOffset()); case "long": - return new ConstraintType(new RefType("java.lang.Long",t.getParent(),t.getOffset())); + return new RefType("java.lang.Long",t.getParent(),t.getOffset()); case "char": - return new ConstraintType(new RefType("java.lang.Character",t.getParent(),t.getOffset())); + return new RefType("java.lang.Character",t.getParent(),t.getOffset()); } throw new TypeinferenceException("Der Typ "+t.getName()+" ist nicht korrekt",inNode); @@ -410,9 +409,9 @@ public class TypeAssumptions { } public Type checkType(RefType type, SyntaxTreeNode parent) { - ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen - type.setName(t.getType().getName()); //Und diesen auf den Typ anwenden - return t.getType(); + Type t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen + type.setName(t.getName()); //Und diesen auf den Typ anwenden + return t; } /** diff --git a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java index 56cf9176..f27119a6 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java +++ b/src/de/dhbwstuttgart/typeinference/unify/FC_TTO.java @@ -74,8 +74,8 @@ public class FC_TTO public void generateFullyNamedTypes(TypeAssumptions ass) { for(Pair p : this.FC){ - p.TA1 = p.TA1.TYPE(ass, p.TA1.getParent()).getType();//ass.getTypeFor(p.TA1, p.TA1.getParent()).getType(); - p.TA2 = p.TA2.TYPE(ass, p.TA2.getParent()).getType();//ass.getTypeFor(p.TA2, p.TA2.getParent()).getType(); + p.TA1 = p.TA1.TYPE(ass, p.TA1.getParent());//ass.getTypeFor(p.TA1, p.TA1.getParent()).getType(); + p.TA2 = p.TA2.TYPE(ass, p.TA2.getParent());//ass.getTypeFor(p.TA2, p.TA2.getParent()).getType(); } } } diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 6569360f..8e54398a 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -33,7 +33,6 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; -import de.dhbwstuttgart.typeinference.ConstraintPair; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Pair; From bfac3c81454cc5ab94f66c582f4f7af8ed7cd21a Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 17 Jun 2015 11:08:50 +0200 Subject: [PATCH 119/186] =?UTF-8?q?Fehler=20in=20SuperCall=20beheben.=20St?= =?UTF-8?q?andardKonstruktor=20enth=C3=A4lt=20nun=20SuperCall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 4 ++-- src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 972adb7f..2e710e0e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -1250,8 +1250,8 @@ 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)); + 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/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index a66c2042..6abf8513 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -76,7 +76,9 @@ public class SuperCall extends ThisCall @Override public JavaCodeResult printJavaCode(ResultSet resultSet) { - return new JavaCodeResult("super("+this.getArgumentList().printJavaCode(resultSet)+")"); + String argList = ""; + if(this.getArgumentList() != null)argList = this.getArgumentList().printJavaCode(resultSet).getJavaCode(); + return new JavaCodeResult("super("+argList+")"); } } From 24671ceca4f39683099c3a270523c56d3a05ba4c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 17 Jun 2015 12:03:54 +0200 Subject: [PATCH 120/186] =?UTF-8?q?EmptyClass=20Test=20funktionsf=C3=A4hig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/Class.java | 5 ++- .../dhbwstuttgart/syntaxtree/Constructor.java | 21 +++++++--- .../syntaxtree/statement/Block.java | 16 +++----- .../syntaxtree/statement/MethodCall.java | 3 +- .../syntaxtree/statement/Statement.java | 2 +- .../syntaxtree/statement/SuperCall.java | 21 +++++++++- .../dhbwstuttgart/syntaxtree/type/Type.java | 2 + .../dhbwstuttgart/syntaxtree/type/Void.java | 5 +++ .../KomplexeMenge/KeineDoppeltenVerweise.java | 38 ++++++++++++++++++- .../{EmptyClass.java => EmptyClassTest.java} | 4 +- 10 files changed, 93 insertions(+), 24 deletions(-) rename test/bytecode/{EmptyClass.java => EmptyClassTest.java} (93%) diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 2e710e0e..d00cca51 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -721,7 +721,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I assumptions.add(globalAssumptions); ConstraintsSet oderConstraints = new ConstraintsSet(); - + for(Type gparam : this.get_ParaList()){ if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen } @@ -744,7 +744,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //ConstraintsSet oderConstraints = this.TYPE(this.getMethodList(), fieldInitializers, assumptions); - + this.superClass = this.superClass.TYPE(assumptions, this); + for(Field f:this.getFields()){ oderConstraints.add(f.TYPE(assumptions)); } diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index cb5914ad..566f4135 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -15,6 +15,7 @@ import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; import de.dhbwstuttgart.syntaxtree.statement.Block; +import de.dhbwstuttgart.syntaxtree.statement.SuperCall; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -39,6 +40,10 @@ public class Constructor extends Method { */ public Constructor(Method methode){ super(methode.get_Method_Name(), methode.getType(), methode.getParameterList(),methode.get_Block(), methode.getGenericDeclarationList(), methode.getOffset()); + //Sicherstellen, dass das erste Statement in der Methode ein SuperCall ist: + if(this.get_Block().get_Statement().size() <1 || ! (this.get_Block().get_Statement().firstElement() instanceof SuperCall)){ + this.get_Block().statements.add(0, new SuperCall(this.get_Block())); + } } @Override public TypeAssumptions createTypeAssumptions(Class classmember) { @@ -52,18 +57,22 @@ public class Constructor extends Method { @Override public void genByteCode(ClassGen cg) { ConstantPoolGen _cp = cg.getConstantPool(); - //InstructionFactory _factory = new InstructionFactory(cg, _cp); 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. - //TODO: Alles dynamisch gestalten //init darf nur drin stehen, wenn Konstruktor; - this.method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(this.getType().get_Name()), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); + this.method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); - super.genByteCode(cg); //Aufrufen um Iteration �ber Block zu starten - + //Iteration �ber Block starten + Block instructions = this.get_Block(); + InstructionList blockInstructions = instructions.genByteCode(cg); + + il.append(blockInstructions);//Die vom Block generierten Instructions an die InstructionList der Methode anfügen + + this.method.setMaxStack(); //Die Stack Größe automatisch berechnen lassen (erst nach dem alle Instructions angehängt wurden) + + cg.addMethod(this.method.getMethod()); } // super statement muss drin sein // stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index ab311454..fc744563 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -255,20 +255,16 @@ public class Block extends Statement } @Override - public void genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGen cg) { //ConstantPoolGen _cp = cg.getConstantPool(); - InstructionFactory _factory = new InstructionFactory(cg, _cp); InstructionList il = new InstructionList(); - //Frage: Wenn Block von Statements erbt, und Block selbst keinen BCEL Code besitzt, ist das hier dann nicht eine Sackgasse? - - //Instructionhandle dynamisch - InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); - il.append(_factory.createInvoke(this.getParentClass().superclassid.toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); - InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); + for(Statement stmt : this.get_Statement()){ + il.append(stmt.genByteCode(cg)); + } + //il.dispose(); - il.dispose(); - + return il; } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index e1b03479..45f2716b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -5,6 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -304,7 +305,7 @@ public class MethodCall extends Expr } @Override - public void genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGen _cg) { // TODO Auto-generated method stub } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index 70d3e540..eb4431b2 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -129,7 +129,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse } - public abstract void genByteCode(ClassGen _cg); + public abstract InstructionList genByteCode(ClassGen _cg); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index 6abf8513..eea3f491 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -3,8 +3,14 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.This.8654.import import java.util.Hashtable; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.Constants; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -79,6 +85,19 @@ public class SuperCall extends ThisCall String argList = ""; if(this.getArgumentList() != null)argList = this.getArgumentList().printJavaCode(resultSet).getJavaCode(); return new JavaCodeResult("super("+argList+")"); + } + + @Override + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + Type superClass = this.getParentClass().getSuperClass(); + //Instructionhandle dynamisch + InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); + il.append(_factory.createInvoke(superClass.getName().toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); + + return il; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index 7b577602..20a9b07e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -304,5 +304,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return this; } + public abstract org.apache.bcel.generic.Type getBytecodeType(); + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Void.java b/src/de/dhbwstuttgart/syntaxtree/type/Void.java index 773a5fe8..42c63af3 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Void.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Void.java @@ -78,6 +78,11 @@ public class Void extends RefType public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method) { return this;//VOID ist immer korrekt, das wird vom Parser geprüft } + + @Override + public org.apache.bcel.generic.Type getBytecodeType() { + return org.apache.bcel.generic.Type.VOID; + } } // ino.end diff --git a/test/KomplexeMenge/KeineDoppeltenVerweise.java b/test/KomplexeMenge/KeineDoppeltenVerweise.java index d7c3f431..43eea37c 100644 --- a/test/KomplexeMenge/KeineDoppeltenVerweise.java +++ b/test/KomplexeMenge/KeineDoppeltenVerweise.java @@ -6,6 +6,8 @@ import java.util.Vector; import org.junit.Test; +import de.dhbwstuttgart.typeinference.EinzelElement; +import de.dhbwstuttgart.typeinference.KomplexeMenge; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.OderMenge; import de.dhbwstuttgart.typeinference.UndMenge; @@ -25,11 +27,45 @@ class TestKlasse { } } +class TestKlasseOderMenge extends OderMenge{ + Menge set = new Menge<>(); + + @Override + public Menge> getSet() { + return set; + } + + public void addItem(TestKlasse string) { + TestUndMenge toAdd = new TestKlasseUndMenge(); + toAdd.addItem(string); + set.add(toAdd); + } + public void addItems(TestKlasseUndMenge undMenge) { + set.add(undMenge); + } +} + +class TestKlasseUndMenge extends UndMenge{ + Menge> set = new Menge<>(); + + @Override + public Menge> getSet() { + return set; + } + public void addItem(TestKlasse string) { + set.add(new EinzelElement(string)); + } + + public void addItems(KomplexeMenge oderMenge) { + set.add(oderMenge); + } +} + public class KeineDoppeltenVerweise { @Test public void test() { - OderMenge oM1 = new OderMenge<>(); + OderMenge oM1 = new TestOderMenge(); OderMenge oM2 = new OderMenge<>(); UndMenge oM3 = new UndMenge<>(); oM1.addItem(new TestKlasse("Menge 1, Item 1")); diff --git a/test/bytecode/EmptyClass.java b/test/bytecode/EmptyClassTest.java similarity index 93% rename from test/bytecode/EmptyClass.java rename to test/bytecode/EmptyClassTest.java index 5ce92d79..20aa3349 100644 --- a/test/bytecode/EmptyClass.java +++ b/test/bytecode/EmptyClassTest.java @@ -20,11 +20,11 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; -public class EmptyClass { +public class EmptyClassTest { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; public final static String testFile = "EmptyClass.jav"; - public final static String outputFile = "EmptyClassTest.class"; + public final static String outputFile = "EmptyClass.class"; @Test public void test() { From c7a77c064607ac66706f2584379061c9dc761264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Thu, 18 Jun 2015 11:17:42 +0200 Subject: [PATCH 121/186] Weitere Testfaelle --- bin/log4j.xml | 70 +++++++++---------- bin/log4jTesting.xml | 48 ++++++------- .../dhbwstuttgart/syntaxtree/Constructor.java | 4 +- src/de/dhbwstuttgart/syntaxtree/Method.java | 26 ++++--- .../syntaxtree/statement/Return.java | 11 ++- .../syntaxtree/type/RefType.java | 4 ++ test/bytecode/EmptyClass.jav | 4 +- test/bytecode/MethodEmpty.jav | 7 ++ test/bytecode/MethodEmpty.java | 45 ++++++++++++ test/bytecode/MethodEmptyRetType.jav | 7 ++ test/bytecode/MethodEmptyRetType.java | 45 ++++++++++++ 11 files changed, 197 insertions(+), 74 deletions(-) create mode 100644 test/bytecode/MethodEmpty.jav create mode 100644 test/bytecode/MethodEmpty.java create mode 100644 test/bytecode/MethodEmptyRetType.jav create mode 100644 test/bytecode/MethodEmptyRetType.java diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 566f4135..e8f651b8 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -65,8 +65,8 @@ public class Constructor extends Method { this.method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); //Iteration �ber Block starten - Block instructions = this.get_Block(); - InstructionList blockInstructions = instructions.genByteCode(cg); + Block block = this.get_Block(); + InstructionList blockInstructions = block.genByteCode(cg); il.append(blockInstructions);//Die vom Block generierten Instructions an die InstructionList der Methode anfügen diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index dd27c698..c5547f23 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -741,19 +741,27 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable @Override public void genByteCode(ClassGen cg) { - /*ConstantPoolGen _cp = cg.getConstantPool(); - * InstructionFactory _factory = new InstructionFactory(cg, _cp); - * InstructionList il = new InstructionList(); - * Class parentClass = this.getParentClass(); - */ + ConstantPoolGen _cp = cg.getConstantPool(); + InstructionFactory _factory = new InstructionFactory(cg, _cp); + InstructionList il = new InstructionList(); + Class parentClass = this.getParentClass(); + + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, this.get_Method_Name(), parentClass.name, il, _cp); - //oben steht MethodGen method als Variable (Z. 71) + Block block = this.get_Block(); + InstructionList blockInstructions = block.genByteCode(cg); - // �ber Statements iterieren um Block abzurufen - for (Statement statements : block.get_Statement()) { - statements.genByteCode(cg); + il.append(blockInstructions);//Die vom Block generierten Instructions an die InstructionList der Methode anfügen + + if (block.get_Statement().size() == 0) { il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); } + else { + if (!(block.get_Statement().lastElement() instanceof Return)) { il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); } } + method.setMaxStack(); //Die Stack Größe automatisch berechnen lassen (erst nach dem alle Instructions angehängt wurden) + + cg.addMethod(method.getMethod()); + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 2246614a..0e513996 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -4,6 +4,9 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Return.8651.import import java.util.Hashtable; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; @@ -130,9 +133,13 @@ public class Return extends Statement } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); + //TO BE DONE + return il; } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index a4ce2738..c0875303 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -810,6 +810,10 @@ public class RefType extends ObjectType implements IMatchable param.parserPostProcessing(this); } } + + public org.apache.bcel.generic.Type getBytecodeType() { + return new org.apache.bcel.generic.ObjectType(this.getTypeName()); + } } // ino.end diff --git a/test/bytecode/EmptyClass.jav b/test/bytecode/EmptyClass.jav index 44dfecf2..381162fa 100644 --- a/test/bytecode/EmptyClass.jav +++ b/test/bytecode/EmptyClass.jav @@ -1,7 +1,7 @@ class EmptyClass{ -public EmptyClass(){} -public void leckMichAmArsch(){} + + } \ No newline at end of file diff --git a/test/bytecode/MethodEmpty.jav b/test/bytecode/MethodEmpty.jav new file mode 100644 index 00000000..e2c5d97a --- /dev/null +++ b/test/bytecode/MethodEmpty.jav @@ -0,0 +1,7 @@ +class MethodEmpty{ + + +void method() { } + + +} \ No newline at end of file diff --git a/test/bytecode/MethodEmpty.java b/test/bytecode/MethodEmpty.java new file mode 100644 index 00000000..dbeea0a5 --- /dev/null +++ b/test/bytecode/MethodEmpty.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class MethodEmpty { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "MethodEmpty.jav"; + public final static String outputFile = "MethodEmpty.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} diff --git a/test/bytecode/MethodEmptyRetType.jav b/test/bytecode/MethodEmptyRetType.jav new file mode 100644 index 00000000..84dbc709 --- /dev/null +++ b/test/bytecode/MethodEmptyRetType.jav @@ -0,0 +1,7 @@ +class MethodEmptyRetType{ + + +Object method() { return null; } + + +} \ No newline at end of file diff --git a/test/bytecode/MethodEmptyRetType.java b/test/bytecode/MethodEmptyRetType.java new file mode 100644 index 00000000..7eecbe0e --- /dev/null +++ b/test/bytecode/MethodEmptyRetType.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class MethodEmptyRetType { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "MethodEmptyRetType.jav"; + public final static String outputFile = "MethodEmptyRetType.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 6a5876d10bf8f5fd9a7ecbcb075de96519eabfd2 Mon Sep 17 00:00:00 2001 From: Pluemicke Martin Date: Thu, 18 Jun 2015 11:18:56 +0200 Subject: [PATCH 122/186] kleine Aenderungen --- bin/log4j.xml | 70 ++++++++++++++++++------------------ bin/log4jTesting.xml | 48 ++++++++++++------------- test/bytecode/EmptyClass.jav | 4 +-- 3 files changed, 61 insertions(+), 61 deletions(-) diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/bytecode/EmptyClass.jav b/test/bytecode/EmptyClass.jav index 44dfecf2..381162fa 100644 --- a/test/bytecode/EmptyClass.jav +++ b/test/bytecode/EmptyClass.jav @@ -1,7 +1,7 @@ class EmptyClass{ -public EmptyClass(){} -public void leckMichAmArsch(){} + + } \ No newline at end of file From 99c719251d9143ecf41b0ec45f74fa6b2f28e8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Thu, 18 Jun 2015 12:34:09 +0200 Subject: [PATCH 123/186] Null eingefuegt --- src/de/dhbwstuttgart/syntaxtree/statement/Expr.java | 7 ++++++- src/de/dhbwstuttgart/syntaxtree/statement/Null.java | 12 +++++++++--- .../dhbwstuttgart/syntaxtree/statement/Return.java | 4 +++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index e62b9c53..f625c9ed 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -4,8 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Expr.8630.import import java.util.Hashtable; import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.SCStatementException; import de.dhbwstuttgart.syntaxtree.Class; @@ -109,5 +112,7 @@ public abstract class Expr extends ExprStmt public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){ throw new NotImplementedException(); //wird die TYPEStmt-Methode innerhalb einer Expr aufgerufen, dann ist etwas schief gelaufen. } + + public abstract InstructionList genByteCode(ClassGen _cg); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 5cac43a3..f69eaa27 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -5,6 +5,8 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -91,10 +93,14 @@ public class Null extends Literal } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + il.append(_factory.ACONST_NULL); + + return il; } - + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 0e513996..7cef4cf9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -134,8 +134,10 @@ public class Return extends Statement @Override public InstructionList genByteCode(ClassGen cg) { + InstructionList il = retexpr.genByteCode(cg); + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - InstructionList il = new InstructionList(); + il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //TO BE DONE From d96b36c5d158f9d4f03cda725d8d0d7a8a8a2c9f Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 12:55:21 +0200 Subject: [PATCH 124/186] =?UTF-8?q?Assign.java=20genByteCode=20Methode=20a?= =?UTF-8?q?ngef=C3=BCgt=20(noch=20leer)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/statement/Assign.java | 6 +++++- src/de/dhbwstuttgart/syntaxtree/statement/Null.java | 1 + src/de/dhbwstuttgart/syntaxtree/statement/Return.java | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 2bfab538..b30832cb 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -7,6 +7,7 @@ import java.util.Hashtable; import java.util.Iterator; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -172,7 +173,10 @@ public class Assign extends Expr @Override - public void genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGen _cg) { + + + return null; // TODO Auto-generated method stub } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index f69eaa27..8eee26ed 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -98,6 +98,7 @@ public class Null extends Literal InstructionList il = new InstructionList(); il.append(_factory.ACONST_NULL); + return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 7cef4cf9..1fba9e32 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -138,8 +138,9 @@ public class Return extends Statement InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + //Stimmt das VOID hier eigentlich? il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); - //TO BE DONE + return il; } From 09a447cc4816f1c664053fef3173f880b3e82ca6 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 14:49:22 +0200 Subject: [PATCH 125/186] =?UTF-8?q?Versuch=20bcel=20f=C3=BCr=20StringLiter?= =?UTF-8?q?al?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/Return.java | 1 + .../syntaxtree/statement/StringLiteral.java | 12 ++++- test/bytecode/StringLitTest.jav | 7 +++ test/bytecode/StringLitTest.java | 45 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 test/bytecode/StringLitTest.jav create mode 100644 test/bytecode/StringLitTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 1fba9e32..a4b6dfbc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -142,6 +142,7 @@ public class Return extends Statement il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); + return il; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index f1a87e3b..a5dcec2b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -1,11 +1,14 @@ package de.dhbwstuttgart.syntaxtree.statement; import de.dhbwstuttgart.typeinference.Menge; + // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -103,9 +106,14 @@ public class StringLiteral extends Literal } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + public InstructionList genByteCode(ClassGen cg) { + InstructionList il = new InstructionList(); + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + + il.append(_factory.ASTORE_1.createNew(this.getString())); + + return il; } } diff --git a/test/bytecode/StringLitTest.jav b/test/bytecode/StringLitTest.jav new file mode 100644 index 00000000..6397f8c7 --- /dev/null +++ b/test/bytecode/StringLitTest.jav @@ -0,0 +1,7 @@ +class StringLitTest{ + + +Object method() { s = ""; } + + +} \ No newline at end of file diff --git a/test/bytecode/StringLitTest.java b/test/bytecode/StringLitTest.java new file mode 100644 index 00000000..6032c6a1 --- /dev/null +++ b/test/bytecode/StringLitTest.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class StringLitTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "StringLitTest.jav"; + public final static String outputFile = "StringLitTest.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 614607e803c189741eded2eb089f4f68e7b3060a Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 15:08:30 +0200 Subject: [PATCH 126/186] Weiterer bcel Versuch StringLiteral --- src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index a5dcec2b..48a3abe7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -111,7 +111,9 @@ public class StringLiteral extends Literal InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - il.append(_factory.ASTORE_1.createNew(this.getString())); + il.append(_factory.ASTORE_1); + il.append(_factory.createNew(string)); + return il; } From ad0e8643ec4ce546a58d14ef14b7d4d4878d4dcc Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 15:17:59 +0200 Subject: [PATCH 127/186] =?UTF-8?q?Update=20StringLiteral;=20Test=20l?= =?UTF-8?q?=C3=A4uft=20allerdings=20nicht=20durch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 48a3abe7..4fee0532 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -111,8 +111,7 @@ public class StringLiteral extends Literal InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - il.append(_factory.ASTORE_1); - il.append(_factory.createNew(string)); + il.append(_factory.ASTORE_1, _factory.createNew(string)); return il; From 5da4ed534d75df2c48230d9b5a4fa105478c528b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Mon, 22 Jun 2015 16:14:45 +0200 Subject: [PATCH 128/186] Erneuter Assign-Commit aufgrund von merge-Problemen --- .../dhbwstuttgart/syntaxtree/statement/Assign.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index b30832cb..b2f69b33 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -7,6 +7,7 @@ import java.util.Hashtable; import java.util.Iterator; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; @@ -173,12 +174,15 @@ public class Assign extends Expr @Override - public InstructionList genByteCode(ClassGen _cg) { - - - return null; + public InstructionList genByteCode(ClassGen cg) { // TODO Auto-generated method stub - + //Bytecode: bipush 20 + // istore_1 + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = this.expr2.genByteCode(cg);//expr2 rechte expr + il.append(_factory.createConstant(expr2.toString())); + il.append(_factory.ISTORE_1); + return il; } } From 8da8eb7d288c76c9066d02760d250afe392e5378 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 16:22:12 +0200 Subject: [PATCH 129/186] Neuer Versuch StringLiteral --- .../syntaxtree/statement/StringLiteral.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 4fee0532..96d0ef75 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -2,6 +2,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import de.dhbwstuttgart.typeinference.Menge; + // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; @@ -107,15 +108,15 @@ public class StringLiteral extends Literal @Override public InstructionList genByteCode(ClassGen cg) { - InstructionList il = new InstructionList(); - InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - + InstructionList il = new InstructionList(); + il.append(_factory.ASTORE_1, _factory.createNew(string)); - - + return il; } + + } // ino.end From 68aa4272209a6a7e86208bdd7d2fcfca7dca4d73 Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Mon, 22 Jun 2015 16:26:18 +0200 Subject: [PATCH 130/186] =?UTF-8?q?BCEL=20Test=20f=C3=BCr=20BoolLit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 24 ++++----- bin/log4j.xml | 70 +++++++++++++------------- bin/log4jTesting.xml | 48 +++++++++--------- bin/parser/BoundedParameter.jav | 6 +-- bin/parser/FieldInitializationTest.jav | 4 +- bin/parser/GenericFieldVarTest.jav | 6 +-- bin/parser/ImportTest.jav | 6 +-- test/bytecode/BoolLit.jav | 7 +++ test/bytecode/BoolLitTest.java | 45 +++++++++++++++++ 9 files changed, 134 insertions(+), 82 deletions(-) create mode 100644 test/bytecode/BoolLit.jav create mode 100644 test/bytecode/BoolLitTest.java diff --git a/.classpath b/.classpath index 1a1e4004..8448ba69 100755 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/bin/log4j.xml b/bin/log4j.xml index 64e7c5db..f36fb342 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index dc30c245..ef849218 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/parser/BoundedParameter.jav b/bin/parser/BoundedParameter.jav index 6d7518a9..0cb21f77 100644 --- a/bin/parser/BoundedParameter.jav +++ b/bin/parser/BoundedParameter.jav @@ -1,3 +1,3 @@ -class Matrix{ -
    String op = "String"; -} +class Matrix{ + String op = "String"; +} diff --git a/bin/parser/FieldInitializationTest.jav b/bin/parser/FieldInitializationTest.jav index 302667b9..35b56df8 100644 --- a/bin/parser/FieldInitializationTest.jav +++ b/bin/parser/FieldInitializationTest.jav @@ -1,3 +1,3 @@ -class FieldInitializationTest{ - String var = "hallo"; +class FieldInitializationTest{ + String var = "hallo"; } \ No newline at end of file diff --git a/bin/parser/GenericFieldVarTest.jav b/bin/parser/GenericFieldVarTest.jav index a47b41eb..214c3f94 100644 --- a/bin/parser/GenericFieldVarTest.jav +++ b/bin/parser/GenericFieldVarTest.jav @@ -1,3 +1,3 @@ -class Test{ - A var; -} +class Test{ + A var; +} diff --git a/bin/parser/ImportTest.jav b/bin/parser/ImportTest.jav index 2de55cee..bec195d8 100644 --- a/bin/parser/ImportTest.jav +++ b/bin/parser/ImportTest.jav @@ -1,4 +1,4 @@ -import java.util.*; - -class ImportTest{ +import java.util.*; + +class ImportTest{ } \ No newline at end of file diff --git a/test/bytecode/BoolLit.jav b/test/bytecode/BoolLit.jav new file mode 100644 index 00000000..3e295c93 --- /dev/null +++ b/test/bytecode/BoolLit.jav @@ -0,0 +1,7 @@ +class BoolLit{ + + + + + +} \ No newline at end of file diff --git a/test/bytecode/BoolLitTest.java b/test/bytecode/BoolLitTest.java new file mode 100644 index 00000000..ef7b0fc3 --- /dev/null +++ b/test/bytecode/BoolLitTest.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class BoolLitTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "BoolLit.jav"; + public final static String outputFile = "BoolLit.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 39580fc15e225c9e7fdf3580f5aaa137794b1b2f Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Mon, 22 Jun 2015 16:30:11 +0200 Subject: [PATCH 131/186] =?UTF-8?q?Testcode=20f=C3=BCr=20BoolLit=20geschri?= =?UTF-8?q?eben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/bytecode/BoolLit.jav | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bytecode/BoolLit.jav b/test/bytecode/BoolLit.jav index 3e295c93..52df43cc 100644 --- a/test/bytecode/BoolLit.jav +++ b/test/bytecode/BoolLit.jav @@ -1,6 +1,6 @@ class BoolLit{ - +Object method() { b = true; } From 1cd1aa7a50d14d1fcfcd335533d8fcee8dfb379b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Mon, 22 Jun 2015 16:40:30 +0200 Subject: [PATCH 132/186] =?UTF-8?q?=C3=84nderung=20an=20StringLitTest.jav?= =?UTF-8?q?=20->=20jetzt=20return=20void?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/log4j.xml | 70 +++++++++---------- bin/log4jTesting.xml | 48 ++++++------- bin/parser/BoundedParameter.jav | 6 +- bin/parser/FieldInitializationTest.jav | 4 +- bin/parser/GenericFieldVarTest.jav | 6 +- bin/parser/ImportTest.jav | 6 +- .../syntaxtree/statement/Assign.java | 4 +- test/bytecode/StringLitTest.jav | 2 +- 8 files changed, 73 insertions(+), 73 deletions(-) diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/parser/BoundedParameter.jav b/bin/parser/BoundedParameter.jav index 0cb21f77..6d7518a9 100644 --- a/bin/parser/BoundedParameter.jav +++ b/bin/parser/BoundedParameter.jav @@ -1,3 +1,3 @@ -class Matrix{ - String op = "String"; -} +class Matrix{ + String op = "String"; +} diff --git a/bin/parser/FieldInitializationTest.jav b/bin/parser/FieldInitializationTest.jav index 35b56df8..302667b9 100644 --- a/bin/parser/FieldInitializationTest.jav +++ b/bin/parser/FieldInitializationTest.jav @@ -1,3 +1,3 @@ -class FieldInitializationTest{ - String var = "hallo"; +class FieldInitializationTest{ + String var = "hallo"; } \ No newline at end of file diff --git a/bin/parser/GenericFieldVarTest.jav b/bin/parser/GenericFieldVarTest.jav index 214c3f94..a47b41eb 100644 --- a/bin/parser/GenericFieldVarTest.jav +++ b/bin/parser/GenericFieldVarTest.jav @@ -1,3 +1,3 @@ -class Test{ - A var; -} +class Test{ + A var; +} diff --git a/bin/parser/ImportTest.jav b/bin/parser/ImportTest.jav index bec195d8..2de55cee 100644 --- a/bin/parser/ImportTest.jav +++ b/bin/parser/ImportTest.jav @@ -1,4 +1,4 @@ -import java.util.*; - -class ImportTest{ +import java.util.*; + +class ImportTest{ } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index b2f69b33..a71592ed 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -179,8 +179,8 @@ public class Assign extends Expr //Bytecode: bipush 20 // istore_1 InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - InstructionList il = this.expr2.genByteCode(cg);//expr2 rechte expr - il.append(_factory.createConstant(expr2.toString())); + InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr + il.append(_factory.createConstant(expr2)); il.append(_factory.ISTORE_1); return il; } diff --git a/test/bytecode/StringLitTest.jav b/test/bytecode/StringLitTest.jav index 6397f8c7..d221e988 100644 --- a/test/bytecode/StringLitTest.jav +++ b/test/bytecode/StringLitTest.jav @@ -1,7 +1,7 @@ class StringLitTest{ -Object method() { s = ""; } +void method() { s = ""; } } \ No newline at end of file From d9a08820e8941e39c50cd0948bfdcdd371b42f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Mon, 22 Jun 2015 16:47:19 +0200 Subject: [PATCH 133/186] Idee zu Return createReturn --- src/de/dhbwstuttgart/syntaxtree/statement/Return.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index a4b6dfbc..ad3907e0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -138,7 +138,7 @@ public class Return extends Statement InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - //Stimmt das VOID hier eigentlich? + //Stimmt das VOID hier eigentlich? --> Wie wäre es mit getReturnType o.ä.? + evtl. von Type zu bcelType casten? il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); From cd8b85cc41739c2837ba0a1034f745e64bf731e6 Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Mon, 22 Jun 2015 16:51:13 +0200 Subject: [PATCH 134/186] Probleme beim Pull, Versuch zu Committen bevor pull --- bin/log4j.xml | 70 +++++++++---------- bin/log4jTesting.xml | 48 ++++++------- bin/parser/BoundedParameter.jav | 6 +- bin/parser/FieldInitializationTest.jav | 4 +- bin/parser/GenericFieldVarTest.jav | 6 +- bin/parser/ImportTest.jav | 6 +- .../assumptions/TypeAssumptions.java | 1 + 7 files changed, 71 insertions(+), 70 deletions(-) diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/parser/BoundedParameter.jav b/bin/parser/BoundedParameter.jav index 0cb21f77..6d7518a9 100644 --- a/bin/parser/BoundedParameter.jav +++ b/bin/parser/BoundedParameter.jav @@ -1,3 +1,3 @@ -class Matrix{ - String op = "String"; -} +class Matrix{ + String op = "String"; +} diff --git a/bin/parser/FieldInitializationTest.jav b/bin/parser/FieldInitializationTest.jav index 35b56df8..302667b9 100644 --- a/bin/parser/FieldInitializationTest.jav +++ b/bin/parser/FieldInitializationTest.jav @@ -1,3 +1,3 @@ -class FieldInitializationTest{ - String var = "hallo"; +class FieldInitializationTest{ + String var = "hallo"; } \ No newline at end of file diff --git a/bin/parser/GenericFieldVarTest.jav b/bin/parser/GenericFieldVarTest.jav index 214c3f94..a47b41eb 100644 --- a/bin/parser/GenericFieldVarTest.jav +++ b/bin/parser/GenericFieldVarTest.jav @@ -1,3 +1,3 @@ -class Test{ - A var; -} +class Test{ + A var; +} diff --git a/bin/parser/ImportTest.jav b/bin/parser/ImportTest.jav index bec195d8..2de55cee 100644 --- a/bin/parser/ImportTest.jav +++ b/bin/parser/ImportTest.jav @@ -1,4 +1,4 @@ -import java.util.*; - -class ImportTest{ +import java.util.*; + +class ImportTest{ } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 2fea0a02..5b342445 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -424,5 +424,6 @@ public class TypeAssumptions { return null; } */ + } From fe960b3fe0e44e28883d9d148b55310221e58430 Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Mon, 22 Jun 2015 16:55:11 +0200 Subject: [PATCH 135/186] =?UTF-8?q?Object=20in=20void=20ge=C3=A4ndert=20in?= =?UTF-8?q?=20BoolLit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/bytecode/BoolLit.jav | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bytecode/BoolLit.jav b/test/bytecode/BoolLit.jav index 52df43cc..e583f480 100644 --- a/test/bytecode/BoolLit.jav +++ b/test/bytecode/BoolLit.jav @@ -1,6 +1,6 @@ class BoolLit{ -Object method() { b = true; } +void method() { b = true; } From 93f4257cdc4fd17d53c7b2ad59e49a8888480008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Mon, 22 Jun 2015 23:53:29 +0200 Subject: [PATCH 136/186] =?UTF-8?q?Assign=20und=20LiteralInt=20enthalten?= =?UTF-8?q?=20eine=20funktionierende=20GenCode-Methode,=20Anpassungen=20f?= =?UTF-8?q?=C3=BCr=20mehrere=20Variablen=20evtl.=20n=C3=B6tig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/Assign.java | 3 +- .../syntaxtree/statement/IntLiteral.java | 11 +++-- .../syntaxtree/statement/LocalVarDecl.java | 5 ++- test/bytecode/Assign.jav | 7 +++ test/bytecode/Assign.java | 45 +++++++++++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 test/bytecode/Assign.jav create mode 100644 test/bytecode/Assign.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index a71592ed..fc209ed6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -180,8 +180,9 @@ public class Assign extends Expr // istore_1 InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - il.append(_factory.createConstant(expr2)); + //il.append(_factory.createConstant(expr2)); il.append(_factory.ISTORE_1); + return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index b56d253f..9c37c19a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -4,7 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; +import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -131,9 +134,11 @@ public class IntLiteral extends Literal } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + il.append(new BIPUSH(new Integer(get_Int()).byteValue())); + return il; } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index 494bffd5..eddc29cf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -6,6 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -427,9 +428,9 @@ public class LocalVarDecl extends Statement implements TypeInsertable } @Override - public void genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGen _cg) { // TODO Auto-generated method stub - + return new InstructionList(); } } // ino.end diff --git a/test/bytecode/Assign.jav b/test/bytecode/Assign.jav new file mode 100644 index 00000000..ba88c14c --- /dev/null +++ b/test/bytecode/Assign.jav @@ -0,0 +1,7 @@ +class Assign{ + + +void method() {i; i = 20;} + + +} \ No newline at end of file diff --git a/test/bytecode/Assign.java b/test/bytecode/Assign.java new file mode 100644 index 00000000..c027e25b --- /dev/null +++ b/test/bytecode/Assign.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class Assign { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "Assign.jav"; + public final static String outputFile = "Assign.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From acdc36d23fd53bd683c1868ead259d33b0b80854 Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Tue, 23 Jun 2015 00:23:14 +0200 Subject: [PATCH 137/186] BoolLiteral implementiert --- .../syntaxtree/statement/BoolLiteral.java | 280 +++++++++--------- test/bytecode/BoolLit.jav | 2 +- 2 files changed, 147 insertions(+), 135 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index f86d0e7e..fe740ae9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -1,134 +1,146 @@ -// ino.module.BoolLiteral.8626.package -package de.dhbwstuttgart.syntaxtree.statement; -// ino.end -// ino.module.BoolLiteral.8626.import -import java.util.Hashtable; - -import org.apache.bcel.generic.ClassGen; - -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.CTypeReconstructionException; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.RefType; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintsSet; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; -import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; - - - - -// ino.class.BoolLiteral.25089.declaration -public class BoolLiteral extends Literal -// ino.end -// ino.class.BoolLiteral.25089.body -{ - @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - - } - - - - // ino.attribute.Bool.25093.declaration - private boolean Bool; - // ino.end - // ino.attribute.parserlog.25096.declaration - protected static Logger parserlog = Logger.getLogger("parser"); - // ino.end - - - // ino.method.BoolLiteral.25099.definition - public BoolLiteral() - // ino.end - // ino.method.BoolLiteral.25099.body - { - super(-1,-1); - // #JB# 20.04.2005 - // ########################################################### - this.setType(new RefType("Boolean",this,this.getOffset())); - //this.setType(new Type("boolean")); - // ########################################################### - } - // ino.end - - - /* - // ino.method.sc_check.25102.definition - public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach,Hashtable parabh) - // ino.end - // ino.method.sc_check.25102.body - { - if(ext) - { - parserlog.debug(" ---BoolLiteral---"); - } - } - // ino.end - */ - - - // ino.method.set_Bool.25105.definition - public void set_Bool(boolean b) - // ino.end - // ino.method.set_Bool.25105.body - { - this.Bool = b; - } - // ino.end - - - - // ino.method.get_Name.25108.definition - public String get_Name() - // ino.end - // ino.method.get_Name.25108.body - { - return null; - } - // ino.end - - - - - - @Override - public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - this.type = assumptions.checkType(new RefType("java.lang.Boolean",this,-1), this); - return new ConstraintsSet(); - } - - @Override - public JavaCodeResult printJavaCode(ResultSet resultSet) { - if(Bool)return new JavaCodeResult("true"); - return new JavaCodeResult("false"); - } - - - - @Override - public Menge getChildren() { - Menge ret = new Menge(); - return ret; - } - - - - @Override - public void wandleRefTypeAttributes2GenericAttributes( - Menge paralist, - Menge genericMethodParameters) { - // TODO Auto-generated method stub - - } - - -} -// ino.end +// ino.module.BoolLiteral.8626.package +package de.dhbwstuttgart.syntaxtree.statement; +// ino.end +// ino.module.BoolLiteral.8626.import +import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.myexception.CTypeReconstructionException; +import de.dhbwstuttgart.myexception.JVMCodeException; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; + + + + +// ino.class.BoolLiteral.25089.declaration +public class BoolLiteral extends Literal +// ino.end +// ino.class.BoolLiteral.25089.body +{ + + + + + // ino.attribute.Bool.25093.declaration + private boolean Bool; + // ino.end + // ino.attribute.parserlog.25096.declaration + protected static Logger parserlog = Logger.getLogger("parser"); + // ino.end + + + // ino.method.BoolLiteral.25099.definition + public BoolLiteral() + // ino.end + // ino.method.BoolLiteral.25099.body + { + super(-1,-1); + // #JB# 20.04.2005 + // ########################################################### + this.setType(new RefType("Boolean",this,this.getOffset())); + //this.setType(new Type("boolean")); + // ########################################################### + } + // ino.end + + + /* + // ino.method.sc_check.25102.definition + public void sc_check(Menge classname, Hashtable ch, Hashtable bh, boolean ext, Hashtable parach,Hashtable parabh) + // ino.end + // ino.method.sc_check.25102.body + { + if(ext) + { + parserlog.debug(" ---BoolLiteral---"); + } + } + // ino.end + */ + + + // ino.method.set_Bool.25105.definition + public void set_Bool(boolean b) + // ino.end + // ino.method.set_Bool.25105.body + { + this.Bool = b; + } + // ino.end + + + + // ino.method.get_Name.25108.definition + public String get_Name() + // ino.end + // ino.method.get_Name.25108.body + { + return null; + } + // ino.end + + + + + + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + this.type = assumptions.checkType(new RefType("java.lang.Boolean",this,-1), this); + return new ConstraintsSet(); + } + + @Override + public JavaCodeResult printJavaCode(ResultSet resultSet) { + if(Bool)return new JavaCodeResult("true"); + return new JavaCodeResult("false"); + } + + + + @Override + public Menge getChildren() { + Menge ret = new Menge(); + return ret; + } + + + + @Override + public void wandleRefTypeAttributes2GenericAttributes( + Menge paralist, + Menge genericMethodParameters) { + // TODO Auto-generated method stub + + } + + @Override + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + + if (Bool == true){ + il.append(_factory.ICONST_1); + }else { + il.append(_factory.ICONST_0); + } + + + return il; + } + +} +// ino.end diff --git a/test/bytecode/BoolLit.jav b/test/bytecode/BoolLit.jav index e583f480..1fa4ac31 100644 --- a/test/bytecode/BoolLit.jav +++ b/test/bytecode/BoolLit.jav @@ -1,6 +1,6 @@ class BoolLit{ -void method() { b = true; } +void method() { b; b = false; } From c00e61eae66e3d78bc2235b41f3f7d452da342ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Tue, 23 Jun 2015 16:54:22 +0200 Subject: [PATCH 138/186] Verbesserung von Assign: sollte jetzt auch mehrere Variablen korrekt abspeichern - allerdings entsteht im class-File nur eine einzige. Problem in IntLiteral etc.? --- src/de/dhbwstuttgart/syntaxtree/statement/Assign.java | 10 ++++++---- test/bytecode/Assign.jav | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index fc209ed6..88243383 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -7,6 +7,7 @@ import java.util.Hashtable; import java.util.Iterator; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ISTORE; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; @@ -171,17 +172,18 @@ public class Assign extends Expr - + int counter = 0; //Zaehlvariable für ISTORE @Override public InstructionList genByteCode(ClassGen cg) { // TODO Auto-generated method stub //Bytecode: bipush 20 // istore_1 - InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + //InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - //il.append(_factory.createConstant(expr2)); - il.append(_factory.ISTORE_1); + //il.append(_factory.ISTORE_1); + counter++; + il.append(new ISTORE(counter)); //nimmt das auch die Variable und nicht den Zaehler? return il; } diff --git a/test/bytecode/Assign.jav b/test/bytecode/Assign.jav index ba88c14c..8f32ab9c 100644 --- a/test/bytecode/Assign.jav +++ b/test/bytecode/Assign.jav @@ -1,7 +1,7 @@ class Assign{ -void method() {i; i = 20;} +void method() {i; i = 20; j; j=50;k; k=50;l; l =70;}//m; m=120; n; n=60; } \ No newline at end of file From d028f7f14a130f31237e269a7dc7a509a547f43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Tue, 23 Jun 2015 20:01:06 +0200 Subject: [PATCH 139/186] =?UTF-8?q?GenCode:=20Assign=20ist=20jetzt=20dynam?= =?UTF-8?q?isch=20f=C3=BCr=20mehrere=20Variablen=20-=20Anpassung=20f=C3=BC?= =?UTF-8?q?r=20verschiedene=20Typen=20potentiell=20n=C3=B6tig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/statement/Assign.java | 11 ++++------- test/bytecode/Assign.jav | 3 +-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 88243383..efb9147c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -172,19 +172,16 @@ public class Assign extends Expr - int counter = 0; //Zaehlvariable für ISTORE + public static int counter = 0; //Zaehlvariable für ISTORE @Override public InstructionList genByteCode(ClassGen cg) { // TODO Auto-generated method stub - //Bytecode: bipush 20 - // istore_1 - //InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - //il.append(_factory.ISTORE_1); counter++; - il.append(new ISTORE(counter)); //nimmt das auch die Variable und nicht den Zaehler? - + il.append(new ISTORE(counter)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) + //Anpassung für Variablen außerhalb von int = ISTORE nötig? return il; } diff --git a/test/bytecode/Assign.jav b/test/bytecode/Assign.jav index 8f32ab9c..b238192f 100644 --- a/test/bytecode/Assign.jav +++ b/test/bytecode/Assign.jav @@ -1,7 +1,6 @@ class Assign{ - -void method() {i; i = 20; j; j=50;k; k=50;l; l =70;}//m; m=120; n; n=60; +void method() {a; a = 20;b; b=59;} } \ No newline at end of file From 8bc2867eb7f08ff6ba2b7eaa01c89c7bf6453270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Tue, 23 Jun 2015 20:28:36 +0200 Subject: [PATCH 140/186] =?UTF-8?q?GenCode=20f=C3=BCr=20CharLiteral,=20mom?= =?UTF-8?q?entan=20aufgrund=20einer=20Parser-NPE=20nicht=20lauff=C3=A4hig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/CharLiteral.java | 18 ++++++-- test/bytecode/CharLitTest.jav | 7 +++ test/bytecode/CharLitTest.java | 45 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 test/bytecode/CharLitTest.jav create mode 100644 test/bytecode/CharLitTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index a47853f2..33871d6f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -4,7 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.CharLiteral.8628.import import java.util.Hashtable; +import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -111,10 +114,19 @@ public class CharLiteral extends Literal } + //Char-Getter fuer genByteCode + public char get_Char() + // ino.end + // ino.method.get_Int.25463.body + { + return Char; + } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + il.append(new BIPUSH((byte) get_Char())); + return il; } } // ino.end diff --git a/test/bytecode/CharLitTest.jav b/test/bytecode/CharLitTest.jav new file mode 100644 index 00000000..1cf78415 --- /dev/null +++ b/test/bytecode/CharLitTest.jav @@ -0,0 +1,7 @@ +class CharLitTest{ + + +void method() { c; c = 'A'; } + + +} \ No newline at end of file diff --git a/test/bytecode/CharLitTest.java b/test/bytecode/CharLitTest.java new file mode 100644 index 00000000..add8b515 --- /dev/null +++ b/test/bytecode/CharLitTest.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class CharLitTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "CharLitTest.jav"; + public final static String outputFile = "CharLitTest.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From c7bed0fa0e757e53d1c59a820960d061b43d1af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 14:27:18 +0200 Subject: [PATCH 141/186] GenCode: PostIncrement umgesetzt, aufgrund von Problemen bei der TypInferenz aber nicht testbar. Vermutlich muss der Counter/Index der Variablen noch weiter angepasst werden. --- .../syntaxtree/statement/Assign.java | 6 +-- .../syntaxtree/statement/DoubleLiteral.java | 11 +++-- .../syntaxtree/statement/PostIncExpr.java | 17 +++++-- test/bytecode/PostIncrement.jav | 6 +++ test/bytecode/PostIncrement.java | 45 +++++++++++++++++++ 5 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 test/bytecode/PostIncrement.jav create mode 100644 test/bytecode/PostIncrement.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index efb9147c..ca837203 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -172,15 +172,15 @@ public class Assign extends Expr - public static int counter = 0; //Zaehlvariable für ISTORE + public static int counterAssign = 0; //Zaehlvariable für ISTORE @Override public InstructionList genByteCode(ClassGen cg) { // TODO Auto-generated method stub InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - counter++; - il.append(new ISTORE(counter)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) + counterAssign++; + il.append(new ISTORE(counterAssign)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) //Anpassung für Variablen außerhalb von int = ISTORE nötig? return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index 71bbad6c..5cd0aa5d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -4,7 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; +import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -129,9 +132,11 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + il.append(new BIPUSH(new Double(get_Double()).byteValue())); + return il; } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java index ac16826f..6659a526 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java @@ -5,7 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; +import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.IINC; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -95,10 +99,17 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } + public static int counterPostInc = 0; @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen cg) { + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + counterPostInc++; + il.append(new IINC(counterPostInc,1)); + //Tests aufgrund fehlener TypInferenz-Funktionalität nicht möglich + //Vermutlich muss der Counter noch angepasst werden, da nicht incrementierende Variablen nicht mitgezählt werden, und zu falschen aufrufen führen + //Gibt es einen Compiler-internen Variablenindex, der den Counter effektiver ersetzen könnte + return il; } } diff --git a/test/bytecode/PostIncrement.jav b/test/bytecode/PostIncrement.jav new file mode 100644 index 00000000..463546c4 --- /dev/null +++ b/test/bytecode/PostIncrement.jav @@ -0,0 +1,6 @@ +class PostIncrement{ + +void method() {a; a = 20; a++;} + + +} \ No newline at end of file diff --git a/test/bytecode/PostIncrement.java b/test/bytecode/PostIncrement.java new file mode 100644 index 00000000..e24ee34a --- /dev/null +++ b/test/bytecode/PostIncrement.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class PostIncrement { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "PostIncrement.jav"; + public final static String outputFile = "PostIncrement.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 6dd922a263bf8df56193fecbab6e81d8f77f5b1b Mon Sep 17 00:00:00 2001 From: "Fikus, Evelyn (WWI2012D)" Date: Thu, 25 Jun 2015 14:29:16 +0200 Subject: [PATCH 142/186] Testcode umgeschrieben --- src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java | 4 +++- test/bytecode/StringLitTest.jav | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 96d0ef75..25b1e782 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -110,7 +110,9 @@ public class StringLiteral extends Literal public InstructionList genByteCode(ClassGen cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); - + + + il.append(_factory.ASTORE_1, _factory.createNew(string)); return il; diff --git a/test/bytecode/StringLitTest.jav b/test/bytecode/StringLitTest.jav index d221e988..b8596750 100644 --- a/test/bytecode/StringLitTest.jav +++ b/test/bytecode/StringLitTest.jav @@ -1,7 +1,7 @@ class StringLitTest{ -void method() { s = ""; } +void method() { s; s = ""; } } \ No newline at end of file From b4d9cfbe0c801578f80f009c0f07d8747fc6bfc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 15:18:14 +0200 Subject: [PATCH 143/186] GenCode: Reupload Assign Type-Switch wegen Mergeproblemen --- .../dhbwstuttgart/syntaxtree/statement/Assign.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index ca837203..dda29d3f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -6,6 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; +import org.apache.bcel.generic.ASTORE; import org.apache.bcel.generic.ClassGen; import org.apache.bcel.generic.ISTORE; import org.apache.bcel.generic.InstructionFactory; @@ -171,7 +172,6 @@ public class Assign extends Expr } - public static int counterAssign = 0; //Zaehlvariable für ISTORE @Override @@ -180,8 +180,16 @@ public class Assign extends Expr InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr counterAssign++; - il.append(new ISTORE(counterAssign)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) + //il.append(new ISTORE(counterAssign)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) //Anpassung für Variablen außerhalb von int = ISTORE nötig? + switch(expr2.getType().toString()){//welche rückgabewerte entstehen hier??? Integer und String scheinen nicht zu stimmen + case "Integer": il.append(new ISTORE(counterAssign)); + break; + + case "String": il.append(new ASTORE(counterAssign)); + break; + } + //System.out.println(expr2.getType().toString()); return il; } From 5fbb4f0d619382d117acf17e4146c7768e187217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 15:19:30 +0200 Subject: [PATCH 144/186] GenCode: Reupload StringLiteral aufgrund von Merge-Problemen --- .../syntaxtree/statement/StringLiteral.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 25b1e782..6b270490 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -3,6 +3,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import de.dhbwstuttgart.typeinference.Menge; + // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; @@ -10,6 +11,7 @@ import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.LDC; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -106,18 +108,19 @@ public class StringLiteral extends Literal return "\""+this.string+"\""; } + public static int counterString = 0; @Override public InstructionList genByteCode(ClassGen cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); - - - - il.append(_factory.ASTORE_1, _factory.createNew(string)); - + counterString++; + //il.append(_factory.ASTORE_1, _factory.createNew(string)); + il.append(new LDC(counterString)); return il; + } + } From d50206a519876fa3365b4052a891ef5960429fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 15:35:13 +0200 Subject: [PATCH 145/186] =?UTF-8?q?GenCode:=20Assign=20kann=20nun=20zwisch?= =?UTF-8?q?en=20Int=20und=20String=20switchen.=20StringLit-Test=20ergab,?= =?UTF-8?q?=20dass=20es=20-=20wie=20bef=C3=BCrchtet=20-=20Probleme=20mit?= =?UTF-8?q?=20der=20korrekten=20Vergabe=20von=20Indizes=20gibt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/syntaxtree/statement/Assign.java | 10 ++++++---- test/bytecode/StringLitTest.jav | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index dda29d3f..47d68216 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -182,14 +182,16 @@ public class Assign extends Expr counterAssign++; //il.append(new ISTORE(counterAssign)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) //Anpassung für Variablen außerhalb von int = ISTORE nötig? - switch(expr2.getType().toString()){//welche rückgabewerte entstehen hier??? Integer und String scheinen nicht zu stimmen - case "Integer": il.append(new ISTORE(counterAssign)); + + String expr2Type = expr2.getType().get_Name().toString(); + switch(expr2Type){//welche rückgabewerte entstehen hier??? Integer und String scheinen nicht zu stimmen + case "java.lang.Integer": il.append(new ISTORE(counterAssign)); break; - case "String": il.append(new ASTORE(counterAssign)); + case "java.lang.String": il.append(new ASTORE(counterAssign)); break; } - //System.out.println(expr2.getType().toString()); + return il; } diff --git a/test/bytecode/StringLitTest.jav b/test/bytecode/StringLitTest.jav index b8596750..d86c0e37 100644 --- a/test/bytecode/StringLitTest.jav +++ b/test/bytecode/StringLitTest.jav @@ -1,7 +1,7 @@ class StringLitTest{ -void method() { s; s = ""; } +void method() { s; s = "abcdefg"; } } \ No newline at end of file From cef7c777b2bb4bcfaaa984414cd56e858de2ca86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 15:49:22 +0200 Subject: [PATCH 146/186] GenCode: StringLit erfolgreich getestet - Strings werden in dynamisch in den Konstantenpool geschrieben und ausgelesen --- .../syntaxtree/statement/StringLiteral.java | 21 +++++++++++++++---- test/bytecode/StringLitTest.jav | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index 6b270490..e398d088 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -4,11 +4,15 @@ import de.dhbwstuttgart.typeinference.Menge; + + // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; +import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.LDC; @@ -108,14 +112,23 @@ public class StringLiteral extends Literal return "\""+this.string+"\""; } - public static int counterString = 0; + + public String get_String() + // ino.end + // ino.method.get_Name.26246.body + { + return string; + } + //public static int counterString = 0; @Override public InstructionList genByteCode(ClassGen cg) { - InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + ConstantPoolGen cp = cg.getConstantPool(); + InstructionFactory _factory = new InstructionFactory(cg, cp); InstructionList il = new InstructionList(); - counterString++; + //counterString++; //il.append(_factory.ASTORE_1, _factory.createNew(string)); - il.append(new LDC(counterString)); + cp.addString(get_String()); + il.append(new LDC(cp.getSize()-1)); return il; } diff --git a/test/bytecode/StringLitTest.jav b/test/bytecode/StringLitTest.jav index d86c0e37..a063d123 100644 --- a/test/bytecode/StringLitTest.jav +++ b/test/bytecode/StringLitTest.jav @@ -1,7 +1,7 @@ class StringLitTest{ -void method() { s; s = "abcdefg"; } +void method() { s; s = "abcdefg"; t; t ="jfowehfowh"; } } \ No newline at end of file From ea2aa91761d0ce2dabdc99ec5f0c18b994d20f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 16:01:24 +0200 Subject: [PATCH 147/186] GenCode: DoubleLiteral implementiert. Aufgrund von Typinferenz-Problemen kann ein erfolgreicher Test-Run nicht konsisten repliziert werden. --- .../syntaxtree/statement/Assign.java | 16 +++++-- .../syntaxtree/statement/DoubleLiteral.java | 19 +++++++- test/bytecode/DoubleLiteral.jav | 6 +++ test/bytecode/DoubleLiteral.java | 45 +++++++++++++++++++ 4 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 test/bytecode/DoubleLiteral.jav create mode 100644 test/bytecode/DoubleLiteral.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 47d68216..a992d209 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -8,6 +8,7 @@ import java.util.Iterator; import org.apache.bcel.generic.ASTORE; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.DSTORE; import org.apache.bcel.generic.ISTORE; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; @@ -185,11 +186,18 @@ public class Assign extends Expr String expr2Type = expr2.getType().get_Name().toString(); switch(expr2Type){//welche rückgabewerte entstehen hier??? Integer und String scheinen nicht zu stimmen - case "java.lang.Integer": il.append(new ISTORE(counterAssign)); - break; + case "java.lang.Integer": + il.append(new ISTORE(counterAssign)); + break; - case "java.lang.String": il.append(new ASTORE(counterAssign)); - break; + case "java.lang.String": + il.append(new ASTORE(counterAssign)); + break; + + case "java.lang.Double": + il.append(new DSTORE(counterAssign)); + break; + } return il; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index 5cd0aa5d..3c8f8ee7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -6,8 +6,11 @@ import java.util.Hashtable; import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.LDC; +import org.apache.bcel.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -131,12 +134,26 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { return ret; } - @Override + //alter Double-Versuch vermutlich inkorrekt + /*@Override public InstructionList genByteCode(ClassGen cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); il.append(new BIPUSH(new Double(get_Double()).byteValue())); return il; + }*/ + + @Override + public InstructionList genByteCode(ClassGen cg) { + ConstantPoolGen cp = cg.getConstantPool(); + //InstructionFactory _factory = new InstructionFactory(cg, cp); + InstructionList il = new InstructionList(); + + cp.addDouble(get_Double()); + il.append(new LDC2_W(cp.getSize()-1)); + return il; + } + } // ino.end diff --git a/test/bytecode/DoubleLiteral.jav b/test/bytecode/DoubleLiteral.jav new file mode 100644 index 00000000..7813d262 --- /dev/null +++ b/test/bytecode/DoubleLiteral.jav @@ -0,0 +1,6 @@ +class DoubleLiteral{ + +void method() {a; a = 20.0d;} + + +} \ No newline at end of file diff --git a/test/bytecode/DoubleLiteral.java b/test/bytecode/DoubleLiteral.java new file mode 100644 index 00000000..e9470c5f --- /dev/null +++ b/test/bytecode/DoubleLiteral.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class DoubleLiteral { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "DoubleLiteral.jav"; + public final static String outputFile = "DoubleLiteral.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 5f6525db19e3d06bd36e438e68f7a4221c50d15f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 16:12:18 +0200 Subject: [PATCH 148/186] GenCode: FloatLit implementiert, aufgrund von Typeinferenz-Problemen nicht testbar. --- .../syntaxtree/statement/Assign.java | 11 +++-- .../syntaxtree/statement/FloatLiteral.java | 13 +++++- test/bytecode/FloatLiteral.jav | 6 +++ test/bytecode/FloatLiteral.java | 45 +++++++++++++++++++ 4 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 test/bytecode/FloatLiteral.jav create mode 100644 test/bytecode/FloatLiteral.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index a992d209..0ba2d11d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -9,6 +9,7 @@ import java.util.Iterator; import org.apache.bcel.generic.ASTORE; import org.apache.bcel.generic.ClassGen; import org.apache.bcel.generic.DSTORE; +import org.apache.bcel.generic.FSTORE; import org.apache.bcel.generic.ISTORE; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; @@ -180,12 +181,11 @@ public class Assign extends Expr // TODO Auto-generated method stub InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - counterAssign++; - //il.append(new ISTORE(counterAssign)); //macht ISTORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) - //Anpassung für Variablen außerhalb von int = ISTORE nötig? + counterAssign++; //macht STORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) + String expr2Type = expr2.getType().get_Name().toString(); - switch(expr2Type){//welche rückgabewerte entstehen hier??? Integer und String scheinen nicht zu stimmen + switch(expr2Type){ case "java.lang.Integer": il.append(new ISTORE(counterAssign)); break; @@ -198,6 +198,9 @@ public class Assign extends Expr il.append(new DSTORE(counterAssign)); break; + case "java.lang.Float": + il.append(new FSTORE(counterAssign)); + break; } return il; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index bcd087b7..bdfd0149 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -5,6 +5,10 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.LDC; +import org.apache.bcel.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -128,9 +132,14 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + public InstructionList genByteCode(ClassGen cg) { + ConstantPoolGen cp = cg.getConstantPool(); + InstructionList il = new InstructionList(); + cp.addFloat(get_Float()); + il.append(new LDC(cp.getSize()-1)); + return il; + } } // ino.end diff --git a/test/bytecode/FloatLiteral.jav b/test/bytecode/FloatLiteral.jav new file mode 100644 index 00000000..c0531da4 --- /dev/null +++ b/test/bytecode/FloatLiteral.jav @@ -0,0 +1,6 @@ +class FloatLiteral{ + +void method() {f; f = 20.0f;} + + +} \ No newline at end of file diff --git a/test/bytecode/FloatLiteral.java b/test/bytecode/FloatLiteral.java new file mode 100644 index 00000000..ba789535 --- /dev/null +++ b/test/bytecode/FloatLiteral.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class FloatLiteral { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "FloatLiteral.jav"; + public final static String outputFile = "FloatLiteral.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 03b05441311050ffe6364e3e67ac290efd6182da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Thu, 25 Jun 2015 16:20:51 +0200 Subject: [PATCH 149/186] GenCode: LongLit implementiert, aufgrund von Typinferenz-Problemen nicht testbar --- .../syntaxtree/statement/Assign.java | 5 +++ .../syntaxtree/statement/LongLiteral.java | 13 +++++- test/bytecode/LongLiteral.jav | 6 +++ test/bytecode/LongLiteral.java | 45 +++++++++++++++++++ 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 test/bytecode/LongLiteral.jav create mode 100644 test/bytecode/LongLiteral.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 0ba2d11d..2b38bc8b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -13,6 +13,7 @@ import org.apache.bcel.generic.FSTORE; import org.apache.bcel.generic.ISTORE; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.LSTORE; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -201,6 +202,10 @@ public class Assign extends Expr case "java.lang.Float": il.append(new FSTORE(counterAssign)); break; + + case "java.lang.Long": + il.append(new LSTORE(counterAssign)); + break; } return il; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index 818f5b0e..e41d494f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -5,6 +5,9 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -125,9 +128,15 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + public InstructionList genByteCode(ClassGen cg) { + ConstantPoolGen cp = cg.getConstantPool(); + //InstructionFactory _factory = new InstructionFactory(cg, cp); + InstructionList il = new InstructionList(); + cp.addLong(get_Long()); + il.append(new LDC2_W(cp.getSize()-1)); + return il; + } } // ino.end diff --git a/test/bytecode/LongLiteral.jav b/test/bytecode/LongLiteral.jav new file mode 100644 index 00000000..70d57aa7 --- /dev/null +++ b/test/bytecode/LongLiteral.jav @@ -0,0 +1,6 @@ +class LongLiteral{ + +void method() {l; l = 20L;} + + +} \ No newline at end of file diff --git a/test/bytecode/LongLiteral.java b/test/bytecode/LongLiteral.java new file mode 100644 index 00000000..5e6ca9cb --- /dev/null +++ b/test/bytecode/LongLiteral.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class LongLiteral { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "LongLiteral.jav"; + public final static String outputFile = "LongLiteral.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From d2f50069d279ce86465c935c03aa81f88521e98b Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Thu, 25 Jun 2015 23:05:51 +0200 Subject: [PATCH 150/186] NewArray implementiert, scheitert daran, dass der Parser keine Array Initialisierung annimmt. --- .../syntaxtree/statement/NewArray.java | 315 +++++++++--------- test/bytecode/NewArray.jav | 10 + test/bytecode/NewArrayTest.java | 45 +++ 3 files changed, 217 insertions(+), 153 deletions(-) create mode 100644 test/bytecode/NewArray.jav create mode 100644 test/bytecode/NewArrayTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 6c60bc9c..1461c248 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -1,153 +1,162 @@ -// ino.module.NewArray.8641.package -package de.dhbwstuttgart.syntaxtree.statement; -// ino.end -// ino.module.NewArray.8641.import -import java.util.Hashtable; - -import org.apache.bcel.generic.ClassGen; - -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.CTypeReconstructionException; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintsSet; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; -import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; - - - - -// ino.class.NewArray.25787.declaration -public class NewArray extends Expr -// ino.end -// ino.class.NewArray.25787.body -{ - // ino.method.NewArray.25791.definition - public NewArray(int offset,int variableLength) - // ino.end - // ino.method.NewArray.25791.body - { - super(offset,variableLength); - } - // ino.end - // ino.attribute.type.25794.declaration - private Type type; - // ino.end - // ino.attribute.expr.25797.declaration - public Menge expr = new Menge(); - // ino.end - // ino.attribute.parserlog.25800.declaration - protected static Logger parserlog = Logger.getLogger("parser"); - // ino.end - - - // ino.method.getType.25803.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @return Returns the type. - */ - // ino.end - // ino.method.getType.25803.definition - public Type getType() - // ino.end - // ino.method.getType.25803.body - { - return type; - } - // ino.end - - // ino.method.setType.25806.defdescription type=javadoc - /** - * Author: J�rg B�uerle
    - * @param type The type to set. - */ - // ino.end - // ino.method.setType.25806.definition - public void setType(Type type) - // ino.end - // ino.method.setType.25806.body - { - this.type = type; - } - // ino.end - - // ino.method.get_Name.25809.definition - public String get_Name() - // ino.end - // ino.method.get_Name.25809.body - { - return null; - } - // ino.end - - /* - // ino.method.sc_check.25812.definition - public void sc_check(Menge classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) - // ino.end - // ino.method.sc_check.25812.body - { - if(ext) - parserlog.debug(" ---NewArray---"); - } - // ino.end - */ - - // ino.method.get_codegen_Array_Type.25815.definition - public int get_codegen_Array_Type() - throws JVMCodeException - // ino.end - // ino.method.get_codegen_Array_Type.25815.body - { - if(this.getType().equals("boolean")) return 4; - else if(this.getType().equals("char")) return 5; - else if(this.getType().equals("float")) return 6; - else if(this.getType().equals("double")) return 7; - else if(this.getType().equals("byte")) return 8; - else if(this.getType().equals("short")) return 9; - else if(this.getType().equals("int")) return 10; - else if(this.getType().equals("long")) return 11; - else throw new JVMCodeException("JVMCodeException: NewArray: int get_codegen_Array_Type()"); - } - // ino.end - - // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition - public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) - // ino.end - // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.body - { - } - // ino.end - - @Override - public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - // TODO Auto-generated method stub - return null; - } - - @Override -public JavaCodeResult printJavaCode(ResultSet resultSet) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Menge getChildren() { - Menge ret = new Menge(); - ret.addAll(this.expr); - return ret; - } - - @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - - } - -} -// ino.end +// ino.module.NewArray.8641.package +package de.dhbwstuttgart.syntaxtree.statement; +// ino.end +// ino.module.NewArray.8641.import +import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.myexception.CTypeReconstructionException; +import de.dhbwstuttgart.myexception.JVMCodeException; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; + + + + +// ino.class.NewArray.25787.declaration +public class NewArray extends Expr +// ino.end +// ino.class.NewArray.25787.body +{ + // ino.method.NewArray.25791.definition + public NewArray(int offset,int variableLength) + // ino.end + // ino.method.NewArray.25791.body + { + super(offset,variableLength); + } + // ino.end + // ino.attribute.type.25794.declaration + private Type type; + // ino.end + // ino.attribute.expr.25797.declaration + public Menge expr = new Menge(); + // ino.end + // ino.attribute.parserlog.25800.declaration + protected static Logger parserlog = Logger.getLogger("parser"); + // ino.end + + + // ino.method.getType.25803.defdescription type=javadoc + /** + * Author: J�rg B�uerle
    + * @return Returns the type. + */ + // ino.end + // ino.method.getType.25803.definition + public Type getType() + // ino.end + // ino.method.getType.25803.body + { + return type; + } + // ino.end + + // ino.method.setType.25806.defdescription type=javadoc + /** + * Author: J�rg B�uerle
    + * @param type The type to set. + */ + // ino.end + // ino.method.setType.25806.definition + public void setType(Type type) + // ino.end + // ino.method.setType.25806.body + { + this.type = type; + } + // ino.end + + // ino.method.get_Name.25809.definition + public String get_Name() + // ino.end + // ino.method.get_Name.25809.body + { + return null; + } + // ino.end + + /* + // ino.method.sc_check.25812.definition + public void sc_check(Menge classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) + // ino.end + // ino.method.sc_check.25812.body + { + if(ext) + parserlog.debug(" ---NewArray---"); + } + // ino.end + */ + + // ino.method.get_codegen_Array_Type.25815.definition + public int get_codegen_Array_Type() + throws JVMCodeException + // ino.end + // ino.method.get_codegen_Array_Type.25815.body + { + if(this.getType().equals("boolean")) return 4; + else if(this.getType().equals("char")) return 5; + else if(this.getType().equals("float")) return 6; + else if(this.getType().equals("double")) return 7; + else if(this.getType().equals("byte")) return 8; + else if(this.getType().equals("short")) return 9; + else if(this.getType().equals("int")) return 10; + else if(this.getType().equals("long")) return 11; + else throw new JVMCodeException("JVMCodeException: NewArray: int get_codegen_Array_Type()"); + } + // ino.end + + // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) + // ino.end + // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.body + { + } + // ino.end + + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + // TODO Auto-generated method stub + return null; + } + + @Override +public JavaCodeResult printJavaCode(ResultSet resultSet) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Menge getChildren() { + Menge ret = new Menge(); + ret.addAll(this.expr); + return ret; + } + + @Override + public InstructionList genByteCode(ClassGen cg) { + + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + + il.append(expr.elementAt(0).genByteCode(cg)); + il.append(_factory.createNewArray(org.apache.bcel.generic.Type.getType(getTypeName()), (short)1)); + + + return il; + } + +} +// ino.end diff --git a/test/bytecode/NewArray.jav b/test/bytecode/NewArray.jav new file mode 100644 index 00000000..0b80f746 --- /dev/null +++ b/test/bytecode/NewArray.jav @@ -0,0 +1,10 @@ +class NewArray{ + +void method() { +zahl; +zahl = new Integer[2]; +} + + + +} \ No newline at end of file diff --git a/test/bytecode/NewArrayTest.java b/test/bytecode/NewArrayTest.java new file mode 100644 index 00000000..6a9c3853 --- /dev/null +++ b/test/bytecode/NewArrayTest.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class NewArrayTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "NewArray.jav"; + public final static String outputFile = "NewArray.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} From 442da87f48e6273de7728fc8a6ac18e6e3ce7b4d Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 26 Jun 2015 12:25:46 +0200 Subject: [PATCH 151/186] =?UTF-8?q?Debug-Code=20einf=C3=BCgen=20f=C3=BCr?= =?UTF-8?q?=20Karthesisches=20Produkt=20in=20Unify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typeinference/ConstraintsSet.java | 4 +++ .../typeinference/OderConstraint.java | 9 +++-- .../typeinference/UndConstraint.java | 7 ++++ .../typeinference/unify/Unify.java | 34 +++++++++++++------ test/unify/UnifyFilter.java | 4 +++ 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 032b8f56..5c8524a8 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -36,6 +36,10 @@ public class ConstraintsSet extends UndMenge implements Iterable{ */ } - public void addConstraint(UndConstraint methodConstraint) { - oderConstraintPairs.add(methodConstraint); + public void addConstraint(UndConstraint constraint) { + oderConstraintPairs.add(constraint); } + /** + * Filtert die Constraints in diesem ODER-Verknüpften Constraint aus, + * welche keinen Sinn ergeben, also beim unifizieren scheitern. + * @param unifier - Wird für die Unifizierung benutzt + */ void filterWrongConstraints(Unifier unifier) { Menge filteredConstraints = new Menge<>(); for(UndConstraint cons : this.getUndConstraints()){ diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index a6deb253..a30e4127 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -34,6 +34,13 @@ public class UndConstraint extends UndMenge { Pair p = new Pair(type, rT); this.set.add(new EinzelElement(p)); } + + @Override + public String toString() { + String ret = this.getConstraintPairs().toString(); + return ret; + } + /* public UndConstraint(ConstraintType p1, ConstraintType p2) { diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 8e54398a..240a127e 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -630,25 +630,30 @@ public class Unify } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - /* + ///* //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); - for (Menge> vecvecpair : cartProduktSets){ + UndConstraint eq1cons = new UndConstraint(); + for(Pair p : Eq1){ + eq1cons.addConstraint(p.TA1, p.TA2); + } + cSet.add(eq1cons); + for(Menge> vecvecpair : cartProduktSets){ OderConstraint orConstraints = new OderConstraint(); for(Menge pairs : vecvecpair){ UndConstraint uCons = new UndConstraint(); for(Pair p : pairs){ - uCons.addConstraint(new ConstraintPair(p)); + uCons.addConstraint(p.TA1, p.TA2); } orConstraints.addConstraint(uCons); } - cSet.addItems(orConstraints); + cSet.add(orConstraints); } SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); - if(filter){ + if(filter && false){ Unifier filterUnify = (pairs)->{ String pairsString = pairs.toString(); Menge> retValue = new Menge<>(); @@ -656,18 +661,19 @@ public class Unify //Unify.unify(pairs, fc_tto, (i)->{}); log.debug("Filtere Constraints:\n"+pairsString); log.debug("Ergebnis: "+ retValue); - return retValue;}; + return retValue; + }; log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet); cSet.filterWrongConstraints(filterUnify); } - Menge> bigCartProductErg = cSet.cartesianProduct(); - if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg); - */ + Menge> bigCartProductErg3 = cSet.cartesianProduct(); + if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg3); + //*/ - ///* + ///* Altes Karthesisches Produkt: Auskommentiert durch Andreas Stadelmeier //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet. Menge helpvp; Menge> bigCartProductErg = new Menge>(); @@ -689,6 +695,14 @@ public class Unify } //*/ + if(! bigCartProductErg.equals(bigCartProductErg3)){ + for(int i = 0; i> changedSets = new Menge>(); diff --git a/test/unify/UnifyFilter.java b/test/unify/UnifyFilter.java index 3897ca31..3c50bafe 100644 --- a/test/unify/UnifyFilter.java +++ b/test/unify/UnifyFilter.java @@ -8,6 +8,7 @@ import java.io.UnsupportedEncodingException; import org.junit.Test; +import plugindevelopment.TypeInsertTester; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; import de.dhbwstuttgart.logger.Logger; @@ -17,6 +18,8 @@ import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; public class UnifyFilter { public final static String rootDirectory = System.getProperty("user.dir")+"/test/unify/"; @@ -32,6 +35,7 @@ public class UnifyFilter { //Nichts weiter unternehmen. Nur die Ausgabe des Unifikationsalgorithmus anzeigen. String log = Logger.getWholeLog(); //System.out.println(log); + writeLogFile(log); } catch (Exception e){ e.printStackTrace(); From 59b574f0406fce99946e61cc3cfe4b355f1c0fe2 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 26 Jun 2015 19:42:25 +0200 Subject: [PATCH 152/186] Fehler in PostIncrement/UnaryExpression behoben --- src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java index 53903512..30bd4375 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/UnaryExpr.java @@ -37,6 +37,7 @@ public abstract class UnaryExpr extends Expr ret.add(new RefType("Integer",this,-1)); ret.add(new RefType("Long",this,-1)); ret.add(new RefType("Double",this,-1)); + ret.add(new RefType("Float",this,-1)); return ret ; } @@ -59,7 +60,9 @@ public abstract class UnaryExpr extends Expr @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { - return this.TYPEExpr(assumptions); + ConstraintsSet ret = this.TYPEExpr(assumptions); + this.setType(new de.dhbwstuttgart.syntaxtree.type.Void(this, -1).TYPE(assumptions, this)); + return ret; } From c3a8567e3f59060c6350ba27f9a42b37fa184130 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 8 Jul 2015 10:37:26 +0200 Subject: [PATCH 153/186] =?UTF-8?q?Filter=20in=20Unify=20zw.=20Schritt=204?= =?UTF-8?q?=20und=205=20einf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 2 +- bin/log4j.xml | 70 +++++++++--------- bin/log4jTesting.xml | 48 ++++++------ lib/guava-10.0.1.jar | Bin 0 -> 1501575 bytes src/de/dhbwstuttgart/typeinference/Menge.java | 3 +- .../typedeployment/TypeInsertSet.java | 38 ++++++++++ .../typeinference/unify/Unify.java | 63 +++++++++++++--- .../TypeInsertTests/GenericTypeVarTest2.java | 16 +++- .../TypeInsertTests/LambdaTest26.java | 7 ++ .../MultipleTypesInsertTester.java | 15 +++- .../TypeInsertTests/OverloadingInMethod2.java | 4 +- .../TypeInsertTests/ThisTest.java | 4 +- 12 files changed, 194 insertions(+), 76 deletions(-) create mode 100644 lib/guava-10.0.1.jar diff --git a/.classpath b/.classpath index 1a1e4004..cf0244b5 100755 --- a/.classpath +++ b/.classpath @@ -7,6 +7,6 @@ + - diff --git a/bin/log4j.xml b/bin/log4j.xml index f36fb342..64e7c5db 100755 --- a/bin/log4j.xml +++ b/bin/log4j.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml index ef849218..dc30c245 100755 --- a/bin/log4jTesting.xml +++ b/bin/log4jTesting.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/guava-10.0.1.jar b/lib/guava-10.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..d107c0f3b0cde13bd25eddae94beede969227b0d GIT binary patch literal 1501575 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 X*LI^kaQKCMPrm$Vj>=oGZ~9gHy9M>& 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

    |_9Mu1Ct4{W?M_}f83 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

    80p5fiwLaOj`fa6;-%*no0i=nY=Q;B zyO8V0@X+^mmDL3D7hwa-EqH_b508CRPpwFWS#r@XqG79iUql+8uvmz0_^vild3h@e z@}pGcMjx4WEzZ`l+~FnqV@}rGt^<{rexLB-Pk{%?YW9j==?5jdB-bv?qHP$~2Qt0u zDbw|@p_1*v^De`UVoy6hLQ5<+ZzWz5STAwqx0Ax{2kGbE=|AQzg!?VJ;1xF?U+qVO zEok?8Veq5)y!%4oOXuG(EDo19!2j6eaz@E(#|`k^@e*BD#d=Gu`(#xE{Ge^wDB)^&^_w=hbkN?D9yz9Hm%E`&O(o6`Ux}WvA{%!tp0mkD;_ z`z&W7EHH3mX(<HT+3^2y_KxkDh3m3t$9iMiwr$(CZ9C~CZ)|qdQOCABcE>h5wtcd6 z&YE-WeO>dcZ{r6%H%3+6Rnn`v{-t%k4|>wM!{(|&Rd55X2gRGT&UAmt*!#1zb$wVl z6om`^oVpJb2wbGrEP#!%KS)~Qb~O8O znsOByY{D!7`Nb~t5QwrHuHGm*t4KXKE1N=1Y$1+FfjG)FlvRJ~zcTB-uqzJJN>t<2 zP;=OGzp+-Vh$A4W0=W3ze!b%!1_83U#hRUkCnXn|&tI>6T60B(*%ewOG-wlbw1ebPETK zH01lz9a)dB2c3FfG?U25cPpH6_1rFlpSq72V|rWpxhBtMFxsD>VwX#Iu1NxgMM>iR zG^bKCR6EZIDg?E2v@F%;ccGnzJDYlYY};5B(aT})#+}5w@}1;HbGwvuCj1;qlLyL# z^4LGzbmru}E$HO=STJ8FDfihB#oP*H2SC=5ht^1dR|s{1g-fEc>ED?4J;m)rSOtOo zUWxGbc}?wGoa z7zr2HA6{cT0vM=~ z_6^y3|7Ar*kB)S*N>z9G{Ic=Vx9*->LWU`I@!Sf#DNs&n+#~TQNw&PyAYk}f-~gnA zAG$hdb)FBI4}4;o)v!6;51j5$C*J^Ccr)l7#n8~-O7w5BkUNBS2$e10*b)`MY|5ZK zwX>U6l|)iNpsHBc&u30N8X@tj9Ku&b*$N(P!Ez~S7ahp5Nx%%S|Bx7rMc85$AAN7j zj)Mr6hla>h#<%KS?ZH?Q=H%(oP#v+D`ucG4s#*wU6(Mc^X2vv|3ZZAw+co ztH6ikK3M6TQ~??8TtaCPo2=LAF%ZeEK-z9Dqf|Q~-|JFr1fg168Sx!U8Ho~>C-VD6 zJ(`_<(DzcXL#o)LC|Zz`O?XT4erqGHdvPZZr0g7UOU&M5YPb?p5Uw>mF3*`GtYSMZ zny!!oTe9iPBCBo*uM~bb0{jx?9_bms4YQ^=E*;Ng4UArxqz%)9?}XsK7~)9%{sKq? zPQOEh>XGEupyO7wwGnzjF!vn5Bfnc5#%1-y^tZ|tCJ(f3i|JbZ4zCWm?o&v0qp^2O z~7%Y7H5Gd@y}f!_;hlyl)|80+020h>AMKLZ3rJpL3=u zM&+E}+?|{$clSLe$ZCq`2#og+VGny;p6b4+%RA?S_~TPj7q)3DwfTLiwk_#1)*Iw~ zJ1|Tq@SmCa!v+?LfiKIQlCL2u`Y)ow|9$xvcKz~#{YN97U#b6|95ejsiRhL>0^vOy zQ6RSrS>12B@oh9TlxrKJR%|Qvf=8yk*_!wJ)+lCX#8X0P&AZZ&t7LE;ylFi}*W<(8 z`quN7>xF&b=ko(t58szH7viH>a%#TNsi>e!!H;w&!yz!flq)F-&`ddjcyhkPE44mW z$OEC4B#Rz?ekVTQ&TMx;p6z{4V`I~FrsWaLgPh=xw~liAi;HAVZ}hcTd>f@FNwTjWJC~E(UQPML3|h;IsVHr= zCiJyhysgHHQ@&+a8rT~uDkbL1ZCFUO7$cotdO4cbSnQ-#>Wokbh-fX73~tR%(^vN; z_s$?q4t?TOJWT}ni>Tndjr^*O1q34{T~x8GYJO3`Gs7+u+2qvyQCJ^G&RN-KgizBo ze8?*qf4b>NF^}UfSr06V#b#do!CuJ&k$5C_q-<5rMB?>hoh-BV{EFPfg zSUp3f{$kC3a_T=qt$!X!(q%5OY`9gu$rSAVUqQz37F@KmZ#XrlKmv`2w)OT@;?! zp@{{Ka7YDa6Gs@z@4fsJF`Uj(_cQ#w~c}_JA{zP{OcF{G~}>KmSVJjM)aiTk)OgqxJ)9={nDK%ZIg7C)HBGl zva;pnB<7kv7`lM9<>ikRZwm`cyWjqgC-6b&YHE6Y=``66ht*Zekn>l zaaxiV$KXw>R&&x5MWj7YZKE~@@(}?1afAAia=4mneIOHOj?F&hcE;C#)xA>Nw&XEt zrEa5^P?%~HkV60z>ur>G%-Jbtpd3}h-X$+l0GOK3ad@o#0qd{20*g)j*2PO4^rv_W%>mb`+N^6-^|&Hd@%_YJ&+@JZX^ZDosNJZ@5_#>q zTLe^fanb72o=n()U%t!b?-O@@E7oA?^1sUjoabo~G9n+SV6I|6meFbMW7*J{ z?6c$J$>_g+;7-dHp$*UF_&nY$!K!Qfl(0Rf?FsBTY&7B?Uedd7S$D9Tj-w^B;=~Tu zbNw<#*`m140kU|o#hB1V>cihYWfVVxvNpH&ecSOs@CZ(sKn~Qe3u|Hn5SJBP2smSc(J^?nvs@5^Ku@H7SF!Zt!u2clZOw zfe#`gptX*qviIVo}_ZcI0lL&9e1E* z0fAE;B8p;b z^k#bZCHneD989II8*A{Z%5A@JFp>YoDEyxykSYy*M^s5Pe$!!t20J-eVx?8!H;^|F zuHY-{rFkxJ5jjv2=LG?^Rjv^2_RS`bCFD1VB8}997o~g2Mn-8kl!G6H>i3fu77fju zX~eN9KUR1jb6qbcaprrT)-Ky2ZO;h|%DDy1?piuUOn8zBAR zpHU;Dlkw_dvT&7Ez2|B93YJ{NIK;;KAz4vu%v-)Quin*<`bBUik$(a7ETRIcwi#6- zb8J~WjMKH|IP=Fmj$C1x7QBeO?S)PA9?ZIySY?^G**i+|tWPc_O_NpX?)sGDJDDp) zKB;2UEsl83xz-&0*X)Jn4pxdAWlUrt^;THxWS}Ih^X@ zBjJ;|~g;aIdqfI{Gx#i_zvL8Q3avRQo-sRo0~n!zB2cKzWJ?%&gRLvv9+Z zaZ%oIwxO(br6pXg zRc(ammI---8F%0rQYf!;A%^3rO-Kh+kj$BcnB7SIk(2D1sT%00JfSHcP0*cWhOD>Y zaJH0#V|dqox}dPb!WvsU6g1I;i3D3i0Ul(Hj^=V(@BvbJ*0mgmjpT5DxXEMZr-4rU z!lglct^b?)wB}Dj!>Jq822=K@?-U4uJb7(o^VD45$sr8Cp8cfLNZ)JB_XaM?{Niom zH0;Ssi*}3U9FMg|yzaW$Vt+K*z(?_rmO-KEDyr59S=bxUZDdhv!4~AykCJMtG6FXc z_bw#KLfELu39S-I%>HA!OYG=&b{5e438YzOal~D!E_>$}!C*E7WkHD=eZWuQ;t%K{ zYrhnUEmguofgj_JA@9dNj+>R^|1RJ!8{qEUV4v@MSrCz#BM;3V}wGo(66WM%(Zw^MkVUo_m2IU%nJzj`>Fq`H?BKLGc(7){&wbDfa24)lv3_`ct6)9(%81)*%Q9b)Ps{i|;dHs- zI`!Orxz7J+_wjMqBKU2>m@?9M9kss$WmDD!n${9&&<4epDssUG1$Q~+DgY(qNr=mj z3P{gf8D*^B*BlDl@06^YS+3c-FfV87d%ysuYc56qLt;(?zN6rTo*?9P7>UsaXu-&2 zma4K)d1za#J?EX9=02Avz2vFDg+^=nN>-yV%+fTh;#!UdS0WN{U%;UBJR?k-6= z-j<|I?vcti-C&DX`+GhUfY}_|-d5qiWA}`Ny^r3%y_i(Zk(G^id8g!pHJ{A`S=E!U ze85vv#-VI@$x02J$-60u75y@BQ&y#`K_5%)14Z6{P2P>hTA#H6+O*KAI2TSW?S(}z zr6{xb9||tj)F>J?4%q{xf8A+qsNS~Q%->}3#*h9^u+GwHE{@jPc|{MTIVl`ZZH7+V zNfJ?&)SDqsYBko)ERAiDp==C|$2J+?7kX;QSrgydYhTT9dFw>WR&Dm$Sl^3opUivn zqzO+_!EijXN#(_i3f%y}+-qytIYh2PbN_hCg=0qfJH>=y!thrQ`*wFe&XY^xtq*2^ zp-DEl9Tr3^cOuGo@)(yto({=FncL%3XX@n^{bYn#qBcU}jq|Fs$xmOeW8>TarjDNP zk^izCdCEUHN!Mb${Khxaip@ISTp}WwIqH?gpmzOR|$ zn#Yoj*w&vSUz3LQq}PR{;p(;n)Di9i?8yw@pLJKKe}UZ?YLNkIk`-Y1>Y*v40tnwT zWr>Vq<}d>?1QwNF2>Z3O3!nM?yGgNv^2&VD!xpV*E2ffQxP%+G8pe>HH zM2L5jf+O#E?TG7n1V9gzxedX%lhk?+u4NTg^uI6aj#cCZy$+Ymz!Pj2khr2y1YesQGOtH+sztqSeqrnnI%8e zBm2%7aMa93RY#1s?OG(GWKR(>7s$D(d>qMAFQlr_B+SCs|M8`^Z>1&=7~XydBl|oP z`WQ@?>yxF}k)=3WHXy~_P)ipr;a&|f-P*x&e06hQiHQtaLZ7l-z4b}%T!nQ& zWK8-FdJYXisQlHI>f4U}vyb_@9sNMb6oWzwXodRl6@$)n@Ib^^;vv$D+|&+V6Z*N^ zZ9A8p6PyvXVI&oD2)rR3+eV@t+y_hBXLowex3x6Y2l=>O@Irgwv+*3RzuHrT2S1&% zF48TFL9uttnJCpBxs6DJ8oukbu#JUzXUP8Ve_Ul|!`faLzq(Wi!nbdd|BF>d_5Uo8 zXwtO*w_X+S)vJy@U`D=Gsl&?r@(xjI63JqV%GZ*CRX4DC-=09Jc0RS>Y*=AB|Gb7e z!mRZuUidM|RY>?I8F%QwF;1ba0-A#Tu*v_JeaP+jIPv%LGawLV8`gSeIA|)$cOm_x)5i(ucXzNZ@9wW^x4>De7zdmQ^c&5v zoiy7l^OkRJBew;~Crd8THYZEzZoco^4KhA=-7iw5$EOV6q&3y=Qoevw& ztHgn9iE7uWaaCb_xGFbS`@M+z6=S-#$5T_v(Z;-{nE}{4uj8v|+STUmuzap+T3=MC z7GmRkbso3$G*+#^D&MFbDIDyUISP(Yu|ORaxUHZ588&s`6t)H!6+4b>ud#4nC^h5s z_?e*2u!6>JCod?1gduosSy0gqIErw>ra)~3*E!VnuJ>A4Ka_2sWb#xwNxRM)v~Ab< zJ9&^_+==>aJGpXo9pzqtBloBqjt$3b(1~0qTd`wu9i@(-W|}pDIK0(L!?yg_YVn{G z_YNl)5Ai|8Fy4Wse&d&5yjNQ2=(y8s-6$hKl^*Zi?9#&4c48hEDO#R3Gp zFy%8nu;X1f4r023?w*k9H1X{MpO;MtbSH)}(3a>%j|f`vc&c^?@IJZlRONFR5bCl@ zYUUIAJ&M>5tbg%U#Yt<{P2&11LSDGFKM#3RoJ-by8VP_RCa@N zBdH}sj=PeU`NayAz#DA%^gX$An~bi#SGx58qNEiiJVuJ8^*kvhF7xdhW(apXu3ufD zlro|>1(r59FUuc&Oz%;7A2Bk1tX6Bh<1x>HL#q#Z?o1d7f$;swoyoP!SQxZP)+yAd zxApCj0&nHCt6vQm*929hjkp7%IET9>e?|R3o&*1}Cv6RKgUf#*jh$b8iS}RYN&lHK z6`LaKxGID+{5d{ulr1EkIV<@hB?U${I9<%oMuj3$h6b@Jiu5>W7fEU=86bAzS?Y5{ zY5l7kQGM!NN!_xy3i>;=u0g!z&~NXv<=>xgPcV5vOKLJ@rNllB9BaOm@#gOZQSd2h z^{MD*RLka4`c4%@c3b|1d3{KNDI_5tW@~-+I_tNg!%ki9LyWBiPsP7lp1qCto2C*< zvzm_ynf9Yu`DOHhT64#6K)Lb8!EvKyREO|Ky4ii5xZWxTPx)s&8q<$5X^`I9jjz9W z0jKO>ayOLlIC;)-6ktsY*f?kS+dA#M83x!6A>5cxlNL^iv9oX9?~|NF#uZh{zde5g zwowEP=-lI^(~CUY*I`2^y4Vu^T=Dwc>~3^^nwEREze1Tg>L;2O9zHX0`kf4wV!KEA zLdfmTqf$D-U-zZtXnh!(iFb?R^EJYcU(5MUV|-Ah$Y5jFU@L%aFu&W&-_sc}w$4C3;0E_CyCp-R zIJY+qCtybzd4Wds7ng7H;l=wbIU75V^iNcH3l7>>d6k%IKs{UelGLhbsDcpvr5_}1 zp!hy1zj#6+yRbk+_aN+OW=dpj6uWdXuY`dqDDK+W&z^45u`A=KD+kD(zaxhj$5xu6 zv$qK;_{k<;8S9_G0k+F`a7N$AmR$Q0W?0*~FJb>1#2A}deWe$4WLQQ=D`)%Ga7dyD zSe6zEwPZURfw1fdVJcrz;6M4VVwQywmVLcS*001Ov48PZ{tsyH-&|R(&0YUX0P`zF zS9MMZZTNGI1D+nlMEDBGS&;Ue1f8@B83c{ckq(AD~7kiYijXl;L%3vsjly_Hv~oCDxY;nFFdWtrfeu zQLlhi4o?6tngAmIPvgAC(UvxCMEhYqI~hx?q#YnWmN)tw;80^DQ?t%+)o%m2LHLK` zpN@RT=pdu$YT7sMaH!xnT{>-pKb1ZP3&<4owz;y&d(gCOSh#Dw2#PE2rozvFr6QZIn)~#u>jE&h{%E4G`S#%=Dv7jlHIEujm8#?R!~c zviqpigLKoNK}~6XmekfK!eeZBw8|hFWfF{MRFAuSV^g)4Dwt*r325H|Yt#_|IA^}P zn06SoUF#3H5F!Q27I00@W{`;wJTghy%2&^X6K9t^i)8JS{DILH29>#@J0IaEe?+L` z9Cq5$aTW5~(fA{g zba+dYKW>9JcJGCCOcbs9^tV&WqQ9WywuNbTn4Rcqv~rYKZp55V(%7`P`qn2ElQa2` z7l?ms&^T7k$;@BPS?Nnp`@g}z{+$Z?&rt6$6h~UJHX2|Q)~0f8aJiO! zl(Fm(JN6|@QD%EtOKSzIoTlULRO_NUyz1J_20HLAZl=C<&D{-~7qDlWcDimnqDCj{ zsUg34e1s3YKk7Ew+M^KEdf-5}#ijMXQD0-b2ih)c)M*$}dmBQQS!n@vO)`|BO7~9y zqv{>Ub!>G06>FPIIXGLK(k!Y?xa*a!!$?!XOvjrn5o>+b3(Z+Wl)2^W!~);rh^^Ag z;XA6D>^jU(aOl^X#gm6+*UmDlXZ}Lv92mbwUihIsP6{LX`jdSrSPfLLXioN|tE9G= z*&mhsYY@ib3_4PFP7plp!*5Wobzt_*l4CI)2O{DX%vdqrk3P(n7(bl%esX9hhm{XS?8y(eUD|MHWUW^$Sn1F$G6+^Ol!;{B%B#SyxwIL(gI8c(WdSBI za*#tTeUZP#lt+$6>}clPcXs$coX^ z0Cb#Kd3vq;lQ|XhGPGn4R4kspv&Q!jL$@3F>K`CiHzJm{z>0pU1dJ_x^D5roxfhbF zA^2S%kdP%=#NTSA7IKSPAlgv|mm~Kt0 zg2J&W%)|^RN>LCHqt!@D%W(p41cHsNO}1Kr!^tCuhfz4c%^; zoSh=6p!5we5~vMvLgy(+l7aSkzOs#$3WBz@K#L`ez_thy^(wt1kK#V}@yC3|7eHqX z)F`3+zK2MKPe6NNFy=;4x5R0+)0ILwEbZvm@hQ&vRpmVBuIY5o1OJxi>I!#E8` zeF{g04|zkvFa%Km@cHnSB1*rSofcx)IbcfAw7RE(*fmvut)qaf`@sHwzbb^rUpao4 zEUv71)Ty6;s~bb@Zd1$lh^T5awQ(B%2mkzPPPq?v^Nqs7T0r>5v^5S}`ps~8NV=$0 zymRWGHpWR$@EGndK%VkzHgo@rv-yjS{{Qr-|22?v)c$=Se>BGq0HtU_K{u6Xnh%mR z_6vv%keXIWbOwSc=W6F5=R&1bAOoZLp8rN8@`OBM`#(x@=hB0~orfg+_>;Tg`rPgM zaQ5+W`%W1I$d#N1B10%!iO5J!2g`wLGSd{Sz~jW zPmHt<_Q>IA12KNv`CP}utO1Oa8k+xXXv;qGT`=#|}i9&Y5YiUp4tH z-292^z8JiHdAT6T{ZWuHS8V^n3fPMzeWFaqD$=%0WfgNR{&QH7O5%xmUm(tV&i%zZ zlW(vO@+_x_AplInp(bAXY*$CAa#a=J!k|;mRGVP9vJjMd zMN~#fdeM=Vki>hVV>(CXUlP7_s+Qs$a7Sylo=@51_-%0F>kgvQjd+#sV#Cr@8wF<` zLl5^O@n-O_3!7d5euzq1ayeYId7cwYcGs$QV3Pfr);W}O3O|pf#*PN85_gq?*?d~z zbE`yCtW8%v(SGQxM^fm!oBZUji-=$}B)VGNF<9fm;LHeGxsLsfA3x@ktmaMA&7n?2~E&J@YCV3o~F+pl(e*b0mRi z?JM1`h|wn@4Icn1>o0snTGhuT`iW5=>;_{gtq}%*ICRSW3-{{rLS!Ixa!F*7NCLYd zWP`gye>XGGOl-fm95;Uh?*i>eBzs8|wnf;}p%TtH9mH81z7)^31KlZqgW2wO!W!q8 ze-A}6ZkYEbLyy{hcZ1p|kJSjgGDd9ER};q}k?4<*!SN|_!;f|Yi+1bTWr;;{HgQu% z6@FMCdNoe$y5ktRp`BMNL7T1CUO3R|Ddf0-)52g5*%jR{0|G zR~?|V-4f?zuX$^4n;>r0c|LrV{yC8CPMhw@`D<5B{K_lf{NL2$e{2P*YX7be3AoTW z=79x6+XY8AKH*4UQT79o1_YZ0A454s26WJJ?wKqlJ;Z^3M*i+$444KtnI9nBj%UeT zgJ(4&v`c=-&J{T1W_-;4s>eOdAXp80GbcsC3rpjCtAdoU;QBD)33w9%L^-+)C#(t5 z3-rxsQ()aWSik^&{Hy$-`<_s%O_;IJ`FLrqRY4z<)?Rp1bBS3rATr=J1ycr05zBeJpU7@A!HL+u5WYLOwlFCR7iCm>E+x z2XsxwN1@4;^1&c2FhNxE$)K9=R-`!$z`{)y{*` zD!h6*h39!E5Szh@^5ie@(npx=-9o4p{EHjrxYSfWAIl=zpQ5rPdf+#TXL_*%_x024lhv>r9@CPj zZZxLpQFbuL6ujTyFGBlcas12lRbH8A!K5CxcT~C;$s!4fyB!d+W3thtVqY}VMtDu> zH4&QT{V~@Pql0JFqOq-n4;-+X8P}j7rebD=_A2*%rr=Yu+e13eJWM+jRk6}Y&Jn}F zhJZdV*%Zxgy}az>{6+?49sRMacF1*-HT&|i=5*C}o#Ss!z~!PvE5Q z&myIm{P{QOA_pD$F%Gr78IcEcuyyXxo@F9P6!I@5z_NU7H-wo)%HM{n-I{Yz z{chbyMos!DV+k7oB#+5~JgNes3675$Jye0*@nQw8ixsBK2zJ#v|)Vz8FLw{TPoYaTn zeL2=Ye$AJ9b1#BNEDaj>k}^)bFGL|{zSuOmmhNVOQ#Z|#BNj|?gAJh_u4#Y9=FfwE zvagK-5}MrFT{M7@)wp+Z_-7T%z}O^%C011i$CeGd?fM3@4F=|;`w38;T~DOng&@qY*7P zr(cuisN?gTvf*aO!~XiSs!xI4u;_h^d?(!|_Y%il5c;uHs53nXrggu0&gIl^1Ffv> z;qgPZFZ!g}Vu^m3^?Zop@iAK;V%)1(NLWS~r5|?aO0O5LGc7?=sRtLv5xp|6Xq)3g zDH=#m7Q*r5jvcl0R0?MQv68M-Tn>?->VKa%XJZ+ng83%`LC{}v)V&odeRILU43O%`!x;VE!@vC7!f zB3hAQDhg(Cm-ZHcHiifu1et%>iIt8d2{JPmeFCgM4?GZsmv{)~H1) ziq-nNxjnL0_%?WC1KyS|*X$wJtUsP>8H)1+IQKK=3rtZ%?Rl_BJVcMDa}DWXzDFf# ztKtf%KlEPF&krEzGkAqpX2S8S)_^Qcro<}k_CKA6Lv657YkVzRF<)t$|0)pj->lF9#A>*YWD3uX;q=DYTbhxcFV8;g~ zBtt4c0+(9OM9;>tIAMtXSykma3ld)SW~W(VqcI8_-BWEHUFn0J(?2-)hIFqku?8wF z=O?_}6tteB2vM7rIzDNsZ*k8w0ma}iU)1ErQxD)8b0(`WeB)%dW^KERH|k4Os}{LynWs*5_6;ceo=d`+UZAvv&nVU&to?l;gDo`Oj< ztYM>UV^`DgU#w@$kyX{WAK#zJkd7wf-sFez1xl&l$ck2qdlJv2#@}zeDAca(IBCU( z2yMQ6Z~k7^2#~a>UB5sKJqpm+7K#fjTrIog?9Q@8Q_$f~Rkp?dnWm)(G=idg7my{9=6d97*qJ~jh=rOEieG2N zVjOPbpoGSWU{Bz|k;;X$I&R1@-sUJYh^_D{5Ld$1{$#G~5|~kwzyK(ks|U6zUipGj zmT?bm(75aCP5qVF658L)r%hk`zAW;Hkz!8<-aJEk1$jcNG{=kq+9pektd5^L|d zkb57N^M6Szoh9cMAX!%l%^K+%?5#0oOS)@>V3>hSkHFI;31{3@X*C#1RpJSC#yen; z92cJ0g~rF)y}&Z>vhtI7dL&s&E~0pQ`=`1c03GY|)-QWamv zgktmIiXwO;Pl+QB-I5qY2oGdNV45Z*97cow>_Y43;V3|J%7p5~6GyJOij_wuM>YpW zymnuZDMoVjBhglL95nBo(7UG#Gh`N9U;-AL*}{#>=4*9i=IS$n#nX-EKiIHWfwjMWE?{IvFQCfP zgBB+~3xA9wdB+dsebajitF9@{JyF59!qT(qqP2O|scq>qjj&3~z9ZlM=&hLY`>Ec( zGYi75Fm}UonlnaCROtv8kZfV~Jw?YQ5(LjZ+}H=&9=j&khh)Ze09P@&6j4mDZg1Q{jl1L*C6x=^z2q&n8P8G&RUZHhQLb>^y{O*}@nymGgz?SsW z=kAedihXl_z1*hpm;>>`T_$iwV#HLnuv{L{jC@~O<}bvKyLAft`!o*GI(Fv|%f-D| z80JTCx5jze$9fKa~^h4bR>d=x$ydnZf0)zeA>VH}>|3V{sHBPZiU3Q zD`r51UBH&nE@?#HA(Duv+SCjfexIV*Cw9^m97X6U7u|Xf@(u+?s4l_1TzaTt&XmG7 znR2!eNVHPK1E{iq_$RqYZfzl($9r3C_0nGO66&TmJrv33gZQEZS{e8f*C-Rw1FxLB zlM%pE^^JBVkaX~O@~)uNwY|z4CG|&zq%*ye9vqq@RFozp+7jsCTJSEqq4UV^ZOZEu zPJvh`tLzd!*5y88nq}}m1jJcVfh8))qqfjK@BgHJX1HA4=)OA4ziJ%wKRV2R z0>T>l|Hh2)uK@>u(Vd)+)5it~<0f=+sg1g#t?q_vx!s0Uz6YLum0AHJO>fX>Uo#g@|>1nt5WwT5Kz*JO4$fMfR?nx{J%J>u*RUMrM;l`;4k>lvhc& z3Pas=V*kz5XLXnT9`75FT|X&sK0Zg!+8^dcSnf8%qOZ=G0}&haNdERslwG!LZ9INd zkpC%&_$~DE!EUpt3I+409r|)ow#dGT{h(@RnC2(PDz-|XTq`p1s?Lf|{%X!DPvf;! zen}y~_wP7*)-HiXI{uPIboG)-*!jtn>=ud5u#b`jMpe1~yoLLw>5L9(>=hM+@*UN3 z2sd!Tke%%kHfPJ|SHLLoBTdGzJPaJH0#Wrgn+wVftiw+8cis_dt`KleO03CG^p?;L zfaRKEW~i^)83%Ql4gCe!z0LREvVFOdmDgiRHytDYgU@Bdg~KK`Tk=u9&i4!EKNiRZh(wg(o8QSbk$vPV zn0$_P$q1oOmla*Zricp>p{&mwYw-${dyMgj$>O*rul*FCgRb89ack9~YciDtm-1<{ zlv2OlQ}GkyQR1@e<+UPF#kuTr9%1Q(VD*htyfG34)Lde3->yh!7rbxD%>+eWH^bl6 zOk)+-#eXT3LsAG0`Wb+S3CnQM{lCAgJN~?q;D>2%1+=i z-n)qFpG)v5K3R2bBG2*;c&(qWKO5aFrN^Zbp7j#EnWaVc|3+0Wnd?>7MM<%n>)o|M zKfBrPPX>w=YZ<;{P5SI{pA|DlBJgYg+Iv5z2b_AwXTakkk=u#qu+Tk}%>bCehX2U$ z5U_vjlYHGU4B&nH#{U2R*Y`haxJetv5A6W`Q_;i2vH_b2hB)CHhfwGr2P5u%77$#~ zQW$9=l)ii^$}DE>j59i4Ck!}^3XM{Gew{{*vtWKJI2vN9is|vi&4tZy`*Z)Tk|uvg z3l?8W-1pS2_#cj2kKLcIzaP6UyBq_&|Nf%P1+SGt;?n|#^Lue_lJ0a3YDGP!_5>%t zd4&>Q9u7l2T?-=$gsPH1F$s|D6cUVZk?trXQtTRkMJw$%BaS(xxrb}H#7XwQab5PJ zw)Pap*G0z5dd-H|@R9Enga;%yVRMZZ%JQ`jWDE4hE4E)#BMQV$d0nvyjLQlh3d7|( z@7>Zpg9>(!oOTbyGv4mezCD%W8s2Ve^BoQ?J-@?qc8|jSCg0&j>89QBMd@bDD-w-# zBWv`sQi_C5(Cs&7U#+CB%fLb1wu_o+3?-b7VYY)AE+o!%#yUw}^`!Al5h5X&1!Y?! z%4?;aC)C)DETu8Bd9gEnYzJQC0vC!7)Uf1)h;&KCXDe+pabm*noC@pWG}~7fTRfWW zQm*(`3drq!BB0?)Z4pmGf&=s~m*&60L)|;&X-1ZTsOB$fkjKns;J{Ps#N)&wKNK&r zgNAZ|pl04X(N%};@kga8<*eRLHC6GgvPRl*0Q>TvY(Ne+0fDDJ;1Pd(evai6-AxV{ z)!>|K_^>CXw44gp7bMWX*uxAy2}Sg^P(f|v9XlAAahfzy>xwqg&Rsu9N-$~0VbYmX zmUnq`j5^U{@CZF2IO3XahH}hbAJ^2bMxkKCxQm1Vsgt{GSO{_TB8FOn8w##8K7LZ;TTzq+NgK zaeO=ujI-~oGOEHns3hdLyH19-IOjKD#G|nxw1@%e4t6N#dc9b zcJ2t{&wGkxNelIIK?w@U>jR=tl_NgwcVcX%)$q=e*;XxG5S0vtV4TuVi7|wG5H#%8 zqok(n)k$^Ox@LBR9N0@cKG?iZ*Qj`DSE|^8{Zr&`B14SM{9ia$mOcF-?8LUF+OOnI zN7!MM#0Y}e3jb45G$#c6@$NjFo!}UMyK*||JDf3GSg5_XOiROrYusWlXwFeD{@b^z zn5~^h7PfVoJsUl8qhqfhIGTJM*HAJKb(jr5c+ES1c&~@hr(i-MN8T0-oWrT=6cz(~0@MSm&*RzR)czn{^!T(8Zg06N(XPW`z7X=~ugw?< zeIwLvlehgJd+Tq}N#fki89uIB8(E8ZizhQhz##1XTPlAun_TJ}y-2ZnCqh!Tc;Gh2 zeY-ozpUqC6A3v1}zfDd_V5$G|SqC0LER zUw&Qq%Rkx&g*o+MlrP7Woa7M7=4dSdJE|6smZ%`515?2BZ5W0X-aYGdCTBFqw7l>FZpKQh_mjnG&TL1ErURk&DF7K(QN!*D#WMLctA? zH1P7|@G~cPTKXHNIc?kfh>UVhOfwOIHm524&ct`9oMdm=Zd@`n-*T>|Z zvX)*&vZdYz_kfc1UN5L~;ZQIfriAruzUXPM?%YeIFExA3Y^uzIU_+`f;AXn9WF`x{ zgVAVr(KX{v4cNp^ZO~?K>##=a8Ko&*CEuK8V|(q*j2$Y~jM@QfHqAo;1|I^!G>z1Z zeFPa2F=!N>D)x-!RxHMs+Up=TN0Mvf$!X#-u*X)Ar4#(&@lN>mZwKC{mhRRb8jju& z+Fe_dC%*L2A8=G_Cw$>Iac11Dgp)6G_luXK;#~1jBzDz`#s1{kVrINigSbl67d>ps z!a2)XA`_0Nx4HvS%vqpLJtP(m@mnMollYAxw>+~YilDSyU+}+ERFIkQBU9Y6q8ubF zUFcn^aTrlys|M@{-?ENy2E`#MSqHXbZLKc-84Sk*Q?W(gr9$w}1PDQ5_z#Sv8BS$~ zlezk`OKhln&ZM(uKV$02AptIgGtR`A?i#wYP<7b~=#KJ@Pqr~XOr@^Wm;1Y_b4%p| z#Y`GX^@#8twD{?Z&6u)Xdg}1*F_zP!eSyrG>Iyp0zj_V+NAWWe-8XbJlvSd?`!0E< zB@~_+jfb3{-Z7aA`#D2@+#fps2tv(}5i}4Nv;hYgFFH%@k|N=k;EkGU%NqxK@dmF8 zH+Y&9c%dZ^nrcyOn*WR#%?RlzW53Rjx{Rz zK@~<5#ke-*IZ%+45TCKw>ty0)-nt)Rln}Lg#zy4f02=Q~lRpFPk>!y*A?}l1W6oqb)9OjaZRe%I8=B>p zFj*79NgnY~eVe%9b}SS2ZL{z#*fa~cg|_;TrjqzDKwW#ys1U1Z)PV3uJ`oxF1E-pC zf6dF`JmlO~5HP7#Uh1&ld)Gurp_Pxpf< zV%xTDTNORAor;Z$?TT%?V%tfjGI_s#XXbRznR9iYYv%X;ck5nj?X~yFxQ98+M)4~~ zJO*+qn=mLemKGw)_&VlpRDX^A>4sKVNQeN2B6QXo8gB_>%Aqxfrdcxom|B3TuxW=x z3t9Wng6bcGe<=%+TJLCQ4#^@%IKCe(^2x^8)zU26RO7pl;jEqAxZas5%-5Dl9~;2d z?flbMMhVGh=bdgiSYVIE_loYPwGTa+^ZO4#8&r;5Dn+8P$FK7l0H`)ac&rGycRr z9S;6ozE9QJ$lk@=!P(Bt^lw4i{}h${4U&G6*l0q?{>=^+>uA<$=&FL{E13IK-T6e! zsFKlQ0*Y^b>(ypA?aLc*QaylxL<;23{RfagRC~7D$;yKBGMDD==0_P`?uU;@HCF;( z&}#`K;5{BJ_(8y)c9|07NWwY;A;6*_FIfRl8&kf>^gvgqTtdh3!wUPZs`IFdo+0GB zr=m114ntnrxEk{e@rXk1PeCMrMUU} zYAj(qfu+fQZs;FKA7D813SjdVZNWZ;G~t(3Fyc2=_q*Lg4pO>j|E!9%D=&|Ic%idW zwH{2ZSc|1p^OJb?k)Ir3fu%?UaH2@`iNexS5d2CAq@+;4Nrtpr&}S-wq-LJT>L2~d z3XGXmo~M4}qr3skmB*4_7u(snf1`G*2?#a^I;tzU)g#g9?v^AqO9y<1wLnN`@M1EZ z{F1Npfh~4%p)vQ!{3B=VX5%I6Ev&&joxekTVouL;hR_!zUsYNGT`+Md>T(>pi&~e& zA+vG05itpGnh`JX04ol8EI{lTE~Bqib{k+PdQVy%Z*QF~SiOrgdNxd#G@~(uZjYP? zS*_S9pE5-lgij(&(s+$9%fydl7+`Ip;Og#C*W{iwW`02z;G5*PO@Axbaxy_Qw`lIv zL4Rc!YZ_89ZW!H2J!WAHg9XD3oJ#69;f)>)_!s|E9&-+YxX-}e`9Blbf7je%wQUDf zA>==pR2oxBa}}yKRf`3}Le;-&XjW9Ez5|2^rC)!or&Qmc)-7+~$N1f~A^oAxw3PE@ z;(wFCwm^!cCny8yyWE&K=e(PoLJ;uxe}~Nb<_xc7szx2A)(+}20SF>!8LYUXV)J7>0>4*4ZN$fBFp0bjWY+?@N~yxG_) zZ#<6KsDcRj@d#lz?P>2*6JGcNNDyW~M+-;(G+)TzvCRG>h z0ZS!2>9=i_(UM#6hMwHU*QyDvWD3JyS9oGsX}t9dhPzBU8VM91<`?xo6@2s}Y!7KV z9UjcQ3+2*zBZqp^JkKnB{ zeeb(oLnP*tpN}xQ?6pd)J2s(5+V@dTf+0ck?jTD873pK#x>DwWzXCN3+equI@Q=SW zNJk*0C@;r#U$?q;Q*oE+Tt@Zsif;FkW20MV7i$>m!uQeX_v4*G?$<(aqO3j~_ENI(Z1_xoO%OnG#+rz>an9x$BJRU>QP zCNH~A+f*O9rF0%jA?|4J!W=kuji0G8hS^^7kVpW|rgt0#5#hS2_vzq-G^4Fgsuk&vLSpOfj{C|D= zpMs7iHJ#4_58#_$f2^MYe%GKfUbJibkw*nf0u(gXz7NzU^vz7IqszGD=+Hs^lR|+U z{5gGm7Z`hXy1X`LNN*bZ zEd2D0Ek!#hV1TU@Yx({kJo0+5NgF_uqy*&!UzbvHzslb4`qk&o>u<-c2z8~NbUWE` z57=Y$6-+j%b}wh}2qr`*uj*+vOrjjwe7*4uTFsvG)~ca8hiXzIlB4BLT07OnTkD3R zZoxb6M9%Q9Otbh8WnKhcM8sG@OUt1K=tbeoqybA5qZjQj&EA3=Y&oAJ8OM_jgBc3@ z?E#6AleWrEy_jNj-WaOUxQ6L-#pw$}&C9}D-h<6RfqK<^`+oJjvyJh(vKgX>wU%P} z%#iIW`-x|&-Zsjg?uODm=2W*L<^s|PBm6?of;|ojH{L;3{Q2~S+6of{M#(C$RSIBV zk48nHDBqfdAAAScNNjUB=l8^wqv$`GALAYb91F|w>K38fJ8sx4y&<<^mNzui6uP_7t&4m)Nj$l2d;fc&=Ry{pQ-g^p5AjqMpr5+YQQ>DU z7O1%osCftImQc~fThx&gv}&I-&w zI9v;#SyA#S-O&2KlNEnMzv_Q0_W-on5ERheHw7$CwvyQ09T7yr#sJiYHqjop!q~*> zY&(g4gA*t+A(P+de@XUId&M&n+sM!O_!y@@2lCR=_lLJ@sBdiQV)sTl26IZ`n#hif zkxZ9xo&fR#Qjj;>M{zxm#){8V zANtrp>#E~OyGo9Jdzji&_wcYm%iFo`u41q>7#SWgDpqSXk8xB`r zr;H_A3U}$Mh(qv4t$~NgIZ4NCvn~zO=-7R!rj~u^6Q8P806%F6eUQyhpQ1|)PG6=0?k>>NycrWc)p;1A=6Ll& ze18P_^vWOkUW`vOr8FajA#yy=EAaYde0YBB+gKX9PRjDB`0A`I={o<}qtsnvp;v=_ z$|8Hr)0W^K+mR>H!+C|$lAI1J4Q@q)oxN0R2nq}q6BRMg$iGAMeKwRorj+Zs{u>s2 zKS)QsBUlUIRxhulcitNjJ}H0;8iaO1G~0~y7kRMn6iWZ~VbAine9B%*ji&iPY~G-t zT<6_02NovTcQ78lqYGN`m^leX0c*DqW9F@nFI5ZO_p#^s0!?gM5>na{Ba849DsP6P zt9~JgP{%L3-1;RpA$YSs;k0Bjx)imQt@3A@N#>}&-&Dd-iJ<%y95z4qG993MWJ(Zc z-r6AUI-*AD@Is{Y9d>FfuK1ip1Rj}zsM#eALBP<|f;8{LEUlnp}qNMXsjP=m3%GY4S zgJ`=!WHQ>&;4+nU$HVF}HFXvc;0a@h*aBGxCjo^rSjQB*2R=NC{F(qq9K;+7yF9tm7%~w=`TpiIp+RChVjO7i)l*Vqa(l7@89)C>=-c=L1`PUIet{Mmqn;xS`ij&F)Iz( zpQkAGu?$B>!#zi`9CcC38^?mM0BaT4u(-O-SI+wBO)$)`(?nHz&9F5bQ}!~Wv1M6w zeXn%!ma%WUY!QbMfWi)jc%0bvSLsssQmr-_50i|d#!v^rh$6o~ngFe96$Nie;haYtvW%Q9EPzJFP!hpAhEJ2jU-ei?T=xuT%SJR#A7*psU_j1GbAt1D zSW>5WA!ICah-w4*frPUG?5yv2b1vXL9v1j{93-yASn)*&(b57YAw$Nd5r-z|grN3U zM2NF1&zP$_&2;i6XbVV0Aiy{#sVbrupeb`J4< z>y^`Y3naY^qIXb+cUY}gguS^dhWW3fVqNLNW8~p2C%clQA_O|FIZLiOGL9@tY?-Rt z2_e2j2TF3CLJ#meDcDGMV9sB%9hoJ;pP+i*r5po{L|<`L<^&iFGo#1$r@-*?fU~bU_#wv7Jc8tdj3KTzb7*gw7Z2}90NVG zd5fNSPtZ%ECkeH|bn^5sJ((s%m}%p)CtLgnD&zlk9Q_}t1MAHw)JS1Edns@_?`5TlGwB~*k-Vo{>sJd|DPX0FuPy#s5K4e!! zcAjRkU)24ov&!&qT~><=!SwxgY>QiV$Fb@vr|@&lMrG>q8n!x3*h_F24HO!34HcCv zb?oy*1!vZS3DYs>E8Fey2nEUE1OssRfX7uSGVEmoC?8z1^t%|Hul%IDs&kPKqzfWEcO<#g_ko2c zw+x{($rh;e<<$T+uNq%bj6_-Xnft1zHn}-Qa2#c3c1(EJo6ac2e;)9{?aF!zX7zBIFaK%6NrO{SCWadYD61 zCA1c7h;A|!GsdqJo-KPKex{*MrO84I*#b9}&J& z4Yxcd=eh&RFadhWZiN?7;`&7j9))vxUxOL?PlW9|INhGQVv&LcqK(iE=ReQ1r`uw| zrJwU`D(=58NB-aE&)?&#*18U!1@_0}<+(m&iF1Q3i#{fG9) zW&d#1Z2cN$e7=!^=z%2(IeNaX$+*S!*WKxNxILwZaDbYf8f$k<$k#s@X7~TC-pd19 zEwjR#u&CUoa$>8TyP7s;vFB~y7(X(cq%9ugO_eg&&<{hOHt&L(S>Y9Nq{@*^hkpWy zC{F5XIJvhKzA83j$u7_!$sfM$5~~J*aof9DO-^Mrb%Wt!h=rHOBS=p_#|0ELJa~bS z(&i^5(8;by`O(5Gu(ZXFk&?MyUF2Y&6HD?%TN&4H|0K6*Q*!TpO_*QnT+$gCM)OT} zcTZJW0pOagsG=#9Ldq%8$<9V0+B=!zE7pqAAgH2Vx?pNlFR}IBn<~Ww=*ysM%2<*M z4sZe#2Jb{rW5YJVpPRvE*r|ItvvOuv{ce)^)g|T6R$=V8g_27WTxDfstyjMW=!hEl zGvw%y+hbuB+MOQ1iGh0Q;Pqg0XQO_@DCY;Z6E79&()MD?2q-I|5 zvG`?zbCvE0rm<=TJw_E5t}lfX@xF=*Q< z8QRwrUM@56>_4w?t8=BP8C2n_ENNbLP0OBpfF5Oz498JX>N9$r6A!zapud;REWLzZ zc5Mlxbj z$lT0Qv(zL#YLrK25mTK;)=_PKr$#0s6iG#f*Rf}wnVSNO2nnf90rRD*v1mgAgk@%P zkTr70Llue%G^NyUCImw`cq}Spu*Rc{G%w2$MkG3e6mP4Y)!{SqrYt6%cuCK4yBK-e zm7dw6zSJ{RTA*sn<~Ev7#_J3(OV9N#;&reP7%=$Db0$6^FRt(suPIj!4g8)bq_>3G zO`d<@>NfG5pD!hEy|pImLj`rwwx7y!4D|KRf)uk(y{#x)sqHU9y+aEQ^U!#+te=ip zxe~;4cC1~WHNnBdQ^2Zc_6x{@G73(2=h3W=?D|^r3mEy`Q=_kWk-TyxP#YtelMY_FXmNwD^l*^@N5&@mBr}Q=NSpYiu9k%7zRU95CN(; zl)MGTk%S^&^LJTS=y#5Bn$#TXUIiM|!qj9*ON=4gBef=!e5en4>r|`bM~fP~{0=37 zr=fQ~+pFn0JE4(Y;x7RCif7pFF;5THEi{{_DLxv8+VfJa^W_@^h=6>|T8@0ziyB!+ zh=7#ZUL&$OheT_$d2RVCzps_^bU6_XV9#l?w(@b=*fK}Mup7tRHk|FZ-=|YkRJ8k; zIqi%GKhL?Mw%55XrD|InwfVzH^i5?ifTZrEzlSc+VD;{>e;%B#2gvr93G(CaqDnVIm2q;-9t~;VGvmHdAe*u|8x%jte<8S^<#dy| z@ng){WuWZ#nB{CDy6Fn*4zt~UGC}Kl+6B=TkgPm9xhVFqF@;ek^9IX7`qhPKP_(W& zw!G6LzOD~H-vGle$Pbs>`R(DB%Qls8SVVN&I`Sv~IaG8COoj&hQZSgAE);}D?yvT= zR@v~dV=2EW&~$RF>o(w}8I?-HF)AphqKBH{Z3FmACxS%q&)IJ%(Kt9b@RTb~Y|wZU z>=doB(0E8_G3H^Rd)W1xB3F+4_}~sZ_TDe{1^Rs~3)IeA?YNeJ2+k4baF$vDFce}$bB2u;LNH=`X z?@VGIV`m=mUtg zgtq?XelN-8j~|si>vRt2shn$gI%_;sk3*szvzB7Z7~_j?;|=!=kpuyvCpzAS%_S8=ng|7{C z9#>KJqfeakY_IZG#-q+@XRP(_>(NrXDrU#alI+T>@8fJaDuoMaY}M`bHRz?8DGAXQ z*|pU4Jb2X7wmYodGPrTZZ;$C_F&(G$(BA_;M9>K-ao&R*t52)c)Gjpi)F0xHGas$i zDM~Ila+)uA?Rbt64PB=>3VoW@TonS)&_5tUepgxEh0R=UD|6UQ>uku)ysPNh4 z60Jcnv*gtK5=8n#Uy(P8o=mYx@9iaR4#gOvWNUPi69QT&J~)II5Er)tC;!N!prx2^ zCnZnX+DM90isGEVFYdo){$lBRXbk@;q7DukZG^H;`%YN*BA|Hi@hx7mXCsRoNXzOG zMjN3&?z3IwdHbg2I`6~j)dtrig8sXwhT(oDHag8Qt_Klpzf;JY_M4j5p+U#X>%V*? zG->ad_&z@pkN*LE{`YU;f6(U)barXVl}irDR5O^S^v{N%JE4Ncbk@T2PbcnFQR^Az z0+O#aY_kBrzm^iCJyM(h-{^C0cUGp_%t81ut{+C51Hg#L2%KQI(XLyqzv=UxvYbt| zinCApJSWlpJ5(P(0q~r8;<9570SPdcqElE&54or42Hr2+pR%jBU<21Px=uhm2y|{; z-tDe@5}ARX-uwnab`g`@CvfkH3@yxon#eVF7lO7%nSj;Kw}mv;LB>S*stai`c7;DW zL&(%w&BpLd-onSw@%Z)#fxp@jt6C!he-dY$mqO8M{$KR@YfH3HfU0!+OKM-Vd8NF} z;lhP9fjB?cA?^OGW7Fyyu>tYYDqcAze}5SGAm>7jOfK0fA;l~gB9+Xe>ZeIztX>tp zKzF@ecKDhL8NLEU^?6SCwXU12t@cVE92~_VooTIIU-LDp8?dRITgXjr$wTJLZ&dWM^WH7d-;~3Y9nsM0 zc{ix!0PnqfFW3tUvB}~6oBEYy1T~ZN4C8`5vC7ULqS8;~)CJFEHdlT&&LqcHX5E!0 zj%P-pF1!Q17#qCGO53H0(NJeQL4F6#ZazTC)j0Au}R`QUIO#^j6$7H z;zj!ZH!k-7bV&a1i?da#pFE4w=a<&OW*im+0|G;l<}rwF5Et}TFmyokKCmPruJk|? z(SDl4hj>SW8fM@)Sl}n2S=Rh_W$W1$ip`8{uDeNJ)`p|ExSH)R`*oi@`qP8SCy$Qw z$)ghpL27|{72}&S7tsmI}=s>!4a9*PSdv@{Wi#?=iGL? z#bd8`Zb!YH(nl*jy$xe)u;dlo>sy@c2*>fnyTjZ`r=H!e=8~03Pp5nqOJcMhV(S*v zxnQWM*VnE(w{7T|MgaNCD>Z{fr0CZ<46v?1byrTY2D)W{ws}U+sbYh{MdS3TnYo~& z?+fsPI5~L?Z9JmED;6hPw|}Izj8)XD&}csEXx>kI#^F&(J4Ud9{vTXA`hRihjm>7# z2WHNlUkNu#5C3;u`bn%i7rnJA&geh5bUTUXx2c>6@_o5z!wFG57&Ixm@17x)kU1He zy)N3FMiU{#t1?kWhoJh9>ew6~0(@@kS9pe+7p!%uf05}J+P{*!S%*us_LMyOt-7{J z^}g<)vS#0w-FHw6SWde3b`je^LT|nfQ{gzaB$mV(9mJh8Y|OOv9J6ie1ltVIZN@|T zji(_?Q#{CnkXiK}V6xNQ)5-9?+BzTT$y(St7h#E4ujA8Md9qzsRTKIkUG87d_>-=laGJ#)p?v1uu{ zU7ENZ=Ujc*B;IySnt~^>v%~cGeoJsDDPGo&E-v-Gz?TBkDWegf-2qPel?Vo>~ z=r*-mN}ok`;nOoy^8ZMP|Bdx(yu09t0sJxNc!(MUH47i-OIA=Nr6rrH0!yTMJ$JRz4fQ=ByJu1xq^JtGekbFt&Cqr-Poqa6bPe8_EkkV%Wm3{qA@ zd$JMV-cA`|x@3|i%n|DWQ>y-bi<~oqZ&SO|C`NfKJ%(KJR-VhBlpX}-pfp|dR-UHK zg_+CuH>h{>a|2TsY12AJ20 z$?1x&e{dzZ$w^8nM#t8Y9$*hW51>R2n)C=pen74U`#ra(;4P%cvO9++#ux4@4|iDI z#NKggVwHL5)gJn2zE}SUz#GH)Fl_RBlhShX6DAzS-0`U(Sd9SZQ#5Vd#35$6}w zPs#h3;KRwo`xwFX8Zyj#mU{i%KLbmxS;VQ^yVuOu5@+~C)^padtsMIW+lrXzSo9P$ zJcOoAB(WIYJ_$YQYOjb#qF++VQ4&!CP78J9?sBA5Tui^jrFP$1cKQ^_Wa7tnX10Pl z#Bt5?7LOZ>ruoLRt)FOFsm~uJTv^5E$W0!|WiB(@0smaKl%h&PB0oEG`===j%fDH+ zWX!xi%?kf}2mZ^C<-eqCja|)nGs##6O8OPeP>(-qsKOIrVe$=0LZ01xY{zyUVmB^O zZa80r&?0(~hNeHYZ08T6uw;#C8&l^S6Rgwc6Bkzk0{)<7#?(>p($>^R@u9PE{u5

    izHjMM|@V)@3aFNUbWij%UFa9BFzdgw~z|@sX;Kev59Q1}>h+;opoJyN8ilv8C6U zmtXvuZ!;|<$Mtxq)Y*B>zx3N~-fElA-(|)!N!fWZzzn0LvMq~9tkHK9qAw2+50)K6 ztT!Ey^nX`o48(G#c3>s5*@`s;RIFF8Kg?XeCWTdcb6&XoW!rkocg<7USyL8|4QP2$b) zgNvPtVh<@}mGEFPF@mofiB3<43?``1*yub#n9yEIPHXqV+o-h76_(c_?qW)Xg?jGv z!*G_SOQ9PN?ykJOtoR~S$0J6H!%T;+yu+=rSb)-kKP?qYQw~1Wv0k!swfD}KIGBJ6 zK8@lX^8RaxyFNqL+#K^k48mfd#z5wpD_2YsVaTgUa7GCbMYY3aeFJ9k8RC%=bzW~l z6ycIesNV*t+(HK^Vel9P*TdFo7e;;QJS7uMT$4`a_YPwg?s=lJ`uxVE5}O=CPo(n+ z_dUmU*Cgx#s;rzt9uYMpms8}KG@N4g9}ve8%5e86hF}yyYG&m9#<92KzltaBjAKt! zsie2Lq_+X?QfWY2MmYjU)9=Nj^(;+F0sh2(@G(1g8F*I;2UJ<(O5rYKdvxF%D5g3%cUDhkX7Brk>|*bB`24|E^ta)Xu8SDLl`+^_4nv*N3+gP>{G}pQ}7yn>_ z8T1cJC^JZ}Q8sp;DaCQKm{{p*!xUw)aT*-$$Y%0!GGl;tuT+&fyaZ#p&p|5_h9mao zLbevrwy#60VZOy>ekVu@P~xgSA5C=!o^QrRi>7byf+ z?Fwu*14`s8PxbZe+VKS%>YSUaUDyfR&CEGCEX+^Fk@c6ON={X6rP=)gN5C6vkyf=w z*On_zlv`e*3r=SgCyh_l{KM#^&g^I#jA?lj(a>v-Pe{5(@5tO>49EXoH^Bc>spv5 zY=C=_* zlYkLH=;t2;^a4wKl0cDLc>Ozfn*EMHlokpE0Q!PC)`kpUl2CPj(Z_j z74_VsOkucR;*0QO8ow_%n7`z$6>CPbV z{(|(yO;XG3Q%zZy3n=SqRFQ1Jot{BE&f6*T6TiVT$!B`;QY`Kq`tvVq+=n<3zMP-) zZPBN+f#*L-r@y+zUn*#?&)XIM$gFI28JGWZh_F54Zr&)#XKxHt)NXM*r(kH5%jd8{ zIcT1 z2I_`r&v@74SCU)FnJznP*302gTOj&u)^h0clI2uvFcB7;+1n?7EdLO%w%2kK8J}%5 z`pXSM-NhM~zJC_?v^v{(nYS0iRmB4n;&85a)4Xy(uhE??u>Y*R+^!jCUE4)wlf%-? zdb6TjT+Qy(_lh3KWgVHksUch1rZI~bNE=A4vKfo+UY};_&?4eW&tz(3L*Jt|$vE{S zB!O#d?&51P-%$9=cG;q!U|DX_ik&*hmWa~az?5TiHnYNnT?&nBOYN$>EwvE0t-eK` z1BH`25LW~N7Gy=4LHK);R)6y!=1?5z=~Rd!`x-X)Y`&*Ih@q+tvJ#7O+%+aA9QpZ~ z4;zyg9U&PON#RSemZs$|8=^RO?ylqeV7!XT_sgTwn!3VZKUDL2-OM%j?iGQcgj^Rn z?VBv+fW`{@Gu5vx3ngnaRE07nR$MeXYxv=D&J{iB>$cdC8aOTTDmI!=R57!`k=+0y zNuI^JD|DeB#!Z>*c4|kk{QGGqybZKpgG^u(%cxfRupw%U)rBx>q&lmKf`1I)f}Z5H zDLFzp(0m$4$aEI|((9yjbk!_CFUpWS80Vk?P5aQOkzN3w`baC1Jda-5OKKC7i7O1z zNigflpzv^ApPkHXFt$WkYv75I%L&B!e%>l8t`o!IoJ)?fxMjFU$|u*kQ$KL3O)1YE z6D#EKLg}3)>E87of-{%bzfowa->5B%T#lV7P0fw}OI2LwM(P(?*A~Tz93=&1o30hb zN!q|3vS*NaC7_TIdE7K0bmVtzUG51($et@cCGH54W6&Y&G)g~PPJvU2#evoJ5m^o~ z*^q7l{#KN!f8cXDQuQnZ7WTI&Psh?@PT+iFY9BUI^M0>5_9JJ=Yl6VJa4aH`girkR zERI`3S_uFCbujedji{f#30VTjjh^j+vqPp?Nj2IXW{dxQ|)H<|8tv+bNkI!6d+ z`|8%YoTp;G+oF`UIZQA~o>^LY`IfL_gf)75;JBW@)b3?cYmMZ_aw|;_ap1PGmj5!j zb1xRxMHJl&i3}JCmT$s*_sASm0&&fLHOW;h1fJVClWYKsL9fXUmD@3Tjw???NW&i5 zLJjAQ@YmOW(eiQyRFB$y4z5w3gX@3P-v1V=$EfNl;CwCzfzh7rMyk?2j=zdsfSy*o zGYl0mCj#>MB~R|Yq3Jf9CvFx~e+=AfG$Pr}^RxL~##wtqHH$jVgBo3ByBy`XTy0|e zzyJ9I_7hRxTJoo)u$Vn8>@5vPVu)?Uin39~in%2CQEKj{dfj*)UR3pT9wArkHKOh1 zTTtqYbH81N+_K$TA6d%*x2dfT8)(B^9a!byy1#k}W`zB;^AE#Zqj`V;y$0z8*pn>N zL^8cZ=Vjw*U*&DP+=%U}onyxkpG>ugVuBj$HzO0~Ey3eOHZ zk5K~dKnV_uWX5M6dw0-r4%*J_i=9DT!lt%)Hic6xQ3@9^0SkVXP$Op8?Mecy&$AQ! zgH0-xC)asqtH-n}Z=VT1PKjI5wdk-4ugXo95reSw zF#SgU9?zc_L&-Sz(c1f54z*50rXdWY^hVH~o1YKIOgL?{tlY3pnbI5a8YHvmAO}nv zY$V%D_looIHYVtSX6+v|o8P5sUA5&C|4{AT%NPM?*u2OGj^W7eLZ=O1YQp_aFWNp` z(=GzNBeZVaPDmrTCXy!MiQ(csk`5JQ6YuD&$V#=JfnWQFQTmYh`eXxSB&oVOS|x5K z6m5-=b&6K}ZcQ|$dr0aIY6FvMLFf&hVGiIZ#19y1My$ZN5NI_K4qme@^RrOLeh{xW zAk}V(Bza2m2!3r^bf{ z-Xg{aulwroB_ar^BC4h6pz8}N$Bb{1B0LESsHh}KYPvr*FhO=DyLa{T^mxzenzc=j zWz}}iy`_Q-Us&M{o?K8l!GonstU%+@y}+@;pTkrQB* zxwpXJ(O}@E&;0Op@2$sl_D(JF8YfE}KgmqWraQzd%;UMZTna?ngMvEIAYwL52eMKj zkGoF9SN1P;P7we~{2SAA=P%Gsbz{HkP}0dwPL?(IUh%VDW^qs@PT{UjR?39BBc{P~ zq|k7;G*xuye|X${ zs>xxbQsA1c5ai}k(QKIxw=9ZV08Z}Dz(i2Tg1jqNA+!7&`X-Fe0%07_aqm&LlXI@P z2G#bxQ^^rt#YNoNI|r1pm7SBKR;n#J8QomH5XUHz&a}=rw}w`6p~-nU(=l;oGh3DAdV6`@I=i~P{|cOw4jDWvKRlNn zd9AX)`GzcqS{5o{BNWuo8*Nv5#4iMUMQafkh+%bhi?02prqWm)F`aoN+zpLp@X5lk z6xw6av>^A5d_(9rbYCe@4N^ z8tV4awUg;9U$f{dIYvAArOf)s5jAM_aKhK|_M+BoYr4(&fZNAf`YhnvpW`kzXs4TM zul=Un#4TzLQM$cMeOENU<1|(!^l;b>a>}XjSWZ(MT%SAZO8UA%L2VqY;N&6&Aip?z zJj2y|3P&fSMls(Z9-o@WNQ$`S?wjRm%CkVilAB&|V`y0cHECw8@DqP{d^}6fsCSF> z+q&-XsdCp|#tb_TE$~nnV5P*)tx92-$t=$$PXNjm^$rwVZpz?(!7$w&S`<6Lb|}0W z;&|1?DBG16b*1c5%MaFuZWTf){ccVwT3(aaeup~H!4_eJ6+?|0iYKbePyn^zp-XI9 zxBd=^=<@pQYwIY4_~Tr3Cf?-A0Lmg9l_1NRupxV|^KDN2 z;2~_(WRBSOoIeiIFZu06x!Cya6(P)Bn=(vIksv5)CMO8?hHSmG_)bO411g+-lx6dz zmi3lZ!L#?TlIlJ(ORqsq4iG3vbDmg;FL|+Vc}t&a3wfuqlq8#Ya2K&?<+Er3@%>DVS2XzKl1XJ7ruA&fsw%FZR*@yG47jE*ohpwr zGa4NZnfMYDT9@euW{DJ7lPNJbE_WJ2Z_3eHgS-(>OU75U36|mVTbnfon!3oUnRjP5 zch+AyX92VC%e&q%9^etgQc>x1u>Nddy@f3Ul58IO}_T|YiBd=7N%k$sM58kO8BnWU;8W?j&q z+QNVqDh%y!V6IPLGiLi;+4F&_;8Vkn8&P_6Xek3c+pn;uz7RJnW^66p(WVy5VzxR} z;5)~#bMH4RGy)yf1)1VlF@85oL(jO1$95e*VY%JgV9sh{FJ#y#w6{g?norpqp?QBc zs{OhN(R|qsz}c(Z7eZtI1f?@B5r1)uTR`91QQhJ%jKf(bUKNV?f3x>O;k!k3A0G$b z#1VSp#ET~^Fz}D=IG_Zi{dv*f0Be#2QpA z^W|Ly7U$`*ca^x87o%mr+$X>Gdl>FR%0D517=;v|?K+%^2SSF8Wt&S73j!w+D1GVSa#} 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 z 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%0D*>0Z^&m%(B*0i9v7DksGoBA?|P^&4bf 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 z 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

    $C;ienr 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%0D`80#%Fl5BEYN^MbPc3LaMD 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 #ymG#+t>DjiYFsk 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%0AI(%Zf`3N)Rd$8)P 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�KY|vYB9~|q5z$L8(0n(iS^GB`W3Jm?-SZ? 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%0A}Qtrfc# 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 z zC9477Q)+Nukbp}+oOA=-2hKJF`FKD?^Lw%U?QU)*@QA@O3=YfqPI0$N)xfQs7E?yd=r*4Ya9ww zQ;RjidjHJm@+4`WkC;UmKB;~$Y5zsdtwWEAV!6Xi=gpOnU}umWB`&nTm=CDr``7O? zE%`+ok&8!+$3MOy0r!sV61M*FA=os_aA}n{L7?xn>^iAdRsYScRq;2cdhTyu#v}ad+dH94@i)0k z;J0au?%y!$ftJkrtHO8FONJ>v|F_adx>cJm+e_3-+um>35B|U8ABultysQ64erf$} zO{ws$O=l-p1UkGsJm@94rTDdL=}rqyx#eya2uKcDii-kNT zVHD8b+po5emKB=>!3j_CuZNNoo*+A*LqQu4dzSNJbUI10&i6jE>!Qr|$| z-B&%MdTgnlc*;vHuW#fYWUR<90W<2=F)s=(gXgiO1QFiu=?k)IXRHEE-yTeA{EFn0 z?h%`cJme0?$E>A3+Oz|pgd`M@FKtCOPr~e8KDY<@ZN#q>He>ulC8kWaM)$_I0?Zc8 zx;e|{*9Dbo7+tDD@9M`b_E6?qLE423Xm7U)AyS8wHcvviU~T1s39vz+RD(bpCx2#Q zXoskpxt&w6z-X(aP(1qi+X3Z5@+p@4yoIq)rl@VZnt5E&kO->l@aqo2Ub=}QzK%rq{tHp zW1FcRs`}ysP23S(MGlV%dQ@VZ0Yu?m>xv!Vh8?e*d1si<|C9qA6y^Cgb(U^>!Fwae=_r>3Ig zB058k2XBVU&LgG3N0jHH%*B_TPA#VVaz>;w31&6;_S=b-81P}$Ft9p#`I;Gh}d z$o6;Sgg$X{*~|(`UAyCe++nnrHM!@|fNCATb8x}Yosk%lV%aD4Yg7+$D;MaZzCqCS zi;+00Lv>hnf{f`Ns`eckVUS3RN-lE|jOkh2c*?GMmz7#~9YOryh5vwat-EnbAtbb8 zsDTT2*Xt+Pq&OJSc=bJL3BY$;J1wCTP@`hS+p)$#C!VDhK=r_UWT17m+I^>dT2Xu7 z_T2AjF1L+81&c8zlF^AHs~2b!SP<6A!EgVyOyOfV@5OfC+#fle1F=E0?g_Mps7wjyu!S9$>am?1d^;uH!Ci8Xo z=B!k)4>{-duoe`igP?y}l$6kdK}X)11f+N-p?Z0n>7c88aQhG=!HU0~Q&-Q_B7nYG z`pD>#C$kND5M7!#;I>ll(0DYpU;xybIFmk|!i2m-G>$65IvLNzDHj6SA<0c+8Jw~G zt%KksP+-OryK(_KY;INXx}joC*V%BL^}*oLK`HARec%L7GWa3n;^KaCc{yojswdLa z8}sUhOyP~o(9j#`@(j}4M<)R=n+Pzo1xjUBda{jXH0!3IONG{JNN2M?E_v8GF!2

    ixo44!!+ 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­6SFz^sdzmD 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 z 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

    HzfENXR518-Qz#yZ$!b$-64gh{w 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 extends Vector{ +public class Menge extends Vector implements Set{ } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index 6510d90e..2e02352f 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -224,3 +224,41 @@ class TypePatchJob{ return fileContent; } } + +class TypedJavaSource{ + public TypedJavaSource(String source, int offset){ + + } + + public void addInsert(GenericVarInsert genericVar, int offset){ + + } + + public void addInsert(VarInsert var, int offset){ + + } +} + +class VarInsert{ + public VarInsert(String var){ + + } +} + +class GenericVarInsert{ + public GenericVarInsert(String varName){ + + } +} + +class GenericVarExtendsInsert extends GenericVarInsert{ + public GenericVarExtendsInsert(String varName, String extendsVarName){ + super(varName); + } +} + +class GenericVarSuperInsert extends GenericVarInsert{ + public GenericVarSuperInsert(String varName, String superVarName){ + super(varName); + } +} diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 240a127e..4a4dd4fa 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -6,11 +6,17 @@ package de.dhbwstuttgart.typeinference.unify; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; +import java.util.List; +import java.util.Set; import de.dhbwstuttgart.typeinference.Menge; import java.util.stream.Stream; +import com.google.common.collect.Sets; +import com.google.common.collect.Sets.SetView; +import com.rits.cloning.Cloner; + import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; @@ -630,7 +636,7 @@ public class Unify } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - ///* + /* //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); @@ -651,10 +657,43 @@ public class Unify cSet.add(orConstraints); } + Menge> bigCartProductErg3 = cSet.cartesianProduct(); + if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg3); + Sets.cartesianProduct(bigCartProductErg3); + */ SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); - if(filter && false){ - Unifier filterUnify = (pairs)->{ + if(filter){ + Cloner cloner = new Cloner(); + Menge>> temp = new Menge<>(); + Menge undMenge = new Menge(); //Die Menge von Pairs, welche in jedem Kartesischen Produkt enthalten sind. + undMenge.addAll(cloner.deepClone(Eq1)); + for (Menge> vecvecpair : cartProduktSets){ + Menge> temp2 = new Menge<>(); + if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: + undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); + temp2 = vecvecpair; + }else{//gibt es mehrere Mengen, kann gefiltert werden: + for(Menge pairs : vecvecpair){ + Menge testMenge = new Menge(); + testMenge.addAll(cloner.deepClone(undMenge)); + testMenge.addAll(cloner.deepClone(pairs)); + Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); + if(test.size()>0){ + temp2.add(pairs); + } + else{ + log.debug("Ausgesondertes Constraint: "+pairs); + } + } + } + temp.add(temp2); + } + SetView>> difference = Sets.difference(cartProduktSets, temp); + log.debug("Ausgelöschte Constraints: "+difference.toString()); + //cartProduktSets = temp; + /* + Unifier filterUnify = (pairs)->{ String pairsString = pairs.toString(); Menge> retValue = new Menge<>(); retValue = Unify.unifyFiltered(pairs,fc_tto,false); @@ -666,11 +705,9 @@ public class Unify log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet); cSet.filterWrongConstraints(filterUnify); + */ } - - Menge> bigCartProductErg3 = cSet.cartesianProduct(); - if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg3); //*/ ///* Altes Karthesisches Produkt: Auskommentiert durch Andreas Stadelmeier @@ -693,22 +730,30 @@ public class Unify } } } - //*/ - + + /* if(! bigCartProductErg.equals(bigCartProductErg3)){ for(int i = 0; i> changedSets = new Menge>(); Menge> notChangedSets = new Menge>(); + int counter = 0; for(Menge vecpair : bigCartProductErg) { + counter++; + if(counter > 1000){ + System.out.println(counter + " von "+bigCartProductErg.size()); + } boolean change = false; //eingefuegt PL 13-05-22 Pair substPair = null; do diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java index 810219c2..10aad9ab 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest2.java @@ -1,5 +1,11 @@ package plugindevelopment.TypeInsertTests; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintStream; + +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -7,11 +13,17 @@ import org.junit.Test; public class GenericTypeVarTest2 { private static final String TEST_FILE2 = "GenericTypeVarTest2.jav"; + private static final String LOGFILE = "GenericTypeVarTest2.log"; + @Test - public void run2(){ + public void run2() throws FileNotFoundException{ Menge mustContain = new Menge(); mustContain.add("String var2"); - MultipleTypesInsertTester.test(TEST_FILE2, mustContain); + File logFile = new File(MultipleTypesInsertTester.rootDirectory+this.LOGFILE); + LoggerConfiguration lConf = new LoggerConfiguration(); + + lConf.setOutput(Section.TYPEINFERENCE, new PrintStream(logFile)); + MultipleTypesInsertTester.test(TEST_FILE2, mustContain, lConf); } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest26.java b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java index 183dd938..fdca0e67 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest26.java +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest26.java @@ -1,13 +1,20 @@ package plugindevelopment.TypeInsertTests; +import java.io.File; +import java.io.IOException; + +import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; +import com.google.common.io.Files; + public class LambdaTest26 { private static final String TEST_FILE = "LambdaTest26.jav"; + @Test public void run(){ Menge mustContain = new Menge(); diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index 29331173..1dca7ed6 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -2,13 +2,16 @@ package plugindevelopment.TypeInsertTests; import java.io.File; import java.io.IOException; -import de.dhbwstuttgart.typeinference.Menge; +import com.google.common.io.Files; + +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.LoggerConfiguration; import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.logger.SectionLogger; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; @@ -38,6 +41,8 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ public static void test(String sourceFileToInfere, Menge mustContain){ String gesamterSrc = ""; String inferedSource = ""; + SectionLogger log = Logger.getSectionLogger(MultipleTypesInsertTester.class.getName(), Section.TYPEINFERENCE); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); @@ -51,7 +56,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ //TestCase.assertTrue("Es muss mindestens ein TypeInsertPoint vorhanden sein", point.points.size()>0); if(point.points.size()>0){ inferedSource = point.insertAllTypes(TypeInsertTester.getFileContent(rootDirectory + sourceFileToInfere)); - System.out.println(inferedSource); + log.debug(inferedSource); gesamterSrc += inferedSource; } @@ -64,6 +69,12 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ for(String containString : mustContain){ TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } + try { + Files.write(Logger.getWholeLog().getBytes(),new File(rootDirectory+sourceFileToInfere+".log")); + } catch (IOException e) { + e.printStackTrace(); + TestCase.fail(); + } } public static void testSingleInsert(String sourceFileToInfere, Menge mustContain){ diff --git a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java index 1db86fb9..dc911c2b 100644 --- a/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java +++ b/test/plugindevelopment/TypeInsertTests/OverloadingInMethod2.java @@ -1,5 +1,7 @@ package plugindevelopment.TypeInsertTests; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -13,7 +15,7 @@ public class OverloadingInMethod2 { Menge mustContain = new Menge(); //mustContain.add("Fun0>> op"); - MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain, new LoggerConfiguration().setOutput(Section.UNIFY, System.out)); } } diff --git a/test/plugindevelopment/TypeInsertTests/ThisTest.java b/test/plugindevelopment/TypeInsertTests/ThisTest.java index 2ebe429a..5a64a069 100644 --- a/test/plugindevelopment/TypeInsertTests/ThisTest.java +++ b/test/plugindevelopment/TypeInsertTests/ThisTest.java @@ -1,5 +1,7 @@ package plugindevelopment.TypeInsertTests; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -12,7 +14,7 @@ public class ThisTest { public void run(){ Menge mustContain = new Menge(); - MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); + MultipleTypesInsertTester.test(this.TEST_FILE, mustContain, new LoggerConfiguration().setOutput(Section.UNIFY, System.out)); } } From 38176163d5af3354fb86350111179146235ed98c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 8 Jul 2015 14:23:29 +0200 Subject: [PATCH 154/186] =?UTF-8?q?.log-Dateien=20zu=20gitignore=20hinzuf?= =?UTF-8?q?=C3=BCgen.=20Filter=20in=20Unify=20verbessern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../typeinference/unify/Unify.java | 39 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 10266eb8..98b5964b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ CVS bin *.class +*.log # Mobile Tools for Java (J2ME) .mtj.tmp/ diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 4a4dd4fa..bd10be77 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -665,29 +665,34 @@ public class Unify if(filter){ Cloner cloner = new Cloner(); - Menge>> temp = new Menge<>(); + Menge>> temp = new Menge<>(); //hier werden gefilterte Constraints gesammelt Menge undMenge = new Menge(); //Die Menge von Pairs, welche in jedem Kartesischen Produkt enthalten sind. undMenge.addAll(cloner.deepClone(Eq1)); - for (Menge> vecvecpair : cartProduktSets){ - Menge> temp2 = new Menge<>(); + Menge>> oderConstraints = new Menge<>();//Die zu filternden Constraints + for (Menge> vecvecpair : cartProduktSets){ if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); - temp2 = vecvecpair; + temp.add(vecvecpair); }else{//gibt es mehrere Mengen, kann gefiltert werden: - for(Menge pairs : vecvecpair){ - Menge testMenge = new Menge(); - testMenge.addAll(cloner.deepClone(undMenge)); - testMenge.addAll(cloner.deepClone(pairs)); - Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); - if(test.size()>0){ - temp2.add(pairs); - } - else{ - log.debug("Ausgesondertes Constraint: "+pairs); - } - } + oderConstraints.add(vecvecpair); //die Menge zu den zu filternden OderConstraints anfügen } - temp.add(temp2); + } + //Filtere die OderConstraints: + for(Menge> oderConstraint : oderConstraints){ + Menge> filteredOCons = new Menge<>(); //diese Menge sammelt nur Cons + for(Menge pairs : oderConstraint){ + Menge testMenge = new Menge(); + testMenge.addAll(cloner.deepClone(undMenge)); + testMenge.addAll(cloner.deepClone(pairs)); + Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); + if(test.size()>0){ + filteredOCons.add(pairs); + } + else{ + log.debug("Ausgesondertes Constraint: "+pairs); + } + } + temp.add(filteredOCons); } SetView>> difference = Sets.difference(cartProduktSets, temp); log.debug("Ausgelöschte Constraints: "+difference.toString()); From 3111d510053f7de0c72af42b0064eda8134b74c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Wed, 8 Jul 2015 15:00:47 +0200 Subject: [PATCH 155/186] GenCode: Versuch LambdaExpression umzusetzen, scheitert aber bislang an nicht importierbaren Klassen aus BCEL --- .../statement/LambdaExpression.java | 19 ++++++-- test/bytecode/LambdaExpr.jav | 7 +++ test/bytecode/LambdaExpr.java | 45 +++++++++++++++++++ test/bytecode/NewArray.jav | 5 ++- 4 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 test/bytecode/LambdaExpr.jav create mode 100644 test/bytecode/LambdaExpr.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index fddcbed8..1b4f4241 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -2,7 +2,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; +import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.INVOKEDYNAMIC; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -208,9 +212,18 @@ public class LambdaExpression extends Expr{ } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen cg) { + //InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + short opcode = 186;//opcode - was genau ist das? + /* + * Bytecode: + * 0: invokedynamic #2, 0 //#2 führt zu einem InvokeDynamic im KP - wildes Referenzieren + * 5: astore_1 //Speichert wahrscheinlich den String meiner TestEXPR + * 6: return + */ + il.append(new INVOKEDYNAMIC(opcode, 0));//Invokedynamic lässt sich bei mir weder automatisch noch manuell importieren + return il; } } diff --git a/test/bytecode/LambdaExpr.jav b/test/bytecode/LambdaExpr.jav new file mode 100644 index 00000000..853da920 --- /dev/null +++ b/test/bytecode/LambdaExpr.jav @@ -0,0 +1,7 @@ +class LambdaExpr { + + void method() { + + Runnable r1 = () -> System.out.println("Hello world two!"); + } +} \ No newline at end of file diff --git a/test/bytecode/LambdaExpr.java b/test/bytecode/LambdaExpr.java new file mode 100644 index 00000000..e0d40b6b --- /dev/null +++ b/test/bytecode/LambdaExpr.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class LambdaExpr { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "LambdaExpr.jav"; + public final static String outputFile = "LambdaExpr.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} diff --git a/test/bytecode/NewArray.jav b/test/bytecode/NewArray.jav index 0b80f746..ff311c25 100644 --- a/test/bytecode/NewArray.jav +++ b/test/bytecode/NewArray.jav @@ -1,8 +1,9 @@ class NewArray{ void method() { -zahl; -zahl = new Integer[2]; +a; +a = new Integer[2]; +a = {1,2}; } From 2b12767764011948b42211546dccf845e5d3834e Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 8 Jul 2015 15:48:32 +0200 Subject: [PATCH 156/186] =?UTF-8?q?BCEL=206.0=20SNAPSHOT=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 24 ++++++++++++------------ lib/bcel-6.0-SNAPSHOT.jar | Bin 0 -> 632972 bytes 2 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 lib/bcel-6.0-SNAPSHOT.jar diff --git a/.classpath b/.classpath index 8448ba69..7e0def40 100755 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/lib/bcel-6.0-SNAPSHOT.jar b/lib/bcel-6.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..a3753dee01e25048eb8e2e1b4576833ad156a17e GIT binary patch literal 632972 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 z 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 z

    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

    Hj#Sc2HN|Mlr6&R9CDhnq&c<08@q5 zHbsXK!EfuJ36Ou=ZV-FMSS1~>TYByf^PFRKHH@F`&VG9}bclon*Xq|NU+w4|s$x&5 zHkP_hHd|$kT1KyDS$l9p1`hz($j!E2g3Cl+JDQ5AJBziZ?BCIQQRwJfBX*bPH^Izf zYNqByv67pXbxy^VzriTt{13j~DM-?=+t%%}ZFkvLmu=g&ZQHhOv&*)fWmlJNpIU40 z9XsNj^RK(S$eVoQi=6K_<`~Z)q-;RDUKY7Y2I#C~HTi^b?k+(LkDF4hClCtV=2>^( z<{V1U7z%j6?scou2~{kqIaFq{;NjvjOg#?glfWgAXi%iQ9~KX9`#y+1e+LqxytYup z>n0gwlRQ}KT(QTWvlBmlUDpnOt_ys66Y33$x)a0Ibqvmrn+C^U9zcs{-IU%b+u zG0T_th9&fgi-saBy~qc@VZf4ge>h=|P~M5148rQ8QZD})KH$vd&-BJdSz~T)3J|#a zi5MWMAHjg<5*XZ|C=#%|(P%to`BN@XCbCh4jT~^(%}v-R%&coZLsrzUO^6kvBP3j* zX9$7cYZlLelMzj1jgTf50HP-&HY;NTx)QmD=GZZ>xdMgW${h;}y~_%*rpS<~BZNz7 z6FdOJe`Rl&@pyII?0j3fzAfdx0!34N|J(jV36~?G^CO$I{8$J6ueR|2eqM?H$LCea z$`FWk^2l9g0f|*ERt{y`e zJU}v2gc%gO;jr1S!{JRBmWX>bZa^FR?w)U;GlR3xgf%L3N;&BvG?*G{0~g2QJFOeH*|PbnxxOwx3~C)5VWPI$@`H zHL+PW5|m4Ufo71JDVTW;uaJK2U2p*>b=8*LYQSU4ip;}w(luvdR~dHA$83m;K|7S% zY*pDbvY3e55bFNZCsf+By17v$l)}cj6ZYQ7N5JIIfK3*DgqDivA}{IzisGKaytM}& zDF~r?t`ES$T};sUd1QJ|K9}?~0h=>7(I&I-YJN>AxRf`U5HJcR6LYq0foIi=Ev|_9 zzKa64M`@MCZX#+oAvpVhBvftqH>ab`PJChLHe)+JfwOj(YH&(|=zNnWKXmC9p6>Jo zTFca-@fKVY$&Gly#MweN%e z+s-cb7f&S*IT}{tgvsh_WJjkcKuw!KHM)>#?RU@6*s^grz-ICw^oSP~ufp+_CGYIn zzDj0j5~vgC)=XzfUZ77PAak$wwZ`|h&A%xo6ZUS=$1SE--pyEOJG%SV#4m!a=saPu z2p(p^(_Xj;B#7F1kZe#&k-FOr@jc)g`UN4p0j=~DACV^$lUaknm8C!yU1B*T15Kbs z82WznFTs;jso-z^Lw2-Jx|q8Vh#I1Fu}swtg1F}~@S3`VPu^51b%V^~!77+u;zX|i za|9H^k3eJN-SNl#kOr?)0FVH*0(O%zt$ZT~m2pD2Ek$D$uYR6%EfeZE1)Iz~M<$kt z-<;eo&>GWP1a)6@FSX{|BvSF|9N65IU5*R{V!QDMoGr*rykrVYt?~Q z8(ET4KEEWnSQeU(bRiCh2A#wNQijwhyi z>o)Qnn^38V3m!4#d-mS;%e(C2rJKtj^AtXSi|nte*?Ne z8Z|o+Y7@9nz2ail(e{m_MZ{q%6oc`D5C3(u}kavp?DMU;ZB2@Q6rqx8%q}s%InzGt)kF7)mV^H11#lHNn49LUL0Pc_+KhwzXf1E~S z|7jZil-Nj%8W{ap*gXEXGeQ%>8)q5oyQk@pYclO<2nd3lQP%ztDGL_3B?)!Z0U080 zHvy_GvU(L*izyKo*_49PYnHPlh+hJWHl7XID^=mdf1#9LjABjz!dc+-*W34Yj1@nmzD;dL#@LSQiiQfI@^BNplQkqPCz~DL6R)umZVjUdQ-i9JB#9z6+?fp#F|*E}T%X$U zJuL5z2yai{FxQJ<4xinP2N4fd7XtJ^ zH>lU<#%;*ssr}EyJDjh4F2eXtJ#5^`NBK+~DM1Jkr6e5j`tcM!f^UY%(Z0HC*c z4)Y@DYbO&$zkqR}aSF4<$k7obgj724Z;?lfhxJQ;Iy0URQ3K;n%)5Y7;0Vu{YBs!* z5ED|2J76qRzkWyXWF7Yow997;1m8MazW^`t<=sk?J4k)z{N@>)JE0&xZak^0;}3BP z86p&%2l1DFzAX)Z6?Z_cuilp895aopw?SzH)M4i59;9kovG>H(08;-da}panOU=D2LEoGUb7=_0F*zcKK^bxu_iwy0-y)-t;-C1J_jD=*q1(AfRlijN z33UTUGgSqm_PZE)EBm=BmH|BJMYKv15t2O~I_7QZESi$MJ%oqw$P|?~o`CJlSV-7K zn5Sa`Ude{ZCxIJo;)8A3YLHraC}jd@k5=-ZX4Eeb9c~6{bVPMXI^+MhA2?(6495sk1Z84}BDQZZw|OqGh8V%F zDauDcswvttau!S3u67o~uvEDkSnDbs1lYB=fj|MpixgQ7G!pvx#hryaLU1G55%@RD zgb!#hE$QYd1H_;8<$G+O%#s{g+#11-S}qW^_ET8J5**Z_rl5zPMrNuD!XJf#3;7vj z@UbrhBpV=IsrvaN7K)^kL^JzTa_tE;6_TzByb9tIz*H1VL|9IF zJ9die7IQfHZ0}G$iY46Ux5zFF?9x9_`E2f(nY`2TmR~uN@{Tc_fBHM<@1)F&M=vlq z{dNusZV+U?koe$qOzp*AETO()6#XK4>oyM4UeS{Lrs^hse0E+r<9tUToZnN2fESna z7GsHsal5f4LUU=)$iBDPR}8Z6AKjZH51-W|5Vm(eh_lz?uI`m~sb+90PybDX5BW>HUuM7uWaTA%gLXyfD>dn@Ee!qi!8Nu4`Ig)j}mQx1*#8 zrdr{`*EqrH2Yu2vt@!t#AIod+2jk*A7Ngc@Qs>g4+>25+Iuo{!Oya8~Q-2FvZIzu} z-Oev+i{J(3Q0+t+wVIwL;oSuxcDBN4kV0&ezm3rlEw%qTSxAZJsNaI{Q5m)ac?}P( zoEZF*h}nbchsML1M2D87b{4QlhfB(E-B0_4!Oy;0)yLKNVEcwJJE>e zl`H-#WM~=01M@BIAcRqJAlRp;0y5T}eFahs8Q4@79?J^@e3}GEMcx$jZ4JP`QA-_G z84CZr_-jhM$j4jLH$&U%WEog8v#P(DD^ZKIESg$0HMDSEM5+4(X`RKnMyrN`^X*YD zn50n2tmDF|Psr2=RtaA~%A6aM!N;#Ns*hF5$2Ye#DM#UpmSik##L;$lWy>rvMz zF(i`?9k8>9W7y}p144L*eANFMe%XJTV*aYGz)6pRl<{jrBk!tl+ys6CeHYJ4$l-@( zfSkf2rZ@>y4|73dakD1b$I}_1;)TYXiKj`*_8bw0H69_=fsve~epVwd=GZCaxGm*s z&-BTyKMJS}nQGb8(D9A#_@JC!cs~Xi%>2D63I)o%4=R6QJJC8E4q788t+ZJLbZ!{I z^{R>p#7SZI8IbJc6D{FPB$b=>Y`_8cMk`{wko;P;S05=m{P|7(I)1f$v4cw62NN0p zPPKs_i#22b_?hsjWLaAx71l}#rm_&bR{L??W3gnZ{q4Z zn9n|j^Ku%sP*vsi;4iuF7>ulF9;1uc`)?BcPlIy0me?UaGj2#yT^`d57i2mF zr=<{8jgIp}=et(u$`GsUTR z!!re)?WOb;)H0bTH>kdOy@dC9Ms<+|B>6bwlF<;iVGXFs8sk)ZIe?r@e-8`5$f;>h z!f8B(QLSuXyk zG{ftte>TM8MsSLj@;+8x9<8{|>!_l9S@Z#cTIqvn79Z=t%3%&Cqn}ecFTs+OX#w9N zkJh4yT1AQuv@VB$T(KskpS^rxP){fJE_R|2MabK4da@UJ9gjrngmKwodf+cY)!$WwSt#`Gy@vwpE>RC$FQo#ur2 zS333Xfn!IhV`yGbMrgXw|3+F4+Sre`QG+1%{DPcOL-Y?Ba>C6(M9LFd$uPZ5Hg~Df z7R}2DADAC>Om56hIW~3;ZOQY8GMA;O`ctSSS!;%q%#Q&lFT!NU8qzZuoiy>UNzDwB zqvPj=pjx$bxozg`SYV^qgl7FvEwRF=c|h6;LWfnu49^0UNw0yRL&WK#7wV!On6qG6 z$Mf!-dC;f8t5^5+|3uO+i>q$BQt4C&=s}k}IRkRbF!Vvf(bNWA?CrYcN*U587L+mV`T8cZ`WIIJ1 zVfI$_Un8LP#yI$5Y<$RyU1%aReTM6{a(pvyJKb`lWc#s=yhhYK75A(d%%(1LqO92= zmWCW0IdEW`{F7#o>xYK*vM{;*K*E@|uFUFtnAU$r=S=JoFJXZt*bL!+M~2hq4cA8r zNYk7e0pmph?kxnpii5c*ArP9v-Cg6aqY99!kfH2{8q1rLv!Tz8M2m=)>ffwPKapXa zR~r@Kt5~s^&9rhtNtt5;Cq+Ht6|V`aO0b+5b;o(xg7dHqBXQ#ots{24E>2S5k`;p9 zj%;p1xla527;dVn(Ky8FM9JdBZ}G3N&2%Q#$~4~B)XFrfCWDIPFW|)GB<&RLt-Yp* zL4Rl%o(QM~P6=rL@ASfOW-3o|93ZJ^X* zn(_UW#`iL!<02TlGPk&vq6V#|T1p(AS6`2y1TG4<93Cf(lE5CPsJVjF;hVB?XXU*D z6B@6A!*qn$c|8=bn94}DGt&}HT0VB_yv9ZrPMr^iiOKk(0hs-+}d9h;Os_$q+G65c{Tr3&Z>r&NPc=FTe{=O;z5;+IuEf)3tx|B#B!}cCS0>l4I?Lr>K}@CFzY#C z6tH384DBBDD~T~3*+VjvwF+bd9)hd&Sj27rd_3XRT(Gbn>{u@pTo(*&R%o3sRL&?W za;IG_#?Q=c#gYqt?PG`&8&5H?0qO@FbqUEeyHhvUFDuaIRdekSyn~?k(wU(x(WYWX^X^x5Eh zUhX}4{tSGv3{pCrBF*LcKLawzdyBde-G>;wcOixSLqzGY@H#f&}^w}7CBuAoZR1ff*dwd z2KaFF44-Pm{GphU2h~%nQ!5|xhG)=?*!D?q@+`QAr;45Lm0W0BOyzb%KqDE`viESL z?BSd_XKmojnz{kb+8d(7f&suQ$q?n9Tbp2L6Nvo*?u7^o0bRve@Q;2OJ1VakB8xe8 zV96L&f|JV^;Z8umC(#@STbfC-0Ff)erz`&LnQ-Y1suTV!<&Ld0C^j#}odbUZ%Q?n; zszX=MyZ1?)J3Q62)<1glCwDMuZCXXUf7FQ-aI3vNwA_U^>*Rs2H+28Xt2@TGFEYXB zM%0iUXzl^~lW;7osW*#Ki29CEcO+Wg4s(CQ9JT^^i;_E0T4>L9wAb|ra3mCo$KuM? z7JFP_zuigiy`QXZU>QDmwYWJBMkl*B%8tV0i2r26Wl=dF2R~k8Y#X0Rl9244Z`_nI z405gzBju`>pNK+9+^Tk8oh}?*1q06f(8G3x>qZSO9`+W)Jt6GKsKByyhAEQrKue-$ zGPF~S;*1#~YCt37u}d&2ej652U`5|gm}zg_AmiAVUj7ArQ~&EY5*G@;Y`_f#I~`A9 zJq5FvnpF7MOyHSRzzniOYw@?LK#SjO85$*8id^xjb{t7d^gjoXmODqy(HQ$?G-t}X z;&XSjtqB=t^14!X2EQb&6PwnnU+a6g?263V>YIn0mO+y-VtUFF@5up9=J;D>uowBN z9lBVn5h(X26Ecnt+wP+6!K=qPs~&1!f3Y^G9M@A)A4ShYcPFP)XjS6qr!@{KoTYbU zxGJIX?yYi&-qmtPvCbTwv(A1}iX0EUmQ^QKPq%uk>uPHRc2ds{ZUduB+4YM+B3I%T z!}B3nn*zg|P%^Fxthq4mv^Iw>kdcqh9RJh|KEby!uSL-3M2mf(5)C<%$cau$VtVFR zf&|nYfslViG70KFD8Br+*&sc8Kl7)m*j;_8y;{3QIhU@_wCcI?cXz z`|a#pXP+PIeXVNz>Kv}IRd?TvK{$x8yco%=*pqmCOU}$uXewL2AhumPz+$DT0-!~h z>AaNVu)d_jRM{@=AK2FV4TLn=y5C5&+)-li>crT*M8o)9jgWEE-D*63WMlKzg&rsO z(TjhCc>a9E(0(b*;?`3f)RX*BVeN^o6Zc+@soN8IyaOQn5#Rnr_A5*M+73zEgrs~! z?5Pd)v)>~~q5LMfou%^@Li&ut0qkbcc~8dJ9q4WS_)28pzUgiWkiRQnUu%b+NqXvN zUIK;?NPS6ejUw{IKa}^)kiSW9caZtgUP6ZGNx#I9zUqd)B|aqgO(N8^f$0df3k9LW za1JJN8TX7|giBCW6x)j96_us-QVnxZLs3~3tJ4ZqBRMJQk_L!}!71s|3Uwo66s?K) zbd?9oidU!1q3fiy33q#l9o3Af{)@;893!M^S<9LjEqpw^a$1gMw~W*D+!q`|OUnj*fD5X_U(T;0aM zDDv=VEP;@e=vc*R7?Hk3I_Jw+8klgrvEp6j-!z(8fY&0_5R9d(ozA9okZ{^o;oVS} z@KTeYEZuE}k@Msot+3{rJ0QY^Zny0D1RITjFwYGLw3yXmF5dRNAbNtcqFPWJL1zBP z18i9ThwA7Ye(a8{NVxYNpCsDnvD(h?5?XTW%&2Eoz#Wu8D zIFHCRBn!f34y10D7Tm2kN3z@N42o*f6d-mh5I~C&&y`dLi%CR*4SF^+9YpB5hXBj$7VG83VxH=XBsnLM3X}DcnMY z5QZT3Byr$2*vh%lz$WBPJ7Ez{E9?=lVMhnvzJk%}Q739Qe|Oe-U65eL&Wg!krUgES zFRL!kkX=+H5Lj6d1hGQ}DDrEd{rtzW4GE~2sOc0wC!mw7Z+5E=6#s)G%?!TF2O#tw9@w4 zb$LC=@3@=Ydh{C&tj(`)nS|Gy8~+OT$}ERTukp-8H4WyO^+-d@+9T#9Frdm=B)49E zI8Zf=RpBwBJrl}zWV00+Yi%gf`Ks=j5i;j)uK2QePKRreO6KG+9b&JCe|7D zKJqr=10g2r^)AZg_FkyUy>+^?vC>Ap+lweO(UHXhII{4@!q!U{D(n5@de5+xXQ&lcWQUPIMAI@6428x1ajahGdXqka9vuQJD*Tc(0@}P>-U^+ zi&W!rjy?UFnlN)-lSTC~T#wC9?8ol?Q~J>XWBE3df~n%^i@_ z#d$-fnxmU7YXx>D$fEwn=}t>$^J zXVN$j;Iq8~4`ZR!6uXC2EV3xUYZQCWt4y)RSM~sEp2H3e&@^9xG+4Njl`^I@2ge8Q zRLCV$(=wzv3PW5IAPIdYBHf17@;eYxE6*N)xxgi2P`#;tE@gC=)y)o6|!$<3!jcf}qE zEIC{Rp?sE)5LS==V$(-d+a=@V4gMW^>Wj&~&rl)C7y*SlY6Ck^!;LCR!Z>g(Gq2+gig~Y6ZLn|z%i`HK(N>UysM8h|>YQxQ zTbb-z6T1=4*S&I}F_O|b`E>8}ytURDQMnfUV=wvXWg*u&c|I}D5NS*^=!U(05esM$ zeWPlX@zkNdp*MOTLiTJ~t!i0a&t9D%Wq6C>nCGJ4Pq-}zxz-kxsozr$k&iMu)bKn? z4P8|C1DDA)?Y6NXz{c;lPDuat8id7|t1r7kXLsauQ%%HD(W*L!tgCp6Amd5R3{$f= z$F#nlQ?<%->OwX7EG=JdMvrE(T$U!kBMZvrdBpVOv22a?o@WRgxS!sJ2QVhQSG7LI zG^sTGZGe2=RNjvpz!K*Z^&fR73Fd#urj7p9ZRpYE>-*q zPIzx4cn}6UOmAOzv(MXrRwfK-hX`TcdoluIh-rr^X0M1lxM4o7HDq<8$`}VBf@}x4 zkut>7vxiKZ=?iCuLHb3wodHB{20!r&Q_e#K&%kj@{zgNa4|U2k zI;GO_X!>yCm1aH6v7Nh*b){_mYPauGRxWL#PP3hG@W!}DlZOQcwh*UGAu0^1ue0SH zhxyD!rGkt_Il|J7r7MdESC0QWQM;j0B;P>9#Q+ser!?3Ja1&0 za8`ha1M}|TWc-m(t}eGZgxklnk@@fxkW@oBOUP4!-~s+H1nB|p62Wo^Y@bvKWil|W zVHQPe8$IpFZSH8p0mg6~#=F2F_Y2w)y)FaX1)e32l;2 z-045|Qmu4JP~i*;7kMa3D)>jD=1GGa}%7vENzB{i#-h2 z3~1KS0yP3{KL_p-p?rIHm;k2E;%MI98MMNk!h<0i`(gvb%swP#wkhLwkeH0I$XwJGKXEsWC84@w6VRg}5Ch@@eFASB4r{ zw#mTNsSaL-TvD=jiNYbVN@KVdTDh6tZJGv{s=_&0rqk1m+(o$^cAVepOonqURp9P> zEMUSeb3Gqg>&TA+>zpqoM<~gfo|OzhovTel=o#$yMs~ko_XOMBU245>W^K>DexUUv z#eGD9Zf8A=kG&ktE~Gt^ zBg(O(Xc``ML-uNH5UpOM$(k^)VOD;#sb_JlCUX)84HnrSL~?#vazg%rgdr$KF-VSZ zYojE4nhQFZ$p)I>zQ##BeGb<&lQo^6+x0nMacf~H0r=hL-AA!k?Ydm8u5w#%`SV|t z-^ZcTuX%p5m7kiKojOR}`%rC?M%r25$zqSuzKG}H?!e|Nx!~kYS^)Oa-sX@k} zI0imp&~paCNqrtbGXtA&J(8J&6iajy*hu;$Za`f`9~fq|KJF~!!6syLzm#+~RzF$x zXq>6<)NusN*`6(T75?l<$j6^B*U)3fQ4io*GgpBCj9>=^P}TS$_kupqOGquyR%mOK zRl0hiUBdt=P+b!Hiayx@445wAU8VpX;53*nV7}6k#K}{y(_&HNY2?V?1WSY!1={gOHyTVdd`S>3{p^``9Ec|&!^01f9 z4i{ce)}ehSrlyJM)V^hAT6!xtEf;@ zkaA74vJ&dkVso}G4fboac8PrBm;rXu+I+SJ)<$-2X7u3(OUUSYqQx2!c;ett+)#N- zqmd}S04&xpt!F|Oz2w6~^VAgbI)xmoBFL$?>k=UZ4KcGaNoY$E+kt%l+`V>t%S5bM z{Wc4&L(jJ{2WJaJQt5+Xs)~Xb1eKmPUoJ6iaE!F%vbcMvs?l|YjVN>k2@kpFYZYob z3%N-VlN~J90b0_;X`@91)0^a}yfuj9a=BSDXK*F6Ud%9hXOw8p-t+e-$1!Ym?vTT> z^k$I4!Rj|o)U5i$&?Ld^cx|&&rjQwp(05*GPa4uQt)Fi#^Y&Vwv++yP%roBiU+O9M zQA1?{#*Q$T&{SbR7z2BXEUAfbRAR(j)OtvFWafz01nq74+g}E@g}uGKmK0E^O~F(n ze{7;jG*g=p?!UHiM%>KZskcS@ z9XwMPZd|*B2DxtO)*mN>c|hlG5Vxn}yjZ$0b|M&N@w`+hl~}}L9uFjlN28JUb4}1w znTRtk)J=y4(I0yldZY&34t~B&KrnaH-L?0;_dfUn1V=Cw#^Mg0yK-aT9qw3S(J6+B zVD$pYTiFlF?UNb7#J)LpTS0V&TUYMN+Y`F*;E&!X6uW=0^Niu zn_el6O}RC?WROXemBlM2t%eD;$rW|kqjIHn%wk(}_OMNA_Job8K|1H*=0LrQtWzDO znY@`K)1GV+myE=OSVURLVMn8-L?(HedqVPIUmWVR?Yup3+=A%zRL@2D-o{*H@K)RG z6owRMO+hH4d+}p&fqCRzF;v(XmW0w@aVLeGn%#rHe2nE<8ayg1kH7(O3UsT+3v>&W z%ZeqZ51hq1XRi19Az?bDm!^|+in4@U64@F;YlbW2GD3k_6CaqEMMw@4o=;e>z%Fki zI=SL5iK<-V6geS|m5aq45-yFBW|=3>9JCf!ixXtLRDZXL$JP%| zq6v7%ij0zJXbc^D#3pev-HkEPYSmUxYn4)tBjxStL?}}NH0YvF+nE61BV3d1*0JAQ z?E~d7c*Z+}@8@_f3>N3SYAUa_s#w4=dA7TkPmo}~?D9+5o6k({mZan=N^!niN;8WT4;M zYEaX6WoN!L@--5q6ueqf$WYr53awK7JIS=U^)9_nv1G+LDm}ql8%vAcm9TV?RKeRH znTB3)MRq*2L7&)@aQxb;$p|RsnWZ#=OjIPBou}Q{K%8kbsQQu0=;4o>jOb#gWh!TB zI0XH68f_wyFQ^eRH`VA?Mb>RuE(a39vYN%~pmJbKm?R~Hjeol!5!Mt|T?S0VT4K~A$xe(>8r771 z%sSX$Ve^>p3#Ovv(x3(7J;u>t~+Dn6)M0w6xWUuL~^16@YV}&mBHk+E!Jyb|MR&RMrzM#>X z#!V5oDI>=xoyrU}c<0dOsz8RYJ<{S;DG#d1=6{Xoc5+K1uwJs$v1Df zt6C&?U)GOqtPUEh7J5%k%M_=*Itg!VY+Cd@{FN5pPt*^>&1PYI|N1r$$lJbARlt zWY2%Q(@M#f?0pHLe&rrB8`ceB1HE3B=!;U4{aba^B$01` zaFdw>C*v*TIHgg;&1gG&pc8F7o1Dx&q*8qV=lHh zFd-EiOOhj{xpHZOLC{1p#X{xG6{}Gpsf;tFS*gKCc+kk5J30^c018fSzl_BjJ`ZrS z_=4q0`gkOpivZAqs7s>Xn$%s^0X}M2{3w_E5(U3dajWPTmO`l5@>8fEZ|B#`PTw20 zDau1K11xsfA(-9SXJR-F;VL>4R)NkgPEmQKeqprtIASUZ${*d%&F8Z(?7+U`8*`a zVS%2gn6|T@Dv_-1Z}tL;WuDkqSSjf#a_VG5f4!?wN+C0I^iLJd`?1SOQ!)}_uq?xo z4q!#3wc{M=`8;g!F`lGv_t*Uviw{H_C{dwdnFhhdW_)_SPsqDWip^Ag>l28LkU`V? zvM--Ai^d>ryx80679a52r8;N5n=NL8wccv|s$}&!e|t6i^Jx!16)5xzG0@{iwhaMs zTSWQSw#+-ZH=jgbzM+>1r4@p}FcS|<{DQ`S5pHOL;$tJ>M+GnciIJ5e z{~DWF!F(6sK)LZ-u@kHyY)@U8*)4epFY_nepCDVd!E7MHpx7_t7&T&@TfC}$pJ3D5 zi>nnmetlp|Ro1-ftp!VzmRUiHHcx?j19MwFewhNW92CUdUk2 zsbqtWZXDbbUqoNnl%aeQ|J}aymlYH|{$T;%T|_*!c?Vu<<-zLm{<0=vrL*<*vokqa%*n(pJ&(=&F1&;7>q~e=m%FA~l zcSOAXpt$do0b(2Uz5o`g4X8H%O|(tn%7Rb=Jxq3eky-IG=myGS9efpNRuRsE9A!q< zo-_tZ>Dq_H<{otFTE)7!27n*bbRA}6xfB_1?f#4C zcKxJJ$UXqq#}$Qj5#9~2T3~JNM4Hd>>>R>MwuL>!+-X#w@X`^06wVmu6fWjvvXY?m zx24IKDr<*d3%o5#*&edcp55jKpXsE#KK#Rn5zCUp!=3*1-SzI-YHT)ad{J}^Ffv|e zS17Y1d4P~0))dG#ADT9Z{RevVWQc|cg9AP30E&=WdC#ES!qg*ND^V;CV%wc+*E~b}>lxyrI2Nd8`4< zTSYf7dg_$&V&?qFZNA_({()+-LWgZw`)h}y%pJX{iBH^zrS1JK;NcHR}d$Uvg zL8-C1RQY4*1E&5W{0CP=1VqrH@82iw_&eBer`oNniEUlu0QW4klF2`8s}+sC4dXnF zag>XszsZ{J((cO+EyypR|j>xU>#{~B(EB& z>WCVbh^tl3GlhoS2*7ZyW5n00YuYN(#wl{A zp<3tA)hd44DvnpTls1Z2kQD4ttqT+n+X?cx`UGjT`Z{T-;UJyCNUc*uLi!PMQA4zp zu@OgF8*i#xgkbdvGU>JK^YDnaA$RKz={BZUl2o#gf&kD}ILW|#Dqb>qyOV7;OW8b^nd&2lT?R|pHkVix?{Uq%$2{14o7{F* zVN@aQJhP7tMA5M*efZ2{%NDLpjH_^#x6NN+HBmLOPH!8#DBEaVtnMkm)04TIv(SU0 z-Ue4;R*}y<+IH)KJ+&gZJKZ6sdsgoSn zux{3Tf>K@`f8W2|O4AJBRvtJvHhLIt$a~GK+Mp^29?UkNyEY{FU9xo%gv~g$ z0i!mo+?~H;JH1`YS=-)P8**)?KUFI?Q}mbK4h%I22dBJ zI}ASTb{IPs1%@{0H0mxvD1Uv<0=+CCu%Ap4)OTu+uq}omn-MX{CmD=+qG8*YC@&kD z!I+pdrfD}yShT$2APBo_KFpt7TZh3)@I zvdebc4lp2o#V!OF`*YrcLZ+0U3zfwtAd078cC;iNWCvE55R;z{y6ghEQv^>3pA5jc zmC5bw+&;Mds_&y1{ymIBsHCOJ7gCk}TepWVyDnsN(mztM0f|-XNi(9wMsue^m8&zc zmFa``o9HmF_C7Lg9rX1uvT3Q+@Vg_amuWcu#`S!oWj)+4(1J#>4N}TRYv2VPv(|<} z8FP(g6EW8)kYQoPQ0Yn?Y~-S+JedE45dIMg;UugsY;;mKJ}isaQPEh!75u-%@A3c~ zyYZj%;P|0V|K}6?&l&%p^ZCDCqGe8)A8g<}^YM1~^Tj{1HEZ>OyJ+qtNKoMFj$rWt z=13?q0pX!~>r`V#`XspUYluSCs&eHh&7oE7VM{d9e8nL#pTE#A<)1b_)T&ZGy(xbG zHn*ljg{8lJ{d&K{uD5fXW~Q<;IGCMG>9{`!LAZeQ3*+h9uySNqgXw%rZYG%+mxowT z7IpLslk{vOus+Tm0{$Pq&MGLbD9rQ0-Q9z`y9al7celnhBzW-P?(Xgov~kzqH12c< zmyl&1}}dHF)u`^ACia@)!)aI zC1G;Uj9wS{M%W*D>l8kcge}LpV;^lrb1XldmPro*L|f4&Sd~JsZ)sJ{>2PTA<#TD= zxf09e?|Q(9B8wv>#vE8MBAMqylDVV9ROIAWLudLdP15_Q(cHAN9w6sjYWMo+GB$?h z=md+(@ewN%bxH0!s(pVy(*8+h7T-bA+_|{K50PXBLec|u9w zH;i6Wcq^0s**Q3J;r~eT{ZyO(*@Z^Utzl?Jvl}9C;8QkphtIP`SnES zU>O&^m^(RnTQyR~?PYaPb#i5zQ8?GmG{m(_6FXHxNI#6~u(qf}^ z%s1D%#PI2KM3x}^X}2#G>!-o4LzQz7O^n7TTa%NMeU9aE%-gnnjF1yn)D3uV zR__!uQy9oOocmEUOF!*e>b(F@MYa&8?Sfa4ZREWrlJ2Wh8hHpz!HgS{x1uo&2giO4 zobPiDf)E!HP~+wg?g_P*qu1pI~we?G|Pn&uX|qIpAw2<(9nafjy$El(&~I zv;UdbB1ib%O<0~1$plmef|P|3I34V2l{SoSz<&1NsY9rH^@f(;LE-Dt++A70sQd@D1_T^;h ztk^)b4F<}E1YWFW4`vG5bz7o5jf=!cjSigBy_UZ6ZjCNlhn;0o&DoeV>v(sSJ(wB?#&<*9574EC+|jp=-BMfS*i zk>}Zl_Op$Y&(p&qbr@5T08_gJXeup4G1ezUYp1nm(wflbDAmWEhEujK|9i<=I- z3zETiwRmgTbBdWA3L0f%n%1Mi-%&!|``VfI?7g^vudB0g$@lx?K=`F0OD5t@olf9) zBP4aj5#(bT@^}D)FZRO->jh62FJn3<%|z3b(^D7N8a+}}EZEQZ# z4wxL7U92aQG(`sn&qe^(J(+E1=+Z2^9E9>#0EXW9#{`?u$zO2*aUc6k{jeGQ*qPEM z_#<`}7XJ-@d_*8->vNP+jB)sTM9b7vb@PF3E{Da#CDLRZMw8C;P>^Z4hfhWX#sM|1 z_t$=MmY~$DJHq$DkulaF=z>--W4?d3U49eT;ElQlk033#O30_7=9Z%98b3S^w5|ih z^R(4bX%X#ilV5M?9JkpoVEGuZ(C3X(E58>QH?qvQh7bRX2wWZ!#lHrgum(Yyl?p$Z zbsw<=MXP|h-q(lpzzQBu5CwSoDs?x^fDXY3ey0?Sg-WBn(B9izCJay{4YB2*#5 zB1Bnge=OeEam?Dl4Nu=a!asX{#&$B^XF}6tj9JHjM>A^ydj}1V@UsS??8*u_OHcz{ zDid0~eWu-8qy|?3?b+ySq_+FQ_`jwg)^V=Js~aLK4?aFxkAuLLh#U92ZDcb1>)}V0 zx1I=!Mp3a5Rg`~&^TEM?am2YGR@JgEeuw+_5jJV{l_;dk=U!SZBesbXk$Vi3;q z8Dl6Duy;UlN1EUCa9466A-HT>Mos4kSFpemw-ojiiurArnj;^6iR1jI`pRg0NuUd4$Qg}BQR zeGObxWf&Iti&W>I{?V;n>RhhQ3}3_Hv9Pj(p*L1CBMz=HHbk1ymp#lgz+t@G%ahBJ zc12l3M$y?sC-#{BfpEJcJ>w525;ye%*U@2WI%#)qJ7?F5xuofjs^p{*2G{%d7!!7% z8!TQEBbLwX(b9S;I#McV;TCS1<%&I=eWYs&eXc(h7HPH>IEl6)$Bj%N!t1c;iCqRj z*nJ&>f7DfpmZ#cFQ>NOx>X+j}C!Vb#$gYivo12_a+uB1fLCT||P_3^O-O`Q^E zKJ9&RQv-C#E3T^6RY_f3M>wYzdixT)Oo zUQzO4{L7R;^nVU4TyTuKz-@U$1Ap)5%kw|aEle>}wz?iSU)VchDqU|kEZcsTj-IdD zcZQHmrl*tdZdw`~?2%LLFr0#xsJDoh3`=*ei`JK;mkC}&dHCob%^YCI?y%Ch;0u@^ zhi~n`C-|;Qg8Va%wIHO}fv&;P>=ytEhTu+Yis5vwlv3K3b;2nO@p=N^=@ra|TIDxD z$5+Jro}%P!|6zcYORBhaE3Z%4{$;_rfXjil&sSPbtFuUv=$TUD`Sp8=_vIAZjuI21 zD9s?xuRmX3tzPazS`sDB)z`2k1Kf3VWE>_!t4B;Y>N|LRe$)W9vyAVxtpmDKNd;q- zmZRn(&8Mn(oRK!oLLHxHe76)hp!f!7w9TFeK4JLIf4Wn;V)=_)AGwm5?Rc;BmG^IV zr$LDsf~fD{4dRXKr{%%Y{!gs_o1bn+UEz{WmO4VyPduIBL~kSjECHCP0n;*@U&wcm zW}EK(jPK6FQ(eqm!j|iPru$Nq`Y#F();*&&aJt$FTOY^Y62qBVkyzJqHXaN_Ap@lt zP`xCNMHO{}3BJqRP)kIW3?OMyk|7VGEEWEEpA9Ji`DLQVp7A5nHbUDDIB?*!V*-tn z-w4M;13_ZVFlV2Pig3P2Y>v}aer``tpZDpc;DKwh@q%k|Aq9UL6atCMXKI5s+ZDJS zY&gE(B5L;R^2%iIF29{QN2Aib?|i>r68$@YY4q7i9?Hn(Qy)J1#P=Egkl5hs->_Og zyb9MZ=fJkc80D)_I!xX6#u*m3?J%VsO9RvGaV%}^ERFYNk*xkp z_9)~~se~ovMCsPnZ(I3SYc59=cDY^vce>9IhZ-9+JhKu9|JK@vObPterwvq$@P zWw-LRC3LMIqMd2TdvG{s?nkjZ2=RC^u_y`2KGiZ^VLJah#F0)Nk0)D0_--yulSq*< zOPwhUPe7hmn8dnuSU@IOLD3&wm#IaGS`|NVpP1I3o`MD6lZYaNg_AJN9HLBdZ(any z$ZgBWxJOl->ndFjn-uDSm-L_$XU~D-AAsqPEuBwOEZ6a62i_bw_QZN+I)3r#Av!oX zmJqys(1w_U*|6r2bUeD@m4PLoO1lrqRn=je?a0W+<0jY^%w9Vx7j_zA%Oo7XOAk1Z#IQ2?WR?=^0jgvRHo zj1?rgO=1oK(fNXJF@NjP2}y>%8Mm-Wd}T4VvVt@CZG@+h8(j@Ex^WP#gs0K()Ur3= zJfRKTU%G@gN5DkZ4T}Sx?gNzvPL{r+um1T>b1;1%b^8a4Vyyetr3!sh%l7s9%gvYF zPca9^ROEYP`i*3hI<>d8rc3CI)|bzdRtU*szvN2}vJ%-N*FrA#Z7+T3Zn3ZRE#{KR zA9`?@go|Ph>CuQhLuSggyVm<>WbcA2!M=g{c}wDruhl28JJz4wn&)NT`(i@heQ+y% ztI1H#d{`LRswS{Nf=NZ%cqD*Xe0?74Nm>1>X9Rx)mync5+@B#AxO-$gHr$os+^0zc zI+TETn6A60uR=HGEfYFnoDb%W#Hj5EXGZ2tCx@!~RPDozG_q|%1rlCjYxDM1iYWb%SXsj0D;HEF zk2bg}SI!GnjgYXeob`)LVDC4C?B`v-%Q97Dx01n%LsvMcN!2{?Nw>KbsrX9PPA=$&;9fNKOB%k%-r4Hc6u=Q&=*|0y8dvWkW}I~l z9lfwUb^XfO%K#~U6|Y_D539L{0ptvaZjw=(w^&hafih8jg=0YEW6_PkCemwf={*ZM z9FcwdFgY^2K?+iW0h|P8kiyssIQPKNZ>I^%N7yxzfb4O2DuE2lKSmACw!-KI`N8dY z^`f{5J`8Ur%z?oox=m;*%z+gX@6CaeSs-`vK?}ozzJz z>|kbFU^XagPY)@W>~^LDQ2Z>0FONpAfT5ZM1862y1S5uy6`CDed{G^!`eVf^n}$F^lVxc#JcEoz=T`2XDM9F&Vk49 zHzmKMVUX&9|FdEY@4vv{_oFcQkVMLYKq4yuk!}O`MMb*dvycrAIo&wdsuuMFq6o6V zA(OM*r`l6QMM8M@&)DJzD>@!yBgw<3=ZJZ8_PQ5qqBnxxfo6abu3H;o z0G8>#Zfs$OgU)wQF5}9rMXhW@cW&XST`mKgi<=>yDxm zb2({BNOvARo)b0Vm2IEUrV?gePxP8ho(zE=6 z5KXDOt&yAwizW~11qu9#F&Kl8i_eNnYXEPc|1PM_OQ zSc?>&$vIYWiBb@o%F)G?f7FQGk(a5=2`MjoN8OpbNN~BF*)v(PU$d(M8y?W?8R|Mw z2ba2%Z`Ukcg|Mga@_lzyfjoS>wJ`0uiUR!`$Jq@e5N~?l0(sNCc*@1^HqJPIyx8e| zyI!dp+=WHKW}PzkZmJmt?hzNDZ!lMN>(P}hHtXJ2_-XaBHKc50_<;R&I$BzPtVJ~f zwSGL4kO34lacI8fX2c4%4Xclu{tnBSI@Zb5ZlT8)HrLkF$>*6-9sFRouL<1U5zl`2+a!F`OXK9}V2$-ktD# z2QmPR`UnJwr5`GLi1^}`=^Ih6bZ5hU8W_Jm>=EL)6|%N(#fCE-4ly9uf5Pm8OH#|A>D1q!f1HYck*c=(69ZJ>F-5AUr#&ZZ; z6ZQ?h-M;9)M%OLHwvO z`I1?C@*T4_QVqn-0j4efn~Rez5DE~~aIl0$)$?S0B1^3vIl&EOqg4%J1C`fA;{3!V zpkv6k#AVZv^~*iYvlgxB9wF@{_@&`6J@6M$lcx!saA&i=>R{yD9W(nia_t9A&yYTV z^aA}0mXeRwXA?iFyKLZNkRS{v)NIcN^JR(_!I6=q;sxq!t|I~|&&p(UtPxTQ{KC~d z{!g(p!3C{8GF|xJo_bZvnfR~Wr-FG-ffF(i$KX6HH=?;i|0t8&z*$A6`MCtE%GIgE zD$h&ylsrH^GG2iy@CMWyov7&A(=VW>;u&aBm6&|8kcyn!=jazq-}&5cszv2}z4ar) z@eed`{*NKgTEcLUwx3pxf3^5Z4wGx>qBSdGEpZC9b*?qCS=)*zkj?R3?%@gfXNO8^pM|=lClnXvEim-Z(|B z(21n>1j3H{-WE4kLjp2*CzIcQsU1vBf_BKifIee_(u}&DLgS#TAC7dT@_aq$+QE-^ z6*>kft#=`n-^HjZxz9B-dRnDkql1Br^|1}r5!Scc11ww4aU?{FdS?25Pc@w`TVx2x zskS6m1-+vDSo3Lyk6I@%PsDInB<3KaRMXv}yB9X=1F>=7qXk#+C#W|}M=%8d?{EEB z;vU@_;q{Q3xo|Kt#?lkg8+85{J7Zn2jKjT?V$JS=@Dpp0^w}ZF`y9g)%xw7~5ta}i z5<)#bd_KK$ufDu7eXd^^Km%H3kR9pWv~=mbV+flZg!gykOA@VYG!&KD(+Cz16K>cD z3#T+GePj$1r!ouHIu(O#4E#{H;^7Yxnfj*`LgpR(1Ky7DH7=lZU4LdN8cs?ZDM*jv z@=*fc7y(DS?0m?{JVMdt%!{(NY~-G3#bUP*Zg+mP1@aWr?3 z((bE~Dql5Q=|KlOxaw39|Ev?#z_gaEhaY*xS1gBusHOeRYt+mAvhtFV`e25g28KIN z<>^^0lSUwhb>|n6{+j}Oq;h?-j-=idT2xM-;`PSP34Qcm&68eRJ4Z`|pFX{F{cjq{ z|BuS~p8)|0FE0-VOK-3LCY0pqp?!p|z5h}4(f6O6oUp^uGGJn&BefrljG`eY*$`|t zMGr=YUBM=+$FWSc|6n0HW2A|5W-Ytuu19T`c(#|i@KHfZO;2ZFY>o73ZCvzeb?RA2 z{JMCP?qc&{9Uq+aS2OboznXnN+xEN>eGGb=>pIzaOY_Jp0g9+f7z_oy2g|UpX+uVc`@3%5Qkjxm0(68zP zC!t?#p5JUZ4r1Ydg?!*Ooyc~R2i-275)%3sARR)c*b2KV5K*+i4$s zkF|Mvt(nW6Rj*qo>+$BdP4a0wGqP+C=k~Tz;VO;PvPo7$oL{HnYSqEW)2@7q4qlT->;Mji%p!l?ybIN+R z>&XaUN0$q};XPoJuXlzwhDcLopQo`Y6(bJz$0L5MrLWBD%CG^B;9h!GV`lcgY2{MRS`56kZ_ zMl=S>TM0cXTai|D344{%9S3A|!36zs`a0!>ShF*UG2=yXyg5w*E5#t9p={v#T1qsK zzL+rux;0*%U-viE8LQ^2^2cbe1qwG+Eh^dwA{@?2$yv|5%-w3$-+wZ>Q#AO2HjBLP zbNRD7k4JoUO>}wth>CV|N^O{G|D$LViG!Au=kg^sk|cwad)5aP>Ed5 z-o@Ulvvx+<&%5Jy*N>7Om3K09Ho2laqn_VM+uJ=aBUpMc7|FYbUmjv&ota45(-7G8 zg~E_7Bm;?t2Se&jK-5iH({TkVaio7LtUmaUc`WV-_mBtVHm)d2XVsXOl$7_*!-9VR zHmD^&-+n*?lSjsP6Eo;`Efs@n$<)9ELydlbAo}==Zu>09nc~L8D_?6=$+k}I{`(og zl8QWUPv0w=gcvQ;D=o7y#v{I-&*7&Jr|EWd$@`Gd?2P&xK<|Kq{xf~SH?Fi?$dsx| z3qnuT+z18eE6cDOt-rbap}*mu?l+66NwDa_5 z(M2t>*C0C*?-~Q399|pw9KvO3Y4}7|VuQB-*b1RYzP0a#?jUc9O4Tz966EM=YI~Mn z(uy79s?zMR#}k`O*|gYLS&E2mS}b~pLh(X;93eP{y88Z}p^r;Y@#xuJqW2DWd?~Jl zoU=Dao)!(f{#^?Ei$3u~bn#jvrASzVRP@nKo@G{KCw&S_t$EBT*1{zqwXu}+Z($R5 ztT|U{amT$eDyik%yY8?o3Wt&gjVazp!!ajPJT8kWUh>pz1Kd9Ku5m_WAZadlFS;xR zx7=pJR@fT?#Ys9NC%N`-_K%g~W^FI8n@?&nIGdE*CcQ4UGTN+xdw$2#Yo$3h`nOX^ z;-HQaW*KS4X5;P7%WLxkxhSGYo@+WDmT!=Qlv2NW)c9T8czxQal>v1HiAuz|*$v;6 z8JqfFc4nxaCwLTv-DzHth$lSheG&mv3Wqdzy!hnMWfdi&6*H3x#CF58ZY-Yctkq`y zp;P36{CI7$M};RBOceL7MnYqSfnHvIg?2agyP2dk)TpzA9^~2(4>2;?L-R(P@tIMg z7GLNByZbGZ&I^ASUcSG41eLTGwn#N4J$h`_B@d$a#WuSH&Sp$PL@F{kN%q0U&|2@4 zZjDb^T@BZu7HxttY#hm$jl2iSpUL%lwG6DMFtcPU)Ke&Fy!@TrxDI!sp7^ zi3Vk-!vh8*+@rb74iC(KtZ zg<2MvZ@Ie|0bK%$88TwMvYZ*&eoy)1v?MeqMN~}LTlku3+LBN(37hSYXa4!g~ z`D3;Huv9Bfo^Lrzd{U$;_{#+6QJnTJowVsdAm; z0QR|CvUElW!>}l5BfVwqz(RPPPsZ64Sa91SFm_$#dIbc3aMgqhpU@=$Os>m;YMvyUfklp^X1O62(y_mG;=vYQ3IBcQYVk zk%#&mN~P(_J!NGg|IIgOwtLwLIJ&JCj6=&FwpbL^fz~sWEPN`AX7K_%0zvy8*hTnq z@%VewHWOPmpHH?tz2^#>0=ysQOz6VRCj#s4h)sW=hP-bS@Tn;|`Gb+>GF8p-EE9T3 zK-%I`&NYW*RZoRlT8*^{b0t#<+)#&L<#X%v_v@8J=7!B*&Phb9`e!w{7=((2lSW6p z$6ztDvW{v|`xie8r^1b6XDd~=`@j0EqVHXOD+b1f&`PgV`a4t)Kf>!SR1dhCn0`{M zr&Dx^h&PLhW3vzj$>HVsQQO2`WAaXZF2R~C=H6q|S<=~mFnT`lj@{M6t-KB$z=;{e z4ro3#i4G?_qUp@HL;7lPhrsMIT#x(26c#y`iJ{F1wd52~b3A{;-Fu9W(9xTm7n`OX zdl~}mt+U{k^7p-#_1)3vgyDj8+EQ=65yAJikc?4RC<>%WE0v4^AH^0cN_CfQ`Az?Y z8jkkC(c6-Zpl3m3Co#W}qPe@z;1Wd_&!jfl_~S>+A;fO+9RcXOw^=*c59W1=9S?1M zxz%fRw(i^9zYBmN<{!3j!LYC`uHpNT0JlC&w;s+t#RJw@Yn-A( zIu7h>hhHm?--$0zHUhraEZuja@_!C-5Bh|YIZX5GJ7e$kRiZm$!{-D&&M-4-iEx^{ zCvDpp=QhE#?_q35$_aYUS}{Q$x`f)}Zlh9J>KkEIGj6jtKL zw8`j~iE}mAKG)O(iM&PgwT-~38;Nr@Jsb__2M*q-bCp_8#Q}(O)kHxGeF$c{6r;E2 zEz06!y=KEG=e}T_d)gqAuXya${e%2l$iEov@alliaWfWMV+i)V)ZVC%2T+-pW}h%7 zGcS1RZBi49VqD&M#Kuqb$c&z`NKcvq+V6u!MpC2t{Glj@qBN#{yPRZ_hUFwpXs{*SKpH{NY4vi(!Vp3+Bq;+Wc951IsZQKltnE2 zIo$PigMkBKi{jS%7C2^U&vMElOnj+m*u&5Z1-^qTKe(3$c; z)NuZBLELcIv;5XazA1+)SSOFsG)QDeNHp1F&SjV89CA-^Oz>1q(@d3mq&TNAp;os7 zuynEx`KvZczf17q7xRRF{WGxE7&v4oE4aU$>;ouBUjN8Xyp7zstIFzzt zDI~PIC?}4kP){M@UB@)Zd&ybT&>d)dP?0H=M~!J#!4`Fi^NKCvTf9H$Z>HO`ER^#( z$I@H6Ft;f2gB9`1CTNOQb#T<$T+GSNZbuK!ehai*^&Ucg^GVLY0jC+KShGLpdPpF3 z`zLY|E4it;9Fch@c39;Z0x!OT{J8S3sV*JGR>L)I73VdX99eS+JJPD^;*4~@i4Yly z3wG1;iQ%p%t3xTtP)DmIK|14FQgBbqC~g$p5@V;v?6Z}}aQtbVqE_!)rgrKe?z53Q zQzcDJUb+78yqML3m`xCUF5)THlT+TuHe8fAay8d@li6qYtPxMgzR`BjBiC~qIHTm!t`PbFrlOBv+E)eDdY2^oTJ=UfTK%pZ{Pn{}H?>5%$O@J9^`zuU zdo^dZ_=>0swSeNQ@OEregE^|66r(7g1Rza3{XX@Ce1J#pihU9!2`QSO{U6;(p2a* zO5zoaCo^=DYT`M#`I+|-=$5Qf_SIOp6f3_)>}_~)@w)S&%8eP)a=TFxsf$GCIW6~x4 zp4~kpwJrL$FJ2TTtR?_KIKykb^}8zNG%^MnzDZw<9uI-RLZ9?|Gc(x7cuEk{^#F=L z%mlwE0Z9XhV~OlL$(CbipCBQTgTF}CF5c_opl8+DX3Dpj-1Xwx zv9(I)?GTFnklVux`UqOULW_izlI4xUl{`na%qK^cT6Mkb-yE9NlBS`pdX!4V5)pi! zgVv8(^9!ShJ$;t<0#}rrAxl+yPI4mu6#)X1H<6S1UDstc2cAzNMa@<2m4N`28}$ki7SsZ|Os;H47s_t}dBjr|J4_B` zcX+1^b4Mpz3>3xL(1QkV{=Q`!CXH3snKplxA&N@6$3a{}Bm(h~ej6D%f9&o%Agy>} z9R>dHfNy4crtQte%~eX<;_>I2=D9(vR2eC5vRZmjjsCyNo>O?CBd2N@W5rrym7;HEsEA?*X5)GI)|@Bv~QD24NcyZv5BHw z1T%A@Lue&p;Ais^z10qBz%cR%}LWhOFe#LBh}RGIvFvU z26MrW?%hB^oKE6TZKnkFGnaMdt7zFW+#gX&l8A+jugy6}SoNUw(COJfZ(Ww(7%>YhQCo@#LM&6S5J9_2IRsFr#loBg^nMmaPBQBN#be3}s7VUjUlcO`u>gEu zEE{s-Xy_6Ytsb}7+}5Wfy!g5ezA*viXjz08{EFvjXCG=2_4Ie3SU`yvWP5HBgm1u^ zd!m7_T$`S0{K%Ak|o;Tj>IHb^WjR#zwEF(cisFM0uxiKQ$?hy8tUQ%%X!bhHfU^4X zV3lq;Z9B?FarJjjg4fwRMADk$1m!XUK@ZS_)V9TDr6#N%xug-z%>iR)i7%NMdvq#C z*dRgACQGodKX~eOpm?`uSUdFEMBLK^A2=Vine_;l8z1OD2BSab^t~-k7rM`nx;|75 zFq{Ln{i5Lp68Kq6!$mHm;M^O7ea9=Kkn3e!XE|7~z15HBW)*WVxaz;GDh0^d4z}B2 zEWrMnz*RhJlC0;lN6Z)1k5dZo4VT5<7z4jU7aF&IMbulZ^?fpu4S*dL*W`?vn@gRY z*@@ywvO!yXyY+*s8?8Wt>26yQ!yIPkWc`nn^KaP1ob7_0-+LWm(R8atGY>{Y)8gT9 zlm!PF6%(svhe{F=SrrD0qPyQFOhAGjjn1C?}r`r7U~-#@xnJ&oU9_@tHg) zo5eWhnA_RhT~^Tdmeto&F<0lwo2@S!1uGn=O12mu$p;pH*1gyiAy@2w5|T`#;sm?| z=VDd=@p*Fkn=mu6zOOClQ`euT*BE)bT-)xAF_~9Akj2$9HRu0iLLOm#sNIA`*>BaX zs0KgfHquS{8x*JLl&HVS=#@^H(8AcYv_xwmpj3`(&^45YaTd5>$}qthvB|2Eh&mN+ zn6+8%Q+YVSScUsu4UH4fl||jHd(zSHVWr`+blFK2D|)NHi;r-)bF^T9vqLF6S%rHk zGsw_t6_Z0fEO+81avj$?ImB^o@J-2~wPA`3D{_oVd>mzSh}vSAu$3M_l9yc;;2oRz zkv-I!4TAl%V8DmA^!-v;uaZd8Wm2nw5U%Y&q{#6Pl)A8~77Ox{hk3v!#{`P+lFSJ} zQ%sCp_L*acA7($PO@+xID6y2Pb6r13kRh>>ZRlpp!)&W9B(R-A6{>~xzUPTB-hX+5 z&i_0us|`asE0w!UzFBs#=U*GrsJSo#>ZZMCwCiQ0J|Mq_jm77pWvCp_|`@uI}nxg z7=CbB@mu4_lgdV<@5h!qUdI4$cII5fiyFIcjWTn+Id0FT0ZWYaLeMree{J=CN^XZiXnO?xeE5v+#14`m^V4q_q7EP*7B3=$K73Q7)g1#e`QFwNad_^I@qVBE6}(>7>*VPAfy?FTq zf~zH&MXY7??%ZM#hAzBhLlyq@sz!2;d-&z&L}LVv1Ra)i)c)bzR=DT~elTLg4>OiD z4M*K)Ow;L$)Ov+a9&j;b{o%r3gV_<$d`ANDIchHp{E1DG^w`o9_l-kM(v>LV7^}x~ z7H>wos$u~QSKp*V`$QYg`|LAt>T}^xkGD9hH&VUKIZto@aOMfK>P43E7ehh*Yi;j> zC}x!j7{)c-!>KkrWZr%8N9~<^v;Rm)S%U2c)IX@bqNM+u`u9KfEvwjg*}GZ)w=0?+ zlAo~--n*NvzniIPH;u9dETu|eslyT@6tpURkwSLsAPX;9OxX%YRxh0vT?&VPkqoYc z)jGj?wN4>^6SPdkB8_HUVP{eERPlG{nBvO9&hOCgkG~8gxm0eGf;=BRufM%}UUxl; zKF#*MLXpy&oAb&BoerE>H|gLLICSa{(-O1s7FtN-XPk8!uj&zk_Z4BtjcN5v>ke+4 zJ>wIc&>k9=-1`zptUYrQ*vG5biGL@s6FqUcrq<gq1^hLJ#MJE1cz4#$z35TNjt@ zYWTZJ+yC)77N04yUo}?!2{&h*YGZ$eel;8*2$9c2q{ze;OcFIxb)zw3UHE-qwF{>n4pIG#Y1` zU*QAFO%_QzutleA&F7T|*o~FgNDu)R%Nx^*VQlr z_$L3t9aG>IfB$j2Hbi#$>q%VwD60&|N3B-l^?H5 zv_Y6puC;?-?%x?M*KD$$gnEHWc!g}IaaD!kSuz@WS9;C91^sDaDr9OB`Ae2ebj?+g zaGgqX0X_|9AyS87BO2_cXc9w%SXkuM6c4>x=E=o`2M-yTru&Nf^qKHEDm!mI&4{q? zZVWp)aT~*o4$eF)QznY5C&C$G{(wbP zTO3QUjU^ftw9*i^wn=A^6|j3TGA*90jx4Xu<|tn2=$nCwfadP}hW5t%LRWEBi;qKI zwAlesh@ZgXM3+w4eH|;YnGCu-nFlC_=uqRaqqHlSI)LGI^AGj()(A0x-0d3>wqf%i_aJd-+DQ7aQ}> z;$MKqog{9E9T8Q-KKn?capa;I@5f}q$upBlr)*Q$`2 zEc1-tOz4-fm%N4bd^rDxH;H#RA@!(Y)CiI8{CQGGNB+wau6$fsQ`%(PIklOhl$&i{ z) zjEj;UaSlfb74@jaZ;_SJ{K4=cd#jK0-vD$)Qf=o~wi5clIq7CymP{6=-AlCqRY80gfKm8~I%%XTL%~P=Gtc$`O-JCn0CPbI1I8zn zgz+_$uVar&XM?7!t;-Yq>p!Qq6q6N!>)HZ#EYq(sNXm_cB7Lgnfi6F)<*Xz7CIkv+N@0jt{Bk! zVjEE!LyoF=&=D7(%D^CjX<6Pk0dj8vC}wx6DnXK!s)p2g*E31@1MID zaiX8K(&CK<>)9vvediv=u4t|xv~n^C;h5K|=QzaT0I{{{{flty@R+;wNBJwkx5lS& zcTzkLrQ4-<2DUN^XxFo(=SAKFhLkH0e4S=@uX6Xeg9Z(j!ci+Ja=rMq8#F(8PrQ{b zX!8CJp*pR)26ND3f@KkQH7R5fD)BfxAa#HNzst8!tL+BnC_TJ2dM{LaC^$sBlP8R( zrt3){+9btl#lWj)Pb<(xZ&oaScGka(jFx3{TvIrP5PUoS8pK6mTj*xKEmO|wAtImN zVAYo=5zO4x7u)iBHr3%yx9uGXrlPZ53M5i{hP;@y|}`J-oqKctxsAnci!}fcr2Q- zqt;Q996b;BPqTX*$%$jgS!CC4;ZM_8u&yJbWRUrVN z$cG}{=0z#yEMVEKm`%rI_5sFJ34>*pSZp}-dmb8z%+k#DxF(&7BkpbTP5p3dF(~eN zow#eUE}asWBYY5=3%e$r-tkiUuy6dw`>N&2M5mGZgVuu6x>)zDcG+8~TFxgSfYJ7% zXhbbiVR);NXQUnChCLNIU3kxjpS{v3VvIP{Mg{xMP$K*OhMzH_8S{%x2*96Gf5g0hQ-L+nnf?UM!3iOmjV)2sSZz>ydhFh>Pnk9J@>>GD#fP!&&F{~X}VY>*|O|U+2OEZ1{_G{ zU(klFvEk{t4_GX)=8@T!%dTVE9Gg~GO{zm;$~L-N4P9JbYv&$c3^yN5&Dz|m+S__= zzFl`%C!=yg#{OP=Tz8$k&H3EC1zl0hkx>^fJ&l=m$BHqPGQIRgz3(SGo|Us|_se3$OP*MO zcFgq}#x;If`$sW)3}SMSu9yqlHD*^#Hri&3vOD6kwNk${)LE@9mfaOov4RQ)SBmN0x?2 zrC-keRg5pg&KYP5@8-{9@DA$?IZ*G1NrU#A0lOJ6P_%bWsRO*SXsk89_Q#v*U$6t) zAMivTZkYWips=cVJzGVr{ zm!`aG*4fEw&HswoCOZo`K=S`^_Km%w08Deowr$(CeeSVs+q%cLZQHhO+qT{N_HCM` z$n2x9}OW&;OGys|D%>RGg4zhb$+Uq3L)GJT8p zUM8cw%!Hb(lIXsIbzFj`n-5bmG*R94IS5In*eLBe)M($BMA-zoiwrNe25PjfP+x-t zO|n*B6EQ6gVy6E(-I*xyMuz;~pVG#H3qm#F4t7WhZM=FLEpr`b))ka(jN!;C5j%5x$c-8E&}hGCNC)$On;TsW&uH>Wa6iEua9{Z~}ons7M-RV7xNP zb=WjYTAF7AJ3hF$S2|i$W1*ykJ(YMI?US=S4M$$`@`Gq#{SVa`TKIF|MCJs^fMnzV zz@T*Cw}Dj}{AX|?Ll7ToLW*@(Uwe+fy{EMH70zlOQN8_JZ&A@mJ z<3$P9bgEn)JgJj)tb9QS_mZwTeL6er9VQ|H5g4B|O4Kahu0@*p&Qz{DBnAIWihDrDK$A~%w}Y01&;#bB2>bg;zl479pgeCSUKOL;wpq!@CyBcx4- z2eL#lZ;{O+N~|mJ*8%}23p(+MTjo_WunZ^UHl%wS02o)fVFT^e6B&G^dyI(>8Ilbv z(pe(*OuvWGi# zn4Z*L^E)5!-hTKw`7}A67;Z*N>ehGIA0&K`hGsB+3Yp$1`276RcokycaCfHb(6i){ zvt%OAVp2~N%sXv&94zt;R+W2)GGm*LX0ilTu>((AN1{efEXa3Obp8XK(n0qH_ziP) z9RA~0f9ZGn(A)R#y92=@89(Nd#PqndIVcT3`CQ~q=nzP8!rM`N%LfW9#6HcYA5WnJ z@!&j06A{~nBIu+DibfiuUq?ThuIYUQ3c!)%yY>Vq{th~C1_i@AHIS#!cVBZ(Uw_uK z(I>V7aW*;Bl@d{Q-K$<4X4~Hz#W9ocw7&B=z!E95N=$?V(u|>ip#(=7b3p4_1i6Oc zA+K1IR#ZW}7C~?nkLY->oWyy4kEP~K8NI`k@DNT5O!@I(-wEoyfWEm$X zCdNeHSoh<^IjJ^}H_AX=l-Q$fnP#{LjZUC-H5mRH{NkUd6k~6#iQTOmktX6*35Q|u zP_ydC=j)*-(B9}Gr&ow1)fZDRBtXtmHZ3B6>=w{O8dQ53lJb>!iy#qOPQddi*Za6< zR@gw8BX{%|Di@Gwa%$S;V3`LcHjo1wU1kVrDHEf5>m}1VjLjCvFs<*Qz0&=VC#Mfm zl+Zvd?=U;z1d4j?zP;KKk}XEVMDXnPf2a%V4FOD1T0}~Z)J!#E$dBVH5T1$ z7vbf{17?#L_2YpAtO}MK)+Cx5*b}6NlnlDlQ}>SM4Y@Rsu$Ea_o}6oR7T5N7L3=Z3 z20vm>k}I*E-6Nt_mtB@zsxFq0ZPOXvGN1fIV==#Ief#&&-!~IrUEhm)2rw}fOQ|CNQ-%XZQ=b!_fp?XEOY_8JOle{7r@=C&i|2{&x?7EtVjH zpC{G(e>TX>YxTC*=7P&Gr}Oz1SILiUJkfGLnq_69aSz+Foelw@3jCSjFursg`fnvY zbI7DiFg#%eAFz7iNTsECzkC9B_t^Jc4!7!xTglR7(%FHP*Z+lY^M0iW%HPEv(cLrP z?7eMbgCm{eULGmp$#1;E>a1m313iMr{GMrX_=}@LO_oLUE2E{2H42*V2Ob}GBa6*t z%(j}7HG}GsghFX#_QXy@9CfkDfvc2u%?J$^DKWH;bd9AU3oX&ivMjOl7T2B?bKV9R zeHo}PHHY0uc!v6{uEP0WaUV=rbO>FCz;YI6vw6a~egDfl5$S+nNs&DVLl7CP|9L{w z@ya-U$Xw5Acm+caw}*kRR3dkt#Pek>bKc_HEp!PV5rd3#aalp&M&B_AyA;Z|r!whw zhq^Y-Nl-IC7uo51Or+r;*@XSt1OL#qRbL60(X>ZrH8q|*-e<;*Q z>)GJ^qPW*LKVYGyc3er1y?KBPj`=>odlcb-qg*V3>>3%xav$Jlh3rVomlen08ky=k zo6VmnQ)>cXxX|e!NYxlwHwCr6zSqki?1en~(vcNOSZlDv_iBQ57DQ()X0=gWIi~JDJ?svoFV2Ghwy`vk$`mn^z7_d zW!cCGr(OY9ijNytm1$uD!ccnf6lLJHJEbEBrI~SXzWHMHYU05)*kU0%nI%aqxPL27 z4^m;C$%*4@_amK_mk>nhC+i^QuD_8e9t8g9ble<)N1I305g7($&bBQJ9(Ilw^>7A_ zv75>ILp1Vg5`9aa%X2aRI)13*caJdY#$^7dblw-WP|z{)iwlQ>TSi;;hvqmLmsHJd z*uarr`uz;uIh9w~L->eO=0bzYThr+mYa=}=wgv4oRe_MUlt@!B@*Kw#q|rB#oL4G# z9Dd=97fwU{H7Ad}-~TwpV*F3-sL0~PRAJZK5&V47eq)KbZ*);vc*z2lPl&-y{fz#5 zaR1Ti26Q@^!6oOhuyIpC`c{akR5bRra_T39Y~}c?EWImy{4JiQCSf-6R%VE~SS5~k zQbY&*qRei%FpG4G>3hUH%={H$h7lB-8efmc%9>lkcDkM07qO&G40K469W2w&x*@9%hD8u@YT0P2Qo*o?h`K z1a17i#ey<4&iev4FFB6cT0^ddTZ*XyPRZ=wLk(8YVbIZ=!pG;2bv6T7u3=Et9K+fA z;)&*_y0SV6+@PhLf`JPxyL$A5l^g1#Q2zI6^Pau-s*yv@iU<@o{GtzQjuhb;B32P< z?^6z>z|sn^UMF#r>wTpVDE8p5V3v;c#yXvE2HVz%`>3r6vFuFb|@C~_+ zxD~~?m3dW7dCDkP1@`M=Scslz`}xQ-%#O4k$<#UNCE?xz*(XL&4@jF66O@BU3uLhd0buVq!!L^AcN3|*%eNj;N#9h(FFcdCRhBXQ zg%%!so7qfZ?gzP&Y>#7>G&ij43GPJK)9O54F6)o6$ZycNQ;nw`aRyjI8wyBtZtZ#I zL010S5V%FeygkrZyS&o^3lEhi98cSfK<1c&RQPwi!qa>mz@oOenEBSRKwf$dz#r)= zr$g+;HMX=e;<;H%%20L;PuF7R&Z^~RLtW4+%&`_zVrvfhsP!WZr(9?@FY#O5wGJ6}gLF*K|=50=XGxgTB$!g-o zkp)CPE^Ic^4%Cz`*oSR7vqjvx;q1Hd&L%o$*>D_mQbAqz00uhbeC$>+Brkx)MuOZExM*e`B#Z-wy3#sn0YY@ zC%mNAVG29yd!68gm4Jm7FuV@5`D8JT&FBHsO)FZO&x9A{vwf62-i=*M?#gqMp+=M} zwe!xBoi5mT+OzK`3Y#ms)~J6HMuUzr)CRq+kdp+gR^@kn@c@=W@^4h zwL>(58&2Rp6yS_^2sa76VF>?1dknxASdxI& zcp#8FR5EM0DgNTyc`E=HFzpMM4?a0sG50P(y8)cX`d9EL;j}Xcj0@TiL;Fl}G5aT!gqHw_cm{JDR(H>EYdtxA{PNUzC$v5~Mf9H$<;b zP7dHwGjxu(oC3U}Hx@tO<{w#J=8nO)OnB1M;mAK(x%amrTCS(Y1 z*0~CV-gl$PEqICV!j=-Xe=~POQ`&;1{1yy~jKhbfz`_~O_%Eus%II%d46Yq$^0mTX zdKh@DZ&@z3t{M$&d&PAfZ`7~eP6kf!HwGR!E>=E^8l|3(3~uBGh{$j-=l;N!{sJ98 z@n!@Q)guJgXZ_$3e&8XzH9I9f8HAdXLsm(D#%+D78oqYMX^q$BrhF}P<@YlqNOs0& zhV;koAO9NTX)winf_jF88k+k5_C

    =!ZtR*ierKh_)y_&`W9$$d&q&3!kb1LA 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

    `-s%O#riZA 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

    gLiMB@LI>a) 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%0DaZRSv} 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

    F#~zWES-pd~sG64j$8EakiuCIE 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 literal 0 HcmV?d00001 From 172ea3fbee97e87f024c5aabe773a9d3ba52b53c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Wed, 8 Jul 2015 16:43:10 +0200 Subject: [PATCH 157/186] =?UTF-8?q?GenCode:=20Lambda=20theorethisch=20korr?= =?UTF-8?q?ekt,=20h=C3=A4ngt=20aber=20noch=20an=20einer=20unbekannten=20Nu?= =?UTF-8?q?llPointerException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/LambdaExpression.java | 12 ++++++++++-- test/bytecode/LambdaExpr.jav | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 1b4f4241..62c3c761 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -2,8 +2,10 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; +import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.INVOKEDYNAMIC; @@ -213,16 +215,22 @@ public class LambdaExpression extends Expr{ @Override public InstructionList genByteCode(ClassGen cg) { - //InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + ConstantPoolGen cp = cg.getConstantPool(); InstructionList il = new InstructionList(); - short opcode = 186;//opcode - was genau ist das? /* * Bytecode: * 0: invokedynamic #2, 0 //#2 führt zu einem InvokeDynamic im KP - wildes Referenzieren * 5: astore_1 //Speichert wahrscheinlich den String meiner TestEXPR * 6: return */ + + //---Variante 1 mit opcode---- + short opcode = 186;//opcode - was genau ist das? il.append(new INVOKEDYNAMIC(opcode, 0));//Invokedynamic lässt sich bei mir weder automatisch noch manuell importieren + + //---Variante 2 mit Konstantenpool-Referenz--- + //int cpSize = cp.getSize()-1;//Vermutlich ist die benötigte Referenz das aktuellste Element? + //il.append(new INVOKEDYNAMIC((short) cpSize, 0)); return il; } diff --git a/test/bytecode/LambdaExpr.jav b/test/bytecode/LambdaExpr.jav index 853da920..e5b1a122 100644 --- a/test/bytecode/LambdaExpr.jav +++ b/test/bytecode/LambdaExpr.jav @@ -2,6 +2,7 @@ class LambdaExpr { void method() { - Runnable r1 = () -> System.out.println("Hello world two!"); + lambda; lambda = ()-> 1; + } } \ No newline at end of file From 44599246b2e54ead8d2d8340bbc7e3aede0be1c9 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 8 Jul 2015 17:46:54 +0200 Subject: [PATCH 158/186] =?UTF-8?q?FunVoidN=20einf=C3=BChren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/core/MyCompiler.java | 5 ++ .../statement/LambdaExpression.java | 19 ++++-- src/de/dhbwstuttgart/typeinference/FunN.java | 10 +++ .../typeinference/FunNInterface.java | 1 - .../dhbwstuttgart/typeinference/FunVoidN.java | 64 +++++++++++++++++++ .../typeinference/FunVoidNInterface.java | 64 +++++++++++++++++++ .../typeinference/FunVoidNMethod.java | 63 ++++++++++++++++++ .../typeinference/unify/Unify.java | 2 +- .../TypeInsertTests/FunVoid.jav | 5 ++ .../TypeInsertTests/FunVoid.java | 19 ++++++ .../MultipleTypesInsertTester.java | 6 ++ 11 files changed, 249 insertions(+), 9 deletions(-) create mode 100644 src/de/dhbwstuttgart/typeinference/FunVoidN.java create mode 100644 src/de/dhbwstuttgart/typeinference/FunVoidNInterface.java create mode 100644 src/de/dhbwstuttgart/typeinference/FunVoidNMethod.java create mode 100644 test/plugindevelopment/TypeInsertTests/FunVoid.jav create mode 100644 test/plugindevelopment/TypeInsertTests/FunVoid.java diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 5c066cee..8b9758f9 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -38,6 +38,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.ByteCodeResult; import de.dhbwstuttgart.typeinference.FunNInterface; +import de.dhbwstuttgart.typeinference.FunVoidNInterface; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; @@ -550,6 +551,10 @@ public class MyCompiler implements MyCompilerAPI FunNInterface funN = new FunNInterface(i); ret.add(funN.getPublicFieldAssumptions()); } + for(int i = 0; i<6; i++){ + FunVoidNInterface funN = new FunVoidNInterface(i); + ret.add(funN.getPublicFieldAssumptions()); + } return ret; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index c4aacb12..6d8cdf96 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -31,6 +31,7 @@ import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.FunN; +import de.dhbwstuttgart.typeinference.FunVoidN; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.ResultSet; @@ -175,17 +176,21 @@ public class LambdaExpression extends Expr{ //retType bleibt unverändert } }else{ - retType = new ExtendsWildcardType((ObjectType) retType); + //Die LambdaExpression kann zu diesem Zeit schon feststellen, ob der Return-Type Void ist (Kein Return-Statement): + if(!typeIsVoid(retType)){ //Nur, wenn es nicht void ist, kann der ExtendsWildcardType gebildet werden. + retType = new ExtendsWildcardType((ObjectType) retType); + } } - - //Die LambdaExpression kann zu diesem Zeit schon feststellen, ob der Return-Type Void ist (Kein Return-Statement): - if(retType.getName().equals(new JavaClassName("Void"))){ - System.out.println("Void rettype"); + if(typeIsVoid(retType)){//In diesem Fall, muss der Typ des LambdaAusdrucks FunVoid sein + ret.add(new SingleConstraint(new FunVoidN(modifiedParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); + }else{ + ret.add(new SingleConstraint(new FunN(retType, modifiedParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); } - ret.add(new SingleConstraint(new FunN(retType, modifiedParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this))); return ret; } - + private boolean typeIsVoid(Type type){ + return type.getName().equals(new JavaClassName("void")); + } @Override public ConstraintsSet TYPEStmt(TypeAssumptions ass){ throw new TypeinferenceException("Eine LambdaExpression darf nicht als Statement verwendet werden.", this); diff --git a/src/de/dhbwstuttgart/typeinference/FunN.java b/src/de/dhbwstuttgart/typeinference/FunN.java index 55101d67..ec84c8e9 100755 --- a/src/de/dhbwstuttgart/typeinference/FunN.java +++ b/src/de/dhbwstuttgart/typeinference/FunN.java @@ -44,6 +44,16 @@ public class FunN extends RefType { this.name = new JavaClassName("Fun"+T.size());//getName(); } + /** + * Spezieller Konstruktor um eine FunN ohne Returntype zu generieren + */ + protected FunN(Menge T){ + super("",null,0); + if(T==null)throw new NullPointerException(); + setT(T); + this.name = new JavaClassName("Fun"+T.size());//getName(); + } + /** * Erstellt eine FunN: * FunN diff --git a/src/de/dhbwstuttgart/typeinference/FunNInterface.java b/src/de/dhbwstuttgart/typeinference/FunNInterface.java index b4c23318..920b4899 100644 --- a/src/de/dhbwstuttgart/typeinference/FunNInterface.java +++ b/src/de/dhbwstuttgart/typeinference/FunNInterface.java @@ -22,7 +22,6 @@ public class FunNInterface extends Class{ //TODO: Diese Klasse sollte eigentlich von Interface erben //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. - //private Menge gtvparalist; /** diff --git a/src/de/dhbwstuttgart/typeinference/FunVoidN.java b/src/de/dhbwstuttgart/typeinference/FunVoidN.java new file mode 100644 index 00000000..a48d36e2 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/FunVoidN.java @@ -0,0 +1,64 @@ +package de.dhbwstuttgart.typeinference; + + +import java.util.Iterator; +import de.dhbwstuttgart.typeinference.Menge; + +import de.dhbwstuttgart.parser.JavaClassName; +import de.dhbwstuttgart.syntaxtree.Method; +import de.dhbwstuttgart.syntaxtree.ParameterList; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; + +/** + * @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke + * "interface FunN { R apply(T1 arg1, T2 arg2, ... , TN argN); }" + * @author A10023 - Andreas Stadelmeier + * + * Bemerkung: + * FunN ist ein RefType. Der RefType ist nicht mit einem FunNInterface verbunden. + * + */ +public class FunVoidN extends FunN { + + private Type R; + private Menge T; + + /** + * @author Andreas Stadelmeier, a10023 + * Benötigt für den Typinferenzalgorithmus für Java 8 + * Generiert einen RefType auf eine FunVoidN - Klasse. + * @param T + * @return + */ + public FunVoidN(Menge T) { + super(T); + this.name = new JavaClassName("FunVoid"+T.size()); + } + + /** + * Erstellt eine FunVoidN: + * FunN + * T1 - TparameterCount werden mit TypePlaceholdern besetzt. + * @param parameterCount + */ + public FunVoidN(int parameterCount) { + super(parameterCount); + this.name = new JavaClassName("FunVoid"+T.size()); + } + + /** + * Muss nach jeder Änderung von T oder R aufgerufen werden. + * Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus. + */ + private void calculateNewParalist(){ + Menge t = new Menge(); + if(T!=null)t.addAll(T); + this.set_ParaList(t); + } + +} diff --git a/src/de/dhbwstuttgart/typeinference/FunVoidNInterface.java b/src/de/dhbwstuttgart/typeinference/FunVoidNInterface.java new file mode 100644 index 00000000..ad7d6108 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/FunVoidNInterface.java @@ -0,0 +1,64 @@ +package de.dhbwstuttgart.typeinference; + +import de.dhbwstuttgart.typeinference.Menge; + +import de.dhbwstuttgart.parser.JavaClassName; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption; +import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; + +/** + * Stellt das Interface FunVoidN dar. + * @author janulrich + * + */ +public class FunVoidNInterface extends Class{ +//TODO: Diese Klasse sollte eigentlich von Interface erben + //TODO: getType muss einen Typ mit der ParameterListe zurückliefern. + + //private Menge gtvparalist; + + /** + * Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface. + * @param N - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt R apply(T1 par1); + */ + public FunVoidNInterface(int N) { + super("FunVoid"+N, null, new Modifiers(), FunVoidNInterface.makeParaList(N)); + } + + private static Menge makeParaList(int n) { + Menge ret = new Menge<>(); + for(int i = 1; i<=n;i++){ + ret.add("T"+i); + } + return ret; + } + + /** + * @return Im Falle von einem FunN-Interface ist dies die apply-Methode + */ + @Override + public TypeAssumptions getPublicFieldAssumptions() { + //return super.getPublicFieldAssumptions(); + TypeAssumptions ret = new TypeAssumptions(); + ret.addAssumption(new MethodAssumption(this.getApplyFunction(), this)); + ret.addClassAssumption(new ClassAssumption(this)); + for(GenericTypeVar gtv : this.getGenericParameter())ret.addGenericVarAssumption(gtv); + return ret; + } + + /** + * Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode + * @return + */ + private FunVoidNMethod getApplyFunction(){ + return new FunVoidNMethod(this.get_ParaList(),this); + } + +} diff --git a/src/de/dhbwstuttgart/typeinference/FunVoidNMethod.java b/src/de/dhbwstuttgart/typeinference/FunVoidNMethod.java new file mode 100644 index 00000000..bf1d9f41 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/FunVoidNMethod.java @@ -0,0 +1,63 @@ +package de.dhbwstuttgart.typeinference; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.syntaxtree.type.Void; + +import de.dhbwstuttgart.syntaxtree.FormalParameter; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.Method; +import de.dhbwstuttgart.syntaxtree.ParameterList; +import de.dhbwstuttgart.syntaxtree.misc.DeclId; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; + +public class FunVoidNMethod extends Method{ + /** + * + * @param N - Anzahl der Parameter (Beispiel: Fun2) + */ + public FunVoidNMethod(Menge paralist, Class parent){ + super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode + int N = paralist.size(); + this.setType(new Void(this, -1)); + this.set_DeclId(new DeclId("apply")); + ParameterList pl = new ParameterList(); + Menge fpList = new Menge(); + for(int i = 0;i fpList = new Menge(); + for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen. + DeclId paramName = new DeclId("T"+i); + FormalParameter parameter = new FormalParameter(paramName); + parameter.setType(TypePlaceholder.fresh(parameter)); + //parameter.set_DeclId(paramName); + fpList.add(parameter); + } + pl.formalparameter = fpList; + this.parameterlist = pl; + this.parserPostProcessing(new Class("Fun"+N, 0)); + } + */ + @Override + public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, + ResultSet resultSet) { + return null; + } + +} diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index bd10be77..84a72188 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -696,7 +696,7 @@ public class Unify } SetView>> difference = Sets.difference(cartProduktSets, temp); log.debug("Ausgelöschte Constraints: "+difference.toString()); - //cartProduktSets = temp; + cartProduktSets = temp; /* Unifier filterUnify = (pairs)->{ String pairsString = pairs.toString(); diff --git a/test/plugindevelopment/TypeInsertTests/FunVoid.jav b/test/plugindevelopment/TypeInsertTests/FunVoid.jav new file mode 100644 index 00000000..2503977f --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/FunVoid.jav @@ -0,0 +1,5 @@ + +class FunTest{ + + funVoid = ()->{}; +} diff --git a/test/plugindevelopment/TypeInsertTests/FunVoid.java b/test/plugindevelopment/TypeInsertTests/FunVoid.java new file mode 100644 index 00000000..017b6b9f --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/FunVoid.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.ArrayList; +import java.util.List; +import de.dhbwstuttgart.typeinference.Menge; + +import org.junit.Test; + +public class FunVoid { + private static final String TEST_FILE = "FunVoid.jav"; + + @Test + public void run(){ + Menge mustContain = new Menge(); + //mustContain.add("TestIfStmt var"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + ArrayList l = new ArrayList(); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index 1dca7ed6..e0421943 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -106,5 +106,11 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ for(String containString : mustContain){ TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } + try { + Files.write(Logger.getWholeLog().getBytes(),new File(rootDirectory+sourceFileToInfere+".log")); + } catch (IOException e) { + e.printStackTrace(); + TestCase.fail(); + } } } From 97cb020d45b46577504dabdcb1addb3939715e0c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 14 Jul 2015 14:49:46 +0200 Subject: [PATCH 159/186] =?UTF-8?q?Bytecode=20Tests=20anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/bytecode/Return.jav | 11 ++++++++++ test/bytecode/Return.java | 45 +++++++++++++++++++++++++++++++++++++++ test/bytecode/Test.java | 8 +++++++ 3 files changed, 64 insertions(+) create mode 100644 test/bytecode/Return.jav create mode 100644 test/bytecode/Return.java create mode 100644 test/bytecode/Test.java diff --git a/test/bytecode/Return.jav b/test/bytecode/Return.jav new file mode 100644 index 00000000..08c29792 --- /dev/null +++ b/test/bytecode/Return.jav @@ -0,0 +1,11 @@ +class Assign{ + +method() {a; + a = 20; + b; + b=59; + return a + b; + } + + +} \ No newline at end of file diff --git a/test/bytecode/Return.java b/test/bytecode/Return.java new file mode 100644 index 00000000..2d7c4803 --- /dev/null +++ b/test/bytecode/Return.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class Return { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "Assign.jav"; + public final static String outputFile = "Assign.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java new file mode 100644 index 00000000..e50bce6a --- /dev/null +++ b/test/bytecode/Test.java @@ -0,0 +1,8 @@ +/** + * Diese Klasse testet die generierte EmptyClass.class-Datei + */ +class Test{ +public static void main(String[] args){ + new EmptyClass(); +} +} From c7ffabe0f091cae85fd62cc7a0c5c56806915563 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 14 Jul 2015 18:43:54 +0200 Subject: [PATCH 160/186] Im Unify wird nur noch bei SUBST deepCopy angewendet. Timer implementiert zum ermitteln der Zeitaufwendungen der einzelnen Schritte im Algorithmus --- src/de/dhbwstuttgart/logger/Timestamp.java | 50 +++++++++++++ src/de/dhbwstuttgart/logger/Timewatch.java | 74 +++++++++++++++++++ src/de/dhbwstuttgart/typeinference/Pair.java | 25 ++++++- .../typeinference/unify/Unify.java | 31 ++++++-- .../MultipleTypesInsertTester.java | 20 +++-- 5 files changed, 186 insertions(+), 14 deletions(-) create mode 100644 src/de/dhbwstuttgart/logger/Timestamp.java create mode 100644 src/de/dhbwstuttgart/logger/Timewatch.java diff --git a/src/de/dhbwstuttgart/logger/Timestamp.java b/src/de/dhbwstuttgart/logger/Timestamp.java new file mode 100644 index 00000000..829ccbd8 --- /dev/null +++ b/src/de/dhbwstuttgart/logger/Timestamp.java @@ -0,0 +1,50 @@ +package de.dhbwstuttgart.logger; + +import java.util.Stack; + + +public class Timestamp{ + String name; + + Stack timestamps = new Stack<>(); + Long accumulatedTime = 0L; + + Timestamp(String name){ + this.name = name; + } + + public void start(){ + timestamps.push(System.currentTimeMillis()); + } + + public Long stop(){ + if(timestamps.isEmpty())return 0L; + Long timeStart = timestamps.pop(); + Long currentTime = getTime(); + Long difference = currentTime-timeStart; + accumulatedTime += difference; + return difference; + } + + public Long currentTime(){ + if(timestamps.isEmpty())return 0L; + Long timeStart = timestamps.peek(); + Long currentTime = getTime(); + return currentTime-timeStart; + } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof Timestamp))return false; + return this.name.equals(((Timestamp)obj).name); + } + + public String toString(){ + String ret = "Zeit für Aktivität "+this.name+": "+this.accumulatedTime; + return ret; + } + + private Long getTime(){ + return System.currentTimeMillis(); + } +} \ No newline at end of file diff --git a/src/de/dhbwstuttgart/logger/Timewatch.java b/src/de/dhbwstuttgart/logger/Timewatch.java new file mode 100644 index 00000000..26916fea --- /dev/null +++ b/src/de/dhbwstuttgart/logger/Timewatch.java @@ -0,0 +1,74 @@ +package de.dhbwstuttgart.logger; + +import java.util.HashMap; +import java.util.Stack; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; + +public class Timewatch { + + private static final Timewatch time = new Timewatch(); + private final Timestamp startTime; + + private Timers timers = new Timers(); + + private Timewatch(){ + //Privater Konstruktor + startTime = new Timestamp("Timewatch Global"); + startTime.start(); + } + + public static Timewatch getTimewatch() { + return time; + } + + public String dumpTimeData(){ + String ret = "Momentan insgesamt verstrichene Zeit: "+this.startTime.currentTime() +"\n"; + ret += timers.toString(); + return ret; + } + + public Timestamp start(String name){ + if(!timers.contains(name)){ + Timestamp ret = new Timestamp(name); + timers.add(ret); + ret.start(); + return ret; + }else{ + //Timer läuft noch... einfach neue Instanz starten: + Timestamp ret = timers.get(name); + ret.start(); + return ret; + } + } + +} + +class Timers{ + private Menge timers = new Menge<>(); + + public Timestamp get(String name) { + for(Timestamp timer:timers){ + if(timer.name.equals(name))return timer; + } + throw new DebugException("Fehler in Timewatch: Der gesuchte Timer "+name+" ist nicht vorhanden."); + } + + public void add(Timestamp timer) { + timers.add(timer); + } + + public boolean contains(String name) { + return timers.contains(new Timestamp(name)); + } + + public String toString(){ + String ret =""; + for(Timestamp timer : timers){ + ret += timer.toString() + "\n"; + } + return ret; + } +} + diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 863b3623..21f0e989 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -2,7 +2,14 @@ package de.dhbwstuttgart.typeinference; // ino.end // ino.module.Pair.8673.import +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; import java.util.Hashtable; + import de.dhbwstuttgart.typeinference.Menge; // ino.end @@ -24,7 +31,7 @@ import de.dhbwstuttgart.syntaxtree.type.WildcardType; // Klasse, die ein Paar in der Menge Eq speichern kann // ino.end // ino.class.Pair.26540.declaration -public class Pair +public class Pair implements Serializable // ino.end // ino.class.Pair.26540.body { @@ -405,5 +412,21 @@ public class Pair ret.add(this.TA2); return ret; } + + public Pair deepClone() { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(this); + + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream ois = new ObjectInputStream(bais); + return (Pair) ois.readObject(); + } catch (IOException e) { + return null; + } catch (ClassNotFoundException e) { + return null; + } + } } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index bd10be77..b7f21c23 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -20,6 +20,7 @@ import com.rits.cloning.Cloner; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; +import de.dhbwstuttgart.logger.Timewatch; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.MatchException; @@ -664,14 +665,16 @@ public class Unify SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); if(filter){ - Cloner cloner = new Cloner(); + //Cloner cloner = new Cloner(); Menge>> temp = new Menge<>(); //hier werden gefilterte Constraints gesammelt Menge undMenge = new Menge(); //Die Menge von Pairs, welche in jedem Kartesischen Produkt enthalten sind. - undMenge.addAll(cloner.deepClone(Eq1)); + //undMenge.addAll(cloner.deepClone(Eq1)); + undMenge.addAll(Eq1); Menge>> oderConstraints = new Menge<>();//Die zu filternden Constraints for (Menge> vecvecpair : cartProduktSets){ if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: - undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); + //undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); + undMenge.addAll(vecvecpair.firstElement()); temp.add(vecvecpair); }else{//gibt es mehrere Mengen, kann gefiltert werden: oderConstraints.add(vecvecpair); //die Menge zu den zu filternden OderConstraints anfügen @@ -682,8 +685,10 @@ public class Unify Menge> filteredOCons = new Menge<>(); //diese Menge sammelt nur Cons for(Menge pairs : oderConstraint){ Menge testMenge = new Menge(); - testMenge.addAll(cloner.deepClone(undMenge)); - testMenge.addAll(cloner.deepClone(pairs)); + //testMenge.addAll(cloner.deepClone(undMenge)); + //testMenge.addAll(cloner.deepClone(pairs)); + testMenge.addAll(undMenge); + testMenge.addAll(pairs); Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); if(test.size()>0){ filteredOCons.add(pairs); @@ -696,7 +701,7 @@ public class Unify } SetView>> difference = Sets.difference(cartProduktSets, temp); log.debug("Ausgelöschte Constraints: "+difference.toString()); - //cartProduktSets = temp; + cartProduktSets = temp; /* Unifier filterUnify = (pairs)->{ String pairsString = pairs.toString(); @@ -2462,6 +2467,18 @@ throws MatchException inferencelog.debug("TV: " + a.getName()); inferencelog.debug("Bedingung: " + bMitVorbedingung); + Cloner cloner = new Cloner(); + cloner.setDumpClonedClasses(true); + + SectionLogger log = Logger.getSectionLogger("Subst-Methode", Section.UNIFY); + Timewatch timer = Timewatch.getTimewatch(); + de.dhbwstuttgart.logger.Timestamp timestamp = timer.start("Unify-Subst"); + P = cloner.deepClone(P); + a = cloner.deepClone(a); + o = cloner.deepClone(o); + long time = timestamp.stop(); + log.debug("Benötigte Zeit für DeepClone: "+time); + // richtiger Typ aus Pair raussuchen Type T = null; if( nTypnrInPair == 1 ) @@ -2483,7 +2500,7 @@ throws MatchException { // Parameterliste durchgehen Menge vTemp = ((RefType)T).get_ParaList(); - Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs + boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs //sonst werden nicht alle Elemente der Forschleife durchlaufen for( int i = 0; i < vTemp.size(); i++ ) { diff --git a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java index 1dca7ed6..13e54315 100755 --- a/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java +++ b/test/plugindevelopment/TypeInsertTests/MultipleTypesInsertTester.java @@ -12,6 +12,7 @@ import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.LoggerConfiguration; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; +import de.dhbwstuttgart.logger.Timewatch; import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; @@ -69,12 +70,7 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ for(String containString : mustContain){ TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } - try { - Files.write(Logger.getWholeLog().getBytes(),new File(rootDirectory+sourceFileToInfere+".log")); - } catch (IOException e) { - e.printStackTrace(); - TestCase.fail(); - } + writeLog(sourceFileToInfere+".log"); } public static void testSingleInsert(String sourceFileToInfere, Menge mustContain){ @@ -106,5 +102,17 @@ public class MultipleTypesInsertTester extends TypeInsertTester{ for(String containString : mustContain){ TestCase.assertTrue("\""+containString+"\" muss in den inferierten Lösungen vorkommen",gesamterSrc.contains(containString)); } + writeLog(sourceFileToInfere+".log"); + } + + private static void writeLog(String toFile){ + String log = Logger.getWholeLog()+"\n"; + log+=Timewatch.getTimewatch().dumpTimeData(); + try { + Files.write(log.getBytes(),new File(rootDirectory+toFile)); + } catch (IOException e) { + e.printStackTrace(); + TestCase.fail(); + } } } From 6321f1308dee8650e91fc9819b5752f6427b0de7 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 15 Jul 2015 11:50:10 +0200 Subject: [PATCH 161/186] Nicht mehr im Subst, sondern vorm Subst klonen --- .../dhbwstuttgart/typeinference/unify/Unify.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index b7f21c23..b7e54a07 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -760,6 +760,9 @@ public class Unify int counter = 0; for(Menge vecpair : bigCartProductErg) { + //Klone die Menge vecpair, bevor substituiert wird. Viele Paare sind doppelt referenziert und müssen vor dem Substituieren geklont werden + vecpair = vecpair.stream().map(x -> x.clone()).collect(Menge::new, Menge::add, Menge::addAll); + counter++; if(counter > 1000){ System.out.println(counter + " von "+bigCartProductErg.size()); @@ -2467,18 +2470,6 @@ throws MatchException inferencelog.debug("TV: " + a.getName()); inferencelog.debug("Bedingung: " + bMitVorbedingung); - Cloner cloner = new Cloner(); - cloner.setDumpClonedClasses(true); - - SectionLogger log = Logger.getSectionLogger("Subst-Methode", Section.UNIFY); - Timewatch timer = Timewatch.getTimewatch(); - de.dhbwstuttgart.logger.Timestamp timestamp = timer.start("Unify-Subst"); - P = cloner.deepClone(P); - a = cloner.deepClone(a); - o = cloner.deepClone(o); - long time = timestamp.stop(); - log.debug("Benötigte Zeit für DeepClone: "+time); - // richtiger Typ aus Pair raussuchen Type T = null; if( nTypnrInPair == 1 ) From 3601d11b0b97024316a9d9585431a16e7dd95453 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 15 Jul 2015 17:09:49 +0200 Subject: [PATCH 162/186] Fehler in deepCopy behoben --- .../dhbwstuttgart/syntaxtree/SourceFile.java | 2 +- .../typeinference/DeepCloneable.java | 18 ++++++++++++ src/de/dhbwstuttgart/typeinference/Menge.java | 3 +- src/de/dhbwstuttgart/typeinference/Pair.java | 5 +++- .../typeinference/unify/Unify.java | 28 +++++++++++++++++-- 5 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 src/de/dhbwstuttgart/typeinference/DeepCloneable.java diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 7dbc0864..40e96d38 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -810,7 +810,7 @@ public class SourceFile // In streamconstraintsclone sind die Mengen von Paar enthalten die unifiziert werden muessen Stream> streamconstraintsclone = indexeset.stream().map(x -> x.stream() .map(i -> constraintsClone.elementAt(i)) - .collect(Menge::new, Menge::add, Menge::addAll)); + .>collect(Menge::new, Menge::add, Menge::addAll)); //Menge> vecconstraintsclone = streamconstraintsclone.collect(Menge::new, Menge::add, Menge::addAll); System.out.println(); //Schritt 4: Unifikation diff --git a/src/de/dhbwstuttgart/typeinference/DeepCloneable.java b/src/de/dhbwstuttgart/typeinference/DeepCloneable.java new file mode 100644 index 00000000..c20b6493 --- /dev/null +++ b/src/de/dhbwstuttgart/typeinference/DeepCloneable.java @@ -0,0 +1,18 @@ +package de.dhbwstuttgart.typeinference; + +public interface DeepCloneable{ + public A deepClone(); +} + +/* +public class CloneableMenge extends Menge{ + + public CloneableMenge deepClone(){ + CloneableMenge ret = new CloneableMenge<>(); + for(A i : this){ + ret.add(i.deepClone()); + } + return ret; + } +} +*/ \ No newline at end of file diff --git a/src/de/dhbwstuttgart/typeinference/Menge.java b/src/de/dhbwstuttgart/typeinference/Menge.java index 10df5235..aa2b2f43 100644 --- a/src/de/dhbwstuttgart/typeinference/Menge.java +++ b/src/de/dhbwstuttgart/typeinference/Menge.java @@ -3,6 +3,7 @@ package de.dhbwstuttgart.typeinference; import java.util.Set; import java.util.Vector; + public class Menge extends Vector implements Set{ - + } diff --git a/src/de/dhbwstuttgart/typeinference/Pair.java b/src/de/dhbwstuttgart/typeinference/Pair.java index 21f0e989..dcb13958 100755 --- a/src/de/dhbwstuttgart/typeinference/Pair.java +++ b/src/de/dhbwstuttgart/typeinference/Pair.java @@ -31,7 +31,7 @@ import de.dhbwstuttgart.syntaxtree.type.WildcardType; // Klasse, die ein Paar in der Menge Eq speichern kann // ino.end // ino.class.Pair.26540.declaration -public class Pair implements Serializable +public class Pair implements Serializable, DeepCloneable // ino.end // ino.class.Pair.26540.body { @@ -414,6 +414,7 @@ public class Pair implements Serializable } public Pair deepClone() { + /* try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); @@ -427,6 +428,8 @@ public class Pair implements Serializable } catch (ClassNotFoundException e) { return null; } + */ + return clone(); } } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index b7e54a07..bb561cbf 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -11,6 +11,9 @@ import java.util.Set; import de.dhbwstuttgart.typeinference.Menge; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Stream; import com.google.common.collect.Sets; @@ -41,6 +44,7 @@ import de.dhbwstuttgart.syntaxtree.type.ObjectType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.DeepCloneable; import de.dhbwstuttgart.typeinference.OderConstraint; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.Pair.PairOperator; @@ -674,7 +678,7 @@ public class Unify for (Menge> vecvecpair : cartProduktSets){ if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: //undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); - undMenge.addAll(vecvecpair.firstElement()); + undMenge.addAll(Unify.deepClone(vecvecpair.firstElement())); temp.add(vecvecpair); }else{//gibt es mehrere Mengen, kann gefiltert werden: oderConstraints.add(vecvecpair); //die Menge zu den zu filternden OderConstraints anfügen @@ -2469,7 +2473,19 @@ throws MatchException inferencelog.debug("Nummer: " + nTypnrInPair); inferencelog.debug("TV: " + a.getName()); inferencelog.debug("Bedingung: " + bMitVorbedingung); - + /* + Cloner cloner = new Cloner(); + cloner.setDumpClonedClasses(true); + SectionLogger log = Logger.getSectionLogger("Subst-Methode", Section.UNIFY); + Timewatch timer = Timewatch.getTimewatch(); + de.dhbwstuttgart.logger.Timestamp timestamp = timer.start("Unify-Subst"); + P = cloner.deepClone(P); + a = cloner.deepClone(a); + o = cloner.deepClone(o); + long time = timestamp.stop(); + log.debug("Benötigte Zeit für DeepClone: "+time); + */ + // richtiger Typ aus Pair raussuchen Type T = null; if( nTypnrInPair == 1 ) @@ -3632,5 +3648,11 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return T instanceof FreshWildcardType; } + private static Menge deepClone(Menge m){ + + Menge ret = m.stream().map((Function)(x -> x.deepClone())).>collect(Menge::new, Menge::add, Menge::addAll); + + return ret; + } } -// ino.end +// ino.end \ No newline at end of file From fbc1bc5b5bd30ee8f106db9f4e74d0d3ccc1ac10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Thu, 16 Jul 2015 01:16:06 +0200 Subject: [PATCH 163/186] Cloner durch Unify.deepClone in UndMenge.java ersetzt --- src/de/dhbwstuttgart/typeinference/UndMenge.java | 9 +++++---- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/UndMenge.java b/src/de/dhbwstuttgart/typeinference/UndMenge.java index 0dd2c06c..6771bf18 100644 --- a/src/de/dhbwstuttgart/typeinference/UndMenge.java +++ b/src/de/dhbwstuttgart/typeinference/UndMenge.java @@ -1,18 +1,19 @@ package de.dhbwstuttgart.typeinference; +import de.dhbwstuttgart.typeinference.unify.Unify; import java.util.Collection; import java.util.Iterator; -import com.rits.cloning.Cloner; +//import com.rits.cloning.Cloner; -public abstract class UndMenge implements KomplexeMenge{ +public abstract class UndMenge implements KomplexeMenge{ public abstract Menge> getSet(); @Override public Menge> cartesianProduct() { Menge> ret = null; - Cloner cloner = new Cloner(); + //Cloner cloner = new Cloner(); for(KomplexeMenge km : this.getSet()){ if(ret == null){ ret = km.cartesianProduct(); @@ -20,7 +21,7 @@ public abstract class UndMenge implements KomplexeMenge{ Menge> cartesianProduct = new Menge<>(); for(Menge r : ret)for(Menge m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt: Menge undElement = new Menge(); - undElement.addAll(cloner.deepClone(r)); + undElement.addAll(Unify.deepClone(r)); undElement.addAll(m); cartesianProduct.add(undElement); } diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index bb561cbf..dbe8d5e1 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -3648,7 +3648,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: return T instanceof FreshWildcardType; } - private static Menge deepClone(Menge m){ + public static Menge deepClone(Menge m){ Menge ret = m.stream().map((Function)(x -> x.deepClone())).>collect(Menge::new, Menge::add, Menge::addAll); From 70b804fc4a23d08e3ca0b1a7688a0680fb603079 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 16 Jul 2015 01:35:06 +0200 Subject: [PATCH 164/186] =?UTF-8?q?Zeitmessung=20f=C3=BCr=20Clone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index bb561cbf..5bd9e505 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -23,6 +23,7 @@ import com.rits.cloning.Cloner; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; +import de.dhbwstuttgart.logger.Timestamp; import de.dhbwstuttgart.logger.Timewatch; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -673,7 +674,7 @@ public class Unify Menge>> temp = new Menge<>(); //hier werden gefilterte Constraints gesammelt Menge undMenge = new Menge(); //Die Menge von Pairs, welche in jedem Kartesischen Produkt enthalten sind. //undMenge.addAll(cloner.deepClone(Eq1)); - undMenge.addAll(Eq1); + undMenge.addAll(Unify.deepClone(Eq1)); Menge>> oderConstraints = new Menge<>();//Die zu filternden Constraints for (Menge> vecvecpair : cartProduktSets){ if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: @@ -691,8 +692,8 @@ public class Unify Menge testMenge = new Menge(); //testMenge.addAll(cloner.deepClone(undMenge)); //testMenge.addAll(cloner.deepClone(pairs)); - testMenge.addAll(undMenge); - testMenge.addAll(pairs); + testMenge.addAll(Unify.deepClone(undMenge)); + testMenge.addAll(Unify.deepClone(pairs)); Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); if(test.size()>0){ filteredOCons.add(pairs); @@ -3649,9 +3650,10 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.: } private static Menge deepClone(Menge m){ - + Timewatch watch = Timewatch.getTimewatch(); + Timestamp timer = watch.start("Unify - deepClone"); Menge ret = m.stream().map((Function)(x -> x.deepClone())).>collect(Menge::new, Menge::add, Menge::addAll); - + timer.stop(); return ret; } } From 8d1b2c6b8210a03dab3471d91ce6bd65c88a915b Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Tue, 4 Aug 2015 11:06:18 +0200 Subject: [PATCH 165/186] =?UTF-8?q?Unify=20Debuoutput=20angef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/dhbwstuttgart/typeinference/unify/Unify.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 1a1b827c..9ffa28e4 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -136,8 +136,11 @@ public class Unify //public static Menge> unifyWC (Menge E, FC_TTO fc_tto) public static Menge> unifyFiltered (Menge E, FC_TTO fc_tto, boolean filter) { + SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); + //Schritt 1: Aufrufen der Regeln durch sub_unify. Menge Eq = sub_unify(E,fc_tto); + log.debug("Eq Set nach Schritt 1: "+Eq); /* Schritt 2: Rausfiltern der Typen die entweder beides Typvariablen sind oder nicht. * Sobald ein Paar auftauch, bei denen kein Typ mehr eine Typvariable ist, kann dieses Paar * nicht mehr unifiziert werden, deshalb abbruch.*/ @@ -641,7 +644,7 @@ public class Unify } } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - + log.debug("Unify Sets nach Schritt 4 vor dem Erstellen des Karthesischen Produkts: "+cartProduktSets); /* //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: @@ -667,7 +670,6 @@ public class Unify if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg3); Sets.cartesianProduct(bigCartProductErg3); */ - SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); if(filter){ //Cloner cloner = new Cloner(); From 2d8adb5c696e69b1aa88089bbba951d569f4dc56 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 26 Aug 2015 14:48:51 +0200 Subject: [PATCH 166/186] =?UTF-8?q?Beginn=20der=20Implementierung=20von=20?= =?UTF-8?q?Bytecode=20f=C3=BCr=20Lambda=20Expression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 5 ++-- src/de/dhbwstuttgart/syntaxtree/Class.java | 4 ++-- .../dhbwstuttgart/syntaxtree/Constructor.java | 5 +++- .../dhbwstuttgart/syntaxtree/SourceFile.java | 2 +- .../syntaxtree/SyntaxTreeNode.java | 6 +++-- .../syntaxtree/misc/ConstructorCall.java | 15 ++++++++---- .../statement/LambdaExpression.java | 24 ++++++++++++------- .../syntaxtree/statement/MethodCall.java | 4 +++- .../syntaxtree/statement/SuperCall.java | 3 +++ .../syntaxtree/statement/This.java | 13 +++++++--- .../TypeInsertTests/LambdaTest16.jav | 1 - .../LambdaTest2_2.java | 3 ++- 12 files changed, 58 insertions(+), 27 deletions(-) rename test/plugindevelopment/TypeInsertTests/{ => LargeSourceCodeTests}/LambdaTest2_2.java (83%) diff --git a/.classpath b/.classpath index a66c92d7..b02a00af 100755 --- a/.classpath +++ b/.classpath @@ -1,12 +1,13 @@ - + + - + diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index d00cca51..e2dec91b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -1227,10 +1227,10 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //Alle Methoden auf Konstruktoren durchsuchen und diese umwandeln: Menge tempFields = new Menge(); for(Field f : this.getFields()){ - if(f instanceof Method && !(f instanceof Constructor)){ + if(f instanceof Method && !(f instanceof Constructor)){ //Der Check, ob f ein Konstruktor ist eigentlich obsolet, da der Parser keinen Konstruktor generiert Method method = (Method)f; if(method.get_Method_Name().equals(this.getName().toString()) ){ - tempFields.add(new Constructor(method)); + tempFields.add(new Constructor(method, this)); }else{ tempFields.add(f); } diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index e8f651b8..cf592857 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -38,11 +38,12 @@ public class Constructor extends Method { * Parser kann nicht zwischen einem Konstruktor und einer Methode unterscheiden. * Diese Klasse beherbegt den als Methode geparsten Konstruktor und wandelt sein verhalten zu dem eines Konstruktors ab. */ - public Constructor(Method methode){ + public Constructor(Method methode, Class parent){ super(methode.get_Method_Name(), methode.getType(), methode.getParameterList(),methode.get_Block(), methode.getGenericDeclarationList(), methode.getOffset()); //Sicherstellen, dass das erste Statement in der Methode ein SuperCall ist: if(this.get_Block().get_Statement().size() <1 || ! (this.get_Block().get_Statement().firstElement() instanceof SuperCall)){ this.get_Block().statements.add(0, new SuperCall(this.get_Block())); + this.parserPostProcessing(parent); } } @Override @@ -121,6 +122,8 @@ public class Constructor extends Method { return this.getType().getName(); } + + } /* diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 40e96d38..1210078c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -1779,7 +1779,7 @@ public class SourceFile @Override public void parserPostProcessing(SyntaxTreeNode parent) { if(parent!=null)throw new DebugException("Eine SourceFile hat kein Elternelement im Syntaxbaum"); - super.parserPostProcessing(parent); + super.parserPostProcessing(this); //for(SyntaxTreeNode node : this.getChildren())node.parserPostProcessing(this); } diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index deb03d89..0d234b61 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -30,12 +30,14 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ * */ public void parserPostProcessing(SyntaxTreeNode parent) { + if(parent == null)throw new NullPointerException(); this.parent = parent; for(SyntaxTreeNode node : this.getChildren()) if(node!=null)node.parserPostProcessing(this); } public SyntaxTreeNode getParent() { + //if(this.parent == null)throw new NullPointerException(); return this.parent; } @@ -123,10 +125,10 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{ } public GTVDeclarationContext getGTVDeclarationContext(){ - if(this.getParent()==null)return null; + if(this.getParent()==null) + throw new NullPointerException();//throw new DebugException("getGTVDeclarationContext auf unzulässiger Klasse aufgerufen"); return this.getParent().getGTVDeclarationContext(); } - } diff --git a/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java b/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java index 3ef7c81d..b772db27 100644 --- a/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/misc/ConstructorCall.java @@ -1,5 +1,6 @@ package de.dhbwstuttgart.syntaxtree.misc; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.statement.ArgumentList; import de.dhbwstuttgart.syntaxtree.statement.MethodCall; import de.dhbwstuttgart.syntaxtree.statement.Receiver; @@ -16,10 +17,10 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; public class ConstructorCall extends MethodCall { public ConstructorCall(Receiver receiver, String methodName, ArgumentList argumentList, int offset){ - super(offset, 0); - this.set_Receiver(receiver); - this.set_Name(methodName); - this.set_ArgumentList(argumentList); + super(receiver, methodName, argumentList,offset); + //this.set_Receiver(receiver); + //this.set_Name(methodName); + //this.set_ArgumentList(argumentList); } /* @@ -38,4 +39,10 @@ public class ConstructorCall extends MethodCall ret.add(constraintsFromMethodAssumption(cAss, assumptions)); return ret; } + + @Override + public void parserPostProcessing(SyntaxTreeNode parent) { + super.parserPostProcessing(parent); + } + } \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 62c3c761..3f9e747f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -2,6 +2,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; +import org.apache.bcel.classfile.BootstrapMethod; import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; @@ -217,20 +218,25 @@ public class LambdaExpression extends Expr{ public InstructionList genByteCode(ClassGen cg) { ConstantPoolGen cp = cg.getConstantPool(); InstructionList il = new InstructionList(); + /* - * Bytecode: - * 0: invokedynamic #2, 0 //#2 führt zu einem InvokeDynamic im KP - wildes Referenzieren - * 5: astore_1 //Speichert wahrscheinlich den String meiner TestEXPR - * 6: return + * Invokedynamic 186 (0xBA) + * - Auf dem Operanten Stack liegen die Argumente + * + * InvokeDynamik_Info Structure auf den der Indexzeiger zeigen muss: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.10 + * + * Ablauf: + * 1. Methode erstellen, mit dem Inhalt der Lambda-Expression //Dabei wird das This-Stat + * 2. Invokedynamic-Call erzeugen + * */ + new BootstrapMethod(); //---Variante 1 mit opcode---- - short opcode = 186;//opcode - was genau ist das? - il.append(new INVOKEDYNAMIC(opcode, 0));//Invokedynamic lässt sich bei mir weder automatisch noch manuell importieren + short opcode = 186; + int index = 0; //indexbyte 1 und 2 müssen ein Zeiger auf ein call site specifier im Konstantenpool sein (InvokeDynamic_Info). + il.append(new INVOKEDYNAMIC(opcode, index)); - //---Variante 2 mit Konstantenpool-Referenz--- - //int cpSize = cp.getSize()-1;//Vermutlich ist die benötigte Referenz das aktuellste Element? - //il.append(new INVOKEDYNAMIC((short) cpSize, 0)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 45f2716b..1ea8c297 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -299,11 +299,13 @@ public class MethodCall extends Expr return ret; } + /* @Override public void parserPostProcessing(SyntaxTreeNode parent) { super.parserPostProcessing(parent); } - + */ + @Override public InstructionList genByteCode(ClassGen _cg) { // TODO Auto-generated method stub diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index eea3f491..6b354f2a 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -65,7 +65,10 @@ public class SuperCall extends ThisCall ((Constructor)p).get_Block().statements.firstElement().equals(this)){ //Constraints generieren: + if(this.arglist == null)this.arglist = new ArgumentList(); + MethodCall constructorCall = new ConstructorCall(new Receiver(new This(this)), className, arglist, this.getOffset()); + constructorCall.parserPostProcessing(this); ret.add(constructorCall.TYPEStmt(assumptions)); return ret; }else{ diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index dfb5f32a..1f5ed185 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -5,6 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; +import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.MethodGen; +import org.apache.bcel.generic.ObjectType; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -143,9 +148,11 @@ public class This extends Expr } @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - + public InstructionList genByteCode(ClassGen _cg) { + InstructionList il = new InstructionList(); + InstructionHandle ih_0 = il.append(InstructionFactory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); + InstructionHandle ih_1 = il.append(InstructionFactory.createReturn(org.apache.bcel.generic.Type.OBJECT)); + return il; } } diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest16.jav b/test/plugindevelopment/TypeInsertTests/LambdaTest16.jav index 839afeb5..bc58f522 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest16.jav +++ b/test/plugindevelopment/TypeInsertTests/LambdaTest16.jav @@ -1,4 +1,3 @@ class Matrix2{ Fun1>, DF> op = (m)->(f)->{return f.apply(this,m);}; } - \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest2_2.java similarity index 83% rename from test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java rename to test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest2_2.java index 5503c7fe..662846f1 100644 --- a/test/plugindevelopment/TypeInsertTests/LambdaTest2_2.java +++ b/test/plugindevelopment/TypeInsertTests/LargeSourceCodeTests/LambdaTest2_2.java @@ -1,6 +1,7 @@ -package plugindevelopment.TypeInsertTests; +package plugindevelopment.TypeInsertTests.LargeSourceCodeTests; import de.dhbwstuttgart.typeinference.Menge; +import plugindevelopment.TypeInsertTests.MultipleTypesInsertTester; import org.junit.Test; From 985f3e984cd2ed29e2716c12502f5ebf712d58bc Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 26 Aug 2015 15:08:04 +0200 Subject: [PATCH 167/186] Fehler in Parser behoben --- src/de/dhbwstuttgart/parser/JavaParser.java | 4 ++-- src/de/dhbwstuttgart/parser/JavaParser.jay | 4 ++-- test/bytecode/Assign.jav | 8 ++++++-- test/bytecode/Assign.java | 2 +- test/bytecode/Test.java | 2 ++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/de/dhbwstuttgart/parser/JavaParser.java b/src/de/dhbwstuttgart/parser/JavaParser.java index 7cd658e9..7609ac33 100644 --- a/src/de/dhbwstuttgart/parser/JavaParser.java +++ b/src/de/dhbwstuttgart/parser/JavaParser.java @@ -1455,7 +1455,7 @@ case 98: case 99: // line 912 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Constructor CON = new Constructor(null); /*TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen...*/ + Constructor CON = new Constructor(null,null); /*TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen...*/ DeclId DIDCon = new DeclId(); DIDCon.set_Name(((UsedId)yyVals[-2+yyTop]).get_Name_1Element()); CON.set_DeclId(DIDCon); @@ -1465,7 +1465,7 @@ case 99: case 100: // line 920 "./../src/de/dhbwstuttgart/parser/JavaParser.jay" { - Constructor CONpara = new Constructor(null); + Constructor CONpara = new Constructor(null,null); DeclId DIconpara = new DeclId(); DIconpara.set_Name(((UsedId)yyVals[-3+yyTop]).get_Name_1Element()); CONpara.set_DeclId(DIconpara); diff --git a/src/de/dhbwstuttgart/parser/JavaParser.jay b/src/de/dhbwstuttgart/parser/JavaParser.jay index df9d3990..553ad069 100755 --- a/src/de/dhbwstuttgart/parser/JavaParser.jay +++ b/src/de/dhbwstuttgart/parser/JavaParser.jay @@ -910,7 +910,7 @@ block : '{' '}' constructordeclarator : simplename '(' ')' { - Constructor CON = new Constructor(null); //TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen... + Constructor CON = new Constructor(null,null); //TODO: Der Parser kann sowieso nicht zwischen einem Konstruktor und einer Methode unterscheiden. Das hier kann wegfallen... DeclId DIDCon = new DeclId(); DIDCon.set_Name($1.get_Name_1Element()); CON.set_DeclId(DIDCon); @@ -918,7 +918,7 @@ constructordeclarator : simplename '(' ')' } | simplename '('formalparameterlist')' { - Constructor CONpara = new Constructor(null); + Constructor CONpara = new Constructor(null,null); DeclId DIconpara = new DeclId(); DIconpara.set_Name($1.get_Name_1Element()); CONpara.set_DeclId(DIconpara); diff --git a/test/bytecode/Assign.jav b/test/bytecode/Assign.jav index b238192f..02fb4b6e 100644 --- a/test/bytecode/Assign.jav +++ b/test/bytecode/Assign.jav @@ -1,6 +1,10 @@ class Assign{ -void method() {a; a = 20;b; b=59;} - +void method() { +a; +a = 20; +b; +b=59; +} } \ No newline at end of file diff --git a/test/bytecode/Assign.java b/test/bytecode/Assign.java index c027e25b..415fb2a8 100644 --- a/test/bytecode/Assign.java +++ b/test/bytecode/Assign.java @@ -24,7 +24,7 @@ public class Assign { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; public final static String testFile = "Assign.jav"; - public final static String outputFile = "Assign.class"; + public final static String outputFile = "AssignTest.class"; @Test public void test() { diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java index e50bce6a..2ff65c63 100644 --- a/test/bytecode/Test.java +++ b/test/bytecode/Test.java @@ -4,5 +4,7 @@ class Test{ public static void main(String[] args){ new EmptyClass(); + new AssignTest(); + } } From 1964a64f94cfa88c641c63dad5c0da7f1381a1c4 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 27 Aug 2015 12:32:07 +0200 Subject: [PATCH 168/186] =?UTF-8?q?Klassen=20f=C3=BCr=20den=20BCELifier=20?= =?UTF-8?q?anf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BCEL/bcelifier/IntLiteral.class | Bin 0 -> 355 bytes BCEL/bcelifier/Lambda1.class | Bin 0 -> 519 bytes BCEL/bcelifier/MethodCall.class | Bin 0 -> 397 bytes BCEL/bcelifier/This.class | Bin 0 -> 188 bytes test/bytecode/{Assign.java => AssignTest.java} | 0 test/bytecode/{Return.java => ReturnTest.java} | 0 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 BCEL/bcelifier/IntLiteral.class create mode 100644 BCEL/bcelifier/Lambda1.class create mode 100644 BCEL/bcelifier/MethodCall.class create mode 100644 BCEL/bcelifier/This.class rename test/bytecode/{Assign.java => AssignTest.java} (100%) rename test/bytecode/{Return.java => ReturnTest.java} (100%) diff --git a/BCEL/bcelifier/IntLiteral.class b/BCEL/bcelifier/IntLiteral.class new file mode 100644 index 0000000000000000000000000000000000000000..de65701a97c776ab2ec2c299a26b85d011f111ee GIT binary patch literal 355 zcmZvYK}*9x5QX0)O;%$xZEbr~@RoY87jKFeK_~<(DBd@5TDNRd2uXjJo)iyWy!oTV z*;1$n_b~J3?Z@oQe*b)Y0yxJYLVyDw__~XbpsmnR=n}$9Q=0mU;HSe!LhE|@#DpX> zCEqrSoT~?&TXEEa>*w`dKOJUsz0xDA%h_mL);#0tf)L#=o2uX&OumK6}ZQn^g=b|Qbw$|n;nPsJI!;>jtkdFTw1}A9Ay6$+8 y9ib%dNOdHcBnPK&pjQ!uU5Vk^l+QtgJ<$$5mh8~5>%GH&5%rf1q>9D!u>T9*%|_b* literal 0 HcmV?d00001 diff --git a/BCEL/bcelifier/Lambda1.class b/BCEL/bcelifier/Lambda1.class new file mode 100644 index 0000000000000000000000000000000000000000..6f70cb9f8c3a91f4bffc693831ac5d4811fd8616 GIT binary patch literal 519 zcmZWlOH0E*5dJo4Of zCPAz2VPfTQC(flW7%Ybe?vNiJj`=-jsJfo;<&6}voi_~V z3>DS2eIDN07w%YiiGd=++=&cja>}5$I|B;_%rfRsVkjgdIbo>Toc+CzZ7OP literal 0 HcmV?d00001 diff --git a/BCEL/bcelifier/MethodCall.class b/BCEL/bcelifier/MethodCall.class new file mode 100644 index 0000000000000000000000000000000000000000..c37c7d5ba6790a5cd7ae2d2d91671f35b6267391 GIT binary patch literal 397 zcmZ8cO-sW-5Pg%ct=rhtS}h(tc&jZK5O0c?f~TsW;(ZfW-I8u0B>pciiXQv{{wQ%a zR06Uv^XBcFH#6TqpI-n@Fp>z7NCfD2v4w%aw!n}Oof&JYbAmrUye9;+)q^G^b7S>Y zz07oZr?P?>vDDRb^VeCUW5Q@WU#J(A7Ro-QH?_4+d+L1T?W!(wePLX0a@q9GR8br` zeT)bqhJ+B Date: Thu, 27 Aug 2015 13:36:14 +0200 Subject: [PATCH 169/186] Bytecode erweitert --- BCEL/bcelifier/IntLiteral.java | 7 ++ BCEL/bcelifier/IntLiteralCreator.java | 56 ++++++++++++ BCEL/bcelifier/JavaToBCEL.java | 37 ++++++++ BCEL/bcelifier/Lambda1.class.toGenerate | Bin 0 -> 982 bytes BCEL/bcelifier/Lambda1.java | 8 ++ BCEL/bcelifier/Lambda1Creator.java | 70 +++++++++++++++ BCEL/bcelifier/MethodCall.java | 12 +++ BCEL/bcelifier/MethodCallCreator.java | 70 +++++++++++++++ BCEL/bcelifier/This.java | 8 ++ BCEL/bcelifier/ThisCreator.java | 55 ++++++++++++ .../bytecode/DHBWInstructionFactory.java | 80 ++++++++++++++++++ src/de/dhbwstuttgart/core/MyCompiler.java | 22 ++--- src/de/dhbwstuttgart/core/MyCompilerAPI.java | 7 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 14 +-- src/de/dhbwstuttgart/syntaxtree/Method.java | 20 ++++- .../syntaxtree/ParameterList.java | 4 + .../dhbwstuttgart/syntaxtree/SourceFile.java | 18 +++- .../syntaxtree/statement/IntLiteral.java | 14 ++- .../syntaxtree/statement/MethodCall.java | 3 +- .../syntaxtree/statement/Return.java | 5 +- test/bytecode/AssignTest.java | 17 +--- test/bytecode/BoolLitTest.java | 13 +-- test/bytecode/CharLitTest.java | 13 +-- test/bytecode/EmptyClassTest.java | 13 +-- test/bytecode/MethodCall.jav | 9 ++ test/bytecode/MethodCallTest.java | 34 ++++++++ test/bytecode/Return.jav | 9 +- test/bytecode/ReturnTest.java | 19 +---- test/bytecode/SingleClassTester.java | 32 +++++++ test/bytecode/Test.java | 4 +- 30 files changed, 564 insertions(+), 109 deletions(-) create mode 100644 BCEL/bcelifier/IntLiteral.java create mode 100644 BCEL/bcelifier/IntLiteralCreator.java create mode 100644 BCEL/bcelifier/JavaToBCEL.java create mode 100644 BCEL/bcelifier/Lambda1.class.toGenerate create mode 100644 BCEL/bcelifier/Lambda1.java create mode 100644 BCEL/bcelifier/Lambda1Creator.java create mode 100644 BCEL/bcelifier/MethodCall.java create mode 100644 BCEL/bcelifier/MethodCallCreator.java create mode 100644 BCEL/bcelifier/This.java create mode 100644 BCEL/bcelifier/ThisCreator.java create mode 100644 src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java create mode 100644 test/bytecode/MethodCall.jav create mode 100644 test/bytecode/MethodCallTest.java create mode 100644 test/bytecode/SingleClassTester.java diff --git a/BCEL/bcelifier/IntLiteral.java b/BCEL/bcelifier/IntLiteral.java new file mode 100644 index 00000000..a4d38fe9 --- /dev/null +++ b/BCEL/bcelifier/IntLiteral.java @@ -0,0 +1,7 @@ +package bcelifier; + +public class IntLiteral { + Integer methode(){ + return 50000; + } +} diff --git a/BCEL/bcelifier/IntLiteralCreator.java b/BCEL/bcelifier/IntLiteralCreator.java new file mode 100644 index 00000000..eed6f137 --- /dev/null +++ b/BCEL/bcelifier/IntLiteralCreator.java @@ -0,0 +1,56 @@ +package bcelifier; + +import org.apache.bcel.generic.*; +import org.apache.bcel.classfile.*; +import org.apache.bcel.*; +import java.io.*; + +public class IntLiteralCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public IntLiteralCreator() { + _cg = new ClassGen("bcelifier.IntLiteral", "java.lang.Object", "IntLiteral.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.IntLiteral", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.IntLiteral", il, _cp); + + InstructionHandle ih_0 = il.append(new PUSH(_cp, 50000)); + il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC)); + InstructionHandle ih_5 = il.append(_factory.createReturn(Type.OBJECT)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.IntLiteralCreator creator = new bcelifier.IntLiteralCreator(); + creator.create(new FileOutputStream("bcelifier.IntLiteral.class")); + } +} diff --git a/BCEL/bcelifier/JavaToBCEL.java b/BCEL/bcelifier/JavaToBCEL.java new file mode 100644 index 00000000..574f6b7c --- /dev/null +++ b/BCEL/bcelifier/JavaToBCEL.java @@ -0,0 +1,37 @@ +package bcelifier; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; + +import org.apache.bcel.classfile.ClassFormatException; +import org.apache.bcel.classfile.ClassParser; +import org.apache.bcel.classfile.JavaClass; +import org.apache.bcel.util.BCELifier; + +public class JavaToBCEL { + + public final static String rootDirectory = System.getProperty("user.dir")+"/BCEL/bcelifier/"; + + public static void main(String args[]){ + new JavaToBCEL(); + } + + public JavaToBCEL(){ + try { + new BCELifier(new ClassParser(rootDirectory+"Lambda1.class").parse(), new FileOutputStream(new File(rootDirectory+"Lambda1Creator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"This.class").parse(), new FileOutputStream(new File(rootDirectory+"ThisCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"IntLiteral.class").parse(), new FileOutputStream(new File(rootDirectory+"IntLiteralCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"MethodCall.class").parse(), new FileOutputStream(new File(rootDirectory+"MethodCallCreator.java"))).start(); + + } catch (ClassFormatException | IOException e) { + e.printStackTrace(); + } + } + + +} diff --git a/BCEL/bcelifier/Lambda1.class.toGenerate b/BCEL/bcelifier/Lambda1.class.toGenerate new file mode 100644 index 0000000000000000000000000000000000000000..c82ddc6f846f03d4d1a3a34518db83997a3f2ae5 GIT binary patch literal 982 zcmbVLO>fgc5Ph38-qbZDZAhU&KPYKQ0yGqH3*tZ|1X7@gRK0JKZM&_rj_h@%{43x9 zQV;w9#BV~(#zt`|^nedLv$JpB%)DKH|9Somz%x8`;h?-kesvzpxar~+Ryb~R++lE@ zE3M26hJ3woz%bVdhLWMwRa(A_M|~OYi@r}0K9c5mdbV6|bWg;YX!$}PwLZjJTSS|o z?2A!ceqewX~gTO>46yvv3{;1^OZW+ZA$Et@l ztaEI5xQ9)S`yOi8Vp!}Cq^}N@3|lE7(aaj!>z~Mhaj}gDE()mAWMQls8ujj_#P+`? znbGwok&z=J31Y)gO(s`C>wT!S>6uW95shA%CR_}YW@8KTsd%-Xku2%3-8kTAcxYnB z!!@hL=B%pHXThmV=Obmrp%|DToG>hqy1#cEB(c*Cg41|R^1jhph8#m9{Mt>C5i1!XEcw}N7=}Q#Qn)w{@-Cz^6K2|U8H3@!uNa1$Tr6=!`3Bz{x%Q8 z+SNFEO$GWP?3V{!5{k6W({7b4BU@;G1^Yw}ySystem.out.println(this); + } +} diff --git a/BCEL/bcelifier/Lambda1Creator.java b/BCEL/bcelifier/Lambda1Creator.java new file mode 100644 index 00000000..f7f6f8a5 --- /dev/null +++ b/BCEL/bcelifier/Lambda1Creator.java @@ -0,0 +1,70 @@ +package bcelifier; + +import org.apache.bcel.generic.*; +import org.apache.bcel.classfile.*; +import org.apache.bcel.*; +import java.io.*; + +public class Lambda1Creator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public Lambda1Creator() { + _cg = new ClassGen("bcelifier.Lambda1", "java.lang.Object", "Lambda1.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + createMethod_2(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.Lambda1", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, new ObjectType("java.lang.Runnable"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.Lambda1", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + InstructionHandle ih_1 = il.append(_factory.createReturn(Type.OBJECT)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_2() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PRIVATE | ACC_SYNTHETIC, Type.VOID, Type.NO_ARGS, new String[] { }, "lambda$methode$0", "bcelifier.Lambda1", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createFieldAccess("java.lang.System", "out", new ObjectType("java.io.PrintStream"), Constants.GETSTATIC)); + il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.io.PrintStream", "println", Type.VOID, new Type[] { Type.OBJECT }, Constants.INVOKEVIRTUAL)); + InstructionHandle ih_7 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.Lambda1Creator creator = new bcelifier.Lambda1Creator(); + creator.create(new FileOutputStream("bcelifier.Lambda1.class")); + } +} diff --git a/BCEL/bcelifier/MethodCall.java b/BCEL/bcelifier/MethodCall.java new file mode 100644 index 00000000..433957b3 --- /dev/null +++ b/BCEL/bcelifier/MethodCall.java @@ -0,0 +1,12 @@ +package bcelifier; + +public class MethodCall { + void methode(){ + } + + void methode2(Runnable r){ + methode(); + r.run(); + } +} + diff --git a/BCEL/bcelifier/MethodCallCreator.java b/BCEL/bcelifier/MethodCallCreator.java new file mode 100644 index 00000000..303fb699 --- /dev/null +++ b/BCEL/bcelifier/MethodCallCreator.java @@ -0,0 +1,70 @@ +package bcelifier; + +import org.apache.bcel.generic.*; +import org.apache.bcel.classfile.*; +import org.apache.bcel.*; +import java.io.*; + +public class MethodCallCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public MethodCallCreator() { + _cg = new ClassGen("bcelifier.MethodCall", "java.lang.Object", "MethodCall.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + createMethod_2(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.MethodCall", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, Type.VOID, Type.NO_ARGS, new String[] { }, "methode", "bcelifier.MethodCall", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_2() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, Type.VOID, new Type[] { new ObjectType("java.lang.Runnable") }, new String[] { "arg0" }, "methode2", "bcelifier.MethodCall", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("bcelifier.MethodCall", "methode", Type.VOID, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); + InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 1)); + il.append(_factory.createInvoke("java.lang.Runnable", "run", Type.VOID, Type.NO_ARGS, Constants.INVOKEINTERFACE)); + InstructionHandle ih_10 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.MethodCallCreator creator = new bcelifier.MethodCallCreator(); + creator.create(new FileOutputStream("bcelifier.MethodCall.class")); + } +} diff --git a/BCEL/bcelifier/This.java b/BCEL/bcelifier/This.java new file mode 100644 index 00000000..3d239478 --- /dev/null +++ b/BCEL/bcelifier/This.java @@ -0,0 +1,8 @@ +package bcelifier; + +public class This { + + This methode(){ + return this; + } +} diff --git a/BCEL/bcelifier/ThisCreator.java b/BCEL/bcelifier/ThisCreator.java new file mode 100644 index 00000000..329d0d5d --- /dev/null +++ b/BCEL/bcelifier/ThisCreator.java @@ -0,0 +1,55 @@ +package bcelifier; + +import org.apache.bcel.generic.*; +import org.apache.bcel.classfile.*; +import org.apache.bcel.*; +import java.io.*; + +public class ThisCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public ThisCreator() { + _cg = new ClassGen("bcelifier.This", "java.lang.Object", "", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.This", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, new ObjectType("bcelifier.This"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.This", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + InstructionHandle ih_1 = il.append(_factory.createReturn(Type.OBJECT)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.ThisCreator creator = new bcelifier.ThisCreator(); + creator.create(new FileOutputStream("bcelifier.This.class")); + } +} diff --git a/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java new file mode 100644 index 00000000..bec3f076 --- /dev/null +++ b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java @@ -0,0 +1,80 @@ +package de.dhbwstuttgart.bytecode; + +import java.awt.List; +import java.util.ArrayList; + +import org.apache.bcel.classfile.BootstrapMethod; +import org.apache.bcel.classfile.ConstantInvokeDynamic; +import org.apache.bcel.classfile.Method; +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; +import org.apache.bcel.generic.INVOKEDYNAMIC; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.MethodGen; +import org.apache.bcel.generic.Type; + +public class DHBWInstructionFactory extends InstructionFactory{ + + public DHBWInstructionFactory(ClassGen cg, ConstantPoolGen cp) { + super(cg, cp); + } + + private BootstrapMethod createBootstrapMethod(){ + //TODO + return null; + } + + public INVOKEDYNAMIC createInvokeDynamic( MethodGen lambdaMethod ) { + //Zuerst die Bootstrap-Methode erstellen: Diese müssen dann in ein BootstrapMethods-Attribut zusammengefasst und dem Classfile hinzugefügt werden + int lambdaMethodIndex = this.cp.addMethodref(lambdaMethod); + + ArrayList arguments = new ArrayList(); + + BootstrapMethod bMethod = new BootstrapMethod(lambdaMethodIndex, arguments.size(), (int[])arguments.toArray()); + + final short opcode = 186; + int index; + /* + int nargs = 0; + String signature = Type.getMethodSignature(ret_type, arg_types); + for (int i = 0; i < arg_types.length; i++) { + nargs += arg_types[i].getSize(); + } + */ + + //index = cp.addInvokeDynamic(bootstrap_index, name, signature); + //Adding invokeDynamic to Constant_Pool: + + /* + * Spezifikation: @see https://docs.oracle.com/javase/specs/jvms/se8/html/index.html + * + * CONSTANT_InvokeDynamic_info structure: + * - a symbolic reference to a method handle (bootstrap_method_attr_index) + * - a method name and a method descriptor (name_and_type_index) + * + * @see https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.10 + */ + + /* + * + * TODO: Rausfinden, was es mit der Inneren Klasse auf sich hat + * (public static final #48= #47 of #51; //Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles + * + * TODO: Rausfinden was es mit dem NameAndType Eintrag in der InvokeDynamic_info Struktur auf sich hat: + * Für ein Runnable ()->{}; ist es: run:(LLambda3;)Ljava/lang/Runnable; + * + * TODO: bootstrap_methode den Klassenattributen hinzufügen + * + */ + + int bootstrap_method_attr_index = bMethod.getBootstrapMethodRef(); + int name_and_type_index = cp.addNameAndType(lambdaMethod.getName(), lambdaMethod.getType().getSignature()); + + ConstantInvokeDynamic cInvokeDynamic = new ConstantInvokeDynamic(bootstrap_method_attr_index, name_and_type_index); + + index = cp.addConstant(cInvokeDynamic, cp); + + return new INVOKEDYNAMIC(opcode, index); + } + +} diff --git a/src/de/dhbwstuttgart/core/MyCompiler.java b/src/de/dhbwstuttgart/core/MyCompiler.java index 5c066cee..f6a6312b 100755 --- a/src/de/dhbwstuttgart/core/MyCompiler.java +++ b/src/de/dhbwstuttgart/core/MyCompiler.java @@ -855,22 +855,14 @@ public class MyCompiler implements MyCompilerAPI } @Override - public ByteCodeResult generateBytecode() { - /* - * TODO Für das Bytecode-Team: - * - generateBytecode-Methode implementieren - * - Sich einen passenden Container für den Bytecode überlegen - * - Dieser wird von generateBytecode zurückgeliefert und sollte die Möglichkeit zum schreiben von Bytecode in eine Datei bieten. - * - wird der Rückgabetyp von generateBytecode in MyCompiler geändert, so muss auch der Rückgabetyp im Interface MyCompilerAPI geändert werden - */ - try { - SourceFile parsedFile = this.m_AbstractSyntaxTree.firstElement(); - Class parsedClass = parsedFile.KlassenVektor.firstElement(); - return parsedClass.genByteCode(); - } catch (IOException e) { - e.printStackTrace(); - return null; + public Menge generateBytecode() { + //SourceFile parsedFile = this.m_AbstractSyntaxTree.firstElement(); + //Class parsedClass = parsedFile.KlassenVektor.firstElement(); + Menge ret = new Menge<>(); + for(SourceFile sf : this.m_AbstractSyntaxTree){ + ret.addAll(sf.generateBytecode()); } + return ret; } } // ino.end diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index 2898b3ba..f1c8880e 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -122,6 +122,11 @@ public interface MyCompilerAPI */ public SourceFile parse(String sourceCode) throws ParserError; - public ByteCodeResult generateBytecode(); + /** + * Generiert für jede geparste Klasse im SourceFile ein ByteCodeResult. + * Dafür müssen die Schritte Parsen und typeReconstruction ausgeführt werden. + * @return + */ + public Menge generateBytecode(); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index e2dec91b..bc16e212 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -72,13 +72,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I private ClassGen _cg; //Method created with BCEL to generate ByteCode - public ByteCodeResult genByteCode() throws IOException { + public ByteCodeResult genByteCode() { SectionLogger logger = Logger.getSectionLogger(this.getClass().getName(), Section.CODEGEN); logger.debug("Test"); if(pkgName != null)throw new NotImplementedException(); - _cg = new ClassGen(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //new String necessary? + _cg = new ClassGen(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //letzter Parameter sind implementierte Interfaces _cp = _cg.getConstantPool(); _factory = new InstructionFactory(_cg, _cp); @@ -88,12 +88,6 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I ByteCodeResult code = new ByteCodeResult(_cg); return code; - - //ByteCodeResult bc = new ByteCodeResult(); - //_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); - //_cg zur�ckgeben - //bc.append(BCELByteCodeOutput); - //return _cg; } private Menge superif = new Menge(); @@ -477,7 +471,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ if(m.get_Method_Name().equals(""))throw new TypeinferenceException(" ist kein gültiger Methodenname", m); if((m.get_Method_Name().equals(this.getName()))) { - Constructor constructor = new Constructor(m); + Constructor constructor = new Constructor(m, this); tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen }else{ //Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen: @@ -1251,7 +1245,7 @@ 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(konstruktorBlock,this.getName().toString(), this), this); //Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this)); this.addField(standardKonstruktor); diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index c5547f23..feb39437 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -746,7 +746,23 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, this.get_Method_Name(), parentClass.name, il, _cp); + //Die Argumentliste generieren: + org.apache.bcel.generic.Type[] argumentTypes = org.apache.bcel.generic.Type.NO_ARGS; + String[] argumentNames = new String[]{}; + if(this.parameterlist != null && + this.parameterlist.size() > 0){ + argumentTypes = new org.apache.bcel.generic.Type[this.parameterlist.size()]; + argumentNames = new String[this.parameterlist.size()]; + int i = 0; + for(FormalParameter parameter : this.parameterlist){ + argumentTypes[i] = parameter.getType().getBytecodeType(); + argumentNames[i] = parameter.getIdentifier(); + i++; + } + } + + //Methode generieren: + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), argumentTypes , argumentNames, this.get_Method_Name(), parentClass.name, il, _cp); Block block = this.get_Block(); InstructionList blockInstructions = block.genByteCode(cg); @@ -759,7 +775,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } method.setMaxStack(); //Die Stack Größe automatisch berechnen lassen (erst nach dem alle Instructions angehängt wurden) - + method.setMaxLocals(); cg.addMethod(method.getMethod()); } diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index cdf632e1..acf0934b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -139,6 +139,10 @@ public class ParameterList extends SyntaxTreeNode implements Iterable getChildren() { return formalparameter; } + + public int size() { + return this.formalparameter.size(); + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 1210078c..43ddecc0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -3,12 +3,15 @@ package de.dhbwstuttgart.syntaxtree; // ino.end // ino.module.SourceFile.8722.import +import java.io.IOException; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; + import de.dhbwstuttgart.typeinference.Menge; + import java.util.stream.Stream; import de.dhbwstuttgart.logger.Logger; @@ -29,6 +32,7 @@ import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.Void; +import de.dhbwstuttgart.typeinference.ByteCodeResult; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.FunNInterface; @@ -1368,7 +1372,7 @@ public class SourceFile } //basicAssumptions.addMethodIntersectionType(new CIntersectionType(constructor)); constructorMethod.parameterlist = paraList; - Constructor constructor = new Constructor(constructorMethod); + Constructor constructor = new Constructor(constructorMethod, parentClass); constructor.parserPostProcessing(parentClass); parentClass.addField(constructor); } @@ -1825,5 +1829,17 @@ public class SourceFile return 0; } + /** + * Bisher wird nur der Bytecode der Klassen generiert. Nicht der Interfaces. + * @return + */ + public Collection generateBytecode() { + Menge ret = new Menge<>(); + for(Class cl : this.KlassenVektor){ + ret.add(cl.genByteCode()); + } + return ret; + } + } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index 9c37c19a..7d672ca4 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -4,10 +4,14 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; +import org.apache.bcel.Constants; import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; import org.apache.bcel.generic.InstructionList; +import org.apache.bcel.generic.ObjectType; +import org.apache.bcel.generic.PUSH; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -137,8 +141,14 @@ public class IntLiteral extends Literal public InstructionList genByteCode(ClassGen cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); - il.append(new BIPUSH(new Integer(get_Int()).byteValue())); - return il; + + /* + * Der jetzige Compiler kann keine primitiven Typen. Ein int-Literal ist daher eine Instanz von java.lang.Integer + */ + il.append(new PUSH(cg.getConstantPool(), this.get_Int())); + il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new org.apache.bcel.generic.Type[] { org.apache.bcel.generic.Type.INT }, Constants.INVOKESTATIC)); + + return il; } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 1ea8c297..3fffb2cf 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -308,7 +308,8 @@ public class MethodCall extends Expr @Override public InstructionList genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub + //Herausfinden, ob eine Methode oder ein Interface aufgerufen wird: + //this.receiver.get_Expr().getType() } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index ad3907e0..21aca178 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -138,10 +138,7 @@ public class Return extends Statement InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - //Stimmt das VOID hier eigentlich? --> Wie wäre es mit getReturnType o.ä.? + evtl. von Type zu bcelType casten? - il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); - - + il.append(_factory.createReturn(retexpr.getType().getBytecodeType())); return il; } diff --git a/test/bytecode/AssignTest.java b/test/bytecode/AssignTest.java index 415fb2a8..232564df 100644 --- a/test/bytecode/AssignTest.java +++ b/test/bytecode/AssignTest.java @@ -20,26 +20,15 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; -public class Assign { +public class AssignTest { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; public final static String testFile = "Assign.jav"; - public final static String outputFile = "AssignTest.class"; + public final static String outputFile = "Assign.class"; @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/BoolLitTest.java b/test/bytecode/BoolLitTest.java index ef7b0fc3..75bd41ed 100644 --- a/test/bytecode/BoolLitTest.java +++ b/test/bytecode/BoolLitTest.java @@ -28,18 +28,7 @@ public class BoolLitTest { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/CharLitTest.java b/test/bytecode/CharLitTest.java index add8b515..60f2c4d5 100644 --- a/test/bytecode/CharLitTest.java +++ b/test/bytecode/CharLitTest.java @@ -28,18 +28,7 @@ public class CharLitTest { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/EmptyClassTest.java b/test/bytecode/EmptyClassTest.java index 20aa3349..de7d900a 100644 --- a/test/bytecode/EmptyClassTest.java +++ b/test/bytecode/EmptyClassTest.java @@ -28,18 +28,7 @@ public class EmptyClassTest { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/MethodCall.jav b/test/bytecode/MethodCall.jav new file mode 100644 index 00000000..cdedd45a --- /dev/null +++ b/test/bytecode/MethodCall.jav @@ -0,0 +1,9 @@ +class Assign{ + +void method() { +method(); +} + +void method2(){} + +} \ No newline at end of file diff --git a/test/bytecode/MethodCallTest.java b/test/bytecode/MethodCallTest.java new file mode 100644 index 00000000..96d23eee --- /dev/null +++ b/test/bytecode/MethodCallTest.java @@ -0,0 +1,34 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class MethodCallTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "MethodCall.jav"; + public final static String outputFile = "MethodCall.class"; + + @Test + public void test() { + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); + } + +} diff --git a/test/bytecode/Return.jav b/test/bytecode/Return.jav index 08c29792..36976731 100644 --- a/test/bytecode/Return.jav +++ b/test/bytecode/Return.jav @@ -1,10 +1,7 @@ -class Assign{ +class Return{ -method() {a; - a = 20; - b; - b=59; - return a + b; +Integer method() { + return 5; } diff --git a/test/bytecode/ReturnTest.java b/test/bytecode/ReturnTest.java index 2d7c4803..a7179e11 100644 --- a/test/bytecode/ReturnTest.java +++ b/test/bytecode/ReturnTest.java @@ -20,26 +20,15 @@ import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; -public class Return { +public class ReturnTest { public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - public final static String testFile = "Assign.jav"; - public final static String outputFile = "Assign.class"; + public final static String testFile = "Return.jav"; + public final static String outputFile = "Return.class"; @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/SingleClassTester.java b/test/bytecode/SingleClassTester.java new file mode 100644 index 00000000..f8a85463 --- /dev/null +++ b/test/bytecode/SingleClassTester.java @@ -0,0 +1,32 @@ +package bytecode; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; + +public class SingleClassTester { + + public static void compileToBytecode(String inputFile, String outputFile){ + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(inputFile)); + compiler.typeReconstruction(); + Menge bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.firstElement().getByteCode().getJavaClass().dump(new File(outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +} diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java index 2ff65c63..51e03e30 100644 --- a/test/bytecode/Test.java +++ b/test/bytecode/Test.java @@ -4,7 +4,7 @@ class Test{ public static void main(String[] args){ new EmptyClass(); - new AssignTest(); - + new Assign(); + System.out.println(new Return().method()); } } From 64bed0c60dcaf4018af203510204220a07f01336 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 27 Aug 2015 16:36:19 +0200 Subject: [PATCH 170/186] MethodCall implementiert --- .classpath | 2 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 4 ++ src/de/dhbwstuttgart/syntaxtree/Field.java | 2 +- .../dhbwstuttgart/syntaxtree/Interface.java | 5 ++- .../dhbwstuttgart/syntaxtree/SourceFile.java | 1 + .../syntaxtree/statement/Assign.java | 8 ++-- .../syntaxtree/statement/Binary.java | 2 +- .../syntaxtree/statement/Expr.java | 2 +- .../syntaxtree/statement/MethodCall.java | 37 ++++++++++++++++++- .../syntaxtree/statement/Receiver.java | 8 ++++ .../syntaxtree/statement/This.java | 3 +- .../syntaxtree/type/RefType.java | 3 +- .../assumptions/TypeAssumptions.java | 7 ++++ test/bytecode/MethodCall.jav | 4 +- test/bytecode/Test.java | 1 + 15 files changed, 73 insertions(+), 16 deletions(-) diff --git a/.classpath b/.classpath index b02a00af..3c2e81f4 100755 --- a/.classpath +++ b/.classpath @@ -8,6 +8,6 @@ - + diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index bc16e212..e694a1a5 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -1353,5 +1353,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I public boolean isClass() { return true; } + + public boolean isInterface(){ + return false; + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 55c553ac..77011a5f 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -174,7 +174,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta } /** - * Fügt das das Feld zu ClassGen hinzu + * F�gt das das Feld zu ClassGen hinzu * @param cg */ public abstract void genByteCode(ClassGen cg); diff --git a/src/de/dhbwstuttgart/syntaxtree/Interface.java b/src/de/dhbwstuttgart/syntaxtree/Interface.java index eb5aff6a..d7a4754b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Interface.java +++ b/src/de/dhbwstuttgart/syntaxtree/Interface.java @@ -4,7 +4,6 @@ package de.dhbwstuttgart.syntaxtree; // ino.module.Interface.8582.import import de.dhbwstuttgart.typeinference.Menge; - import de.dhbwstuttgart.core.AClassOrInterface; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.UsedId; @@ -44,6 +43,10 @@ public class Interface extends Class { } + @Override + public boolean isInterface(){ + return true; + } } diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 43ddecc0..0adcb710 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -129,6 +129,7 @@ public class SourceFile public Menge InterfaceVektor = new Menge(); // ino.end + /** * Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei. * SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar. diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 2b38bc8b..5aa376b8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -175,14 +175,14 @@ public class Assign extends Expr } - public static int counterAssign = 0; //Zaehlvariable für ISTORE + public static int counterAssign = 0; //Zaehlvariable f�r ISTORE @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGen cg, TypeAssumptions ass) { // TODO Auto-generated method stub InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr - counterAssign++; //macht STORE für meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) + InstructionList il = expr2.genByteCode(cg, ass);//expr2 rechte expr + counterAssign++; //macht STORE f�r meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) String expr2Type = expr2.getType().get_Name().toString(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index 21b01773..2f0b3b7d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -217,7 +217,7 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { @Override - public InstructionList genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGen _cg, TypeAssumptions ass) { InstructionList linkeSeite = this.expr1.genByteCode(_cg); InstructionList rechteSeite = this.expr2.genByteCode(_cg); if(this.getReturnType().getName().equals(new JavaClassName("String"))){ diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index f625c9ed..6feade6f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -113,6 +113,6 @@ public abstract class Expr extends ExprStmt throw new NotImplementedException(); //wird die TYPEStmt-Methode innerhalb einer Expr aufgerufen, dann ist etwas schief gelaufen. } - public abstract InstructionList genByteCode(ClassGen _cg); + //public abstract InstructionList genByteCode(ClassGen _cg, TypeAssumptions ass); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 3fffb2cf..370107c8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -4,7 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.MethodCall.8639.import import java.util.Hashtable; +import org.apache.bcel.Constants; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionHandle; import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; @@ -206,6 +209,9 @@ public class MethodCall extends Expr //Noch das Overloading-Constraint anhängen: ret.add(overloading(assumptions)); + de.dhbwstuttgart.syntaxtree.Class receiverCl = assumptions.getClassAssumptionFor(receiver.get_Expr().getType()).getAssumedClass(); + this.receiver.setClass(receiverCl); + return ret; } @@ -308,9 +314,36 @@ public class MethodCall extends Expr @Override public InstructionList genByteCode(ClassGen _cg) { - //Herausfinden, ob eine Methode oder ein Interface aufgerufen wird: - //this.receiver.get_Expr().getType() + InstructionList il = new InstructionList(); + InstructionFactory _factory = new InstructionFactory(_cg, _cg.getConstantPool()); + il.append(receiver.get_Expr().genByteCode(_cg)); + + //Herausfinden, ob eine Methode oder ein Interface aufgerufen wird: + Type receiverType = this.receiver.get_Expr().getType(); + de.dhbwstuttgart.syntaxtree.Class receiverClass = this.receiver.getReceiverClass(); + short kind = 0; + if(receiverClass.isInterface()){ + kind = Constants.INVOKEINTERFACE; + }else{//Ansonsten muss es eine Klasse sein: + kind = Constants.INVOKEVIRTUAL; + } + + org.apache.bcel.generic.Type[] argumentTypen = org.apache.bcel.generic.Type.NO_ARGS; + if(this.getArgumentList() != null && this.getArgumentList().size()>0){ + argumentTypen = new org.apache.bcel.generic.Type[this.getArgumentList().size()]; + int i = 0; + for(Expr argument : this.arglist.expr){ + argumentTypen[i] = argument.getType().getBytecodeType(); + //Das Argument auf den Stack legen: + il.append(argument.genByteCode(_cg)); + i++; + } + } + + org.apache.bcel.generic.Type returnType = this.getType().getBytecodeType(); + il.append(_factory.createInvoke(receiver.getReceiverClass().getName().toString(), this.get_Name(), returnType , argumentTypen, kind)); + return il; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java index 15a130a6..304639a6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java @@ -27,6 +27,7 @@ public class Receiver { // ino.attribute.expr.26126.declaration private Expr expr; + private de.dhbwstuttgart.syntaxtree.Class receiverClass; // ino.end // ino.attribute.parserlog.26129.declaration protected static Logger parserlog = Logger.getLogger("parser"); @@ -89,6 +90,13 @@ public class Receiver } // ino.end + public void setClass(Class cl){ + this.receiverClass = cl; + } + + public Class getReceiverClass(){ + return this.receiverClass; + } public JavaCodeResult printJavaCode(ResultSet resultSet) { return new JavaCodeResult().attach(this.get_Expr().printJavaCode(resultSet)); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 1f5ed185..09ea299a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -151,8 +151,7 @@ public class This extends Expr public InstructionList genByteCode(ClassGen _cg) { InstructionList il = new InstructionList(); InstructionHandle ih_0 = il.append(InstructionFactory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); - InstructionHandle ih_1 = il.append(InstructionFactory.createReturn(org.apache.bcel.generic.Type.OBJECT)); - return il; + return il; } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index c0875303..29637635 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -6,12 +6,13 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.SCException; import de.dhbwstuttgart.parser.JavaClassName; +import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.misc.UsedId; import de.dhbwstuttgart.typeinference.JavaCodeResult; diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 5b342445..96a6cd8b 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -407,6 +407,13 @@ public class TypeAssumptions { public Menge getClassAssumptions() { return this.classAssumptions; } + + public ClassAssumption getClassAssumptionFor(Type t){ + for(ClassAssumption cA : this.getClassAssumptions()){ + if(cA.getAssumedClass().getType().equals(t))return cA; + } + throw new TypeinferenceException("Der Typ "+t+" ist nicht in den Assumptions vorhanden", t); + } public Type checkType(RefType type, SyntaxTreeNode parent) { Type t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen diff --git a/test/bytecode/MethodCall.jav b/test/bytecode/MethodCall.jav index cdedd45a..1ae031d5 100644 --- a/test/bytecode/MethodCall.jav +++ b/test/bytecode/MethodCall.jav @@ -1,7 +1,7 @@ -class Assign{ +class MethodCall{ void method() { -method(); +method2(); } void method2(){} diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java index 51e03e30..2c625925 100644 --- a/test/bytecode/Test.java +++ b/test/bytecode/Test.java @@ -6,5 +6,6 @@ public static void main(String[] args){ new EmptyClass(); new Assign(); System.out.println(new Return().method()); + new MethodCall().method(); } } From ccd25ab865baa0d2ab7673acaeffeb29f70808e0 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 2 Sep 2015 17:11:32 +0200 Subject: [PATCH 171/186] Bytecode erweitert. BCEL6-SNAPSHOT eingebunden. --- .classpath | 3 +- BCEL/bcelifier/FieldDeclaration.java | 11 +++ BCEL/bcelifier/FieldDeclarationCreator.java | 68 ++++++++++++++++++ BCEL/bcelifier/IntLiteralCreator.java | 6 +- BCEL/bcelifier/JavaToBCEL.java | 10 +-- BCEL/bcelifier/Lambda1Creator.java | 6 +- BCEL/bcelifier/MethodCallCreator.java | 6 +- BCEL/bcelifier/Null.java | 7 ++ BCEL/bcelifier/NullCreator.java | 53 ++++++++++++++ BCEL/bcelifier/ThisCreator.java | 6 +- lib/commons-bcel6-6.0-SNAPSHOT.jar | Bin 0 -> 662690 bytes .../bytecode/ClassGenerator.java | 30 ++++++++ .../bytecode/DHBWInstructionFactory.java | 57 +++++++++++---- src/de/dhbwstuttgart/core/MyCompiler.java | 4 +- src/de/dhbwstuttgart/core/MyCompilerAPI.java | 2 +- src/de/dhbwstuttgart/syntaxtree/Class.java | 61 +++++++++++----- .../dhbwstuttgart/syntaxtree/Constructor.java | 45 +++++++++--- src/de/dhbwstuttgart/syntaxtree/Field.java | 8 +-- .../syntaxtree/FieldDeclaration.java | 31 ++++++-- src/de/dhbwstuttgart/syntaxtree/Method.java | 30 ++++---- .../dhbwstuttgart/syntaxtree/SourceFile.java | 4 +- .../syntaxtree/SyntaxTreeNode.java | 2 +- .../syntaxtree/statement/Assign.java | 28 +++++--- .../syntaxtree/statement/Binary.java | 4 +- .../syntaxtree/statement/Block.java | 17 ++--- .../syntaxtree/statement/BoolLiteral.java | 6 +- .../syntaxtree/statement/CastExpr.java | 2 +- .../syntaxtree/statement/CharLiteral.java | 8 +-- .../syntaxtree/statement/DoubleLiteral.java | 14 ++-- .../syntaxtree/statement/EmptyStmt.java | 2 +- .../syntaxtree/statement/Expr.java | 4 +- .../syntaxtree/statement/FloatLiteral.java | 10 +-- .../syntaxtree/statement/ForStmt.java | 2 +- .../syntaxtree/statement/IfStmt.java | 2 +- .../syntaxtree/statement/InstVar.java | 2 +- .../syntaxtree/statement/InstanceOf.java | 2 +- .../syntaxtree/statement/IntLiteral.java | 21 +++--- .../statement/LambdaExpression.java | 19 ++--- .../syntaxtree/statement/LocalOrFieldVar.java | 2 +- .../syntaxtree/statement/LocalVarDecl.java | 7 +- .../syntaxtree/statement/LongLiteral.java | 8 +-- .../syntaxtree/statement/MethodCall.java | 27 +++---- .../syntaxtree/statement/NegativeExpr.java | 2 +- .../syntaxtree/statement/NewArray.java | 8 +-- .../syntaxtree/statement/NewClass.java | 2 +- .../syntaxtree/statement/NotExpr.java | 2 +- .../syntaxtree/statement/Null.java | 12 ++-- .../syntaxtree/statement/PositivExpr.java | 2 +- .../syntaxtree/statement/PostDecExpr.java | 2 +- .../syntaxtree/statement/PostIncExpr.java | 16 ++--- .../syntaxtree/statement/PreDecExpr.java | 2 +- .../syntaxtree/statement/PreIncExpr.java | 2 +- .../syntaxtree/statement/Return.java | 14 ++-- .../syntaxtree/statement/Statement.java | 11 +-- .../syntaxtree/statement/StringLiteral.java | 16 +++-- .../syntaxtree/statement/SuperCall.java | 19 ++--- .../syntaxtree/statement/This.java | 17 ++--- .../syntaxtree/statement/WhileStmt.java | 2 +- .../syntaxtree/type/RefType.java | 5 +- .../dhbwstuttgart/syntaxtree/type/Type.java | 5 +- .../syntaxtree/type/TypePlaceholder.java | 13 +++- .../dhbwstuttgart/syntaxtree/type/Void.java | 5 +- .../typeinference/ByteCodeResult.java | 2 +- test/bytecode/CharLitTest.jav | 7 -- test/bytecode/DoubleLiteral.jav | 6 -- test/bytecode/DoubleLiteral.java | 45 ------------ test/bytecode/FieldDeclaration.jav | 8 +++ test/bytecode/FieldDeclarationTest.java | 14 ++++ test/bytecode/FloatLiteral.jav | 6 -- test/bytecode/FloatLiteral.java | 45 ------------ test/bytecode/LambdaExpr.java | 13 +--- test/bytecode/LongLiteral.jav | 6 -- test/bytecode/LongLiteral.java | 45 ------------ test/bytecode/MethodEmpty.java | 13 +--- test/bytecode/MethodEmptyRetType.java | 13 +--- test/bytecode/NewArrayTest.java | 45 ------------ test/bytecode/PostIncrement.java | 13 +--- test/bytecode/SingleClassTester.java | 3 +- test/bytecode/StringLitTest.java | 13 +--- test/bytecode/Test.java | 1 + .../TypeInsertTests/Analysis.txt | 3 + .../TypeInsertTests/UnifyPaper.jav | 13 ++++ .../TypeInsertTests/UnifyPaper.java | 19 +++++ .../TypeInsertTests/UnifyPaper2.jav | 13 ++++ .../TypeInsertTests/UnifyPaper2.java | 19 +++++ 85 files changed, 645 insertions(+), 514 deletions(-) create mode 100644 BCEL/bcelifier/FieldDeclaration.java create mode 100644 BCEL/bcelifier/FieldDeclarationCreator.java create mode 100644 BCEL/bcelifier/Null.java create mode 100644 BCEL/bcelifier/NullCreator.java create mode 100644 lib/commons-bcel6-6.0-SNAPSHOT.jar create mode 100644 src/de/dhbwstuttgart/bytecode/ClassGenerator.java delete mode 100644 test/bytecode/CharLitTest.jav delete mode 100644 test/bytecode/DoubleLiteral.jav delete mode 100644 test/bytecode/DoubleLiteral.java create mode 100644 test/bytecode/FieldDeclaration.jav create mode 100644 test/bytecode/FieldDeclarationTest.java delete mode 100644 test/bytecode/FloatLiteral.jav delete mode 100644 test/bytecode/FloatLiteral.java delete mode 100644 test/bytecode/LongLiteral.jav delete mode 100644 test/bytecode/LongLiteral.java delete mode 100644 test/bytecode/NewArrayTest.java create mode 100644 test/plugindevelopment/TypeInsertTests/Analysis.txt create mode 100644 test/plugindevelopment/TypeInsertTests/UnifyPaper.jav create mode 100644 test/plugindevelopment/TypeInsertTests/UnifyPaper.java create mode 100644 test/plugindevelopment/TypeInsertTests/UnifyPaper2.jav create mode 100644 test/plugindevelopment/TypeInsertTests/UnifyPaper2.java diff --git a/.classpath b/.classpath index 3c2e81f4..6af9d44f 100755 --- a/.classpath +++ b/.classpath @@ -8,6 +8,7 @@ - + + diff --git a/BCEL/bcelifier/FieldDeclaration.java b/BCEL/bcelifier/FieldDeclaration.java new file mode 100644 index 00000000..00fb467d --- /dev/null +++ b/BCEL/bcelifier/FieldDeclaration.java @@ -0,0 +1,11 @@ +package bcelifier; + +public class FieldDeclaration { + + Integer field = methode(); + + Integer methode() + { + return field; + } +} diff --git a/BCEL/bcelifier/FieldDeclarationCreator.java b/BCEL/bcelifier/FieldDeclarationCreator.java new file mode 100644 index 00000000..21553f53 --- /dev/null +++ b/BCEL/bcelifier/FieldDeclarationCreator.java @@ -0,0 +1,68 @@ +package bcelifier; + +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; +import java.io.*; + +public class FieldDeclarationCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public FieldDeclarationCreator() { + _cg = new ClassGen("bcelifier.FieldDeclaration", "java.lang.Object", "FieldDeclaration.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createFields(); + createMethod_0(); + createMethod_1(); + _cg.getJavaClass().dump(out); + } + + private void createFields() { + FieldGen field; + + field = new FieldGen(0, new ObjectType("java.lang.Integer"), "field", _cp); + _cg.addField(field.getField()); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.FieldDeclaration", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("bcelifier.FieldDeclaration", "methode", new ObjectType("java.lang.Integer"), Type.NO_ARGS, Constants.INVOKEVIRTUAL)); + il.append(_factory.createFieldAccess("bcelifier.FieldDeclaration", "field", new ObjectType("java.lang.Integer"), Constants.PUTFIELD)); + InstructionHandle ih_12 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.FieldDeclaration", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createFieldAccess("bcelifier.FieldDeclaration", "field", new ObjectType("java.lang.Integer"), Constants.GETFIELD)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.OBJECT)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.FieldDeclarationCreator creator = new bcelifier.FieldDeclarationCreator(); + creator.create(new FileOutputStream("bcelifier.FieldDeclaration.class")); + } +} diff --git a/BCEL/bcelifier/IntLiteralCreator.java b/BCEL/bcelifier/IntLiteralCreator.java index eed6f137..00ed284b 100644 --- a/BCEL/bcelifier/IntLiteralCreator.java +++ b/BCEL/bcelifier/IntLiteralCreator.java @@ -1,8 +1,8 @@ package bcelifier; -import org.apache.bcel.generic.*; -import org.apache.bcel.classfile.*; -import org.apache.bcel.*; +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; import java.io.*; public class IntLiteralCreator implements Constants { diff --git a/BCEL/bcelifier/JavaToBCEL.java b/BCEL/bcelifier/JavaToBCEL.java index 574f6b7c..bcd9524d 100644 --- a/BCEL/bcelifier/JavaToBCEL.java +++ b/BCEL/bcelifier/JavaToBCEL.java @@ -8,10 +8,10 @@ import java.nio.file.Files; import java.nio.file.OpenOption; import java.nio.file.Path; -import org.apache.bcel.classfile.ClassFormatException; -import org.apache.bcel.classfile.ClassParser; -import org.apache.bcel.classfile.JavaClass; -import org.apache.bcel.util.BCELifier; +import org.apache.commons.bcel6.classfile.ClassFormatException; +import org.apache.commons.bcel6.classfile.ClassParser; +import org.apache.commons.bcel6.classfile.JavaClass; +import org.apache.commons.bcel6.util.BCELifier; public class JavaToBCEL { @@ -27,6 +27,8 @@ public class JavaToBCEL { new BCELifier(new ClassParser(rootDirectory+"This.class").parse(), new FileOutputStream(new File(rootDirectory+"ThisCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"IntLiteral.class").parse(), new FileOutputStream(new File(rootDirectory+"IntLiteralCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"MethodCall.class").parse(), new FileOutputStream(new File(rootDirectory+"MethodCallCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"FieldDeclaration.class").parse(), new FileOutputStream(new File(rootDirectory+"FieldDeclarationCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"Null.class").parse(), new FileOutputStream(new File(rootDirectory+"NullCreator.java"))).start(); } catch (ClassFormatException | IOException e) { e.printStackTrace(); diff --git a/BCEL/bcelifier/Lambda1Creator.java b/BCEL/bcelifier/Lambda1Creator.java index f7f6f8a5..7a0d7c38 100644 --- a/BCEL/bcelifier/Lambda1Creator.java +++ b/BCEL/bcelifier/Lambda1Creator.java @@ -1,8 +1,8 @@ package bcelifier; -import org.apache.bcel.generic.*; -import org.apache.bcel.classfile.*; -import org.apache.bcel.*; +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; import java.io.*; public class Lambda1Creator implements Constants { diff --git a/BCEL/bcelifier/MethodCallCreator.java b/BCEL/bcelifier/MethodCallCreator.java index 303fb699..341b0357 100644 --- a/BCEL/bcelifier/MethodCallCreator.java +++ b/BCEL/bcelifier/MethodCallCreator.java @@ -1,8 +1,8 @@ package bcelifier; -import org.apache.bcel.generic.*; -import org.apache.bcel.classfile.*; -import org.apache.bcel.*; +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; import java.io.*; public class MethodCallCreator implements Constants { diff --git a/BCEL/bcelifier/Null.java b/BCEL/bcelifier/Null.java new file mode 100644 index 00000000..d7329b7c --- /dev/null +++ b/BCEL/bcelifier/Null.java @@ -0,0 +1,7 @@ +package bcelifier; + +public class Null { + + Integer i = null; + +} diff --git a/BCEL/bcelifier/NullCreator.java b/BCEL/bcelifier/NullCreator.java new file mode 100644 index 00000000..d7960def --- /dev/null +++ b/BCEL/bcelifier/NullCreator.java @@ -0,0 +1,53 @@ +package bcelifier; + +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; +import java.io.*; + +public class NullCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public NullCreator() { + _cg = new ClassGen("bcelifier.Null", "java.lang.Object", "Null.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createFields(); + createMethod_0(); + _cg.getJavaClass().dump(out); + } + + private void createFields() { + FieldGen field; + + field = new FieldGen(0, new ObjectType("java.lang.Integer"), "i", _cp); + _cg.addField(field.getField()); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.Null", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(InstructionConstants.ACONST_NULL); + il.append(_factory.createFieldAccess("bcelifier.Null", "i", new ObjectType("java.lang.Integer"), Constants.PUTFIELD)); + InstructionHandle ih_9 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.NullCreator creator = new bcelifier.NullCreator(); + creator.create(new FileOutputStream("bcelifier.Null.class")); + } +} diff --git a/BCEL/bcelifier/ThisCreator.java b/BCEL/bcelifier/ThisCreator.java index 329d0d5d..573b162e 100644 --- a/BCEL/bcelifier/ThisCreator.java +++ b/BCEL/bcelifier/ThisCreator.java @@ -1,8 +1,8 @@ package bcelifier; -import org.apache.bcel.generic.*; -import org.apache.bcel.classfile.*; -import org.apache.bcel.*; +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; import java.io.*; public class ThisCreator implements Constants { diff --git a/lib/commons-bcel6-6.0-SNAPSHOT.jar b/lib/commons-bcel6-6.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..463f5801dbdb8b5a0478243a79d0a6e217ac1a23 GIT binary patch literal 662690 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 z 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ÙV9A^tRGKfQYEsZ5^2U!0(I9n4 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 z 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 B3OxV- literal 0 HcmV?d00001 diff --git a/src/de/dhbwstuttgart/bytecode/ClassGenerator.java b/src/de/dhbwstuttgart/bytecode/ClassGenerator.java new file mode 100644 index 00000000..f5d0017c --- /dev/null +++ b/src/de/dhbwstuttgart/bytecode/ClassGenerator.java @@ -0,0 +1,30 @@ +package de.dhbwstuttgart.bytecode; + +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; + +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; + +public class ClassGenerator extends ClassGen{ + + private DHBWInstructionFactory factory = new DHBWInstructionFactory(this, this.getConstantPool()); + private TypeinferenceResultSet tiResult; + + public ClassGenerator(String name, String get_Name, String string, + short accPublic, String[] strings, TypeinferenceResultSet resultSet) { + super(name,get_Name,string,accPublic,strings); + this.tiResult = resultSet; + } + + public DHBWInstructionFactory getInstructionFactory() { + return factory ; + } + + public Type resolveTPH(TypePlaceholder typePlaceholder) { + return tiResult.getTypeOfPlaceholder(typePlaceholder); + } + +} diff --git a/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java index bec3f076..6d0c8e2a 100644 --- a/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java +++ b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java @@ -3,15 +3,17 @@ package de.dhbwstuttgart.bytecode; import java.awt.List; import java.util.ArrayList; -import org.apache.bcel.classfile.BootstrapMethod; -import org.apache.bcel.classfile.ConstantInvokeDynamic; -import org.apache.bcel.classfile.Method; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.INVOKEDYNAMIC; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.MethodGen; -import org.apache.bcel.generic.Type; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.classfile.BootstrapMethod; +import org.apache.commons.bcel6.classfile.ConstantInvokeDynamic; +import org.apache.commons.bcel6.classfile.InnerClass; +import org.apache.commons.bcel6.classfile.Method; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.INVOKEDYNAMIC; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.MethodGen; +import org.apache.commons.bcel6.generic.Type; public class DHBWInstructionFactory extends InstructionFactory{ @@ -26,11 +28,39 @@ public class DHBWInstructionFactory extends InstructionFactory{ public INVOKEDYNAMIC createInvokeDynamic( MethodGen lambdaMethod ) { //Zuerst die Bootstrap-Methode erstellen: Diese müssen dann in ein BootstrapMethods-Attribut zusammengefasst und dem Classfile hinzugefügt werden - int lambdaMethodIndex = this.cp.addMethodref(lambdaMethod); + //this.cp.addMethodref(lambdaMethod); - ArrayList arguments = new ArrayList(); + ArrayList arguments = new ArrayList(); + /* + * Die Argumente für die Bootstrap-Methode. Im Decompilierten Beispiel sind das: + * #19 ()V + * #20 invokespecial Lambda3.lambda$methode$0:()V + * #19 ()V + * + * #20 ist ein MethodHandle_info Structure + * TODO: Rausfinden, was es mit den Argumenten auf sich hat: + * -> Das sind Informationen die die Lambda Funktion zum Ausführen benötigt. (This-Referenz, Variablen, welche vom Lambda Ausdruck benutzt werden) + * Anmerkung: Bei der momentanen Implementierung der Lambda Ausdrücke wird nur this übergeben. + */ - BootstrapMethod bMethod = new BootstrapMethod(lambdaMethodIndex, arguments.size(), (int[])arguments.toArray()); + + int innerClassIndex = cp.addClass("java.lang.invoke.MethodHandles$Lookup"); + int innerClassName = cp.addUtf8("Lookup"); + int outerClassIndex = cp.addClass("java.lang.invoke.MethodHandles"); + + int accessFlags = Constants.ACC_FINAL + Constants.ACC_STATIC + Constants.ACC_PUBLIC; + InnerClass innerClassAttribute = new InnerClass(innerClassIndex, outerClassIndex, innerClassName,accessFlags); + //Diese InnereKlasse muss später im ClassFile vorkommen, da sie von der Bootstrap Methode benutzt wird. + //TODO: Dies kann man möglicherweise auslagern. Die ClassGen Klasse erweiter, welche sich dann die InnerenKlassen mertk, welche gebraucht werden + + String bootstrapSignature = "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;"; + int lambdaMethodIndex = cp.addMethodref("java.lang.invoke.LambdaMetafactory", "metafactory", bootstrapSignature); + + int[] argumentsArray = new int[arguments.size()]; + for(int i = 0; i generateBytecode() { + public Menge generateBytecode(TypeinferenceResultSet typeinferenceResult) { //SourceFile parsedFile = this.m_AbstractSyntaxTree.firstElement(); //Class parsedClass = parsedFile.KlassenVektor.firstElement(); Menge ret = new Menge<>(); for(SourceFile sf : this.m_AbstractSyntaxTree){ - ret.addAll(sf.generateBytecode()); + ret.addAll(sf.generateBytecode(typeinferenceResult)); } return ret; } diff --git a/src/de/dhbwstuttgart/core/MyCompilerAPI.java b/src/de/dhbwstuttgart/core/MyCompilerAPI.java index f1c8880e..9c5d2a57 100755 --- a/src/de/dhbwstuttgart/core/MyCompilerAPI.java +++ b/src/de/dhbwstuttgart/core/MyCompilerAPI.java @@ -127,6 +127,6 @@ public interface MyCompilerAPI * Dafür müssen die Schritte Parsen und typeReconstruction ausgeführt werden. * @return */ - public Menge generateBytecode(); + public Menge generateBytecode(TypeinferenceResultSet rs); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index e694a1a5..804a7af7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -8,17 +8,18 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.MethodGen; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.AClassOrInterface; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; @@ -44,9 +45,9 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.unify.FC_TTO; import de.dhbwstuttgart.typeinference.unify.Unify; -import org.apache.bcel.generic.*; -import org.apache.bcel.classfile.*; -import org.apache.bcel.*; +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; import java.io.*; @@ -66,25 +67,47 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I protected UsedId pkgName; protected Modifiers modifiers; protected String name; - //For ByteCode Construction - private InstructionFactory _factory; - private ConstantPoolGen _cp; - private ClassGen _cg; - //Method created with BCEL to generate ByteCode - public ByteCodeResult genByteCode() { - + /** + * + * @param resultSet - Fehlende Typen im Syntaxbaum werden nach diesem ResultSet aufgelöst + * @return + */ + public ByteCodeResult genByteCode(TypeinferenceResultSet resultSet) { + InstructionFactory _factory; + ConstantPoolGen _cp; + ClassGenerator _cg; + SectionLogger logger = Logger.getSectionLogger(this.getClass().getName(), Section.CODEGEN); logger.debug("Test"); if(pkgName != null)throw new NotImplementedException(); - _cg = new ClassGen(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); //letzter Parameter sind implementierte Interfaces + _cg = new ClassGenerator(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }, resultSet); //letzter Parameter sind implementierte Interfaces _cp = _cg.getConstantPool(); _factory = new InstructionFactory(_cg, _cp); - + + //Die Felder in Methoden Felder und Konstruktoren aufteilen: + Menge fieldDeclarations = new Menge<>(); + Menge constructors = new Menge<>(); + Menge methods = new Menge<>(); for(Field field : this.fielddecl){ - field.genByteCode(_cg); + if(field instanceof Constructor)constructors.add((Constructor)field); + if(field instanceof Method && ! (field instanceof Constructor))methods.add((Method)field); + if(field instanceof FieldDeclaration)fieldDeclarations.add((FieldDeclaration)field); + //field.genByteCode(_cg); } + //Zuerst die Methoden und Felder abarbeiten: + for(Method m : methods){ + m.genByteCode(_cg); + } + InstructionList fieldInitializations = new InstructionList(); + for(FieldDeclaration f : fieldDeclarations){ + fieldInitializations.append(f.genByteCode(_cg)); + } + //Die Konstruktoren müssen die Feld initialisierungswerte beinhalten: + for(Constructor c : constructors){ + c.genByteCode(_cg, fieldInitializations); + } ByteCodeResult code = new ByteCodeResult(_cg); return code; diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index cf592857..3482d2ef 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -1,15 +1,16 @@ package de.dhbwstuttgart.syntaxtree; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.MethodGen; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.classfile.ConstantPool; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.misc.DeclId; @@ -55,18 +56,20 @@ public class Constructor extends Method { return ret; } - @Override - public void genByteCode(ClassGen cg) { + public void genByteCode(ClassGenerator cg, InstructionList fieldInitializations){ ConstantPoolGen _cp = cg.getConstantPool(); InstructionList il = new InstructionList(); //sollte nicht new sein sondern aus Block kommen Class parentClass = this.getParentClass(); //TODO: Alles dynamisch gestalten //init darf nur drin stehen, wenn Konstruktor; - this.method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); + this.method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(cg), org.apache.commons.bcel6.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); //Iteration �ber Block starten Block block = this.get_Block(); + if(block.statements.firstElement() instanceof SuperCall){ + block.statements.insertElementAt(new BytecodeInstructionBlock(fieldInitializations), 1); + } InstructionList blockInstructions = block.genByteCode(cg); il.append(blockInstructions);//Die vom Block generierten Instructions an die InstructionList der Methode anfügen @@ -75,6 +78,26 @@ public class Constructor extends Method { cg.addMethod(this.method.getMethod()); } + + /** + * Mit dieser Hilfsklasse kann eine beliebige InstructionList in eine vorhandenen Block als Statement eingefügt werden. + * Wird für Bytecodegenerierung benötigt. + */ + private class BytecodeInstructionBlock extends Block{ + InstructionList il; + BytecodeInstructionBlock(InstructionList toInsert){ + il = toInsert; + } + @Override + public InstructionList genByteCode(ClassGenerator cg){ + return il; + } + } + + @Override + public void genByteCode(ClassGenerator cg) { + this.genByteCode(cg, new InstructionList()); + } // super statement muss drin sein // stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren // de.dhbw.systanxtree.stmts supercall diff --git a/src/de/dhbwstuttgart/syntaxtree/Field.java b/src/de/dhbwstuttgart/syntaxtree/Field.java index 77011a5f..fabc1328 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Field.java +++ b/src/de/dhbwstuttgart/syntaxtree/Field.java @@ -1,8 +1,9 @@ package de.dhbwstuttgart.syntaxtree; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -173,10 +174,5 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta return false; } - /** - * F�gt das das Feld zu ClassGen hinzu - * @param cg - */ - public abstract void genByteCode(ClassGen cg); } diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 99f00a94..68914f9f 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -1,11 +1,18 @@ package de.dhbwstuttgart.syntaxtree; -import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.Constants; +import org.apache.commons.bcel6.generic.FieldGen; +import org.apache.commons.bcel6.generic.FieldInstruction; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.ObjectType; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId; import de.dhbwstuttgart.syntaxtree.statement.Expr; +import de.dhbwstuttgart.syntaxtree.statement.This; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; @@ -157,10 +164,26 @@ public class FieldDeclaration extends Field{ if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben } - @Override - public void genByteCode(ClassGen cg) { - // TODO Auto-generated method stub + /** + * Das besondere bei genByteCode einer FieldDeclaration ist, dass ein InstructionList zurückgegeben wird. + * Dieser muss in jeden Konstruktor eingefügt werden um das Feld zu initialisieren. + * @param cg + * @return - Die InstructionList, welche das Feld initialisiert + */ + public InstructionList genByteCode(ClassGenerator cg) { + //Das Feld an die Klasse anfügen: + FieldGen field = new FieldGen(0, this.getType().getBytecodeType(cg), this.getDescription(), cg.getConstantPool()); + cg.addField(field.getField()); + //Die Felddekleration an den Konstruktor anhängen: + InstructionList il = new InstructionList(); + il.append(new This(this).genByteCode(cg)); + il.append(this.wert.genByteCode(cg)); + FieldInstruction putFieldInstruction = + cg.getInstructionFactory().createFieldAccess(this.getParentClass().getName().toString(), + this.getDescription(), this.getType().getBytecodeType(cg), Constants.PUTFIELD); + il.append(putFieldInstruction ); + return il; } /*@Override diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index feb39437..6029462e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -7,16 +7,17 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.MethodGen; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -739,39 +740,38 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable return super.equals(obj); } - @Override - public void genByteCode(ClassGen cg) { + public void genByteCode(ClassGenerator cg) { ConstantPoolGen _cp = cg.getConstantPool(); InstructionFactory _factory = new InstructionFactory(cg, _cp); InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); //Die Argumentliste generieren: - org.apache.bcel.generic.Type[] argumentTypes = org.apache.bcel.generic.Type.NO_ARGS; + org.apache.commons.bcel6.generic.Type[] argumentTypes = org.apache.commons.bcel6.generic.Type.NO_ARGS; String[] argumentNames = new String[]{}; if(this.parameterlist != null && this.parameterlist.size() > 0){ - argumentTypes = new org.apache.bcel.generic.Type[this.parameterlist.size()]; + argumentTypes = new org.apache.commons.bcel6.generic.Type[this.parameterlist.size()]; argumentNames = new String[this.parameterlist.size()]; int i = 0; for(FormalParameter parameter : this.parameterlist){ - argumentTypes[i] = parameter.getType().getBytecodeType(); + argumentTypes[i] = parameter.getType().getBytecodeType(cg); argumentNames[i] = parameter.getIdentifier(); i++; } } //Methode generieren: - MethodGen method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(), argumentTypes , argumentNames, this.get_Method_Name(), parentClass.name, il, _cp); + MethodGen method = new MethodGen(Constants.ACC_PUBLIC, this.getType().getBytecodeType(cg), argumentTypes , argumentNames, this.get_Method_Name(), parentClass.name, il, _cp); Block block = this.get_Block(); InstructionList blockInstructions = block.genByteCode(cg); il.append(blockInstructions);//Die vom Block generierten Instructions an die InstructionList der Methode anfügen - if (block.get_Statement().size() == 0) { il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); } + if (block.get_Statement().size() == 0) { il.append(_factory.createReturn( org.apache.commons.bcel6.generic.Type.VOID)); } else { - if (!(block.get_Statement().lastElement() instanceof Return)) { il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); } + if (!(block.get_Statement().lastElement() instanceof Return)) { il.append(_factory.createReturn( org.apache.commons.bcel6.generic.Type.VOID)); } } method.setMaxStack(); //Die Stack Größe automatisch berechnen lassen (erst nach dem alle Instructions angehängt wurden) diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 0adcb710..f919d44c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -1834,10 +1834,10 @@ public class SourceFile * Bisher wird nur der Bytecode der Klassen generiert. Nicht der Interfaces. * @return */ - public Collection generateBytecode() { + public Collection generateBytecode(TypeinferenceResultSet rs) { Menge ret = new Menge<>(); for(Class cl : this.KlassenVektor){ - ret.add(cl.genByteCode()); + ret.add(cl.genByteCode(rs)); } return ret; } diff --git a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java index 0d234b61..f76249ba 100644 --- a/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java +++ b/src/de/dhbwstuttgart/syntaxtree/SyntaxTreeNode.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.syntaxtree; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.core.IItemWithOffset; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java index 5aa376b8..a0ed7d72 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Assign.java @@ -6,16 +6,17 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ASTORE; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.DSTORE; -import org.apache.bcel.generic.FSTORE; -import org.apache.bcel.generic.ISTORE; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.LSTORE; +import org.apache.commons.bcel6.generic.ASTORE; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.DSTORE; +import org.apache.commons.bcel6.generic.FSTORE; +import org.apache.commons.bcel6.generic.ISTORE; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LSTORE; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -178,13 +179,15 @@ public class Assign extends Expr public static int counterAssign = 0; //Zaehlvariable f�r ISTORE @Override - public InstructionList genByteCode(ClassGen cg, TypeAssumptions ass) { + public InstructionList genByteCode(ClassGenerator cg) { // TODO Auto-generated method stub InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - InstructionList il = expr2.genByteCode(cg, ass);//expr2 rechte expr + InstructionList il = expr2.genByteCode(cg);//expr2 rechte expr + + //TODO: ^^ counterAssign++; //macht STORE f�r meherere Variable nutzbar (nicht nur ISTORE_1, ISTORE_2, etc.) - + /* String expr2Type = expr2.getType().get_Name().toString(); switch(expr2Type){ case "java.lang.Integer": @@ -207,6 +210,9 @@ public class Assign extends Expr il.append(new LSTORE(counterAssign)); break; } + */ + //Es wird momentan immer von RefType ausgegangen: + il.append(new ASTORE(counterAssign)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java index 2f0b3b7d..af54441d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Binary.java @@ -6,8 +6,8 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java index fc744563..9a9cd5fc 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Block.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Block.java @@ -6,15 +6,16 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.MethodGen; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.myexception.CTypeReconstructionException; @@ -255,7 +256,7 @@ public class Block extends Statement } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { //ConstantPoolGen _cp = cg.getConstantPool(); InstructionList il = new InstructionList(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java index fe740ae9..806bd1ac 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/BoolLiteral.java @@ -4,9 +4,9 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.BoolLiteral.8626.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java index 71002127..13d9c714 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CastExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java index 33871d6f..c4c87e8e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/CharLiteral.java @@ -4,10 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.CharLiteral.8628.import import java.util.Hashtable; -import org.apache.bcel.generic.BIPUSH; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.BIPUSH; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java index 3c8f8ee7..1ac8ee43 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/DoubleLiteral.java @@ -4,13 +4,13 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import org.apache.bcel.generic.BIPUSH; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.LDC; -import org.apache.bcel.generic.LDC2_W; +import org.apache.commons.bcel6.generic.BIPUSH; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LDC; +import org.apache.commons.bcel6.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java index a6dc7bbc..4eb7c37d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/EmptyStmt.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.EmptyStmt.8629.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java index 6feade6f..8bfb7a51 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Expr.java @@ -5,8 +5,8 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.myexception.CTypeReconstructionException; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java index bdfd0149..be8d12a8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/FloatLiteral.java @@ -4,11 +4,11 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.LDC; -import org.apache.bcel.generic.LDC2_W; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LDC; +import org.apache.commons.bcel6.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java index 723295c3..72da14d6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/ForStmt.java @@ -4,7 +4,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java index 3621dff0..b897ce02 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IfStmt.java @@ -6,7 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java index 94e49231..c2e09b72 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstVar.java @@ -6,7 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java index ef1a88ac..c541a2ef 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/InstanceOf.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java index 7d672ca4..d649089c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/IntLiteral.java @@ -4,16 +4,17 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.BIPUSH; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.ObjectType; -import org.apache.bcel.generic.PUSH; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.generic.BIPUSH; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.ObjectType; +import org.apache.commons.bcel6.generic.PUSH; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -138,7 +139,7 @@ public class IntLiteral extends Literal } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); @@ -146,7 +147,7 @@ public class IntLiteral extends Literal * Der jetzige Compiler kann keine primitiven Typen. Ein int-Literal ist daher eine Instanz von java.lang.Integer */ il.append(new PUSH(cg.getConstantPool(), this.get_Int())); - il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new org.apache.bcel.generic.Type[] { org.apache.bcel.generic.Type.INT }, Constants.INVOKESTATIC)); + il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new org.apache.commons.bcel6.generic.Type[] { org.apache.commons.bcel6.generic.Type.INT }, Constants.INVOKESTATIC)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 08ca6291..3c12ac59 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -2,16 +2,17 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; -import org.apache.bcel.classfile.BootstrapMethod; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.generic.BIPUSH; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.INVOKEDYNAMIC; +import org.apache.commons.bcel6.classfile.BootstrapMethod; +import org.apache.commons.bcel6.classfile.ConstantPool; +import org.apache.commons.bcel6.generic.BIPUSH; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.INVOKEDYNAMIC; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; @@ -225,7 +226,7 @@ public class LambdaExpression extends Expr{ } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { ConstantPoolGen cp = cg.getConstantPool(); InstructionList il = new InstructionList(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 107c5a3c..46bb0b1e 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java index eddc29cf..1add7b35 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalVarDecl.java @@ -5,11 +5,12 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCExcept; @@ -428,7 +429,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable } @Override - public InstructionList genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGenerator _cg) { // TODO Auto-generated method stub return new InstructionList(); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java index e41d494f..8aac0961 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LongLiteral.java @@ -4,10 +4,10 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.IntLiteral.8635.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.LDC2_W; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LDC2_W; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java index 370107c8..4ab7c857 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/MethodCall.java @@ -4,13 +4,14 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.MethodCall.8639.import import java.util.Hashtable; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.Method; @@ -313,11 +314,11 @@ public class MethodCall extends Expr */ @Override - public InstructionList genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGenerator cg) { InstructionList il = new InstructionList(); - InstructionFactory _factory = new InstructionFactory(_cg, _cg.getConstantPool()); + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - il.append(receiver.get_Expr().genByteCode(_cg)); + il.append(receiver.get_Expr().genByteCode(cg)); //Herausfinden, ob eine Methode oder ein Interface aufgerufen wird: Type receiverType = this.receiver.get_Expr().getType(); @@ -329,19 +330,19 @@ public class MethodCall extends Expr kind = Constants.INVOKEVIRTUAL; } - org.apache.bcel.generic.Type[] argumentTypen = org.apache.bcel.generic.Type.NO_ARGS; + org.apache.commons.bcel6.generic.Type[] argumentTypen = org.apache.commons.bcel6.generic.Type.NO_ARGS; if(this.getArgumentList() != null && this.getArgumentList().size()>0){ - argumentTypen = new org.apache.bcel.generic.Type[this.getArgumentList().size()]; + argumentTypen = new org.apache.commons.bcel6.generic.Type[this.getArgumentList().size()]; int i = 0; for(Expr argument : this.arglist.expr){ - argumentTypen[i] = argument.getType().getBytecodeType(); + argumentTypen[i] = argument.getType().getBytecodeType(cg); //Das Argument auf den Stack legen: - il.append(argument.genByteCode(_cg)); + il.append(argument.genByteCode(cg)); i++; } } - org.apache.bcel.generic.Type returnType = this.getType().getBytecodeType(); + org.apache.commons.bcel6.generic.Type returnType = this.getType().getBytecodeType(cg); il.append(_factory.createInvoke(receiver.getReceiverClass().getName().toString(), this.get_Name(), returnType , argumentTypen, kind)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java index 2562c862..2f19b975 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NegativeExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 1461c248..630ca25f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -4,9 +4,9 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.NewArray.8641.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -152,7 +152,7 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { InstructionList il = new InstructionList(); il.append(expr.elementAt(0).genByteCode(cg)); - il.append(_factory.createNewArray(org.apache.bcel.generic.Type.getType(getTypeName()), (short)1)); + il.append(_factory.createNewArray( org.apache.commons.bcel6.generic.Type.getType(getTypeName()), (short)1)); return il; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java index cb2c6935..8d0cb176 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewClass.java @@ -6,7 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java index 17b7e352..ca22f922 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NotExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java index 8eee26ed..7a9e2c47 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Null.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Null.java @@ -4,11 +4,13 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Null.8644.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionConstants; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -93,11 +95,11 @@ public class Null extends Literal } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); - il.append(_factory.ACONST_NULL); + il.append(InstructionConstants.ACONST_NULL); return il; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java index deb5ccfe..0ff9198f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PositivExpr.java @@ -4,7 +4,7 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.PositivExpr.8645.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java index 8996932f..c5fb39d8 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostDecExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java index 6659a526..e8226319 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PostIncExpr.java @@ -5,11 +5,11 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.BIPUSH; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.IINC; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.BIPUSH; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.IINC; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -106,9 +106,9 @@ public JavaCodeResult printJavaCode(ResultSet resultSet) { InstructionList il = new InstructionList(); counterPostInc++; il.append(new IINC(counterPostInc,1)); - //Tests aufgrund fehlener TypInferenz-Funktionalität nicht möglich - //Vermutlich muss der Counter noch angepasst werden, da nicht incrementierende Variablen nicht mitgezählt werden, und zu falschen aufrufen führen - //Gibt es einen Compiler-internen Variablenindex, der den Counter effektiver ersetzen könnte + //Tests aufgrund fehlener TypInferenz-Funktionalit�t nicht m�glich + //Vermutlich muss der Counter noch angepasst werden, da nicht incrementierende Variablen nicht mitgez�hlt werden, und zu falschen aufrufen f�hren + //Gibt es einen Compiler-internen Variablenindex, der den Counter effektiver ersetzen k�nnte return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java index 78f6647b..54d7abc9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreDecExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java index 6b66c5af..49824e5a 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/PreIncExpr.java @@ -5,7 +5,7 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java index 21aca178..170345ef 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Return.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Return.java @@ -4,12 +4,13 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.Return.8651.import import java.util.Hashtable; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -133,12 +134,13 @@ public class Return extends Statement } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { InstructionList il = retexpr.genByteCode(cg); InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); - il.append(_factory.createReturn(retexpr.getType().getBytecodeType())); + org.apache.commons.bcel6.generic.Type retType = this.getReturnType().getBytecodeType(cg);//retexpr.getType().getBytecodeType(); + il.append(_factory.createReturn(retType )); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java index eb4431b2..c8d4d7ba 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/Statement.java @@ -5,12 +5,13 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Enumeration; import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -129,7 +130,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse } - public abstract InstructionList genByteCode(ClassGen _cg); + public abstract InstructionList genByteCode(ClassGenerator _cg); } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java index e398d088..0323d603 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/StringLiteral.java @@ -6,18 +6,20 @@ import de.dhbwstuttgart.typeinference.Menge; + // ino.end // ino.module.StringLiteral.8653.import import java.util.Hashtable; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.LDC; +import org.apache.commons.bcel6.classfile.ConstantPool; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LDC; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; @@ -121,7 +123,7 @@ public class StringLiteral extends Literal } //public static int counterString = 0; @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { ConstantPoolGen cp = cg.getConstantPool(); InstructionFactory _factory = new InstructionFactory(cg, cp); InstructionList il = new InstructionList(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java index 6b354f2a..378a52c3 100644 --- a/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/SuperCall.java @@ -4,13 +4,14 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.This.8654.import import java.util.Hashtable; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; +import org.apache.commons.bcel6.Constants; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -91,14 +92,14 @@ public class SuperCall extends ThisCall } @Override - public InstructionList genByteCode(ClassGen cg) { + public InstructionList genByteCode(ClassGenerator cg) { InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); InstructionList il = new InstructionList(); Type superClass = this.getParentClass().getSuperClass(); //Instructionhandle dynamisch - InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); - il.append(_factory.createInvoke(superClass.getName().toString(), "", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); - InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); + InstructionHandle ih_0 = il.append(_factory.createLoad( org.apache.commons.bcel6.generic.Type.OBJECT, 0)); + il.append(_factory.createInvoke(superClass.getName().toString(), "", org.apache.commons.bcel6.generic.Type.VOID, org.apache.commons.bcel6.generic.Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn( org.apache.commons.bcel6.generic.Type.VOID)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/This.java b/src/de/dhbwstuttgart/syntaxtree/statement/This.java index 09ea299a..ead9f40b 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/This.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/This.java @@ -4,14 +4,15 @@ package de.dhbwstuttgart.syntaxtree.statement; // ino.module.This.8654.import import java.util.Hashtable; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.MethodGen; -import org.apache.bcel.generic.ObjectType; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; +import org.apache.commons.bcel6.generic.ObjectType; import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -148,9 +149,9 @@ public class This extends Expr } @Override - public InstructionList genByteCode(ClassGen _cg) { + public InstructionList genByteCode(ClassGenerator _cg) { InstructionList il = new InstructionList(); - InstructionHandle ih_0 = il.append(InstructionFactory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); + il.append(InstructionFactory.createLoad( org.apache.commons.bcel6.generic.Type.OBJECT, 0)); return il; } diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java index 32d98dc6..29496d9d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/WhileStmt.java @@ -6,7 +6,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 29637635..e8451faa 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -9,6 +9,7 @@ import java.util.Iterator; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.SCException; import de.dhbwstuttgart.parser.JavaClassName; @@ -812,8 +813,8 @@ public class RefType extends ObjectType implements IMatchable } } - public org.apache.bcel.generic.Type getBytecodeType() { - return new org.apache.bcel.generic.ObjectType(this.getTypeName()); + public org.apache.commons.bcel6.generic.Type getBytecodeType(ClassGenerator cg) { + return new org.apache.commons.bcel6.generic.ObjectType(this.getTypeName()); } } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Type.java b/src/de/dhbwstuttgart/syntaxtree/type/Type.java index 20a9b07e..c365723d 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Type.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Type.java @@ -3,8 +3,9 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.end // ino.module.Type.8677.import import java.util.ArrayList; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -304,7 +305,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset return this; } - public abstract org.apache.bcel.generic.Type getBytecodeType(); + public abstract org.apache.commons.bcel6.generic.Type getBytecodeType(ClassGenerator cg); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index d93160b9..755be5fd 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -5,9 +5,10 @@ package de.dhbwstuttgart.syntaxtree.type; // ino.module.TypePlaceholder.8678.import import java.util.Hashtable; import java.util.Iterator; -import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.*; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -15,6 +16,8 @@ import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; +import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; // ino.class.TypePlaceholder.26780.description type=javadoc @@ -425,6 +428,14 @@ public class TypePlaceholder extends ObjectType } return ret; } + + @Override + public org.apache.commons.bcel6.generic.Type getBytecodeType(ClassGenerator cg) { + //throw new TypeinferenceException("Zuerst alle Typen einsetzen vor dem Kompiliervorgang",this); + Type resolvedType = cg.resolveTPH(this); + if(resolvedType instanceof TypePlaceholder)throw new DebugException("Kann TypePlaceholder nicht auflösen"); + return resolvedType.getBytecodeType(cg); + } } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/type/Void.java b/src/de/dhbwstuttgart/syntaxtree/type/Void.java index 42c63af3..8e575dff 100755 --- a/src/de/dhbwstuttgart/syntaxtree/type/Void.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/Void.java @@ -1,6 +1,7 @@ // ino.module.Void.8679.package package de.dhbwstuttgart.syntaxtree.type; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; @@ -80,8 +81,8 @@ public class Void extends RefType } @Override - public org.apache.bcel.generic.Type getBytecodeType() { - return org.apache.bcel.generic.Type.VOID; + public org.apache.commons.bcel6.generic.Type getBytecodeType(ClassGenerator cg) { + return org.apache.commons.bcel6.generic.Type.VOID; } } diff --git a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java index b83a5d65..ec127bec 100644 --- a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java +++ b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java @@ -1,6 +1,6 @@ package de.dhbwstuttgart.typeinference; -import org.apache.bcel.generic.ClassGen; +import org.apache.commons.bcel6.generic.ClassGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; diff --git a/test/bytecode/CharLitTest.jav b/test/bytecode/CharLitTest.jav deleted file mode 100644 index 1cf78415..00000000 --- a/test/bytecode/CharLitTest.jav +++ /dev/null @@ -1,7 +0,0 @@ -class CharLitTest{ - - -void method() { c; c = 'A'; } - - -} \ No newline at end of file diff --git a/test/bytecode/DoubleLiteral.jav b/test/bytecode/DoubleLiteral.jav deleted file mode 100644 index 7813d262..00000000 --- a/test/bytecode/DoubleLiteral.jav +++ /dev/null @@ -1,6 +0,0 @@ -class DoubleLiteral{ - -void method() {a; a = 20.0d;} - - -} \ No newline at end of file diff --git a/test/bytecode/DoubleLiteral.java b/test/bytecode/DoubleLiteral.java deleted file mode 100644 index e9470c5f..00000000 --- a/test/bytecode/DoubleLiteral.java +++ /dev/null @@ -1,45 +0,0 @@ -package bytecode; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.junit.Test; - -import plugindevelopment.TypeInsertTester; -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.logger.LoggerConfiguration; -import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.typeinference.ByteCodeResult; -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; - -public class DoubleLiteral { - - public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - public final static String testFile = "DoubleLiteral.jav"; - public final static String outputFile = "DoubleLiteral.class"; - - @Test - public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } - } - -} diff --git a/test/bytecode/FieldDeclaration.jav b/test/bytecode/FieldDeclaration.jav new file mode 100644 index 00000000..14d4f9bd --- /dev/null +++ b/test/bytecode/FieldDeclaration.jav @@ -0,0 +1,8 @@ +class FieldDeclaration{ + Integer integer = 20; + FieldDeclaration field = methode(); + + FieldDeclaration methode(){ + return this; + } +} \ No newline at end of file diff --git a/test/bytecode/FieldDeclarationTest.java b/test/bytecode/FieldDeclarationTest.java new file mode 100644 index 00000000..7724c0e8 --- /dev/null +++ b/test/bytecode/FieldDeclarationTest.java @@ -0,0 +1,14 @@ +package bytecode; + +import org.junit.Test; + +public class FieldDeclarationTest { + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "FieldDeclaration.jav"; + public final static String outputFile = "FieldDeclaration.class"; + + @Test + public void test() { + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); + } +} diff --git a/test/bytecode/FloatLiteral.jav b/test/bytecode/FloatLiteral.jav deleted file mode 100644 index c0531da4..00000000 --- a/test/bytecode/FloatLiteral.jav +++ /dev/null @@ -1,6 +0,0 @@ -class FloatLiteral{ - -void method() {f; f = 20.0f;} - - -} \ No newline at end of file diff --git a/test/bytecode/FloatLiteral.java b/test/bytecode/FloatLiteral.java deleted file mode 100644 index ba789535..00000000 --- a/test/bytecode/FloatLiteral.java +++ /dev/null @@ -1,45 +0,0 @@ -package bytecode; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.junit.Test; - -import plugindevelopment.TypeInsertTester; -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.logger.LoggerConfiguration; -import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.typeinference.ByteCodeResult; -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; - -public class FloatLiteral { - - public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - public final static String testFile = "FloatLiteral.jav"; - public final static String outputFile = "FloatLiteral.class"; - - @Test - public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } - } - -} diff --git a/test/bytecode/LambdaExpr.java b/test/bytecode/LambdaExpr.java index e0d40b6b..c28dad56 100644 --- a/test/bytecode/LambdaExpr.java +++ b/test/bytecode/LambdaExpr.java @@ -28,18 +28,7 @@ public class LambdaExpr { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/LongLiteral.jav b/test/bytecode/LongLiteral.jav deleted file mode 100644 index 70d57aa7..00000000 --- a/test/bytecode/LongLiteral.jav +++ /dev/null @@ -1,6 +0,0 @@ -class LongLiteral{ - -void method() {l; l = 20L;} - - -} \ No newline at end of file diff --git a/test/bytecode/LongLiteral.java b/test/bytecode/LongLiteral.java deleted file mode 100644 index 5e6ca9cb..00000000 --- a/test/bytecode/LongLiteral.java +++ /dev/null @@ -1,45 +0,0 @@ -package bytecode; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.junit.Test; - -import plugindevelopment.TypeInsertTester; -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.logger.LoggerConfiguration; -import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.typeinference.ByteCodeResult; -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; - -public class LongLiteral { - - public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - public final static String testFile = "LongLiteral.jav"; - public final static String outputFile = "LongLiteral.class"; - - @Test - public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } - } - -} diff --git a/test/bytecode/MethodEmpty.java b/test/bytecode/MethodEmpty.java index dbeea0a5..1f6af8be 100644 --- a/test/bytecode/MethodEmpty.java +++ b/test/bytecode/MethodEmpty.java @@ -28,18 +28,7 @@ public class MethodEmpty { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/MethodEmptyRetType.java b/test/bytecode/MethodEmptyRetType.java index 7eecbe0e..272e3998 100644 --- a/test/bytecode/MethodEmptyRetType.java +++ b/test/bytecode/MethodEmptyRetType.java @@ -28,18 +28,7 @@ public class MethodEmptyRetType { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/NewArrayTest.java b/test/bytecode/NewArrayTest.java deleted file mode 100644 index 6a9c3853..00000000 --- a/test/bytecode/NewArrayTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package bytecode; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.junit.Test; - -import plugindevelopment.TypeInsertTester; -import de.dhbwstuttgart.core.MyCompiler; -import de.dhbwstuttgart.core.MyCompilerAPI; -import de.dhbwstuttgart.logger.LoggerConfiguration; -import de.dhbwstuttgart.logger.Section; -import de.dhbwstuttgart.parser.JavaParser.yyException; -import de.dhbwstuttgart.typeinference.ByteCodeResult; -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; -import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; - -public class NewArrayTest { - - public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; - public final static String testFile = "NewArray.jav"; - public final static String outputFile = "NewArray.class"; - - @Test - public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } - } - -} diff --git a/test/bytecode/PostIncrement.java b/test/bytecode/PostIncrement.java index e24ee34a..8c0b3930 100644 --- a/test/bytecode/PostIncrement.java +++ b/test/bytecode/PostIncrement.java @@ -28,18 +28,7 @@ public class PostIncrement { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/SingleClassTester.java b/test/bytecode/SingleClassTester.java index f8a85463..d769fe98 100644 --- a/test/bytecode/SingleClassTester.java +++ b/test/bytecode/SingleClassTester.java @@ -19,8 +19,7 @@ public class SingleClassTester { MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { compiler.parse(new File(inputFile)); - compiler.typeReconstruction(); - Menge bytecode = compiler.generateBytecode(); + Menge bytecode = compiler.generateBytecode(compiler.typeReconstruction().firstElement()); System.out.println(bytecode); bytecode.firstElement().getByteCode().getJavaClass().dump(new File(outputFile)); } catch (IOException | yyException e) { diff --git a/test/bytecode/StringLitTest.java b/test/bytecode/StringLitTest.java index 6032c6a1..d4d93f19 100644 --- a/test/bytecode/StringLitTest.java +++ b/test/bytecode/StringLitTest.java @@ -28,18 +28,7 @@ public class StringLitTest { @Test public void test() { - LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); - MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); - try { - compiler.parse(new File(rootDirectory + testFile)); - compiler.typeReconstruction(); - ByteCodeResult bytecode = compiler.generateBytecode(); - System.out.println(bytecode); - bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); - } catch (IOException | yyException e) { - e.printStackTrace(); - TestCase.fail(); - } + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); } } diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java index 2c625925..ed9c705d 100644 --- a/test/bytecode/Test.java +++ b/test/bytecode/Test.java @@ -7,5 +7,6 @@ public static void main(String[] args){ new Assign(); System.out.println(new Return().method()); new MethodCall().method(); + System.out.println(new FieldDeclaration().field); } } diff --git a/test/plugindevelopment/TypeInsertTests/Analysis.txt b/test/plugindevelopment/TypeInsertTests/Analysis.txt new file mode 100644 index 00000000..c6c27a75 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/Analysis.txt @@ -0,0 +1,3 @@ +LambdaTest5: +* Zeit ohne Unify-Filterung: 729601 +* Zeit mit Unify-Filterung: 95235 diff --git a/test/plugindevelopment/TypeInsertTests/UnifyPaper.jav b/test/plugindevelopment/TypeInsertTests/UnifyPaper.jav new file mode 100644 index 00000000..02305377 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/UnifyPaper.jav @@ -0,0 +1,13 @@ + + +class Klasse1 { + void methode(){ + var; + var = this; + var = new Klasse2(); + } +} + +class Klasse2 extends Klasse1{ + +} \ No newline at end of file diff --git a/test/plugindevelopment/TypeInsertTests/UnifyPaper.java b/test/plugindevelopment/TypeInsertTests/UnifyPaper.java new file mode 100644 index 00000000..9f963c5f --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/UnifyPaper.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.ArrayList; +import java.util.List; +import de.dhbwstuttgart.typeinference.Menge; + +import org.junit.Test; + +public class UnifyPaper { + private static final String TEST_FILE = "UnifyPaper.jav"; + + @Test + public void run(){ + Menge mustContain = new Menge(); + //mustContain.add("TestIfStmt var"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + ArrayList l = new ArrayList(); + } +} diff --git a/test/plugindevelopment/TypeInsertTests/UnifyPaper2.jav b/test/plugindevelopment/TypeInsertTests/UnifyPaper2.jav new file mode 100644 index 00000000..ced65a23 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/UnifyPaper2.jav @@ -0,0 +1,13 @@ +import java.util.Vector; + +class Klasse1 { + void methode(){ + var; + var = new Vector(); + var = new Vector(); + } +} + +class Klasse2 extends Klasse1{ + +} diff --git a/test/plugindevelopment/TypeInsertTests/UnifyPaper2.java b/test/plugindevelopment/TypeInsertTests/UnifyPaper2.java new file mode 100644 index 00000000..0c1f1338 --- /dev/null +++ b/test/plugindevelopment/TypeInsertTests/UnifyPaper2.java @@ -0,0 +1,19 @@ +package plugindevelopment.TypeInsertTests; + +import java.util.ArrayList; +import java.util.List; +import de.dhbwstuttgart.typeinference.Menge; + +import org.junit.Test; + +public class UnifyPaper2 { + private static final String TEST_FILE = "UnifyPaper2.jav"; + + @Test + public void run(){ + Menge mustContain = new Menge(); + //mustContain.add("TestIfStmt var"); + MultipleTypesInsertTester.testSingleInsert(this.TEST_FILE, mustContain); + ArrayList l = new ArrayList(); + } +} From bfe6b0360563208362397a44b255b4f520df89a1 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 10 Sep 2015 16:21:30 +0200 Subject: [PATCH 172/186] =?UTF-8?q?Umstieg=20auf=20BCEL6=20SourceCode.=20E?= =?UTF-8?q?inf=C3=BChren=20von=20DHBWInstructionFactory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 2 +- BCEL/bcelifier/JavaToBCEL.java | 1 + BCEL/bcelifier/LocalVarAccess.java | 10 +++ BCEL/bcelifier/LocalVarAccessCreator.java | 61 +++++++++++++++++++ .../bytecode/ClassGenerator.java | 37 ++++++++++- .../bytecode/DHBWConstantPoolGen.java | 35 +++++++++++ .../bytecode/DHBWInstructionFactory.java | 58 +++++++++++------- src/de/dhbwstuttgart/syntaxtree/Class.java | 6 +- .../dhbwstuttgart/syntaxtree/Constructor.java | 3 +- src/de/dhbwstuttgart/syntaxtree/Method.java | 8 ++- .../syntaxtree/ParameterList.java | 21 +++++++ .../statement/LambdaExpression.java | 23 +++---- .../syntaxtree/statement/LocalOrFieldVar.java | 21 ++++++- test/bytecode/Runnable.jav | 5 ++ test/bytecode/RunnableTest.java | 14 +++++ test/bytecode/Test.java | 1 + 16 files changed, 255 insertions(+), 51 deletions(-) create mode 100644 BCEL/bcelifier/LocalVarAccess.java create mode 100644 BCEL/bcelifier/LocalVarAccessCreator.java create mode 100644 src/de/dhbwstuttgart/bytecode/DHBWConstantPoolGen.java create mode 100644 test/bytecode/Runnable.jav create mode 100644 test/bytecode/RunnableTest.java diff --git a/.classpath b/.classpath index 6af9d44f..ea96f442 100755 --- a/.classpath +++ b/.classpath @@ -8,7 +8,7 @@ - + diff --git a/BCEL/bcelifier/JavaToBCEL.java b/BCEL/bcelifier/JavaToBCEL.java index bcd9524d..ef1555d1 100644 --- a/BCEL/bcelifier/JavaToBCEL.java +++ b/BCEL/bcelifier/JavaToBCEL.java @@ -29,6 +29,7 @@ public class JavaToBCEL { new BCELifier(new ClassParser(rootDirectory+"MethodCall.class").parse(), new FileOutputStream(new File(rootDirectory+"MethodCallCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"FieldDeclaration.class").parse(), new FileOutputStream(new File(rootDirectory+"FieldDeclarationCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"Null.class").parse(), new FileOutputStream(new File(rootDirectory+"NullCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"LocalVarAccess.class").parse(), new FileOutputStream(new File(rootDirectory+"LocalVarAccessCreator.java"))).start(); } catch (ClassFormatException | IOException e) { e.printStackTrace(); diff --git a/BCEL/bcelifier/LocalVarAccess.java b/BCEL/bcelifier/LocalVarAccess.java new file mode 100644 index 00000000..116becbc --- /dev/null +++ b/BCEL/bcelifier/LocalVarAccess.java @@ -0,0 +1,10 @@ +package bcelifier; + +public class LocalVarAccess { + Integer methode(Integer i){ + Integer var; + var = 10 + i; + return var; + } + +} diff --git a/BCEL/bcelifier/LocalVarAccessCreator.java b/BCEL/bcelifier/LocalVarAccessCreator.java new file mode 100644 index 00000000..b85fcadb --- /dev/null +++ b/BCEL/bcelifier/LocalVarAccessCreator.java @@ -0,0 +1,61 @@ +package bcelifier; + +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; +import java.io.*; + +public class LocalVarAccessCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public LocalVarAccessCreator() { + _cg = new ClassGen("bcelifier.LocalVarAccess", "java.lang.Object", "LocalVarAccess.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.LocalVarAccess", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), new Type[] { new ObjectType("java.lang.Integer") }, new String[] { "arg0" }, "methode", "bcelifier.LocalVarAccess", il, _cp); + + InstructionHandle ih_0 = il.append(new PUSH(_cp, 10)); + il.append(_factory.createLoad(Type.OBJECT, 1)); + il.append(_factory.createInvoke("java.lang.Integer", "intValue", Type.INT, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); + il.append(InstructionConstants.IADD); + il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC)); + il.append(_factory.createStore(Type.OBJECT, 2)); + InstructionHandle ih_11 = il.append(_factory.createLoad(Type.OBJECT, 2)); + InstructionHandle ih_12 = il.append(_factory.createReturn(Type.OBJECT)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.LocalVarAccessCreator creator = new bcelifier.LocalVarAccessCreator(); + creator.create(new FileOutputStream("bcelifier.LocalVarAccess.class")); + } +} diff --git a/src/de/dhbwstuttgart/bytecode/ClassGenerator.java b/src/de/dhbwstuttgart/bytecode/ClassGenerator.java index f5d0017c..800a7703 100644 --- a/src/de/dhbwstuttgart/bytecode/ClassGenerator.java +++ b/src/de/dhbwstuttgart/bytecode/ClassGenerator.java @@ -1,5 +1,7 @@ package de.dhbwstuttgart.bytecode; +import org.apache.commons.bcel6.classfile.InnerClass; +import org.apache.commons.bcel6.classfile.InnerClasses; import org.apache.commons.bcel6.generic.ClassGen; import org.apache.commons.bcel6.generic.ConstantPoolGen; @@ -7,16 +9,22 @@ import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; public class ClassGenerator extends ClassGen{ - private DHBWInstructionFactory factory = new DHBWInstructionFactory(this, this.getConstantPool()); + private DHBWConstantPoolGen cp; + private DHBWInstructionFactory factory; private TypeinferenceResultSet tiResult; + private int lambdaMethodeNr = 0; public ClassGenerator(String name, String get_Name, String string, short accPublic, String[] strings, TypeinferenceResultSet resultSet) { - super(name,get_Name,string,accPublic,strings); + super(name,get_Name,string,accPublic,strings, new DHBWConstantPoolGen()); this.tiResult = resultSet; + + cp = (DHBWConstantPoolGen) super.getConstantPool(); + factory = new DHBWInstructionFactory(this, cp); } public DHBWInstructionFactory getInstructionFactory() { @@ -27,4 +35,29 @@ public class ClassGenerator extends ClassGen{ return tiResult.getTypeOfPlaceholder(typePlaceholder); } + public String createLambdaMethodName() { + return "lambda$methode$"+(lambdaMethodeNr++); + } + + @Override + public DHBWConstantPoolGen getConstantPool(){ + return this.cp; + } + + @Override + public void setConstantPool(ConstantPoolGen gen){ + throw new DebugException("Ungültige Operation. ClassGenerator muss ein DHBWConstantPool besitzen"); + } + + /** + * Anmerkung: Kann in diesem Zustand nur einmal aufgerufen werden. + * @param innerClassAttribute + */ + public void addInnerClass(InnerClass innerClassAttribute) { + //TODO: Muss vor dem ausführen von getJavaClass ausgeführt werden. getJavaClass überschreiben! + InnerClass[] innerClasses = new InnerClass[1]; + innerClasses[0] = innerClassAttribute; + int innerClassesUTF8 = this.getConstantPool().addUtf8("InnerClassses"); + this.addAttribute(new InnerClasses(innerClassesUTF8,1,innerClasses,this.getConstantPool().getConstantPool())); + } } diff --git a/src/de/dhbwstuttgart/bytecode/DHBWConstantPoolGen.java b/src/de/dhbwstuttgart/bytecode/DHBWConstantPoolGen.java new file mode 100644 index 00000000..9bcd75d9 --- /dev/null +++ b/src/de/dhbwstuttgart/bytecode/DHBWConstantPoolGen.java @@ -0,0 +1,35 @@ +package de.dhbwstuttgart.bytecode; + +import java.util.HashMap; + +import org.apache.commons.bcel6.classfile.Constant; +import org.apache.commons.bcel6.classfile.ConstantMethodHandle; +import org.apache.commons.bcel6.classfile.ConstantMethodType; +import org.apache.commons.bcel6.generic.ConstantPoolGen; + +public class DHBWConstantPoolGen extends ConstantPoolGen{ + private static final long serialVersionUID = -8282768548793548585L; + + private final HashMap constantTable = new HashMap<>(); + //private static final String DELIMITER = "$"; + + /* + public int addConstantMethodType(ConstantMethodType methodType) { + if(constantTable.containsKey(methodType))return constantTable.get(methodType); + + } + + public int addConstantMethodHandle(ConstantMethodHandle methodHandle) { + if(constantTable.containsKey(methodHandle))return constantTable.get(methodHandle); + int ret = this.index; + return ret; + } + */ + public int addConstant(Constant c){ + if(constantTable.containsKey(c))return constantTable.get(c); + int ret = this.index; + this.constants[this.index++] = c; + constantTable.put(c, ret); + return ret; + } +} diff --git a/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java index 6d0c8e2a..f8ea3b3c 100644 --- a/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java +++ b/src/de/dhbwstuttgart/bytecode/DHBWInstructionFactory.java @@ -6,24 +6,28 @@ import java.util.ArrayList; import org.apache.commons.bcel6.Constants; import org.apache.commons.bcel6.classfile.BootstrapMethod; import org.apache.commons.bcel6.classfile.ConstantInvokeDynamic; +import org.apache.commons.bcel6.classfile.ConstantMethodHandle; +import org.apache.commons.bcel6.classfile.ConstantMethodType; import org.apache.commons.bcel6.classfile.InnerClass; import org.apache.commons.bcel6.classfile.Method; import org.apache.commons.bcel6.generic.ClassGen; import org.apache.commons.bcel6.generic.ConstantPoolGen; import org.apache.commons.bcel6.generic.INVOKEDYNAMIC; import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.LocalVariableInstruction; import org.apache.commons.bcel6.generic.MethodGen; import org.apache.commons.bcel6.generic.Type; public class DHBWInstructionFactory extends InstructionFactory{ - public DHBWInstructionFactory(ClassGen cg, ConstantPoolGen cp) { - super(cg, cp); - } + private DHBWConstantPoolGen cp; + private ClassGenerator cg; - private BootstrapMethod createBootstrapMethod(){ - //TODO - return null; + public DHBWInstructionFactory(ClassGenerator cg, DHBWConstantPoolGen cp) { + super(cg, cp); + this.cp = cp; + this.cg = cg; } public INVOKEDYNAMIC createInvokeDynamic( MethodGen lambdaMethod ) { @@ -38,11 +42,22 @@ public class DHBWInstructionFactory extends InstructionFactory{ * #19 ()V * * #20 ist ein MethodHandle_info Structure - * TODO: Rausfinden, was es mit den Argumenten auf sich hat: - * -> Das sind Informationen die die Lambda Funktion zum Ausführen benötigt. (This-Referenz, Variablen, welche vom Lambda Ausdruck benutzt werden) - * Anmerkung: Bei der momentanen Implementierung der Lambda Ausdrücke wird nur this übergeben. + * Die Argumente werden der Bootstrap Methode beim Aufrufen übergeben: @see https://docs.oracle.com/javase/8/docs/api/java/lang/invoke/LambdaMetafactory.html#metafactory-java.lang.invoke.MethodHandles.Lookup-java.lang.String-java.lang.invoke.MethodType-java.lang.invoke.MethodType-java.lang.invoke.MethodHandle-java.lang.invoke.MethodType- + * TODO: Die korrekten Argumente anfügen. + * - samMethodType - Signature and return type of method to be implemented by the function object. + * - implMethod - A direct method handle describing the implementation method which should be called (with suitable adaptation of argument types, return types, and with captured arguments prepended to the invocation arguments) at invocation time. + * - instantiatedMethodType - The signature and return type that should be enforced dynamically at invocation time. This may be the same as samMethodType, or may be a specialization of it. */ + ConstantMethodType lambdaMethodType = new ConstantMethodType(this.cp.addUtf8(lambdaMethod.getSignature())); + int implMethodKind = 7; // 7 = InvokeSpecial @see https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4.3.5 + ConstantMethodHandle implMethod = new ConstantMethodHandle(implMethodKind,cg.getConstantPool().addMethodref(lambdaMethod)); //Das zweite Argument ist der MethodRef zur LambdaMethode + + //Argumentliste für die Bootstrap Methode zusammensetzen: + arguments.add(cp.addConstant(lambdaMethodType)); + arguments.add(cp.addConstant(implMethod)); + arguments.add(cp.addConstant(lambdaMethodType)); + int innerClassIndex = cp.addClass("java.lang.invoke.MethodHandles$Lookup"); int innerClassName = cp.addUtf8("Lookup"); @@ -52,6 +67,7 @@ public class DHBWInstructionFactory extends InstructionFactory{ InnerClass innerClassAttribute = new InnerClass(innerClassIndex, outerClassIndex, innerClassName,accessFlags); //Diese InnereKlasse muss später im ClassFile vorkommen, da sie von der Bootstrap Methode benutzt wird. //TODO: Dies kann man möglicherweise auslagern. Die ClassGen Klasse erweiter, welche sich dann die InnerenKlassen mertk, welche gebraucht werden + cg.addInnerClass(innerClassAttribute); String bootstrapSignature = "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;"; int lambdaMethodIndex = cp.addMethodref("java.lang.invoke.LambdaMetafactory", "metafactory", bootstrapSignature); @@ -62,18 +78,7 @@ public class DHBWInstructionFactory extends InstructionFactory{ } BootstrapMethod bMethod = new BootstrapMethod(lambdaMethodIndex, arguments.size(), argumentsArray); - final short opcode = 186; int index; - /* - int nargs = 0; - String signature = Type.getMethodSignature(ret_type, arg_types); - for (int i = 0; i < arg_types.length; i++) { - nargs += arg_types[i].getSize(); - } - */ - - //index = cp.addInvokeDynamic(bootstrap_index, name, signature); - //Adding invokeDynamic to Constant_Pool: /* * Spezifikation: @see https://docs.oracle.com/javase/specs/jvms/se8/html/index.html @@ -87,11 +92,13 @@ public class DHBWInstructionFactory extends InstructionFactory{ /* * - * TODO: Rausfinden, was es mit der Inneren Klasse auf sich hat + * Was es mit der Inneren Klasse auf sich hat: * (public static final #48= #47 of #51; //Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles + * Lösung: Ist wohl einfach nur nötig, um die Metafactory durch die Bootstrap-Methode aufzurufen * * TODO: Rausfinden was es mit dem NameAndType Eintrag in der InvokeDynamic_info Struktur auf sich hat: * Für ein Runnable ()->{}; ist es: run:(LLambda3;)Ljava/lang/Runnable; + * Wieso das zusätzliche Argument vom Typ (this) * * TODO: bootstrap_methode den Klassenattributen hinzufügen * @@ -99,13 +106,18 @@ public class DHBWInstructionFactory extends InstructionFactory{ int bootstrap_method_attr_index = bMethod.getBootstrapMethodRef(); //TODO: der Typ der Lambda Methode muss den Typ von this als erstes Argument enthalten, damit this innerhalb der Lambda Methode verwendet werden kann - int name_and_type_index = cp.addNameAndType(lambdaMethod.getName(), lambdaMethod.getType().getSignature()); + int name_and_type_index = cp.addNameAndType(lambdaMethod.getName(), lambdaMethod.getSignature()); ConstantInvokeDynamic cInvokeDynamic = new ConstantInvokeDynamic(bootstrap_method_attr_index, name_and_type_index); - index = cp.addConstant(cInvokeDynamic, cp); + index = cp.addConstant(cInvokeDynamic); return new INVOKEDYNAMIC(index); } + public LocalVariableInstruction createLoad(org.apache.commons.bcel6.generic.Type bytecodeType, String variableName) { + int index = 1; //TODO: Hier muss ein Logger her, welcher aufzeichnet, an welcher Position welche Variable liegt. + return InstructionFactory.createLoad(bytecodeType, index); + } + } diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 804a7af7..8d4ee492 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -20,6 +20,8 @@ import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Section; import de.dhbwstuttgart.logger.SectionLogger; import de.dhbwstuttgart.bytecode.ClassGenerator; +import de.dhbwstuttgart.bytecode.DHBWConstantPoolGen; +import de.dhbwstuttgart.bytecode.DHBWInstructionFactory; import de.dhbwstuttgart.core.AClassOrInterface; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.parser.JavaClassName; @@ -75,7 +77,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I */ public ByteCodeResult genByteCode(TypeinferenceResultSet resultSet) { InstructionFactory _factory; - ConstantPoolGen _cp; + DHBWConstantPoolGen _cp; ClassGenerator _cg; SectionLogger logger = Logger.getSectionLogger(this.getClass().getName(), Section.CODEGEN); @@ -84,7 +86,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I if(pkgName != null)throw new NotImplementedException(); _cg = new ClassGenerator(name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }, resultSet); //letzter Parameter sind implementierte Interfaces _cp = _cg.getConstantPool(); - _factory = new InstructionFactory(_cg, _cp); + _factory = new DHBWInstructionFactory(_cg, _cp); //Die Felder in Methoden Felder und Konstruktoren aufteilen: Menge fieldDeclarations = new Menge<>(); diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 3482d2ef..e5b23c39 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -11,6 +11,7 @@ import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassGenerator; +import de.dhbwstuttgart.bytecode.DHBWConstantPoolGen; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.misc.DeclId; @@ -57,7 +58,7 @@ public class Constructor extends Method { } public void genByteCode(ClassGenerator cg, InstructionList fieldInitializations){ - ConstantPoolGen _cp = cg.getConstantPool(); + DHBWConstantPoolGen _cp = cg.getConstantPool(); InstructionList il = new InstructionList(); //sollte nicht new sein sondern aus Block kommen Class parentClass = this.getParentClass(); diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 6029462e..953391d9 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -18,6 +18,8 @@ import org.apache.commons.bcel6.generic.MethodGen; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.bytecode.ClassGenerator; +import de.dhbwstuttgart.bytecode.DHBWConstantPoolGen; +import de.dhbwstuttgart.bytecode.DHBWInstructionFactory; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.myexception.JVMCodeException; @@ -741,8 +743,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable } public void genByteCode(ClassGenerator cg) { - ConstantPoolGen _cp = cg.getConstantPool(); - InstructionFactory _factory = new InstructionFactory(cg, _cp); + DHBWConstantPoolGen _cp = cg.getConstantPool(); + DHBWInstructionFactory _factory = new DHBWInstructionFactory(cg, _cp); InstructionList il = new InstructionList(); Class parentClass = this.getParentClass(); @@ -751,7 +753,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable String[] argumentNames = new String[]{}; if(this.parameterlist != null && this.parameterlist.size() > 0){ - argumentTypes = new org.apache.commons.bcel6.generic.Type[this.parameterlist.size()]; + argumentTypes = new org.apache.commons.bcel6.generic.Type[this.parameterlist.size()]; argumentNames = new String[this.parameterlist.size()]; int i = 0; for(FormalParameter parameter : this.parameterlist){ diff --git a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java index acf0934b..e88ad0ef 100755 --- a/src/de/dhbwstuttgart/syntaxtree/ParameterList.java +++ b/src/de/dhbwstuttgart/syntaxtree/ParameterList.java @@ -7,6 +7,7 @@ import de.dhbwstuttgart.typeinference.Menge; import java.util.Iterator; +import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; @@ -144,5 +145,25 @@ public class ParameterList extends SyntaxTreeNode implements Iterable this; } + +} \ No newline at end of file diff --git a/test/bytecode/RunnableTest.java b/test/bytecode/RunnableTest.java new file mode 100644 index 00000000..2eb55d85 --- /dev/null +++ b/test/bytecode/RunnableTest.java @@ -0,0 +1,14 @@ +package bytecode; + +import org.junit.Test; + +public class RunnableTest { + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "Runnable.jav"; + public final static String outputFile = "Runnable.class"; + + @Test + public void test() { + SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputFile); + } +} diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java index ed9c705d..69ff36f6 100644 --- a/test/bytecode/Test.java +++ b/test/bytecode/Test.java @@ -8,5 +8,6 @@ public static void main(String[] args){ System.out.println(new Return().method()); new MethodCall().method(); System.out.println(new FieldDeclaration().field); + //new Runnable().method().run(); } } From a9611fdd903d519b4e7a1e9fbdf1e86556fa858d Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Wed, 16 Sep 2015 18:45:45 +0200 Subject: [PATCH 173/186] Erster zusammengehackter Stand, bei dem Runnable.jav-Test funktioniert --- BCEL/bcelifier/JavaToBCEL.java | 1 + BCEL/bcelifier/Wildcard.java | 5 ++ BCEL/bcelifier/WildcardCreator.java | 50 ++++++++++++++++++ lib/bcel-5.2-src.zip | Bin 0 -> 584571 bytes .../bytecode/ClassGenerator.java | 25 +++++++-- .../bytecode/DHBWConstantPoolGen.java | 1 + .../bytecode/DHBWInstructionFactory.java | 19 ++++--- .../bytecode/MethodGenerator.java | 16 ++++++ .../dhbwstuttgart/bytecode/WildcardType.java | 16 ++++++ src/de/dhbwstuttgart/syntaxtree/Method.java | 4 +- .../statement/LambdaExpression.java | 16 +++++- .../syntaxtree/type/ExtendsWildcardType.java | 7 ++- .../syntaxtree/type/RefType.java | 16 +++++- .../syntaxtree/type/SuperWildcardType.java | 9 +++- .../syntaxtree/type/WildcardType.java | 8 ++- test/bytecode/Fun0.java | 3 ++ test/bytecode/LambdaExpr.jav | 3 +- test/bytecode/Runnable.jav | 2 +- test/bytecode/Test.java | 6 +-- 19 files changed, 184 insertions(+), 23 deletions(-) create mode 100644 BCEL/bcelifier/Wildcard.java create mode 100644 BCEL/bcelifier/WildcardCreator.java create mode 100644 lib/bcel-5.2-src.zip create mode 100644 src/de/dhbwstuttgart/bytecode/MethodGenerator.java create mode 100644 src/de/dhbwstuttgart/bytecode/WildcardType.java create mode 100644 test/bytecode/Fun0.java diff --git a/BCEL/bcelifier/JavaToBCEL.java b/BCEL/bcelifier/JavaToBCEL.java index ef1555d1..f4281a3c 100644 --- a/BCEL/bcelifier/JavaToBCEL.java +++ b/BCEL/bcelifier/JavaToBCEL.java @@ -30,6 +30,7 @@ public class JavaToBCEL { new BCELifier(new ClassParser(rootDirectory+"FieldDeclaration.class").parse(), new FileOutputStream(new File(rootDirectory+"FieldDeclarationCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"Null.class").parse(), new FileOutputStream(new File(rootDirectory+"NullCreator.java"))).start(); new BCELifier(new ClassParser(rootDirectory+"LocalVarAccess.class").parse(), new FileOutputStream(new File(rootDirectory+"LocalVarAccessCreator.java"))).start(); + new BCELifier(new ClassParser(rootDirectory+"Wildcard.class").parse(), new FileOutputStream(new File(rootDirectory+"WildcardCreator.java"))).start(); } catch (ClassFormatException | IOException e) { e.printStackTrace(); diff --git a/BCEL/bcelifier/Wildcard.java b/BCEL/bcelifier/Wildcard.java new file mode 100644 index 00000000..b65144ac --- /dev/null +++ b/BCEL/bcelifier/Wildcard.java @@ -0,0 +1,5 @@ +package bcelifier; + +public class Wildcard { + Wildcard a; +} diff --git a/BCEL/bcelifier/WildcardCreator.java b/BCEL/bcelifier/WildcardCreator.java new file mode 100644 index 00000000..6f83ff50 --- /dev/null +++ b/BCEL/bcelifier/WildcardCreator.java @@ -0,0 +1,50 @@ +package bcelifier; + +import org.apache.commons.bcel6.generic.*; +import org.apache.commons.bcel6.classfile.*; +import org.apache.commons.bcel6.*; +import java.io.*; + +public class WildcardCreator implements Constants { + private InstructionFactory _factory; + private ConstantPoolGen _cp; + private ClassGen _cg; + + public WildcardCreator() { + _cg = new ClassGen("bcelifier.Wildcard", "java.lang.Object", "Wildcard.java", ACC_PUBLIC | ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + public void create(OutputStream out) throws IOException { + createFields(); + createMethod_0(); + _cg.getJavaClass().dump(out); + } + + private void createFields() { + FieldGen field; + + field = new FieldGen(0, new ObjectType("bcelifier.Wildcard"), "a", _cp); + _cg.addField(field.getField()); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "", "bcelifier.Wildcard", il, _cp); + + InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0)); + il.append(_factory.createInvoke("java.lang.Object", "", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID)); + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + public static void main(String[] args) throws Exception { + bcelifier.WildcardCreator creator = new bcelifier.WildcardCreator(); + creator.create(new FileOutputStream("bcelifier.Wildcard.class")); + } +} diff --git a/lib/bcel-5.2-src.zip b/lib/bcel-5.2-src.zip new file mode 100644 index 0000000000000000000000000000000000000000..097426150a3d64736bca4329e3fc2b4fc0da5686 GIT binary patch literal 584571 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%0D9G)I?`K%T>9_3t7+@ z!r|NVP|0#i%2G_y18QfS^d#9Bjx)`HhJ}z1q0K^K*HC7v(!o}#T7_r5Nh&#L#^ENn z=8IEd$Ng80(XN;Gf;7MOWG%g`ap!s@(+m(tgC+oW@H`!BQwii1h*>9|>?@oMMd$XF z%%{Ys4u3~nYs$6$&R^){CINGWaxO8LT_hwpBSD`$^z=;sq-!$ZkTTVeUgyG=qv>O% z7^o4m9RYbVL!{i{J4mZ#&zke-sg7s5@aR%}y2X4yoVAfruhu_zTNt`D2RcZE>|}Zx z%m0k)bz?lwEu?2J>@)9hHRCO!PnYh=F`~bMn=xXu&c#`W$AmGBeNLPchtqlfVjlin z*vIMLW$xe2=j9FD%@w)9H@Ocq0c$l-FZ0}Orx(`Hg`)qa4@Aq zLJwKHeKY(ZPH}H5aDFLXe||QqInwA^{`%J}d^f(^qvK~5&i-#5>HkCJlidION&LeM z{m0lkN7o)XLS*{q_;*>aHnaNAL6v}FM_3k`wmeFs(8MOmzm9+BevW@B#_AK8t9eJ! z++Dq{F4@~%od87Xk6%@4-HHKn9^XF=y*|M1QG?}W1U{f%6s*JY?8YLgi6U-cmKw>l z>f%fiMEtOo{MIRwIknwngN0z-jvxD$fMnW^oI>=XtlR-9)&z!8Q4$JJ$@IsNpdMI? z+JI8{M;EyCNuVjL(lpW&B{*{!?&_HP(IfJ>_@i-lQl!NRDuDj*QWf9v*R=fXs|@%& zwFbKe$H%vmd2^%!#~6TW8g1%>Bp?I6RO$V7=$iQ)27j(l3#3QES^-Jq4tv^_~ODB-w z#xPZ;w|BD(FlV2?i(gNMcd!jAZ=_PzDd&%rR5Z}+$D5gE(U*AM)%-|LsPK3EZa7Rf zUg|UGRITPC=!0`Q5qt=G2q^pp40ih6-EH?PjU|`ET}Tl9{uC&eJyj$^V`FRslC5nE?*Vx zMKWA@cJLd0>aX)+weNL$S<;GeDer9|VARelXJd{GQr4Hxvae4G`|(AquZPzij*JXg zDS64h$cMk&8M*K zLuhrmfqykb5mYYhCLRK{uW*ByfTQ#?ptN}j$z%(AG?wS8+0n=f;r2#g4Y&y_y4IYW zD(QAc^^0!a}dM32RRnN={T2srNP-zAy&@$FHGB!^Cyc(TRMlr_jUc6?_A?+$3|QA z&6BqLn4g8Z5pbtLw}+&DOcHqCUaQb_MB@(%ZJjNlG|USuNAU_wZaF9qDST7orYbuQ zn%@gaeRRnqzDcW5#TiT298?pckPmdIOmNF6(-%>w059UcFs};P^>TQK(e|$rLsvS5 zJ!t?=t~kI-4>Dnx)?c&*SsHc0p+`EN+b0Cx6iXL{R>rhFj0Y7pkerRqp+Pza70deE zt3X3nLL~}hE~J>D2d9bYq?1lV4S}C%1Eh2donRb4lq|XM9v+RaTkaif$JKe#d(6mChKV`+{wvW zLY&X+!k(ce(=91%N!(4WUYl`NxJd(7bcjAwi>KZ;g>0QH)M+WmE#56}^KB02yAKvB z=aiCzv{Dng1g2A$ba_7k<}w=%FqYEZmrr#|fS&5`<1W)&DXDvb@L%LIbAtWeF-jQ1 zjHWhq!s4gRe8!Q%r`h;xF=t_$tvF5x+y{lG=5SaAh*5gMDVvQc0J$Lu-?WLtPP#yW(bF(QwG2h;@+crcJ1uSd$<7=#Zi%y%zsh1qe&kGIX9&I#rx);b-EEF6Z++{@yuiO^`e7Tjv=xjxOs@w zwYOc2#ALeOshALcTlt=iH{#3Ghx5JZRTot+%iUwPfF}V(%A2=BJ6$8g$#8T#oebCF z&L4rnv7?WJ3s(abxm-qm*%J7_4QVNJ{%U;wtXmm>da(byDv|L&s!4?yMgAqL^;Vj* z`9Ym}J*!ej?eBuH7?Vre+07Gl5Ap{;W%WC3G}EaB}Kap1roJYXY#_ZRI4@T9B1!nQ!TmMkZD8Z##cOSsj5 zScD>(0n@zX3SY|L^W-}#0g_umbOD?;Yi<=nhmmM13XZkpMTf2v*8KvfQYP3f>>UrB zCy-J{jj;5umG{AwwQyG>d7V#4D?SN2QIemta1H~xdhQ=+c8^OQ!mJmaI^xHIO;nnXHf^nK#k zT$#3<5q0Ix{e>fIpu3^X-g*KY`vE54Q(=1$UkJ591#3|7Z=H1> zvkTZ@HD+W4Kv|b-rTrle|B+@_DDjvKezyDu<0Mand;L@;ARc)>rUONz7L8U3kCY*2 z=ZU#(L*W?kyJ)hO>a`f;l z6+sxeDTj693&uU}>Gm@rAN;eBP=rutYJHZo*S?>UI@?>?Ox*AhvY!fU7L~wHt8Lna ze**?*I$!H{XP}wSmF7mL6?#bzr^j%EUlre!C;kOb2Gc~VJNUt9Os6Lp0q2tQ6H{Qu;rzAY9z!e@7nK~M#9crUa#a<&*&uw+=fMXVCF z^@0!6Q*CRDrL8p`NcP>1tyN0O=I<7KzLXuV9{2l;2R47hR))vr3WFm+8L*%04j-KX zuVDH=ZFxPL)Sn@mL7WR_V_l3H;{v3esz6PGkd6LmA2S6mrQo@<92I`ZEPgfsPV3dv zbD%;A)#iEonzO@#2XSgifyI=FH}ZOy{N@NH6_P_ue5=2DBFLM#s1v-*#V7k6`yDIF z%$vA`fSx_~_B7pfW9OZIz=e3iOoow-oBG;sJRRv$_u{!h*Ofefk+Oj!cd(7i&xg?5 zq}xGswd)0P>h1c)NPPf&Ll4(75HIRv8m8LbD%s!Y-o+!)T1p(Ygemf1b8@Ypj zVVtOMM^fiDyl%Y5I=*n_Obsu%vyAQefU!O=Y*^)N$(lQZADp4PrApg+`Wa#42E{hP za>vP`QVX};(}{YK8JN2iXhjRqB-y)jzjeOk3!cDDW8Q{fri!KmpiTE ztfP_#28JLXe5pQ$-~{2Ai+iL5tvNT&oii6y({X|Y*I2uc?cUyBcQ3d$Bk#X<8+o|` z_w1ZFaI&*~LFurlxH}_`I&Z1!VQ5EgTv*yX7s^{HyD*id?v$Oim13m~PX5Y*wKR51 zji_?sm*Fz1CS{o*X$*T` zf^Cs4DBKj5OIp}qq6ndO5H!yE#=QG=y|?ENgWMrQl^`&f(^Tvka-N~7(}%^=gquFZ ziqeDAyZ#IFa9(lw6Hs?xPimPuhihl~7yR)StgJp~6tG&f&cD>or_D^X)ExEUG+qE{Ms;JROrB-pN_3w8-H4g)-3s) zWy=xRo{B2vk&K0~aW~Rc5uY&w=nr@3%2d8#Ayn3kTDdn3Hva^0%cRoN3C`cB^am9V z_b*g9nz=rWBZwD@8b=&d5bd~@1L+Sq%(`D379N^J7YnJ&A?qfK^5^^tKE79*YLgfH zWLzA@`o~!<(5yrn?Z~q#`hT(Z7F<~`-qxsqNT+l+(%m4^-6h@K-GY>Wba!`2cb5{< z-Q6h-0{8de-sk+!JKnqR*ms-{F~?eK&bj71**Ki%O-2xR)4WpHHlxG(ttug;4JsC$ z0E$JYcD&#gUX8*}WK8PZ%!pH}%s?$BVYw-qr$?6#@;O$hNGubA|KO>};*lYeZ9bc2 z4T=4vcZbKYy5ghNy}NI~l+LiJ4t@jlyk)NT4&8o|E!9jK>F8{6`!oqfwzx;+MH_zl zIY82us=)IZwbztn#)Dxn;oX)7?18K?`Y1B9cCNw{P&x!_{^&#}Aq^o%54SHUdi1Pm zSn0}q5ViX3#_Z6_=0nbCicQU`nC8koer_N9{pT&>n>YoLLT+*A?Q#l7$8zQlpL2bt z7HPb58DC(ArtG3um$UEh*)aum9S*0TG8qZPw_rF`;^+!ze8av~Sq`{SNt10wy^aUk z!k;*CGcxXm9N4ik;6)1=ab#pgV<&4mxaF!@uw=HomB{4LqbpvoDZbhWb2ni+)TPqycXtFPtqa~lIMW|L6icT} za}!j#586Id6CKZ!Vtk@9ViFNt7yu2@!*AtClt8~YLewQY5T^Ew5$5cjNj1$3Jvyce z3{t;W2g{VUwi}{3>!MaJPqGDORN-J~TbG&?15uDR?`oa-a|yTjczL7r4OYzs6ocog z3TllTshidzr_PG^#lN-Z*mdB10P4KACy**`Ab>7WX$uTlofAoEq&F)U{69>vpepU4 z-eaY!`cd5Bh7nq*vKKvn)nptAhCZC5~8_%EdX zj}XMU%g8?=h&%#;&a(O~pb$j&KOu-NVZ=ZPVqDyUCXaX2hx3#3c@|9A8^e&y`?N%?$1!d z^Wl>!Q7*kcG|V4lXbZjK+JklYmoza8bx$N;g3Khl@(}Yl< z5@4HJKey??)f|=91E@H;^ZVn?FKk|+2}5R85vOWrjREtU1_a+WzeAQ25NUV?t#0>Z zEh?Pw#3j68wbubBxSGN1`}#&=>G*a$VL@rvo&jTfz`2_TQ-+StBaE!FD7V|&U+&wA z6WBH+ZY`}ow{@wG@mzdAlef%2C2oyM8{AwYy>Zl7h0k5o;EnmrO~Nc24u8K^(<7)6 z{KLjPLN=t42uh`!102|Xy;O9@-(o)s**#5u@TgqDCa;y83r$&ia7{Fs(*6!-nk>iJ zg1F9*K5K|$mUK>=E5J&oQw+DySEHoLRgx@TpmBYK4X1`sEUBvC;t}J4WA(`CIcX3P zma{lFyp7jYbo~ zs3e}9@x~4LaJs)Ag7(%qpG$#Q?|aG=#(Kq8&~BxFq>PBi1!UlZ4xEdIgj^zh`-$&tRj zt!ta9r@KP@^GcPgM7Hbs7j1Qxi(!`0;YQCDUq`G116$>4msgl=I^Tpc8!A7N3PWOE zrXI#GI{2Su4QV+PI?3w4MnqB$6#6$H%?a=nn-`=st3T9C(4EQiwWx&x0Qg79Cuz@s5pl6 zjmOJL@OI%EbyoG>O)hCu#xz;cbCL|%z3W%wTQtA%34M$i-OP# ztE2harIM;aWDk|jkLs$FTy)FqY*iY5l(|H2(?U>SbM;t2u*gw`H-$In+P-dgx9fa* zuwXmrTC2S! z5fWA_-g=BV57r#brE%Hd5;oBe2a4LfCwMy(f?J27jw#`aZXrT&Og&5L&{saJ8VP>F z&*NsdC^sbS1*!aTqt6FvD)lqiB0}C)5;8WAEBVCEv-X37B~dl0$Y)D#0~$R&QH50H zImFp;=~Db`xW@6M`pjhBMnf4@XLIs!!41{^v13Z6hnV;ICJP86x-}c%kN)~)mJjAb zNYLG+cqC0kIG|W?C{1Jez?LR{I-vti~|Bv9| zKfSsy#hhI*MhmhjKzJ!p%4U`zk7wl)`!Pof_s|iU!hiJYHvD(5?piCvE~CP>&XAKK z7=2KWe&%~y{U!luDf&Ik(z=&k-4YU@SJ&@PuP)qQy}Gd}v9I3evd4j8T0!$+j#)=E zn{uoPT$lKzoo35pQ2PgvAe0#g`SN_uhgA2KcTbkkfet9I#nmnD(kIxmgve2S>D7&K zIRy3UlAp}lQX6iY18vsx!%PxIT27SKVkgT)RhHNE18bp zHz1b3A&d1)nKWH}+s(GFwptv5F+7-nGP>WQspKfcfllh+iPQHbEgUPS5zZ&T9u10M zTdLNJ|G74RVch^_Bw?I2=nkCXVqT~=Y=>omPmuEgmM~{t=oJtaPP`PqaP<-v9_#;! zX#*ytjysB(9JVRJubE~dv=F+uL;(}nj*A@4mz)q3q*?c^QCh})iB zfLMN-CrQ12MOt|&`^kOyko-_sO=n&0eAb0%~ITzTL*_fkLvM4(2+27LVSi zgFr{SrNv>HQ0H1qjS(lDL2R@1&{j_*|1F#?@9S?zK}G?K$SVv5k*CdEiODLPY2;q9 ztA%$FylS=3-Nd!YTF3};zQT4RyhW|iKy-L&TT2ZLjzcNZFDE|?31%ap9Mbq`v~+!+ zkB=|fY-0>m4mnp%Q76*K(6qxfb=I^G1Q6#|K63hzpzS?thchPCbL zjGCZ|F)2OA#ONmAme+p^qProd5IgZ8KT>z+2L6!&uIpIMc2p`4XW-F)@=25>b$sEu$ z@cfBpUN*a_#p@N?al7}!ibabl0;hk~Ad*JECLH75l?VR)ExM{^fWio*H{EpqNt0-! zk_d)9jf$u_{o9lL&SAaRPM>j(BJ&O?d`F8Aj5~d=vbMofrd4XZAqlp!V8!pin2oa; z#otYIic&z|(lRy>u^?0bd^^DMxiZn^kVb`b*x#%C!_lWauVU;sKgUtKjo+?BCag09#n|1`-|seI+ru!v zj$5J2CNk=Fy1h>gD7AZ^JBc4=qPrex#}4yKf}J{GwCS&6?4l{#5H~@CTuDU=F=7ry zc~^CQl?Z}MZ7-|RmoLXh@Zp3j26#V`!g z2rU)O^>o?!Zpi#}c?QPKns0s*#Ha`vVjWbuDe>96k;(^N>*%V-z@w%%fbVtxNBO?W zwh4vjE!HAg|JasatiB@*Rc*~D+_kgjpHZWGX<|IWY+R@9I^c5k2jaXpc@TFyw6E#u zmmQmrE=PDC;r4F6>^`pdZD;CCw)k_mD;R=fOSEZ zO`bh4rez$Rx|_~A5raz=L!~fOo2={4ikcV9+7ml9skf>6vvldwg53K60dr3^nVsG4 zl&BOXK&XfX7~L7Kj^S@KBsCj=Mr{L6J5Mq}A%-7N?%V?5K=ODbLNSm$?)cK<@q~~9$pc|EowL%g{nzN`jDu7gj$dwN zEcWk?BoD@C(gM7(+?K?Csm+%>p`lCMsbB!Z6sl3ZV4vZOHGoDsJSA)xB>Ye;b>FZINQ8}!BdFNk}?88+|m6_mca&l z_6Et~ho-%)HlUW7LQ#+B!%p#Y$=`LINg_!(2^%G-wFIH6j5lJqPP$`G-G#9ZmlxR))_cfg(90ie4J7I>FVYYiFW>t>JVJ*#RY zr48HuKFW}4NE>9z9QO+Xfd1CwCjfLU8oTr+4jk(WB@ob&PEQLU{{nizj5kMCiQPBl z-yfG&eM=^gxSzOrF zU!H>5v_CC*KZQ#_R?ci~HPq%`3&iSV4{rH^3VT?VEUB!PC8xB$9(Nr_BO|mC5pM0* zQj-ltxm$_HRqOa>GoR~j2z1lkFWhEi7g%NdJVJfa6a@-w(d21U@* zZTCyvp7egkzlirCXb93g*ha<+Odno5H7M!&Eh5d7CFVL>x4Ym9TFS4M<7&VBe**nq z-qS*IvVRu}sH_4+A2QH9ij}QotjK6*o)bz|X!rTDtbh!bEb&mPt_-S1ZSinXdoxSv z>1L$D+Thn_@uyC9o{M7+meqz6!rHZ0^hWh6BpSHBk^Ws-V*DLl2H}h&ScQvP71CX3 z-TA|lQP{*vk~PV8=>S=w}UJd|r6>Y2X;SQE#; zaR?6}VJ#C5^Nqw~fgpjTkEO++-G&Ziv}{lc+~kR}MGw}(5j_uMX7^D}j0(#Xyv(3VwmGJyqpfOq)gJrsTM9wwm!-b3-12Y5_L ztY}f~F_pLYvhQjY43bmZMy6?t?@eA^MdXhWj1ng`tY5eh47VU|TUOpWcsKZd+gw~c zw?dKLweyC#6o}?BzqHQIDCx zcBn#4E0M}g6M>Fi%91R8_d}jsaB<%v2a7xHBUv|R_}*;(oxDr+YR;!;%dVnL=Zi!< zL;h~G_%+IM)#tU&0YgE^pO|C*saoIkKTwmH2>Fab?!zura*83Osqf3@O8(@vyu93T zxi_~l>p;0}M{3h0aWu$mwp(bhR9U(!Kt1?Egs0MSzd9e(wSM~DKiBXud~;>3l7rU| z5SKXd@bRA!f_AA{&$@^!m&!u$(jwM}jxT?er8A=7a!LM$ZjR*A#;xE_uLv?8kDh&7*$4ghgh^@JzW;wnD#04M#bpNv)%k5+YM zGc4rn!$bkh4T{b(xfCsI2emCqFq32~n$@z9ANun0j8XOJzQ9RM$W=k(fko&*?R9bL zklo@G33RFbNQrBWKw_!p#x@F>In(DF5aeWN`Q6@<*p`L=sd=_A)OPxtMO}%RirBo= zE}6_}e*Hm#d584l7uGHFl%)O6O2_IU44N}lI~S9_8R5Fb;YN6r5gnKtwp*69w|Z9I z+M9^aNGE6LC+}m_fj-Q+PzO~XJ??V+^*S17`(FbUH|DL*n{_iJn3^u6WSrQ9Dmj*qCMX92`NYuV$)ctNwi2x<9#?c9O%I zHgTD^F+N?Xq09>_wphb%t@4EUHQiq4#_$m@76uJJE?HX0bILjZV+Ii>rcX#NHs}~r zk=nBxhHpV?8ENL4ruKr~S!?W@22;c}O=0c6hUsxy51nB80Oz>f>mPJ8KHJ1q7)41N zhvkpG0Y&?E&H@p#4Wg*;?-6lPi+^57oa_PA{g|Dby15{5hD=?TqKvQX482yofLEG=GyhkfAp1YM^ zl+E0#IA7(;3uj)EvwoX*BFF%qY3hHpLjFtEURXl)?+fHVtBd|-?Rgi0>LP%(H~*Wp z7gclsSbNV%pt?vKVD0VJmM2?WPv`h;ySSvCt2n4-@jA^Iu`c(nXv*FONOVDZt9l%| zEDWL+CfH5sib-x9VD06K;ho#&AsB)a*KiF|f8m=!@Un}W%6hKw`L zNF=GG_p~PC+#Vn0oseStOmA5KCiRaJ&rRTyC87 zH2fTt%TFQ8S2C-)Z5|Ma!DK4Q%>@VVaHbO)OD#M*Lbf>VjCI}m);AhTySC$33rknl zayVK8fOtbDJYAhfNZB|LZ-3yvj~atxLviN9)$!bxZXeIhHE)#>QDh}}zIRNsHHC_uj{DW`(ZyejwkSUM($T_%9!a z-^xQrgjJ{>5c)qb z$ooHzPqps%Kura4uZ02HIBfIJ(vtzuO+ihx2^BRcs2?RC@VQ(Z#g0(lMnF7RIib*R z2s#_pWmnC@E(z*x%C{(dTY0pYw6O5_LK4LORixM5aYC1r7%at_NKy)D%%-dnr;Y5C z&ie*8XrCH~0w)DS;8>oA8T&q|AE*k1Gpw6KyZ+IX zKwj*l^I^pvW_bX%TLlw9Znp|h6$n3Ti+MVGW?!u(yK`t)@7IS~@byl+5fRhTqxs9g z@3+6PM^5hn^9o(SgBB0);=n1zRPm@uOb|U+k`gz-gsO=W&7F+KDu>QTKgV((DA*lemDABNY&{ zQ}DO-R^9g$Vc)L?k60ME(w<#_!ZD}CO$SC^!Z3P0R-DYpe#}H4|8Q7*O}9-jH+|PF zJT1AkV+WUKPmWEJI*YWbq|@p}vc(##7LHS_rSS`A#-`$9BK0l%I0qb=a;zH+W2@E^ zc}2X?A5E~jJouP8)!$dm$JG-SA-3D7a<<7KqhbIT?}1)&@8EhP-xLqny#bTZzKa^% zr4@F;x!L>*j6c`0oaEJ;W%_)rW?q$U+YhURw=Je}a9-s;`9o-EaVtX-a`BXg2p9N| zY6@-&XQO9ZgF>GUdAZJ3vx@?kceF0x$;`v;Ph|r$XQshZ)Tg*#W0O52F?suW=NE4C zY@16$OruR{4a^Nao?xeZ;mM)uuI&rJCafdC#HF0GcHy^8!3z;=+eT?N zRK;C%rE-@P*g{^AB|rhVM2gdDWicm8c}M(X#FMbE<6|e+A{nwBBB=1m--D#FA2#2e zgL(+5$Q8<2NvU63Exv2R(t;tx5wW2;v9QF`A7FUUiN%_DozXD{M8%h7lF zA1Om}tqNq*Dgzz7ICDRM4&K)Z7)D@%+r|{`#DEv3;Hluv7x$=9gkTL#**m}s6UzQ2 zxzk!|iLbbBn+&>sk!~}CRf!v>+PebgBzNDcJq;lk@WLn?nZcX=){v0V{^r^#wLyNH zGH2oiCkY|PI+3graic0l^ED5t0A+l$7ibxrjptJY^z~&ziWhyoF~Dp-kiXlw_Q*3% zZv5bJa}xG_;8zh&U6C4cUV6QI&W>=^@y)ax9_Zc7^-;4=i%>5myi|2S39lq2RlnzB zLa-PayM^3f+`BDN*nI@>X5>ah=CHb6@eEUf@VWw-&s79F=#AUz}N`lkfEzI-s z`$No2HZr*MpE89eVodXr@!|<6aT{hw+L8>{RfQ)sZ5uz_tbz(c_d_uRI0Ncq;BwYs z#{9S~Ptc{wEhv1zyE-qN8D6Z3Ygadu)EG0Dq zQe!MLgb)Z*Bc|@*U>|Z(rX>3TaDsW-?z7<`=9>VfdY}tbZ;tN<$~wqCYKLRnU)7%6 zEbcjWvp{2;|L0wH*Qc06ZzsFU1^46MFQvX|H*FRmq3)k){(lKvS&_e4{{I8GvM<2Z z*eL7fE(BD%zky3i^#{1*<%9JjghujSHSv-6eG|Bx zgEAZ1Z|MALd0a9Kb3F#Y#D?)vJ&GJ!MY(A!{{yFZ>K%hK?{KWwiTKor1IT4+R!2zk zc~PhF!FWb>hzKYY4)YwB-e>)xSq8Hr;#%t5ni751ejt>b3y}Pg8Wsm0uCH~X>API> z*mt3TL0uAkUFOh?q@kf+pv0ISlJTO_l^)aVdc;pXB7aypNA1^#SKtlG?B)zD%-B|{ z^?tb3hs*5#Nugz%s{$X1+vusaDz><1FH;HyJ)60nXy(li37FV~Zney3AzS%4prES6PM^NF4w@IU01hH#TcdSI{*0% z{>0oHKY*j0W(rT8&O!F=ukg*9K4vCl#fWO~ax?{r@uEOStS7v1t*91eHAb%N#IZ+d znYSswCpUO-!ngC;hSAfs+;4}9@=0bF9hx!RGA5}ewiNRRdl6crMKun-1{hH%C%xS{ zh4~e^L;LfW%D!c#z3DhPA{?!D89Coo2Aq?rHZG5|0F~#Pb*y_ydhsC44_^lRirL=9 z0#e-kIDYMG1d(C?)-?0cmoCsi=4;E0w${QzN(brMbPTed4{ny0`isC=lQ2nIO8HD~DnQ$Ln$Ehwx|%vkW$@$01%NyE|a)hKGVY~rlT#=G~HD|6K~$+|H>?z|z*dTmk3pPC{~2x#e3 zV211g88mzB#U}&gZc%O2#G9T!;sYl@483MD3GlAb?Kdn?R3=V73fV2Y(EI$imd>7_ z#8(*MmvgL7Znuc)DraEL1mm}C^SzPsXIzATZ3SD`gB`nW*$xEBii`K466+h*CnZT4 zCEM#xIAFX6%@ue-NkT-jDUMKo_bkkhcVB{<4BoRRF)vFP_J=W(nl z$v5~D54KREp$!|huM24V@#@eL(`D^E4rVu9xSn4@d^8Yk=jQ#zsz?rFqji6<>F}wo z`ZWh=zEWo-a2oLB=l+?m3KbFkjBfagL#3VBd<@W2!Fg)Q3-yPElYG_|D<+QmGP*M<)=^&jU76OFAI-}=1)6mcK?=%!g6l}e3Tv11E#9lBdyr2mL|MMbc*sg;C24=^1_i~sPhvvUO)XKaQ~$bMo~mrMN#&@ zunYY0KEC*1x?!vafeBk#LzDrm#u}zTi7#lv0zMc;aw?ja4qv*uk>)T$GUQfJ0XJ#x zBw|{(bfPC|O*sT7F5(x6``_TDbltUEexE{C8dGosc(jY-c#6^U@1z0jQh%iy1H-Z7 zk4cGr?H<&f4FY;^8-{bsCW^Fb-j-Z+-ecIMHQC)5auA4_?M5kZIPxIBFu!y=j?|9 zFD`KnkW2jLug!R;^^LW!>6`sw^U)Ue35octE_M>YN~U4D)$G6!XQ{4u^BpV?Uu`U% z0+~|#);pzFf*+u;)J{(bRnN?uwPZ0%-7-4=AlD6jmBGvvY7(HZNOhL3!9XgyT>d#9 zvcf)j-({Ar->qM-C_rJM1}=#UEEkt;00rExW@v1X(B_V(@uT7eYd}W*z)-Q4g@38Wv*+xCOAs!sVa< zX@!^9JbO*?W{oI|Z5>He8r4S7uuk`MF-AYY+0ho737?Qacd7)d{a!5*_3NXLu?r+i zaZ6|5E@xGMQM@C|?wKt(J)yWz>YLW7C*V2Vtv1a5#mgJWdO1C_mqM|vJ79t(reEqE zvL7v?0|R%{J6cbz6L>#h^R2hegqz#@gxB>63^Z)3SJoZm0nBRsBWC}lOs1qPrzr9Q z**X;k5b^x!<{KwgAMhQyO(w<2sg68qFR!1@_t7Tx#5gOzW>}U)B__rS?eUaHQSpGx zdv54bFL`JA`)T__1fr~`9W09qUahz*#+nzXd}Pz~<0*0hWaK`2ad~-@sGEGgbR)W? zV#-i}D~YH%BiOj$zOp`kuN zV5#UB`3+%ZW4P?fS=fUJEI)w2LK~&Z&6>XEL~T3{ZZS0ljojvn7fsweimi&m4Rd7Y ztJ!;!4ec4vy6i2b3^P`oB^z=aO7L{NL^;Ar# zAGkAp*dbtk3Hd%COkZ{r?5>UDFFKGV1~^XvNnG}~Oc=J5LJr2c^Eb@23=hvGvBPZ( zMAG0g5+sTeCk;4>dlTv%Y-KID!Vb9h>0Iusa``zWp^Q^JCh~i;24>pr&S^Z+`370YjyIG03_G z&Tt&j>z_*1s{NDj)A6pBk*bVC!kPA`#2wEBy=TBIepA~HQ_v7jqKr9!XPVYLi4pGk zm6=IqKbuT0t|}Iz{n}%sD=*q-vg)F>5{lUySNJtqQ`FHUo5PN8a__==qX16YEAOhL zTqn{QFns(T)?Zs@e4P4~S;XY~9DAbi!~4=IaQuPq`Oi*+_|wno?ve?VVzl2dJn$)H zgtL`NV7EK;4h467r<^6Y)I604cwP%HXl(Jb%<#`kdVO=^ajUPTB)k}1k0A(o_l(9$ zwx-7B9B0ZqRP-&SpkAKY-cb#PRO^c)Ss^)ukhT3R+g(b(OwvHj)NWV*^wFEuhIAZp zPHsc}GXxfFaYTW^L#^veJxSeNSkc`gKTSPTG%r4Hh-s6%J|;;@qIra9po{^GC@ zE&vXTUwCq!H{&V<;IQO(Kpa*>LQ1pFv9B6nHb<}ed501ACc`3+r4;Y9JV7R?`Gkdr!@qqP11nc1d}cSudwvlHI_5f6L7)Qdigw828_n`88GXL)?l4rGPY%| ziVp34k{!pF-qBqHaaa%lhb4Ba44lF!@v@52*Y|w@hcyFmSjsQ|Touxm86^y> zS%TW)n+1RkX2ae=UHp*G;FDE&m(BnqQQNcqUyjugMOp>g_KBGZ;n*Fr#G3cA}<3*v`6K-d$>@&3O6=^NG=5qe)@4P%B7Fg@wUp|n9dTI zr!Z>ih_$9OayX9Ck`<1BM@USS=}`MGgfBI#3~zQZZF1@F{cE1i@Pc~I=k2^copXFt zIPC4l)g84=jh?e(`+W0tewi@cZ)mB+z6&)2ox}XR7xhT%xo<6Dqtwo!O)W|}t138c zlC@3z)~HGvUiycl`e)V9BC?+r>jhw|ew}RFM&2S)H^@Z~teuF}o`S~Zcm)OSuFw3H zR0s>dCUACOW$C@|9nXH%yum5p9W|$9qxx9PY=1p3PDh=(p17EE&{t{$2LeYVvX!OMbMvGm)!BTLe` zcgdX1PEano6C8G&aR|VYeL^jbSg`EuYQ_@g&)Pvv_~$wni2$zS->kbTUmnS3ANJPv zxZDu`MCMGnlRJZ!Y`1?L*#GiRT1EZ^x6aCcD6Id&t@#UurE>%<*p&Z`TVTQdgIjVA z*`Nde*9RvAt8Jb}UU*$hOM4!sMmn6nH@V|x;@?*F)rq7n==Wj|>VPK^yHebEd&;^T zW?dM_>1ak2A zFlG4Skb-K?R86SRn){)ZN?&@wf6O8Zf5R*El0|1L2f=nZqtOR;_rM;{7Vw#a7Hon< z>xyuG3XU3gZd}xJ?`eN(kVxDX9Rz~y>c zaq&)Fq}R{oOlI+6q!SOiz=D0+rwc=?9swJUhN*x?NC@RAO?aXYJxTH7C^)Y|U~;6E z_@fwOp!#OWH-I=}QCU61PY8Sh^<8elV& z9JYEGU|(0fXG)s5XU@>7LuIA0fDs-r$7`4JawuYk%MKKdhQL`5g!k`;jjyp=o!el% zBn@qi=b;tcCmiSBBUp@*e{8^69kartWEH&=!z6y-viK~1Ri9D;sgvLo3O}DeLwy0U zDo%r6r$OwTc6E#bck>!X(lNp1cgdx5^_A(lDXEdAgl)|Z_@g?<3_`2I6albOdjseM zzPN<8kEbkD#T`DQ^o zZQLMnZG22=^>U4O_9x1xpOf1^_as|=oa2JOTiGi^VI}d|c8=xz;m&fT zYt&XZ#4ypyfk-ks?s)m)DjojH7sv*H^7$V-9sVU{r6SM#e@EpXV)_3>B`{5C07Ynp zl)S+u^uJN*hSN#4RBTaboTBbqGj7J3H+xz+h+Kehl=DE2neg?Fh6x5m{JsZNKo!T*I$zZhDtv)iq_hE6s6U%;Pva)}UePdLhC~ z2tuXO3$NS(;+5MVbWj+&W_#Ip5nlFZCSaI~O3@5Cy()MM?9U)UsE+TyQ0WHKW)2Kf z|BeECG$h`^U9+pFb#utf!l7-as?Z%KUfOj)l>MqY-s7iw!>H}`xg)pF3V8n*2SOeH z9;OrXsv@vVkDA)LgX2Jo#M!}ggC84&8gtjxW$i%h^4;ZZR$xw3?Y5Ks8E>Iu!GL@`^;^@Ba@GmO21vz8iPbbl zpV+99t=HxhV)@?(`qO7l%cIW8+pdD(oEko}yR4Ndp8yOMC}V_`7mV9w#ID>bne3}s z^zo8{^jH*(cT6G69O;V!lpXfC?k0D7cbAOz*18Z9_|zI|p5W`Y?qg%ngUf6N6d)Sd z#lW5(6sve?JniP$`_;(?V1CkF@H{Z_Tf|TKnQYPb*`Pvk+4etvEo%t66G?IXF0jYu zhS2_U<-&KPO!5QxB>Bgo`7fC%0H3-anO-1j{nz09>qF~>nF1DG5JdkhyosL+Mwod* zro;zB6}CEV#3jB?$`F#tyMjbpfSDoyv>$pTQ4=00J9dIdG0;~uPk{OWq&I4tGaCo= zO|v4Et0E2cMf{lntTKjD)+-#lZz9%4(3xW&OMF?_gFegcHDo^xpudjtugF@1l3x%o zj+W00EFVTWQ`g)7K#kn|&T%0ALs9->V7dk##)tM=B9Bc@0HW{A>p=D@?v1B;E;ZTz zV5Vd$!r%A0el@PfLOHKE_>*5y7!%a|-#^jr2%!7|#lM*;gs%F(n5hB>+qlDz05b&x zVx}_5kpXepI-z%fG0Q7r_LPud_RPIr<7dL5TXbg+>(82y`>svTz#@Deg8#Z{~qCT;-!JE%+Df}-~Ma72Lq*n%ja78`Z1ntxC7-u47IDy;~Bqv~qL3m+AWg-eny*p1x>UOZkns#AcYT8d!( za){lkOLyXPjH$IFD+ibGOWQsbeU!HE=_eulPHlUH2}gL;bdWGuv?Gp1A^LkB_h;k#CvSGB6Dg2&b9pJ8 z6H+kg2UxZZt<^kY&_K)N9{|`L>Oi=It+-pI^@t=G2zukTOFq$c!Ezup`f0E7TfPPNrZKFN>{fPKtcJ+fhec|V1$Bu9IKvgq4NF^P>H&LKpPY^j*`#&Tt19^ zCZT68fI+0JV-kZ2FvovWP!oSsPb|ZD)>_7ht?l(5w zE(GwFf!JNB*n$&W

    8tv4=_8PEw_UK&6xurAbxPOj7O^8dbt~;1}wL>P#R07YAiT zUw#vO*Tf0{RR6=@98`E`SpLVXgbils?nx!v$h)5J1FMm5vASD-DQc2v&`dPE7J=W> zV@z1fQsq7u&MKotmp2zzK5m6oBUJl(I42_WnTh?Z>NI7$Or7E8zUXB;?45jW2-t$6u5ZedlGxvS3lh0X>~ zioopH{BKJ8mQUN#hK5VbM^M{`Y$tw)kk7R|eeFtX|JFV4oNG}>9QeT~je7~^iyQ_V zYJVajx>1>A<5Opcz*>Knj787G3q+O4?4G|9EGyd5F_h_Bj|}9Gx*_6xIMDL{pawU} zoFXifK%)}PIeC;HonSE(Eh&A!6L8lOWJLB&oW(o-o_ns*-KC-r4~_#TX2oL&viU&} zm&eY827oAXvow7$z!UlJ)6NIi#%>YOxj=E0!QfOE1Amim@PU1omwjt+E;0G+4~0Cg zobnd*J|%OEY$I9Wj_7$irJBdSDnIAK!)w#41Nxjy{r2p0OAzr;ZThrD$g|+eVY(QW zTUk*f)-u}Vc=od4b~2pYfF>v?M(_XK^YkxyViozn2dMFXr0Bf_0LA_Z0GbmBte4g2 zvR+7pkSRC5{!82O=^!W9J<1>;lW*ZkOUGyCJ_dH&eFsycdiz(VFS4v_weXWj0e z*6m?*DZlm^wTGF)@Y1fG=)Vt7Jnu;ZR@`JCf24D-1;FzJ9G>)l9i9c@pI|mnLh5Wl z%8r)Q-^xzI|5e#}p21>$QFaLbIy{HfgMh<$e{&H=CM*ozBa8E^6a>N@jcZ1x>D^Lme?tMv(rk~$XfCL_CTv*%F* zPDjA-^laL&#_Z~$RT*a+x>)9BLgixna*A@NEU_x8&>Y|jkCw zcUvNMaO2w^*B1<&q>tH}5o$);wXGU=a(3m(tWlGmW_`1$D#xq{E9a9_k+H7_Heo?RLR}GC$Tr@?%I(9O(d!&5m7#1W=RU z$p1Db|4hxlm)ieggZ}&O{J$@?1OK_yZcakWuFI-bK438pdkWJ%bI6zfW(j&Hpta5FP56n_gEO7 zGr4x;hx73YC^2N2kTS|eOTacoFy?x#!8|3;-}e`ndYg}%R@d&n1DAGLj5{onRHNs| z;TV-)m08n#(wMqyH%3gjuVSofQQoWd-vF@#iD)&d9cbqWA>lR>^RR#9R#32I#f#jE zo}&07x7PS7{ZItSt-!}XtzsR!YE2>upFOyN%kvp`t9Fs-1`oAKlN-4`4yVX+i62jqhK;%BAY@vmEpSa z6hi>S!-M3f@S?c{ z@ZM8Zap`NPY2PC?*Hu_S+V&LM?Yw^L2G2vsBA0kl|J1S1!$~j{0a|EHS69QAK?`jY z0ixvQExn*Tqny#-fZQMPSM(BKlBAi*7i zySuwfaCZ;xgy8N3x8Uxb1jfV18@uxyI<-(Z>GmqcdK8 z)gcFXTOHNS8o2t@+US6ydzv5noP+{ai4CCzHlVG`fJwzt3QxPX#gP7dstv6NwQIc- ziyuHdW?sASbXDr{uoKd%mt%jawf)_wYwqmm=m-~$x5AYoxmuj@tI)RKWt>XP{dQea zfwT@flT^4N;i#efZ}uFFD*a)vD7VXm<-y{7WJ@+S1F{2ugUf@v$IK-33oYw;4o_p@ z`3freXG;A(IayFpz+W7X7dO4(IPImG3Bz;Y*Y7SG>XH+qPjZ-|e35CTGhS>m zO1&JVqs~EOrMmxtiYkGYQv5VUVgE^KTUv*DrD_3F{&(`Olj3%@)nv6+0ZHleHk4s= z&6hrzZdb=4+Vl`no7y-|yvQzMW0w)f1Mttcgy=H!0-tDQh7Wm{dvQFK4`>laXQyO|sx-^a1KG%bOnwjiBN z-AOJrs-_+|+t#{{4mTn8zbd-8*FrZJJUFJ-%ws-Y`(?Rk6WI&VzIh3|L&09}mdylP>di&sTcc#KTqeLpuLPuIFpxUs~ob9tVFG%A7cfF!c7rZkUF#^QRB@v+4!P zjK-&a9zNXeiLn=9{ZZR-xGB^ThEI;bAht-QV9c!O!VC3npSvaI3x7G?!?71i&MR50 z8H_)@+44MuC%vu8CfB|JZ#xiRmf9sUqRNXY(kFV-D%;^kLvW{O|C2?QJKIehHrVN^ zD?6du{P|m~{p5#f8v_Qf@{)`&FPvCAWfmjZetsxY5<=BPsFkJDj;-!docY!BE<8E> z#u#-$jXg3JQi`goq+RnE$LWU$=tl{%hW5oKd~PV*B-G%MbP`{qjB7*BTAZsb@l}7a zn{g$s1n*ncM`etrCQ45pHMMrAxM~gL8Rp>e`)O;b4JDSvV!C7HM2Mik>2RJiI3Fiz zO!os)8Xfm3R-G>j+`|KVm#*sZvQ->qcCO`-VZOq%s8BfANakSX0D>Ng_(1hs&2#3lZdwH5(Yf5bPb_> zOw(=eMiQk=>kI+6Km&YvD=n8!9pC6=hge2I=8qu7(;%f>l<**`ZGI)c=gp8Yy8*YW z4_czT%bkPG!DSbCwg|I!`wq$)$HUz?cA`ft1y+72X?zr7Bq7k^M-H-MNo9~Dlh|pS zH_nU5Wj*gV&B_7`An+il&I(1fg7Ki-t*V5TM1t?k$hXJ6s9jinO?381!3h%eN-lIBk;?5t{K$E13Nsx9u$_fq( zD?tq5z~{~pgj&Qo(A0bnvk_Kl%cDNl_|jTlfwz@_>v7}|P8D}eiN29T9YAHXTUZ}U ziBN=6b2p>1{zsqyqfjM!f>NON;#m&H&D*Ehb2o~i7<`-RXp7w0KHTr)ZnZYJed>E+ z>>P)8(x#5XLBbaVH~DRh7aVwvhkSXis^*1IJIa1s!bT9RKYE}~PEMH)mi;ZmLD)!* zo2w<-;SH3aDkHpnY4Y+oLtqOSyh0sfKN}>M?ccWd8&S1evm)y%U0mQ!xz56foOEB_whE-y63slawu$qjZAfIHHIiO;T0U!3q+kt9nq{GW>eE98|w63W($y< zyypuvOcB`8DT6=eB#o`uH{Q`CmW+5{@LXPR1gE3%mB980fDa1vGcphO+xRfi2w)-4 zB6qEam_>GL@`T4eNq;xX#+=BjRlzdHC|V*_fR}@E9}*c~VdXQiqsyxlBhpN;NK)|x4sxRqXvo5071*Pe8Qo^u2|n3q0EvqnRiKR1Nymt_Rmo8{k$?} z@WGXJW?`+Tk=0q8VvOefo_6A38C#n6z4@u9*ts|gWQZlu- zaWVRP%`gI%XOr|uPb<21#dj6bRtuk5vd}&ast{B-neGRHoOjrjeN#7wT2xm-dP(Ob zJBCrRDxPU`IbCUO9_L3ySQ}EZD7okaM65z(TQ0;wL{2Vy&QnJVHXT z&@ZTO@lbjEDay)}StJ5E9>@$%Z1N!YOTI}{uuXL2+1a|kms1J;1hKWloR&VqNA=gMme9gVZ1yY2HazTfLa>=ThYzoQ)6EZ%#&Lejkt#!J5upA9EC%V*ttFD9m2 zmPHW<7oc01ILmsuPS}>#idmGnlyMU!OS{4DwqeCKm*tZkzKr%z`IAMX@-dM_Vs#-? zSs#BLrnW$wjAHcgi~WW7nXFH7W0N!b>Z*>lG}<7hkGXp?p;FLMcXc;BLZ?ND%bum8 z-AiYNT$(e5DVuBWUcXQF^YM2#GH-Ynyq_~F_SW_(R|9T)=xGSjS`<}8Ly(3ews&bETztA zpM%GNt6#r6Xj@E{-8e$6)B8lR5K;;uIx5@SN7hmy8?>3TzW(_mUIrd+241GeJ35P0 zH&>JjaP_3BE~yWcEgzITIencZzFUa4dtd%4*NL1pbU7a%!*O%CTEwic=iPrgd3t-R zYFJY*wFJH$juA*(d z=q(3H{e+AU8H&QfCDWf!8dhNuM;9K=(}+`tgU-oQuu{o-5DsHp_Lm(Kq@jpCbg%g_ z_CBip(V&vlrmO!&1%S3=rqDgWdO=5NCNfz0Z(qlG1!^`0(=FG2rP$~=GHtOW_XP3X z7Vhj=x?z;D_MKHso;q)phXjTVJ}>p!q#;k{5c)ooe;@l2_sGel@B>@UG?OC=-|SiA0%vg0MPQer0E;&Juh^UCw$6xPgN6Bu+&^KuJkL~8 zQn(O(4sS2_rFXvB!i81xFtrpSL-KAvo8Lk)Yhh#nSp1xv>3JuV(8co=7AvLIT>FnB zK=r?C{ZHcW^&X=;CR(Vj%Z@!zk(~2;QxCg)GFN%c{dH;T-CEsP3tMjA`pf;U@_*SX z>fP>#h@EYozu3wi9va$LSNmaq@&;@b)LEJyH-N3e{nb`sS14@zW~*@Z=PplqwN>!a zaGu}D6rwNmO*6Huv@eqh>^9y+AU|(WX6tgSB3OP~kHCQN)J;hH8J6$~Cft5d@scD4 zs%lq8t%bkeK*Gm|Na1E{XI20DH-p8p8pD_0pj*$L{s*wOo9>fXX zug<})bj+S=X7LPK!V$IYeW?9|J84gpur+!3OPk+`-9Drb-Hfy$|@ZZVk>d*%Lzuk6v&LM1qpnrH-!B&S&*?RfX zDR+3GJcOut1H+QL_hmQla^f!x|Fh(m_ScS*;Q#87{?k_R*C;dl52MUBapDhKd;Xyt?>e73+S;ywO~SSj=b9u~x5vth7}gF%yc67>WC3-LCKqYpfVwOQ*iJi>XCRj0lqm>0oWH!x~}B&2N3OR9a&3mFyr z=_omvirW#dW;+e;{RN{MIk@xn!#z1ZHD}LKIrH_PrsM+h4?KGye4yn zZgh1aMJ{fF2LUkrW)3y9l;#;tUdaYm-b|hRh%o@wfy3AJ9b4~C^kig_SIkPg;rkqh zvqOt{lT@2TRpqLW=Q@0F?5s)7B%?RvNKj7f`Z&c$+;G{5-U5>spSS%Q%yEmeMHLh+ zsV!^f%JVc;BXt^HBK79s1tlH6dQj_c7dY#^N5TxPx|Bl_VF;m)0dG23eB9z8=MAnL zq46b)^<)22`7Ol*Pgh_$`F^II!xZ!wUycY^w3!J#dAm!Q&e&~J=REjd$~~bzEtP@= zS?Hhw2`nr%v-o>o)(HvGK}lk;sy6N~>ltIcqv{Li)ib+2GnvAfY}E4iYO&x?H5voQG;|R$KfW9Cs$!ne3FFw99 zbfWaKl{EmOpYusbmL-C4(yYUrkS`LG)Q}q!#eV$cE#aYd_cR^n^U+&lH&2Y*Ty<{aZqMr!Qs90Zb;v|LSD^vzz~~ z$^7rHRDkR0f7VniExc+f{C8e872S7ieg+NW)4ly3+aPZq89-CfCV;7`H6~k}Xgv(y znO>&cn?4mf=s~h1={u+oS>p@2^bd~=5c2>$GG$PIJu=`i;bmD{I6%z9Dq1Z!Fpv86 z8F~9P=J68-hIA%X~Di3#5*ygS%{pL#+ zJA>6&xa{k|2{e3pd|EbPI5tsZYQVh1Cy9?C5=IC99C!7xd*F>4Z|-v?=bq8~rv~p^ zG05WO*EIQ`U%|FW=GSxcRlPnV58mO46<#Ii*Im;Ib0JkuY0B3Ld`f)Hd6c_FL>)qg zX9KZjMTx@#3vqpPR~U5(3ARB2po`$M0ql^3xm0$_Cbf!WM@;c&rN*j5{fS=J}%f^8lF*5Q3NoF3)?us_(cC506r4_M$ zY-xXMQm|EJ`&FqbtbFjW#X}#Wo{pTC07gdeymcd1Fn+$ypqyMD zHAur%cHJHIe($S;PDM9w_o26jwf-@lJV^~OqqfU09I}qDGfMPlT$qnnlsCfS+j##)?dFN2sV3|h(M4)?3nS+;t5vEzR*j&Vv(dBTLtND z%7~0y`22pfqGZd@5d7U#GvfSASG*8F%(nWoo0yfi1|b(Ux%gQ;h}u@LsPr-Ug5dQ0 zJR0u9qKqVo^AlylkJ6vqFx>A zX<0k$qTW%5zzQ#B`t&~(720ipqN4XzQE`0CB|19(_Hd=9>Wu#CdgA@JGy0#!B}M*a zsQ4d;lmlR00Z+;QaLLTY3cU*1-dr+E94=PZ1pFIsE}7S?M^f?E0;2@Yzj4V$Dz)wR z^1~3^D7BTE053;LF>gsiSw6WWpkCpN5j}*)TU@f9!6&j1UisJSv(>w=%L>4=71w|a zv)l!)(x8Arlv=KDI54F0U#$352$a+@VpKu(sH{$04qTJS?w6tqYqwv8Y?F&Sn9xgj z0nJqPbr}Kc0O@||yRn3cUS(g(nH5($UCez{0Ddu#5(G9Fb~}rL;_M;rSqdOzBL#$P zeiOeK!)uJ=CtIf{1}SlT_NA`4ikMV>I~ioMyT}3WR$%>{I{b7J1TtUGRO7k_epLfC z!SYkypKFRWS|Z<-xn$S8peG-DsC9a7VZS!}o1SB>bbp@*0UX%jXO%N$P$-n?c}XWv zl1Q1~<_cTM6?39+C<>b?Er2jq5xNr)#tLtW>y@63>Ylnpt%{p5>HgEs4CzkR<@4vc zFFJY?>T(toHbE~Cfb9~zmzDM8I?0}g3qs1Hu!QL;wZku81@zJ1NMc@}r^YU_JM3-& zantW1o$)j&#ks>V-)7{MI_;0T-TU1R)pRXy&&GQj6WcHUug58Wv~U@kmb2@YN_KUy zS>zU-k<;g+crA1lX^Di3mX_f`(FFa|9bA8`R^8z7;kH#{>Cf-vZ7){p10vB&ruc-Q z2PA70y3ycUkw-Z1(7|c5M*=oSmW3@(#y@kEJwvZ&HA@K^?7z&;QVe%p48B$j%DDbe z+_g!H!Ycv?s3ViQY6+#2qBRie&>#(Olz0R}9hv?U)(sO<8Sy+&I4&UCLlxbFM(PvV z04BrbS8XL&V#L8Of{$HUfahr)Vocl~Yr#EH5~vt>?8>Ny2H9`(>x``ZdTZe4G2DoT zw6+8XL)pJp48&oOHD}`SFs&`h+@NVZjyMz!>Bx_O6g_1!N8?q=fp>7dEmvH^eY$Eh z_GHfI+vV~yoL=N1sK-_nGa}Qt_Kt=kmTkJvyx}u+6+EJ%lCm9&XK&S@v4)&!ZeTj` z|Lt`CXHgH4|8AoAA4>+WfE$M9e{eE@Z%`o4JpTr`At`XK-}47wKUryYzwJNc@^MHi zG%q)*s{}cHz255ZcG>$QDFd!2d5h+4>~;BRqrp-olK4gm*BGE2L?H*lJa;OrZ3vPn zk5lY(YYFa|ICdz|T8(o?;I1s#aVtj&TgxvH4LJj}c+-Ck`cd;2W)G6kL3FAtgr82W z1B~2SFnOxquUQXa@54>0wHv-AZXAmeJ51|;(CpD)^URqW1C9w&!9suJu8W4oF~{y) zXqcs27vA2Lsq|AXX@ETQq}Xeo`L!H04**Df0quA8XK8Ws^VbwnMEU@-9!0g?P)#)pWsupFQ|;d4zMd=E$^bUV-nk#)rdo)m zU=$}`?i7t}7Ua4vv26rZ$7!zH_Te6AW%{&PZ^BsthJ7QRwste49rs6V1iG@d4Sf%{ z&uvZ5AAS}(nXjjduGKC_Y1!g*1ovE>&+2p-Sx>*VcTsQED-9@aPM*J<@x9dRInJ8P zmG^T1apuRp-tP1s24HyoXet&JrusCSS}5C;wB^b=GN;t_?{S#^&+H|4uS!-px38mAc!S8mRyeJ zN+j<-M6Y^&yuF%hK%#73&u}FDfX4U@f%>HKyN|FCVLGf4nRMx)n1=asUf6e4y z?Nc8Bki7ZQ_^N$!N|+bVmQZ;1CH$*>TFypf0dIS)-sc4EzDw&8Qih_b4u^0B@FkE} zmsHfO@8yBT5sA5#ixv@Aag$Wz-x9)U9#BGnar6NY_SrYY0YHLM`Ijb(UmMufLe9!O zylaeqan>3Xd3@jkL8Ta&MKaNv&KD#81Og@b?U+PRJ+k9o7jrk@RGo+^jDI^-#}^-f zQ`Nb1xw^6r8!@^b9@O3{eJYaDiscAzo1<4n8^FyN zeZ^AA+{yqg1Zwcflsz{EfSXaWkij-vl)E1ZY>w!%Fo1|N_Z^YM2Jsbj=H_l|Y&IO1m<@IB6S}r-W^+m`T0m&?~ z<-&$~wR}iIRv|3~RP*(Z*En6Ek`})ZIX@*H`f)wufzytURQKlg;@c=&#JCq`JzAvJ z9Y2^TAsic+YnZ?6mNxJtC~D5kq%Gft?ylw8EP{}7jqabA!KmjAPW2d4g%ium5va%A z3}apDV&rLaile$00RB$J;S zrPx4AcNO}-EacykZuJzJX!3{$(X-y4Y7aQW4lmz#h#Z~Nubz07JgdWwe8~>=PZ*d1 zO+$qA#{+P3)989yw)~l5R!12Y0m+n?08Y*x#v%HQ0N~vi5P$)^8$WYNkW4w8P#*^t zp9lxj*?i|)Y#{j@A9W74^;W(IZo^Wq%>+IE9Rekl+?ZWZJ-Xu=lj7I%y@Ee*8{QhF z$o?_8Gxwpv3Mk)OSbaXYy?x|+53pEb(6iO4>>>{#|vLn57jkp zbp7CIV-toaGV%Ah2bv6#8ns?k(rR#t?dO6?xZX>;Gf}p7M35q@IDq?lY!2XVYEd_f zy^#TVOn9+aGU#iHYkFIJ;6s4WvD~f_DrzC)n>;3rTZWR+tW{*_Z~{{){iwch)tjCE zz;zNJ(#Me`{B50^H<^?vpOa*N&&owF;{N=YoA6)z%JS z8&~MA^*w#Irj~~fKgpde*TbRK@|G1A*Nov#6DQ|wj>CRW70dVPw+)}f93}V6wLSe> z%NSvOI=7nsZZC}j8f~81MAm^NM$oba{=-DE?Q-r3 z(}Kco239IJb#Dnw`XHyo@z1CqPOAt^(0K6@tDlZt-}U{}`P4S3QQ!kDs|c)71ZkA; zIL%ISqZ5pyKZO&YB+*{7rcB60PlU+`$fk!kGqa%aW9j-(KY*)M{B_&mSj-xym`W@U%ConcB7B;t|uNK zU!Q10Oawo<0+U_zzdYIhTt@x3$wn~b2a9H1;Z$8DnW>{X{3iy=YG|4@hOa zPbKO!O-~M>a4MTuy_z3OzrIRkz6~O1h;YK%uAJUBUws7wxUg)SemqpQweDre#+0&x z)_D>XL&BY{s7csxzHo&d&v3=mxOV{ya^PvzJT+;8)eOvwvupeal)(Y`1j^|4uN`|! zqcEUj&j`x^krhLoz=ihS-OPnYF|doPKM_XAiki$@1{o{8t}o-4mGlxfr$x11dHp|C z6Lhqm(x*I0QoAK)i6OJ{_>-97@4{CB)x^Q@n`&Ye>7S~JDu4@nT3f>q&he#~^sj1y zw4N-zL|x&!4`GTkL%^ZM@5^)mZ(qrm>2vZ-|Lez|K4uR*y2Qr0#UKl_9 zd(vbWF-O~f>2~}n0~52#5xR>rQw2))WqFth02mfi(yB$ zHs~qE66o0c2t`ln4NUfUm;KjjV6p+JOu3|0C&Fu=RsqLc~iY`-jpgo z8}(#WdCQvZ`AxC6+qUy&@nZWP0<9iBrVd3gZAft?Gh9Gv|5}`4fGvT*lPF; zaFLd{XUe>$uXYKiv@y7g0Mav?ob@Z6?Q<**s|SqYzAdJKnerUl^#nzZ9U_h~2BmbX zt{if*Ds>1c#CCyRa@9sUaEoVmE8Yf00v-5Ba6 zsPyZ0QjcY3g@9awY*+x>%nTiRLaZ~vjL|!X;uw`;_>A~!YQ8~pQ?%Ob9Z)L-z*qG# zEOnd2=`(;mYAX889yPNH-Tv`FCVNNY2;oHH{rDJzE17J8;@?_fcGy#++Z!!oSSl`_ z^c5^wB481qxqy_x_b#&-xZzR3JnH6<$HC!hH|c8fE`5)EhdN~PtZYf+!mEnHX3r_V zcIsiS{v0VwF-o-Pu-SNy`#RV>98gX!|DS{XAATYKH@Ae!qVHFs)%wr;n1# zMr$Ou1m&DD7DG*vGS*d*ZuZHjUCuaRLBQT#t#7jOAJ{hg<8$mdU8Ja7Fu0G$v<6aU z*d(vt$N&=js%zxM*Q*o2%nzHiqQoFIfzhL`CN>o54_Nw1w)8&YTQAZc2wGCQqT56e zlu`=U+SsYD34F@7e6hI(EGdY&&&iUYYZ|(9Vih|u+{d_ z5+7H6J*fD%mguWYwxTB%v#p_rl)8^=8Ax#*o82-VhoW!tG@NrfRa|WRO2!R24v@|V z4<%8uW`3NBlA;=MuYyQ^!!U8s$Ep073tFcnW+I}o(ug8L{F`O3Dg=QHb%Ffz=#b7f zWkQ_ivX6NmiYYfI@7VYxL^GKmX)>vSb3bfFv_RayCQ*Qu2(HHJsVz z&74N`p^DX6=M+x>lmALe;3u)25&Hx5j_>!;af^4{n4;f>bl**5-odD+N6%j932e#; zGKg|s>5cbm0oA2vZ5KKTeq=x|u^VHfUUpF|OBM zsN?hnh!?6fn4*u+$_q8e{nnx}ngN5ccG>Ii$1oQ-dz0zATCpF-af!#c6%+_RN0mv_JT_ z=C1kVtja~9L+)2mVQz;8um3>$d_l@sB zHGRiCXCu8l2!bbva{$z!{o1JZoFrRgsm=&Er}+k4-|UQKb}7=|4o3gOFc1kbz5o__Y1<9L6B7+Qd~KL@sXm zkN?^d7_Q0l^p@1$0*JoP8nih*lo@2U?E(8w`sn2wj}WcP{55yr-o3B8cSB(JUNrNM z-QLNyB$6(mzv8BN+r67M{nzeY@NM`0s=qq010Ki@8TFrevHe^Bt7qwdX8}BrRS3}Z zC?f?F=v+3d{{az98c@maE|y!uzI}Rl0;(Zue#syPmLN2A*dJX+88O>Nj?mbRQaW{l z%NiKZ>yAP1DP_p;GCX%^f-hHTMKKajz_k!Wce~CZ!unz_&$l)%Y$~$Hivm^KGFe&3 z?AAE^>H&u4X=}{y&SLQag^a{{^?LxvxBRE)i^%D$o?~@pgSw&|A8Ojvt>SuY4<(R@ z6S+VsMYR*IW9=-0()Ifl7-x9r;3a=* z{UBL>B@`5B0fkEBA_U+n@sZ;%Lz4_6x7DK&SO)aFoP^|=l54dA;H}q+$WCRJQm>a} z)tja&^xIP|$s3_y2CUO+n3*msFxZ-~_BpKcx!+G^U}`+?Mft_T4Yn`8X6UqKVLAzq zec9!uc_b`{A@lfFBQG3aXv%MDSq)~+{Gr$8ExKms(D;gw;s5f+(4>WxfPC#)693z8 z2G;*5)+u6UWN9dBWc}6}Db+Z1SY$zYIce7~Ib>4GmUFfra6D>K?Wz2*%svyIdu5ld zgFwg+O(R@PY$)sy`|{+B0iyeL!QtVHVmFVM+7YZzldS9-g;w5or~G_I__K|xt1I^B zd#W%Kl&`SJYwhyb`|*vt!)cW~JoSE9;n}QNTbSO#xsIQi(95gr(rKE}mM^TX&Rf~<^td7$C z8ReJ_F#)@!wpL##0WH9}c9m?_%696kS`tr(S(9lzX>DnGd1Cc)@L=uu^wF2IEK;2M z@*~6ju7VNU;Q)3ws2zm9pQ%Bm9~0Q;Vd9AWINNfDJY|MsKI`y)dx7{vDd~hJWA;25rhn`TQnC_~Ce|2E>H0AAVeU@y{Ma2)fI|8R@P z$C3VC8xm3P&LpK5k>EwX`?tZ5RdTFg(J@bWmep6`b>l*pbPDW(=h%XszlZOg-7M@rA?LVD2aqeQo4 zbongo{Ed~)-TKN-L;2%6d&Rrefo?MVfW*}{9?$C(l*7Z_0=mr1R=?`%%S4mia-A1g z$BH2Vc-?Ba$|=SgP>)&v+pfdZ-!oc;Y6ZIvyr|Xph?Dmwym6(cymx2l?cTG;o}-rR zy)+g~dbMd^SgJ&v`1&0gpnqfdANdOzaow!Oei#h=F10*qk4aaf(i~ujl@qB9Z4Yw- zasUgP>38qfzg_%!qc$B9U4Kn_%z>l~D_^){WMZ8aaX4% z`dlBw%w~zeQ=V)%SI1a{bO+CqY-hsa5goHK(PoiZdvBYggemIyyE>^xcq0#1quT0(%I-FO++V&>p6G zU7wi`hXjyc{gc)g!URUc*TIj?ME5H{V^a@G)&451=vs~ql>~AQ{U4Q0aWP}96&CD7 z2yt->6W(9Me35q|sNs+7S&Bj}r>v@45EI_u9&xOlJtE94d~Pb95)3y!`<-8Z1&>Sf zK}emW?@s`8${5b+d>eUhkR_bu1vxFk917RS(Om?mfVHvdXG6dI7_3l1Ci zQvpn*A=mzyso!6XH71+p7me@tm=_xfig!X0P|KyiIRB`i_6*I~nq6(^-A;m)u(GBv z7x^5o;Y<=(Q-E=I%Gq_$$B=x0)#i5dGucK79Ph(Zu~%1r4m1=>>Y;|ixM7u-p8oJ9 zc8!cy>W`V;hdCCnG7<@A;;7FvJJM)sXWx_22~vlKiJcYb+;59uB!8y4qGlD6tQ<(h z)@xrJJalApfZaTYI^W`f=9b5P{h2LrSZr-Zr3kWsWT|0h6B3>aNvAD`L%ZS3tvZq4 z|6nbl=@*~P9o!p$)i?F<1FLX3YhsoASVXNi^e3~rL;s(rK182m366p=+6~uZ8(0jJ zNru%X;z0M*6un9lxaT#3ACR3x$?bIw;RWfzHfoy6IN_8Hrbk?KC_m~6*kT_X>wMwI3qx2I&3 z3mbFh0aoeEG&m`*Q*2sN(pq^0XnxI;P*3-6^5_wU9=SIU(oI}gwmi>JuZ4d^w zhRivCQB!hxfj)BbC4SHbHG%aA6))S9FBls6Gd9WniFS{wd)x=L`rihRTyPNcXqs|M zjN?TnZVR>uG_J6R@NsVd)|!_F>Q;gcPVG zL@BtYJxT7u)I&Li{yByYYZot5ZGdQ z(62zY?X7lk1kK}R9okdk5H8F!9luBJ#F&T!)K}ZY z?$1FauilG&Tc)4H?K>38ykIdYZBD+P(%<(%zDJ-*)6Ux?mq&_=-3p7UBQz(Gqogo@!L<}TU1dp5&(msF3y#(rx_eA9=*X)@aw0=E& zefDs2Fy<)bCm_7jQDh#{_dt|Txe}*re7epsZcbZ5Lae>Dd-gf`8*x~rYrJ^##wk=2 zd@AoDdo>D?Gp)>?i2joTqFB@Ruei+LVI$d8qK;#*UHZRP4hol4f|s?yv2DL3bH!RL z&GwoRldKAymO1|r_(e)nX3r9dVX;*cq0`hj>|{0GwHyC=(;&Ytr!Gz{d=KOB9Z%G&r+brP z@9La(f4{R%8{R(=HdwGpkSE?ZW~%yD{jlJEpWW%h)TTylxRKIX_oz`fbOQg$X*3*i zDP_?L^^oVqC!ra%AkbdIGau&E%=%lkS&2EM(+IjmW8t5Ee{Y7WuHT`H41~9JX>+p^ zUi`SyhpZNu!s5d)<5R0{r}D}2Ov`REholCyQpy?j;0BQCWrv9$Yws=F{kKRX8>!=^#DKJOlkpqL3j%=XqTc>nJD@3&tuiaKE^XYmB9D$-5FO z@80VWVyevja^SSWpi#Rs`)&_u{e;T@r9fHx(wyU)dQ{N0e>z#CxF;`SP~LF_lbRc2 z>#$Jmj9V!H{*2CuK^QiA=qfe*^WMqLf!B-Y7*AT=mi*%+L zlKhUAAkHkomQ)}BjTN?D;oByA6e3AT8rEN7Z3-(OtPO2=q7EAv`Pw>dzWrHrA(rxl zMEK{)a#)b+=Gs93pr<|+^3(9|Yp>LZpUrB)mtK`wkzQ~0cG-AK`_N*T?89?O_mDM<@OEiyNWea=@E7 z5lXAZ{FET6%*vOXsL}@(q*56W><5P;D&w@{lgcbB>K|QO)g$I@$|!h9@$Wq zZ3^Vo6^Gqu0y5=afo$;Q?4;x6rla(JnoO|!8CyrNK_anq4cAO&H9-)X9PXycgt@dz zi7T>scV$fLJyk7oqax$#@VxTObtXo>iF6N7nch_x4}G!Eh-3xjYd!nPPwv-bN%X4G zz9t9}+i?XTI*(^JCkJ20WUyqzxFlOcXePe1J?#k3c{v<*kZ`x3+}nhL4Vi4Ye_>>x zgq3dGKF{Zv|wmoH`lYLKA6_1&~-g#MtDJ{ok{>7jnQs-8)4B1*{-85AW| zi;R5T!(@=uKg+xM!}R>iCnNoV0ClvE#33~Ub3vmlu3lM5I6V+hRk`L;2dUs@|0a{v zbOS=m9K7N^fggEW$fisQdL~^Tiftd)9g4%4#7^ioBJ}7Bi!5v&2HIO%nqmBmW1f-% zW2i)3;)pS;yH)M1jauykW3?vCnn?tU3F=x#3jcK8Ms%FJ!C#LpfY=|id-(^YacbI! z;1uIXz(|*MX9zXn*vgMAY*srp(!1JN=Uu_PuTnNhzGyJ}WD)HNYn5ip=a@KmHJor{ zU2W}Xi)lW~Cse>*6REOY36@(oaf^BNSri+GOTg*6w+PY;bsk-Qaqb3hRtPqn8*@h@ znkvR=R(W&v#AdxDimG^lF*y~cSH=@>@O@;{P4k-5Xv`8kxCQ^apkUFmIL|Vg{76cl z6rYa@;*z z(DRdWLMYc--a5|v?ot}QfAhI0@#Qe5RSas5DF^$`NV|-zUfkjtaXKV&7wX0^mufE^ zUMJ^S`LSphL6uJW#^~zMjO6D@M5+e55=eNP0=VoF)jMVdb05vGn6)cKk7!trW$W?K z;r24yD*>>34LTeNK`Y`%-{C~A(;=3uNIEodq_~v^b5_J^1sqdovMY=GV-4$FxN7h; zUf%k10X31XJHUoh8t&iys{Uui*tZRexV3|$y_3OfKlU$wL-}82x`z%K+yU`~AGS?| z8Jjho*qkA8Xv_4dHI505;<+LUm95z?t)de4M{ENso*~p{C(D3V7xU!@1QdNtkH)#9 z9!SLF)AOgNd+2P4&WbOeTLsuzCG(NW3@K2I8&Knn8P|y-tjWB|1^{8R4f$Aq?V3`n#sM%NB#+!c} z^##1TTSN4rCUNp(vmTr%NoFC7CVEnz&z`pJ_uqa|ud69l9`XIhT~Q(szq!UbkugkR zqdqIz3u}+g{DRp)tH!Dvo( z)zqg$bMJ6>m*?g%)IQbc3Bda=G)nmT5v~h2&NrHUkY!2Uj9Wy(D^8 z1!L4x{06K*l1fmF+Wqw>whNn+>}hidhlIAGE^W`-^VvVySQb$oZQ>pbFW zyhU(}QrAy6;jv9J=jC$TLE_nd9ehe@G>C--GZ%JHH8)ktwIkrbL>}|-rML`Od|Brv z<1xs(el3XgMEH`1VJ!V!0SZ~2e}n{3IEGtV$*wWjD)i0mgFexhfm6(Z zSbfipvPwL5wU@C`M$~CBxFD*@>Vzk7bbeo*i<+VU-4C&&Fa}o| zrpZ!bP1`zRG9jb3{t+#v@J3*qp}Eg6(ak6ziWYQ%nWzLGckYI}8^ZFk6pKqIg;dym zGIjjQ{*Mtu3tq6dlIIh2c^3RJyvSt>scktji}@fY{8u`qACF{VdmIlNSNWv35R2q_ z_wA-GcGiMf4u&>)nJPf>n2^9K64NGgp7Q<;n~C?Tz9J@~55JvSL=wz^-e}RAh$IR>|a~n|GQrguK)Z_CadpYWbgdXPQ9X@O)Ai- zA1P-Oj-OG1CLYF?HdBqS9SEHvQ4mvgT7~<#hG1!&I%c}yy^0mGVD14Dc8Yh}>V6{w z_&ssdkI_c$!QN1@j*ssbKX#O>Nkz)#=j*}fQCLLNcjf(HS%kjj63O}u*iayLYKvB} zIuVspIM#-6yDDiguQdH*VNLmOs)AyU`NhC$MFiHd6?6#JB*Wr?OIU)DvMs58Ku~JS zlVap%9f2%&NElqsR}oya(uw-`UqikPt@Z}Rjl0a!n^g%lRLVPO+NC!q{;55bT45n~ zS%>_nh0NrCv>k+tbGR!)U3;hr>mV%nD8D2NEHF-7SfjFP848ZIexs4;td-{~9_HLd zpca2x1igrW#=QFkz7EoMr-y`~8Q1s4z20lCGpBw2uEeV1yh%H39ONNdX~J50 z#+qhD6E0|s)fJIPQQS12P-87>>_|J(Iqo+l=Um6Y&$4b(2SO^J`Rq_MhD9kxQASEM&FVG;iH?Ryiy?)1$CPjA%MIgoX5*{n` z#2Dh5DG{IDbsraawH|)(KqbCJIFsArsmAr+FPOjcFdiMTWXgyj-K9?+Du}(mKO#$N zQ2FMYgB~(XN~XC!5!^hifA1#8po7Uyw;Zs&?WEGy0F6-A)@&QARt%3zw`ec+4%qGU-=*3 z7H_BEvFfr7wkVSKZh2C+7!S3_oVb;+GfFa2b0bSfLPz)nkJ9gDkklnr7mQ5#t(R6t zcb5vNvUDNOJwaEH|A)P|?5Z={)@T!4gL{x5!QI`0TX47FPH+nz2n2U`C%C%>cPBU@ zSa5f^?}DmbdmpKGtF`mtez@yDj5Xdl=kxR)mU=xrWW(pQyIi^8?&#0bVE0BKyJl(u?o^_m$++-xAU zaQImX{oD|in7mDh@r{jvyg;775c))7|J` zUF_NdS)mAPR;3(Jc1ldS*s*t^$au2SRTGq{1{C>BIolIIgocofe;^jc`1-z9CT2BJ zjs6+$7>sun+C4h{}aCtDAfGw1}{Ok!|3nh3RsC@`1tz&cfvE&7F^ zh>HF&G=9|6Uk-7LHz>8bEthMEylva(y0H@4(gj!o(iCtgNmQEwBuZXTiYK17J524l zUtse@yPBlmffrxpPXA=9VL7qD8i`t@p#-jFwWJHD3&eh#*93b8i|8?!elPoF!3RI=) zRNHtbUz9jRK7UtH!cestm`NU2>Bk?}%9=^f#F<7WsQ+{Vub{ojZ2QT6bO%|d65_n^ zBU1B#wyM4@tbUgGvgYH&8za?OdjrSVRGq*GEl2&7Dq5b(zR@u8cFg85gY2yF)5WwE zQR3oODP_c|HComC? z^QFAz+X2L3s#0GO12-wp%;IpnoQTnzSI5wE#^+%o?^#q?@l!OD3Uh<#(Cu+XC~-xU zl3dKNNQ+KCPuV*RM<;?c4DBO+fcakf7Ng?gI{qStYl4vjW7rlJBE1Ec$5*j%7K5>#|_a;s26Cd#Mpbbjj=VwH! zVh-FI58ohmdzI|fkT@rov|dQ+6DXd#a<`dg@J& zqd_&JRD=|0m*SOtl+!G?($GAhHR^q*4W+U>Zdba6hxsaC))ZD@$I@Qo)=imlmr3K~ zTLP~PH?}H6di<~U;4KWfJ7{y6^kkeQZM^ET0PPyRj{;8ci!f7kADf*4xScJU5u`%5 z9IOMy*{^#tg`RHkY7d>QuaD}}`i_lk8R$2!C;hxFyfN&uqqr_N8s)JTKA#x)etLu` zp8cY{$<=FT)iUQQWG)Em2;! z1C8ewXxL?f$6HCb~Jt5!6E96&Sk(#;!c@iK2yf{-txV(O(0pg3>MSm61crX~1-a~svp^F=Ox z3?{6I21s#!2?h@W9JoeG0DuG8Mk@}$!TR!-B6!y96X3x2fNhl8rzx)f(K3}fMl)_`Pw{b6qL$B1AcmPAv91?%;eZr{IlH8`-(R=)X zF|Fk14(cX+!jOscF;&{=_5ndpmE4g#Ptz{=#N0N~B32LZ#yk;@9_{8S1yWjQM^{3E zlonHkPf9pymf&}SK5ye^nk<4opxQDeN&!7;T`7b2a!kL+njeq#SdN{5m(1~53KK(*-jU+((z`l7 z9OJ(7#HIkD4_M(9@eEFC=A8td=iQz&G9 zuFAYv&0Uy?Sam}<#GJg1cv$h#WP1`Q}_oS>HEh~?NGt+l?)aE!*o7oRY zw4Z!Gk>zi2uc?cA;!2ukD*vo2ic)bivCr`!-M!%>m3xCskhu>e)*-+Qo5K}S$4Y>j_8h_80*#=Q`|Dt^RL`%ZIF;Ur z4YdciQY2%bq*%lk4KrDwRaPV6rmqD_h%4fDkMsF9Qa3g(C|`;nu_gZmPRF%3DX9pj z?NN#5eG%;?Ka1Rq$L_NbUC?uwD;W4ZeD!~5ffJQc{xhKdR~qam;C?g$glwz7e79di zW6*ts8#J4A&n~R_o<>^qoCedLu-nyInDm42sp|Ui<4xE4i!dM!Rsu?c$%4{gI&ED{ zVqZWuse+m%+fdu$B&rRSqF}%RxA?C#*r5oJ23yW%Q+i1b6g{CqX|QbgBT`Ku4OaJ* z2KxXMJ%Kcs$-k$;LP2S;b^Wwo24Yz%aUj@`jMuI(scjS1LE7TH8)^Um8+xjYeeQl` z(b?p}1wx0x0#I)iP!XG-9VlWK(>@ikiGd=v_rHqRG!eE7D{jGq@t}TqJI0^uSHPTT|4M4D=fS1?zWh5lM zmz!k}m^58*HRxD^$OP`AHiv|VdN7wV`bOH8`q~uMp_&aIbqU&JabMnoI3|N%p?a4t zAp+WrE_{uR3eK1uR;@#3t+4vpKXM)8mCFHL?3>=}?Y+fRpVPH%2M#{JV;4KFw3O6G za1|D=nxmfC)1FO3BrVY+C&s4xDgYF$#!9I^aC*W;ovt3-QtS@Je&&TEs@jy6jPVRI zS;6Ad{H6eol1oZIE{USbawW>~xGIHQpAdz@UwcT9<&YjWgK`mG0MppZ!jk^rg_t&> z_ml@)-R|tt^|jG-oMPAz5i}8x_NpmTU_SuzV1+iQNkASfETN4o#z_&#gB6{z&ecb6 zp9GMp&`kk={b9()=+aR9`UEAA4gDfkD*}PuJ1ho%a->}gh?f7-bRJS*K?l0Pc2Mrm z<*?X_mC3y)&XB<$oT186fHS0RKP+Xs_GuRAbqeWwv4Qen{kh!5kBG~iYwtBSopr1& zq>+r5oSgxj33!6sC3ne$=orN#^m^WWOxyQ67Tvb?o7ea>EfDk_s-WwL5=p8R0boEW z{x%Nw4@n8KB4STRxBt*$fHaL}zy&5?t@-(_QzQS6CN`jHR3M?`1T>9+SgLGfeuU6a zy!jHOY3%MrdEFIS>MXkX8Qg_4QM$+B8bbxL^V_EHgF?$kO>5)>his;U92JODaTk&& z&=BBLUJN+M;8JRoY>8IKGnxJYJ0-8UC? z0PMaR2sGrU4ky9oy<%b(6$UogYj}S1a1X~f5;yqcL+p@Zy>935{ZBS^vP<~JCchs) z(e4syti`+y@mgRAE!N$MGAA^H)wgtmucW_=I%ipi3R&l594IXxy?!%G3-Z>4=0ySC znyBwIM=_OAbcWwO0iMZ7KL>H!rRf8^7Sei5;_UCLN_& z*YiH6*IF$`wo;ez$9qM)wd#uE0x>BmNQi6M!m;WJ@_fN?spvsjk?ft^(7IWD(A9yi z?MGh-gdVF9Ir;C(9N7&U0B`cJIdb$eZ#M0cSi=JYP%x%Yg7^m4XH~Urm$cs z9oVYHX!hFJJUu65(*@J9G}{dLB-AobKE^t*;?a#AmRDH+0?)WW=w#lD)QSip@{a57 z&0#Kx01!jnBlPbB;QbOwk&uvnC2Vt*h{K_9&j?>4%(AjK z`(pB);qRQApqKK8A&HHdC%QJAvEn{xK8+>jGAO2rKV-MvW_-`^YCyTy252t*9m{4wfNwx^{Wo_j|8Oo9L}dPBE)V|Hr#^%C zL4<_=I+ss`1lqchI9Wnc7!ake<=G}BJ{RQ(_pwncDiEUvVTM58$63}!f7zs<&zf>UHmRso>x`e=0A|Plgc%B@K>;vB`yk9v zkraR#nv+!ZPvs)O6mNAPb=&7y<5ZqHtK$>}!24?tlqtpe^3_Y$I7nHEY_3WN6>M(t zLz`b6_=wj6i^7ZE0sJrBPyjOoN>OY3mPuIk*F9l|N&w7|4G1$NT%P&|X2^OGe(M!g z;jO_7*ItY>5M~Iet=lZ>75Lzm;rYcHP}%GqG-_5OJ4GjmV{lhnBrE=4lB%nB)N%tV2~}hDU7H7>q+f?&xuTwOxIh0FT@G@G;Xaw z+gi0_;Ukox(_>0Zlgk4T``&1w0Ae5Zy!j)fI>anvv-ZfL*M4;CAG2BKdj6ehZ>8D9 zR_t+B-lOWUNqw^3n}X8_*{zE_kg5uKG6x-lixO32jlI(y#_Q6}Q>i~>mi7o~{6&Fb(x??fQA%awiN8H;nJ!p4A;1sW`_pnq#O`2R@4C)u$JgKAro-- z&Q7b$(Al^9XCgaN<>&MFi~64jkm_>ke%Sgve8<}j@YI^}5p)RlKvE8b?grXAs1sD!Uo_;b6Cu!}l}nqn^VIOz?>p1K)Js&6~|> zoZFXdL*wHU_J<9ZNKXSQ|BV5(I2rzSK>r~SK|w@GSwZ$`M*l;V3Q|e|=h*TpBG5Tj z!{pyoses}bn9*et+M1EZBR>dV5EmCvrQ&u_4mq^2Gts|pZvsgfN9oI{kn@15gVcG? ze!XD*WavOWAgoCm^+y5;YhL05s#KCfUO>vo634WP4^W1nK|F+h2tba({{9#w$EbLc zW5mH+k(N7wQ3)SiLT=Iyu6eoAB3t zo>r&uH$aY21*}fs-7o$;L$VqZ;bBr-Si9`9-Qp+NRnlCX2Q*-OL!3wiRH-A+s?^|T zRqAd}%llFT;M*2>_xn?harrMfMw^$~Uvi8~se~nZ>u6=Wwu~iwkQ^i2@FO>%N-aR< zoBmUd;RmQv;ZgBE5gA#a+mS#z=AQ%rjK1Y8`6=`%Q!2B22U__dFj-(meZ}@hOBgvQ zaKv&hR|rDT55MceKdVxspXC?_ai`N=b}xm!$r^ho=3e2SVBJCM>43c}LY`ma?Cc|@y(Gj1X?3 zeFd!2m!MUORQxPVP2zCS06Ni5PXZ}(K$xm|HRY5ut1Dmsi1%G(aA-0Yy5y191HRY( zN9B800v+C@>mmj>vFH<|58Qx7YPz*&ukTHn|7Y$slLe(Rq5EI8sz14y@l*K#8W=lh zR2>onDa3$L75m#!{fBKzMI|`}k*7(mQC1E}{ESH3byD})@GwNs+JYTO8P$FR z#F^socu(|_zx<4I5_O2&H5@eF9_E5)^B;q^V&o?#Hv#|KEXw8VOoJV&2tY467DzIS z7I8(h$gVrKY!%-mAzn6WQRUQthiX%rct5=heiY>bFu`g$SA5vonf2NC=$DFv6q`lrh3UNGf_A=rdD1dKx~R~r+q@{e(>lwDX$UIfRZSKGwip1ZtXj#l_g z&70@|OB6-0#K%K9-}D|<)@npEsW(dRALV$3!93*^#9Vt$Q|8T01*A$8_&?NCPq5bu zFllg=Phog5S*(*w&G$!7<#)`??wRm7q~3@bWr7yB1M3W8iz-1g5sy%OKjb(Jgt+cu zK~IrpPyk*9?^QOfh?FqCFIcL6;M1Mc=h}l_Sk&#Mm6d4acZyFWBgX)@nI>GmY7Eea z^??a(ag8*u_Khq8L8pbwIPXl)RLR{#k$T3I(~_4Hf!k@x=12*l2vueM>Si38w&_!9k$udXlY%o-d^%>ek{DhU49 zcf{ds0Kor>LGZumCs#6I`4CE068sIRxfMGgdMwJ51TaNefGhbhr+q*VuKEd6WNq|< z5Cj)Pd%_eo<}Qyzx}X+DUfVeUxL$&Hmb13vh3y(P?yAQcjv49v5Xidr*PYXnD(KGX(JCjeR8@18 zbqCc$#2mi$Wv-72uGuhEzI%3VtTNk+$;3Y}MLm4>)@6Xg93sNG*;gkeOk!)$QK-e%Ri60vv18 zx3a73onb}-vnSWC5PH`8cUBKtnPnsx>YUvRatJXP#LoY zyrlD0qPwde;w+9m8ewbiCt0h+U?4;0zr5->8vhWB`-S4IYmiECeHI_y8iN0$Z~I0} zic2PNmdL+#Xb!9JdZ#?bo0kcD{%CU?BWmDkglG>bhDGpz?y*vw9Y6_qszj0yzA48x z`qWK`ONB;HXytyg|9;1tS)E+P5^a(@+R>9L63;)*M<^CUTmk8CATGpS9*NQ zgw>LGg4uV7Ju)?vUO}#mde3)GypVDoPx}}>Lumo@=}h&v`}m(#5XD54L?uL|pWlE= zRP=4;#X;#8Y?0}pUtiwruyP4%#G>ZcguUp@ktr)0t0Wk@uq?B2MqDepyG+)$1e2Ng zU33Z^(qgmR`iYx)cT*lQEQ9>C2KBh}MM|wkiNVb^;#+us>k*D6AUQ{!hfHS_DKZ3; zD4!7O-@2M$7UB){-lqYHN(}diAT|$%<6Pr?owuLe_G&qJm?15^_zzqrvy3ru8lf&N zQW%#(Ms^~mRik=-c14b`HVk(7S%1 zhkEq}p?3`L6`ijH!|Sn0G6!hFwQxP#@fV~Ero_#|vD)CU7&8hXY!9EmxD#*Mkw|X! zb!*vbXk%j0h<@2XRTljUBn7Cdm$YS2NqVEdC}GEw+^kLT%yInq7P;c3&Sclj~i6>c&gIo%M7va0Y;+EX+l?YX5#Iys%Ln(?D{We(zT#GAHl-bP!V@Ry)6?G#$8x-)yaOXz!A8v`(g4&vsPtJ`)OYHe8$=pe}EfxVOI1~ z;3REwu3HO@)RsDOP2E5Xy=DLE^`S`#mPxJ7Xqe_`xSURVzr^je#BKMFbUha!A~5yy(ZBDJQM^29o9y?~4h@X~|E?5jvl( zW5z}dV&W)QuGX82ghd#lm|VY3VVq(+<;$DG#R`V>?7ydY=-|>P$alW@bYnTbz&m-a z-3Zsg+Dv+?y75)<3WESMackwQvru!on!7$h=XxrYF3*7f^+lN#{|V~QhpMZ^hEeaD zyy24s1xu?1$9r-$yfO0#0r!OymD$m+Jk41B=lSVdZ}MgNqFuuoApDk(%%@TzY;GQ^ zXAc9`sxM2qU3TT}k6kz((jj;luU8va(!&Be^nQltzuO46l-^o+_tTBv-l?dnH_AU) zaa=!YkfyS?L%~#kkVV9tQ(jxq>PH#OZwsXrp}I?<%Z~Z9sfD*f%Hj>-<|7>Q^e=N| zx>W9Jvl@&Fh;hhqWM3#(?87JL)gTun{QO$O8$dGU@PacUda@wFKQL`QK*`+RYo61U zot<3?$)jo_2Dm&ZoEPdo;xY-&E%(3N2re=(%y*5!sEZ-4v@>J>t$Afv<{O`ue7*2i zqi*FLw}g7<1=sE+gL3jGFlP0w`dLiEz;m*%TJSC(n%Qp{11+S59c%g{5A{5yYpfc$ zyPRv9=AVGYUc05gOMy)B4BX#c_i_BAR3Pw|sHh~UBq99t;gb8m|0fFgOC;+kXBzP) zSXuqsf8vMvO}F3I;5~cEbv7oOp=N}vt1wVZD-A&w0fmI(ASUScE!X4vII+Q^#)dn=ZK%fNF`#J_swzADaE=^bN5 z6b%Iz`kk1C=AEy%^J{x>VsN@i9u%5&7z_P4>-?x*d(uNGR8IDgqYz>{H;t*tc4@Lj z9Vvqo>m~p>!@K#;U7>s5@ay!xKEsh%rk8YQaX~VTV2R+G?&tRozptUxWE(k>qv!og z1gZ2Ygfy5Ze(O-{zr(B(h?j8Si5wFRa@D_JQZ3AxoP8O?9oHeq?@z?zt$NP@qZziL z&G3o2HLhB3!f z*Y;sSSOx)-M>^SpzjK&YUO>IGR5NxsWb{8w3V@i(2)!7Ow5XkZU`e^i?|AX_r|4U2 z&Uuda7KJ88+J{`)0-moe?TTJVSfL5{TZ9ku3X-w8b?lA;8(qNE&s^{Kf;*Z~5FtMg zoWu_#b7`PjIwAeii1eXF&a!)T=g=h8#AGJhq&GFcmwa^fSI+HO&h6fw97FT_NFVYr ze+*-Z4Zl;q=ESS`Q6z=8s3c8=SQSP$OtOc~Fi1LDuC{`sTl)`Rtz?2ZYfdh%YTm7- zcF;`NnlYolmsIYsa?^g)3y#sNr#q{xo$}R2$&(_Ror2WGMcm~q@@tBg<{usou+#{M zTn+IMM%1lYZihQ&(t<7xdz~Cus$nh1q$;AcFsIn}8#g(SAjI@r1kRReApDR1c|F?2 zMcZR5=atlWw(Fms4K|i!@n)_sVCvlcoiQeK8j09hoN2fAS4&VAZV3u=2Vz6u!b+`@ z-ZN@RB{qxVdblE-e?m_ZGD6P&cn;IOGDkXexuXrm?@_(2E$C1stNNxsU@PX)@wyB4 z4sPY9@6-l*ZI9_F5Uc88`-9WQUs6Uj%I5s#jB+pZ?@XkaU*tp;w>s<4VvgQNQD9R@V07Ony9sTYV0^=ACezTV^jN z962{#teD+*!9?S&5gZXytwD~hGGuSZ2kmIExg~j;(H#ImV>En%_)??x+mRM zz_DgO%B$lp;kW+X^vogNWvJH^hvG1S<827=kN56x|MC9W1BaNLlHAjuU8u@}-A_>v z;HpvUmgqH2IljB%MWvC)*Fu*!Mn^`cm8{~3NufFN#-e%y8(wm9Qk|%HvjNb0EK9uk za_I;1&UKJYwwaYRabNquUZ1(O@ZQ{D_9dJXPslux621dDnN8?_gMiS#o3F|{LAB=C+Uj9#bvdC>Y5Bw`rS_mN~zH(SGYsFtnF-0)FBact2Oe+yI^ruE<7Q*|AL4o)oGxFk_UA?M?Mj{=To+K)# zECm3IiCciO$B-OowH8`jQ! zVZy-Iyh~M3h{%-9`8drA!T5`#LORDNG=Wg@G*ho~fw=Y22?&b@->G|7w6&wxAjoRc z3guUSKKwxGQFte%-_22{ZcVO|EiPM!7_d&Q0-q|qytJf^IeWOigMG28741Nbd@T75 zvH!h1qJdBYDa2`m;DY{nP@+6z8*>JA9)`d{sGPo{=w> z{98#&EfNWFym)%1g>6)I^iN5az+Ss zE039@Ngh+z3%1+LJYb6OH*naKwk|%_@zf{#6>FFLdJW+u!-%3hcus#H$eiuUEnwg3XITuYs8j{@l*+YbIFe~x)RJH zb}Q$k%}K|Y-M`wyL@Cn!#?Z*a7iX(JsM7ULs*NXRiJB#a?3|KZL+hi1K15&S&IvN* z=xxAID-7N>3pekNfYDD!uaNi%ymAU}Ip@~BP*qsYBQ z+wgR^{GIph9bs6~DC@k|q!i4S+q=0}byG^rzgxI5QUEHcX(Jw!azsnacRaFaBAKf( zW|qChV#PPKX0o`YG6w5PjW~;++1`(ecpsdL;mzP%i(0M{E2R+=VIz1`IQr5ad=byW zl_B=^4teM>y{wZ| z%>Ev*X2Ms2y=PnOYSzd-oZ;IRnKQM&aMwgJm^M`?B+Tg0TED>Lc3^J<82;Iun;axv zdAtDt!w=&Fzda+iv<&GIkxE6h&K)rzq#yC#-={_#<%qI#(KiCQkVXzN9z}?9uV+PR z9f;nPK!Gs)X^KEvf7glBb^+NrJ+$W9l!0O}>Z2S0^hTJVnn7pYybF;VY_~+tdVy!dY0pa@Q)D`+QeGg~$G}^8muuW%x=v~@n#F0Kei5OzCvKnsd zv;>_~IWBS)W0CLk1x{5Vr1*vw`BMCwvdF+M?4X)2;;GVbX+)&vUp1mA`s7VI>kn|V zu-#LX3_IPz6CQyOrn22wrrYCsd%;hcV^x$q8o?lqcUY;fDir5Com)4gDV&CB)3Mm- z_d3mg{pi*g;7E6?8yluK3EcjSLD@8~uJs-|a_HS9LReTcBL8UoX&d1xb}7pbOK=|A z>yZc}jB{=>5zP-xI(XHe4wYJ&sB)oRh8w7k>sUn%T3KB=>+=-JCz8PCx1}SEjx2?w z5+cck%Z;r5GIVfb;^KaUw^Z7m>*Nk^hi}R}=?Y|AT$TYk8_aYH#iBT0uirLFSCV5I zTu!DVlD?6;nN<)|3&q&|wxNYirx{2fh*i!cRm6xaM!ws2ScHjid6cP>ty(-V zHUCZ2s2dg9?-h#n_Eo$D4Srbi_YCN>t`7kd!=~UdQKov@ z)GSk-50&6=#{UxV{a=NdOqQDN<2c z@lKayA-WlUoG;bg*PBn~R^7bkZDT(H;IVmr9_(mr$kNOL9Lb`Kp|~P0bO6u3PMlyFjHD$ z$*JxO-%U+NZ;0gbSBPK(h75%BLOyB#enO)nYA8_-e}Q}1hJDdqr+KA8tx$Y8)xd5g zO-W28a9{c4wBC>RQbnnTUn6idb!)^6 z^qhyK1djZ8n+`Y+`WRz5AK(DnNiiAFNO|AfS;Q%bbu|{*Os3q~99cT)`yc z`|6e_vz?NKfJy6e?>c$9&A*62UYLWE>pP>kuk9 zw*>-YFlPLZw|gO!n`x@bv4iFlrAmeItPS%`NTryAwv2CoYES$1y|;LORs1VBFYMx} zcKc<{_#416$c3Xc&e_nWw5}Hy%g{uzNb$GGc2P=VA8@2GyXk_M2!q|eegmP8LMoM=e{o>+*HP>$&oR0gvw}t>^m}8MJON%8*Y)<-!zth?1F7P`uyJTG%(wN|@rn8Eq)!&3eQi{wyjn z`liK818Ci%@dq>7E20;;c>LyAwpCjop(#ZCjzcmLH??nGWq$ebc+qW_LVVMfIurq7 zN2RB><<^gvnd5;aIc4ZunaO(pv5OnnXta1LMq4G}iitfK{1K0OO?qp- zOS>LslC6g1a&6DZO?qqJmeVpit;yTOt#o$#7?cu1wRfM?Ej7{(3nI3mM6%WtBK@2L zQJTPq@)H>-7+K2bfH`b-9ThrH1#E*nVJ-l+DlGh2$$N#?8 z|C!rWg6YqvuV+tl8sKS0{+&0o!^W0rElsVNFCq|_1mX2VkoN5P%Xl;?ndmaDSa~2&3lkH z$AZOnBbdHKtY4AYmqg;r0xA`OmM^q*$IRln-1CtIW*P&c$^^}zYea-1F)@LxwYyI& zD9Tw$MG8bY$(ES*rhb;cIB9?!w+Et}iee(VUza3Tt)&+ErM8OnUze#+_kf$_$q-;A zgPf6cz0nSfcRKGIP zll7{VNe6&|1DP>4ATt&&PIDFzQ}Vv=GkT8f2J0w_-BN};DI66`ZnbA)9EI`A{D@qK zHzXG}W(aJuJt)`r!+w$Lnx|WU^eS73q}vR=`}Xz?LI0Ws$V|8YJA1Xc>a+%4HmxN+ zY*bN9PgpPHJY!8Hbj&NQX>yp5w3cpBeGh(tQHRBfG@b0n*m_l2^P271iJ`5>&+v8$ z01M2|5#Z;yHr{b`^$VUuK6$94YHY-!j?@__6S7YppBKya8?Bv{8{+83VY#}FGVP_b z8Q6-fm>h3=kTj$zDgfloz00Db<;(%g;$db<^w1W}W!@_k5x$(|0P^nJ!1wpXB5#Kd z2+jp>=aQhN?kDxZs=}yEaHbDa1AYf?&l=M*Xq{wbFdO!@Nfr-`FdLSKL>L$QdJP1QT!^;IhH+$!2Xgfu^5$Q91!b^yGAA>u2 zS-nL;Ar$W7+u~-Qr9>8*JswTfgnj9z-NR-lY;L1BKMq4j%mt(Go}H0ZoBjUx*?=?B zWaEw77f&$I%EBa7GXz|J0^TqBbrN3UJK`n?4QW;y@2_in=MfxHIu(|&6 zBK>4@4ZORh1zw~NCMNwL6Pvmcf4o^=hXGm;yCspXYcFJ!M9SHnA&e|Mc_r6{;35a1w*8{B+y+4L{EA^(Gv@GV$h4U zj}noCa(ooEPkCf147VdFda@&MHt?}%Yf64{_NE-QegW-LZcU3fY#n%!b|D(B?q9c4 zwOGIGcVLq<5hiXuyeR-B#XN0t-b{m95J2>VxRz|io2}jcIeNkfL{E^~o!&yFNNbq< zD*8B@vQR~O9timhUv(@wCnAUU${_0P4pD}OY@E#@Ki%4?VMW4Fd_T?STS)1{t-5}u zhV;o&p6V!Ej z&RC;%)2u#ctRGZy{ZgNtksCncy9F@kkUiO4nS!63k-r?^ga-<;v_GMzIIEy9UUe5E zef8fZ-due7V={Y3HGrh` z(_{)gP3E_Tr^y5dCQ}TU%$0vl=17N7)|x1~rq>WtHG27b^lgL-Kx+j*_ug#RGmmr3 z-Nl8d>$|L(2v9((D0K|CRkZJ-HeFN97cXngw53PPm}WY4*cti#NMW;P`<51-o4$_K z7<%&Hmb(nEM^Ih-0y?`&bd2;dzXz$N&{O^NL#L^VaOJ{sxv%m6awjNvdaNebNJLFS=gypWMfboM=QzmsRSPHb_>8q=3X>rW=vW; z%9axOTFQW9fMn>nf&N*qX_SKi8M*~XhOVql^&~@A<|*vfNBLzB{{b@%me~Swv3Ex(ui*zJa{|lF+u+GwiK!H-B$b0Sy6R`mN~Gpp!ikz z51J>4*znEe;_k~3%Xr1j6Cy}j79YMx4!9O$hVt84k48-qVn#S?37ez{$2qUoeN5YE z`Eo*;-1g~?Ay97phb2#{N%U(16WdFUmeI{0>oF=w3~8PLD^)w6Ks(d#sG(L697VZ9 zA%^?W4rn1tRgr9%qnj5(6i$kC!TWc98#hOVWSy4;$G(B)+U14ys*zOf+U5Y(2fjJ{=WAg@MY=y5CG zH1ZpJEId+e0zAu#ZncamufkPKX3b2kP28KT?Qh;jXWLTUcFw*Y@oIRjr4?}avyz|V z5Q$!o<8>+$K(Y4n#R`ojSpM#`e1)M7HEZC)oy>DLUszAof}<>bqU@-tG%EdJYZD3T zvbt5amz|qX943)kQkEH3B*T&ePFY@?*gu`ha*cd4Xr8h#C1#Q6u>b`^KOojQPZ z6uPYs*qphqJBHZenO$Zq;%^9^rthy?*U+n9HpWa_CmyQEP2QSb;@fCwFHBKs1Cm}rk109Hr7C`7_paIIG` zZNMnDy1F6d8qlT*c5rhi1w`nU1tF&^!UQ|dBJ})fVk(F|^@T>U`jUnXjBjfO#eFob z8AtrM?ei2k+Y`z&_bROcU5Ve+d0bmd|m#J zdE4b5BAHz@YkT(&9%)=ccwh$Kpb_cK{U1&jQ>`C}Y8=-_KIqPk9A}v^U(@slc!FQV zvcC?~Nka&eyTjqwK?=Kp?zOdL;Nik1NcVX8cioROL`n%=HRfvdoTdb6(Bo*< z2TzFU57h%wPn{7;w{K|(Qf*jf?StXI_(nhKU@mhjC0cd6iUwsh%yuq7^Jn$tPu(6> zyFDU*^Qswxm|w~kH6_%X{L<*<_NNBDW%B(!^8I`XWPsHFq(LuTGWbJ-zLq`H`)?X_ zOcwYj4Z8Lyw1^c7ph0(f(x9Uru2)ysQUd*lI18^aU~^UgoAa#pd2^cYdTw!!H8nMn zbbS{!lK^ebTF0-p@*lgTOjiwx#Yfw+TIMItof+$9UN7vh0KT=-HsBnP|Wv220J3X*BRSQYJf%fLu zQI_a-+sIP)1=55DR#-_*e*koG^xzzOU381}d`zokWh8&}rwzowN&Zo2ldT7pluPLR z`!yT{P~LKT@9z1?SqwUI5_hfIA=sEiH?gMzvWFe{ex_EcveT0wqqzpR-qpC7_~R>c zK)9Q61}V@NqnPROei90umtiI{G>J_??;BVosb99` zp(QwKaSj$dY!fR13iMYNJ|G3UHnlLFiiQ#2%h2kH$RktUEJpCY`>YV z54-gF;Y4u-9wQQPNn}{t^lcTTThZB0Fr6fOAkl-*3$x4Xd9L~>phH+3+UAO*F`z{O z=itUo3iOjKDQX<~!3nl``S_yrKNMG!0((QQt1{6@Bb6UB9Qqcbz&=x7lR*u<=GdmUXC z_<}hh?Bc%vt;xO?>+_it8Fc2%>Yl&)WXGGDI|(%Jm6wXaN+A7K%*_gRH!xj98X2mN46?H(`zJD=A#wzBmb^-j-1ipCGtnm56pg zR^uc8TIYNTf5nqHN?s+xB(rAyYSy_b*)Vc(czYl7EnsVkhDA0jk@53Ul-^^35_ZTP;j@;$8`#$x0 z2}F+dk9as`^~F(?s|)3PPkZKT*gRuwk3aIYNaII_0?l6U04&zdqwvMlI>LeN2F2p^4^P1T@Z8$IkjGmMo<~K2Wvv>v*}xOx7Y#WLyNU#5 zRm^raL9b-@1y&amdpvr#0!PiHp~J^n-Vc?aOQ1ER5%3#I^B~{!hfMHMz`YXq#)hhd ziGM&;W2c}HwXp7+4U$^@%j#pa7^l0eGqSlG#my>zGAcqfT+}2CtZli93hPyp3@1>n zm#TpXNAQKrG<2?`2`#WPXEeS1ft8sCR0g3yB34LiU?fK+5KjmQ2>KYtoiw7*iJiVt zFEMHI5fv7{clc>Ck>Qk^}7S516h zEW1hrIBr6(2WrH(b>A`ZwsqW~@0ak1$c;ah29J`;qF8{L1pnKa{AZyT3Bh-N9ykAU zD2>RUE`qog{_`T}U2M)T?B|Q1j|cOhi=by5#($L~dFpggJ>f873qqIdLT&T^g~Mo$ z2c!0*90M~i|6?ct9EQoCI1E6JMEaK;3BX~n0b3Jj+y56i5(tMOB?icmo^Tkt$p)mh z?#O@OFc$XX{=i`nSae<M#@zb0MHQL$GPiu>UK-(UH=+FhSg~Eqpr-M))l^lHZgj1)b<+0v(bleVy zR^^z-=ax+R5Ua`sV}*Wu_f=LmmJ1fW@iPwNuWG_2fWvt6A^QS^!vK}-{|<+-GK0OB ziU59cOD`rGMmPji2Gs&E%qdHKiFkO=kH2L9KnOt2rMxx^z1@8(^r~eg{L74V$c+6E z_k%hq$_&mOpUalLeW4b9y_h4_#rPt$4mf1Cz1G%hJk$M8GZMAh`1VvMweBchax|kY ze#gSb9dHZuuU3N9Q!9bpiz#9J(h+-UugPi#9TgdpeCw0&m1%_};=7pe=6BR0TH}3q zYbkzhe(jJ`>PL%p?q3F5xcGXf_}{QNgqxX?-g~)o<*KX6z8=Cz(Q>^~JTeFm!_8}^ z*q$?GDpgVb{dQ53gqBqr&OY{H81@v)Z^F8KLRu%L6#~!sO6z<1_koRsMuCy8-Mc{t62!P>SJOE1|zi-3jP>T*QoS&p}t5f0*#6Y`p`hiCq_VKXC49so4aDOh{ z&pCspv-TS`FT>)D)+wq6XgX(B-p{3n0;+jOyPc%pkKT2*JTY*`L zm`#Iw!QyHZmVw8P`a-r1dPaW48TxWQF)=B*4#lIV*_2h0thj}|OHoCOAYKV2i2*{2lNB3@{=y}T zGa|vcr5^yS#?KS_hCzN>XON}pg$-zBf?zemFw}J0XvH&b^>Wc`}^Svw3^5=VaSM0_DE;)~-1ibHMF3X@aC zyhp)L*R-4~z7y?=q3Bfu$IIqsMv1T5tBKuG-r*K+6xEVHo6BHx0KYk24|2Em6?I6q z3t%o28+1Mmm%4gQhq-2nBV&+2ug8?WBsOTum)!;pW1_oyXzIid>hq!;Q0*H7L@J43 ziEP~v7oiU&xC(hfZ)O$79E>zh(cdWJO_3o&V*D1utxjI(%I|giX!5w!uwK^ z{$m}@d&_}K2JbUNrq)RM70_?fj0A5ALQ2jSrfW&bVnp1#CKRx zxA}^uT@n^gqQT__pTEaVJ6z|SxUaid4_J)DtT+$ZAzfmq?{MVvgmqsnPU`#8PhUpy zj`O^SX-c3%Z(GOg)U3bS%Rf$WUn?xPTdfruA4L#nd&$V+AKZVAg)1Mmw-`u`t+CWU zo_90%+U8wxliQMu>!4Ak7$m_r&nI_+CyR;ATwwR zj>9gVd$-K2#&F*u1vtb9rK98~}`rqX>YJ zLHeonH%5l}Jna)BV-3LQ(&CWOzE+2DP5U@HLG{T~Zt93opkl?LT8ARsiCe#84egK+ z`*MfdOJ{f&EVdi_id=U-8W?f8VYB{%u33UVNeC%F6rI5foR<<>_#;+H^}~}TFaHa= z=10iAizOoW(;IXlE@lnpj00TyDezRq=q@TUs7J3wDYq@hmNY zv=EoEM|}9Sy2Jbt07juSwd^_VVDTnVj!*WURDefpTFgig%I644nX&HnSz#)sJR>@rG05-;{Um*h|*rhF++_kFoa+)2PSAP6<<#XA?qgU94IWFvgz$b zt<^HoWAI7|@=0p2eIeD~*|+BvIir{;@@Tx*#Yuxede^c25fx+Oar{apZMTK(kxO8y z1j)g%_9t4asLvB7|CzDj7e3(YME<*9=br;)NDBSs>>dQj`0dCqr<4SCGT%HGy-(}} zHCM}OCBQswu>rVeIhfINaj_CqeYhQ9aE5Q~A$q6Da<(~;)_{M`GaMXBbE#E`k8o_l ziifoG6Dtuv;M2Mvf0fo8{S+)pDGi!+0Zs7_)lL}dPmIaWpcMS?HOEDvk8$gA;9a}K zhaKP+D8~6(pi!#TG1om&0;?5p$uP_f=vg4=;pphUfd_o=mpK(Cepj$?C5ME3My!wj zyskR^luI@Kyn%lZ(pr1QkylCl)Hv~D8+LU5)lgJPU^9mdfxqY&4@W^(&Ou$4=Xeb zxj*vGeI*2GxAuuTI7{LiU#+k`Im+$JR=!+Dy+Lec95jitZ-Ldvqgu;aXRXpr*B+oB zs!$a0L**1@t$>M7TDE@1HbfJ!vNx{R5|Q>rl~ud73_rLnEY@x=%4?17_dlx2fBmD< z0Dshtm#)SfWH|Ey$JR_rC?OGJ z;|R?iHFJ zMF?iQ$%us?+&AM+4cJ=@rltZv)RS?y!$tP2W4gSvqCT?%8Z^@cEj-D1VhJ>wofMW$ z8=Qg+k$l{&_)H3Xm#{3;A_yUfr$1^U=#SbRh9$%qP#=qsy8`#&`Ctf42?ubP`=-W4 zf>lUl^IS4>Fk37ZF{L+12lw`j%+)N}F-y)x=>gBJxP{AkRHnPH zEB2_?D*~}BZuyK~S&IgQ`n&@0%^LsRZ}v~lz<=o-j|AAPtDH}FxjCws?$5U`iscka z?RDMp7YNJY=MEN=;_RT0t>0|D3&tqFS+dzD!)PvdydGY52fo=Y4!O%luwL7O>T;~I zIw;qry`S9YTk6S`s6DuA=K#`|J{dU6Xo^U|lu}CV50LlEW5t26%7(s8S2?I%A*{fB)K`p5idGu5KoKjy{aUDATd{yfiJos_>S&IaS6q4jHwwhQA*Y z_-Y?Fg_Wnm>4AbEyL#e!I9fq-1KP-1(}Xo$Gs8fgx(*d!4A#IY>n3S{`948ca(n-5 zG)mGe%Jlg_>hY~B*1#;`hBWJ=>zNy}evgaG+755(kL69|3hP3mTsKFSf(f>WBK?&i zvzr_wpmp!1=a1SwU@e%Ex~IUK1?26j#xmpDS7D?#$Cag*KUcHx*HTgjZZZPxihv5= zeLJ)m_&vTi-q!R1N`2P;=MRTpUY}^)LG_a9W8cYof6TDkzzISN|E9i$Q~TaqLq06qGQ0IAN4$QB(kzg%prlAsGdu0R zk+(I*GClQuyFdL>^%2y)!=G0WvbDAT$ z%)EgUB3^zY%5T{*f;znF33)&14R=`_QHEn!D{@UlzJi_09bk=3fp2f0bMCTMfXQeN z>8^Rz7w&0T z#EF9{sRahcpduIG4_d9O(J_Uu)@%D7t={d>M;>-cK`$%N|j9=3i4O)x@X% zt<~Rjh&Dmt_6v(^fpg@ga`$YyI-TUV_0+?!GJVqv7Wjq%H6CHC?REy=@($k?*S7o! zzE>9! zsPmtuLgi^*Z!o}asuzW=w zV(u~*GH`|@OI6i=_fMA=N6jsk=qejNNBeKQH_&{(Fy8|D#lbSiXZ3{|QMGE4M3VlC zX64l0@X!#WJZh((o%_J}Xayi&$^}pIl^p(?d=X?rx1f~D&mM=&DnO<~@tJW6*6>?o z>iAM>mZ90#LzmFSLx+Oo3lS`f3kxJ)rzGfrd?kD;8B#fe%v{%&1>_4gQ&Ch%zh8um zu?6!mbA0yA@Ii%I*?YGU-%&}9IRn{CW!4w+CTqxWOX6NJxFGxoePCfJwxt2o&gwfM z3zmBD0$*~xogV=HqaYBI+1$TG_MEqhQ7v4|JUV@@G=CQbY@Hx(81YHIv^m2~tcFh6 zQhh!@G6z?#IO54|j<`Z!D&s85i;wU&XAMsg1jN}Kd$8ixf%UOV1q=l`vwculq3d>C zTS7c}{Z+|I6riwcz{^eaJw%72tv-9gS|`NXa9EO z^8%Nvjm@Wn2>~s>7^>ZZwYg~V%nXB17)Cr7jY*TV-0o3NK&F?2MVbr()-M|gvtMd| z>WF3gE`FMJH;$UcW5H>;Ij}*MFN!GFb-B;~=;IsPhkoOu)zN`R<06;E9eu%e&_)LX z!{f7lX#(x5>J5Z1>tMh{PsumcJhNgU5-l%B_mucmQL8Z;7<4AS zz45-cT`TCpQJrQ(Gaw0%I+u;Sz&wv7Q}cqx^&_oP_|dlmZKU$}kPICQAxoIbFC-$XAg1_~dj$dm%`Wt*!Vx{Ca(P>XHpt$7C&pk6wz}AR()^K>aj$yojkhq zaJ(hJvJ6lhgyP$@FqW=BJyeYmo0m#Z1m>3pB?A*ia4kWkiw`R0jw_@VBDl6aH^X*d z2Noq>_E3aIW$>@Bv6zi>7y&Hb7byzB7GP{3W_eCCfZoUAt02{K!J`VY@hSwzN9_U7 zSIpR4DK6an4v`;vAObjPmw<`Jh&GH;fghNKzvM$Go@<{u_t=0#TJ!cZs&kdd~E30l(TgYJoX*1 zZMiiI^y?JFVdQ0aI{-Ufv~{G$_89i$P^wAYP|>Jw>Vz^B6+h(371%AXi87sXhRPKD zBxDju>@g@Z8YXFdv@^(erGHQ|=mel5(sn@4R#DL+;mZ9|-bu@4TzfW*4J(%clD!zc zMvk~C%obur!OIkxmynV+rOvwTS+drfiOzVyCJ6$5CI)A5rs?o4eZ9K%2DfdD>f}Ko z^L`m49-*_T{&i5-HBr)ixHJbvQtN}8jV+je$FV2l=f*p5H4N_R zGW3uc3c$?kcSR&re#NVo*qiKAmq=rGY@RSf$cW*tYAEHQT=(r%#AKTy-SHxEPCdW) zV5~dkIC?EW@-~xf{FN+eN*SHKNL`G0^I*Yi|syEpIVHpUKe3*qA(N{h&d9Ply4% zcgagLLv1XtV`3fVO$&BKNljexS?}-98uK0=X-tl`dTylm3VxkDN}lIRH39Nq_K%kb zxnCqeKpq@c*+K7{X+vwRSTLbjim{jG6fa()%O8EiY;4hKcMSN9qifZdVDw^>;<1(1 z(BHgL+2<3}te5-kMftpdRR?v1QyUwzCeQn`4uj#mIr&c-q!IQE+e}lm>h}J}*$9{p zzc_$Lpyml^5C`x{9?3wXt3(Pr?C{yd9F%A1mh2YehR=wIP{>=NHfNcCfG5 zQWssoB!OUD-+m2LJRu!+BG=BfiW-^#EMs%QH^l-RK*KRa9pF40lgylocXbeZgs-)APbw4&{5WT$;J#uv)yaVZeJoy1) zl30D*4-@a)`FLoumyA8lpH|F$O()J?xC@XS z&Q{K!dl@A-HI#VXQiKJ=pzYHx**0EXTiCj76m67pG;U|;cFxQkufB72`^m$pm^|H) z_N)`3f#T(g31oClU)QUHi2m^%!=5*7gNL#Ef!)(>UPH^7i#9iTa~a&-u`*C38{;MZ z&#qP#y3dDbl-8q#T~k)H%QhBd+yg1Cc>3%c$PG&YG~jFGYNdtoDi{-Z>FBlKQjkU% z27Qm#MjD?E!dpzab4y7P8@(uhuh%0DzB22qSSy&BEWSES~~WL|}y2CvpjC12n?sAFC0P|H~2L zL^a3)S%NPq0WHt` z(ujbhY}R89(hR`3OaibJ-MWkkA%v8%Jr+%L`!V)x(z|WAg0m-xvw2(rXY8MG2fEy* z@;u?OQKE^kj?G!qA`8Q9nS*58BLslo{`(`u%GJVcpZ>5vN9v1D&`l)f<(H6CqaOqdpZke&Ok`Jp_QV~e z*@C{{>~#iFLLrxK;huYkA0+TJA?pCr&{Fd8h9)8?xEUl3oR4eOK6X1;>(x^NM@S3? zj6hpW5O$LOmoQ-oEIqg9dedy?FjJ(i$+Cy~4ayAYWkJ;8SKO_UW2RV!x0?k1Jnrqt z;v76eVdU4aqMhcP!I>vBZ?Hx<${0zdF*>OcmbB?j4Pw6ulD~ua_M8!QL%W*T;>d`Td(JqQ)9hGGe zvsV~rB5P;~OmNmF8#t!=$vJ(+ZY0g+nRIIL(-6C06rEBVU{~=JMm<3p@%Y243 zscF2`Q71Z3r(v_ehLw{8bs>}~*C766lB(c(G}8070#6MzseNwQPtSSZ~pPpAo0ie@Sk57G_m2raONMSC826%kA8n$G_>>pC&xgf!Je!q-y6(n zV!HU*?aTyDPTLm#ZGuf*#1z)@$EBmoZ2%+u+xVbPs|~F1REE*5s+C5J>QDen0x2D^ zAZCJylGAA5P%)D67hIq~9SW#8yy(Mp{ZLLryrKOqKCqJ*SQ4O3AzlvuGVk|8u$Wbz zYzR`A`e0VQ)HWIBTFbY%U;|@_nzX1vl?AP_JhWwKcGeRI(pd8;(^w;(=}ui{`a>GB zo}|GC8)&rYr$0^ymITP^;a&lmMwK`>uq41xSIZpUVn73A8e~AGp*am4cO;H`vAnNc z!>yHYfZeik#h5JX$%g zKzK4o`|1F5REm;XoacTsM1oAsLgM>6)w&e?E<-p1A?a5Of9||OVu=i?wL-ugUAIF^ zkpj%ohXvr6D^@7{{Gs1BX0`50+7~XINrb*zwG1;o)7>NB(kEyQg=k4W8|LWO>ta;v z2o88z_yRABQ0r15U7vK&%fbTDmuWH(Ngn=%$`H%;J=z?ti#8im*j=o;G#qzLF%5`PFf(4cbci@Fd{4 zJ3@ygTb#~c=(i%J+fizCl#d=zNvdCq~SU^B-`f9|A#%;{4G~OG| z%X>M?<3VM;<#DsFE>EY<4c2T~;6t!kB;6F#Ecb|)jF8;komoQFX@*AEh1ml4^=`45 zNRf7A{V;9`x<_0yzAz!x3nxVfzSu>|H${>*D4LUAd<@)=5=KAb0yYcGaUBxGtTWh0 zUvo5J^a&~UewaVRQk%7kVeQHrUo%*{&Gx!j%kLQW&epT@J*1fEan69d5Wzxzni^ce zSv5?brUoECX?2>?2nfQOhH?8fH4x$}8Sk&uAOAKr?6H#5K)$mq+NTue`Jp`hWvi65 z?k=eF;T;-2IjKaFH#+z2F%qk3m0?@;l9%ZR67sD^qIe6m$m9j%(eulpwW!TUeI^e9 zjzN9x%5tBlD>6+ulJ@%lBW+OmTh7D3wc-EQ+VJY%+VH>B2DyI;ZJIJx5&y`t;97=VFxIrk=ruy*#tkUm8X2^h0Q=35Kz zrpvWaGZasx3Q)#sYtS0}LKfqrG$WZhM^CK;h3Xq|PJB7;@Pfx6(QwChp3q6|{X4d1&)XKd}vM=e9mTP6)R?WAz6=! zzKPU|C+^``Wo+{o5*Imn*Z#RD#p0`f32hi(fC&7*(uRM}4gZ|lfcWu zL`ERir+MD$n7+zoynbG90TcnU**$9VB%$2i16CxcCtFfrp?mhB#f&#)kdlu?&(uqW z8mKLLq{+{zNYY;BIzjW4e5b7E$NmM~-w~)S(#6}!mufbkMTL-~1Ksg8{>5*A2dqd@ zz=|Xo$aCY!_Kd=cmM6kKc6+iS&6tCWa3it`FGon+Q%C0@A`11Fr_9`!o~+2W_1{{? z)_zMfTS<)_Kxw8^QLG;&Z0KUP;yA{-8S_)iSOkO|4GXActX=!vs_ZR5w~OQ-RZG3&l*9-y;f~!M zH)wdUOU^kBfAS;!d98o>k*a;m(&q@$SU)FejHkOlETKFN5A>dYH9Yi5)yhVtLF#5~ z3)B;LIX&zoS0QI`_CJ{pHz3o2$G?IxY+TY${a)-3KavRTcR!M%-RU9vTXGTgK>x7Z zrdGFi8T+V|Koer0kX>)=`~&l3&#SoFC({A{Cc6$9WICi~gQ5!IUr~j~A5jJCUq=-U znh}W?oc}SZ82vq}*!w-IpcF3q6;+TvMHMz^Pf>+8-tVSEj{Wp+QN>cilj)EFm=2f! z(R65kTCfJ+v^r`5Ob7G7Ye@ddO(*d`HXV)}W>3bL(2dW6Vv3SKVhW(?2#6`p!P%yh@^55`__NvL!EC0VyE9~Kx9<|_zK5A9 z0at4Cm(ip`L&K|!paY+%}@MR>0`_)SywnIh-kJ^ z9uU7(nzp79r4VamO%ymMR1f4+s4$dVXaFkBGKGHeTN~EI8n->-qgPHJR_@XGqqfdY z-r>q&A2SB`b?vk31fj5SFLbzGz&*g4Hh2lfM#8TsSLmWVZCIC{YZDU!8`fd*eTv`e zFvfwd0ABHs2`ndZS)nNIgdSO7!}{AA8FK=#VeJW&_e%9;i?~1T0gIaAcL`qtx|4Gf zS98bUqM}>*I$L&@7~eOf2DO7VQK*(TKmZ8^`y#Tw0xe_U^Zd^xMNZdKp6;!mRLmeF zs`%fzDG?*;^^n7Bl*zHuBr75(_2saVA*GldPcAF@i z+QhmDFIx?_Fh-)>;V7gdqCWQXXW@plb@8oSrJK4lV8elXH{fxCD3b?su9@qxBG6r4 zFUP4$r`Ig)#U&FISLvmXv`qY#4U&W4J;l*#wu*EzKFEgbL-inPmKJPNDUvl{Dihxq zNoP=3Kkt6$KCIOBV1RrZfjxO^U(maKAGQ=g2{#}+hPO!*K2Ks*5M%8}9UGdP`Eq9A zzN~hR$XpzzB)FreK_YFxR|+Ecr(o+Q_yR#`nnwVy0W zB=_56`r6)4#%L4@K-?v(0F+NM}P3I#>0v=x=tn2-)^J&fnINNYFa%|uQxsU>7?Pq^Wc?* z7NDM#Y2-;9!ZTuadcZytfW+a11tboB2sc{Wb!9+1=|q9lZ|$TW)C!t1?-_>Qd&rjB z+#I7u79hIz2MwQrE!>oPID&y06-j@)Mh5mAv_N|f!10AAng%Cm&mmj}*mI!SVb4*D z>;nI`g(q71qR3Sa7b;`&;PrCF%R>SDtuRFlRn=|~b51hv9e_%@b!E<=FN7djH1blw z1=SrUjw(!*5ghwH9W&xq0{8zVLd_1dXBEJ4RDsv0x)3nRm`PlqOvBe635YNW1ZVA_ z7EZud#jqD6u}^Y|6!^RQTY^!fuUIpOdTWe%b-#4Ipg^ffbHx?-vF(VkHe-6lm$`5b ztU1sG$OoSAJy+Zz?>4Gj0zY~GRqIG{20Tzl8aR%sU8fc4v&CS8@Z@G9e_9A>!qUv75T@paB|^hWJU}QK0;DT#c{f#pSta^li}(_tyuH7-q!&K z7+iecK?fL4sRC7yEl-VT*UWhO2ToM#fHvS3r33)lkR!GIDGD5X0(0% zwC637*5?eRMj9<2hyrcoGmhH>yBti1>a7{(>lBW@(bh6VrD5pCtqIhVN&I{;4-G}W z%P=M^URu|E5pMzKU^Sc|9`nNdIL8Na-SQ{IEK(Olxd_R{><>L++TBg>nOgy5^h{$` ze33FWvxF<-87bQPczd!uGCt|i8xA%6cGA%(WF-`TD>L7Ewuq=8LE85w15h_EqZ(6} z5I(rY$FQ=$`cPlGYwwrW#{gK6v<#nowA$LtmsG<$98cJu50-m+OMZe!CnqtiXt#0> zxx!y6?7I6I&1Bt>wXZZ>^40Yf8i|k$%ZyidM#Gmp;Fg3v5Vf&rf(tI{sT@wjA6*pX zb1`dtUd`$~*v)rrKhpN#H#+^CcRTca+Kr6ei36(y^nm9ds|SBE8UC#Y{}g&qAMkHI z_+RS5?7xB@(5yrR{Lgy8`==o4k|zHdq3)!-BtOUa+M!UW*B|E?|vj9_+LLJc< zd5!zV#@b%CmE75cCm(awXK6-O972n5mGg41<){sznb6UYBs_9;=le6y-OJnH^Bcr7 z%+5vwCW089)G+D*OU4p$7r zQTxyxoCV4D_G1KfkdT6E!q5vd{ZiI%^=;gZNR(rmtbAn4vg5x9>P72e&3fb!RLb~(vYRaV7U}Du8v~|J>jhyi@W`9tO&7OyL5XXbQRPHAGI4API@yP73#ut2BpwkDwAH1Wg8?yW)O{cfA$KcK2qdn$_c zhjv$+CKvRQ5nt*A+3-KSy7;lY-7oog^_Avf{gaO)CnwO-=gJD8^zI-*EcH)YXjP*h ziy70SRyMuey(ar`haz5VdUvW_i=|fHL-K4bc{b+Wnlth*IcqSy#`%J!lGI&jodXpR zWT-%f$AC%gQD<3I)A1s3uDg>ZQS7t_hAn_5d0!L6fVDz=G;ePte8De--bEnYK4 zef6tP)lmEJ2Sm@jaFVjVS)v^%<$oaOxx9xUGO5iZ+l87XC)d>CQk_4@3P+irvG@Sr z+Sp#X2s4chrA!B-`IWiDN5V4sNC!!o8ZX%{nvwo+r95* zdmiOPt*%*fNRK9N5kQkT;$>^;GvLqL545fPZ6y1jeWw3a^!M*S??1zzcTwK(*%2a= z4}`sJX|n;0bw0V3AHjooUPq$vhtvAZ$qk~jorzAx8~~no^Jzmfl<|t%3Ht#hDF&t3 zzp|lDcIj&$)wq%V6;Mt5YOAZpp&fh6e`RMGR6j0WM44A}CeRT&N`|}`;HlS)Bnh4L zwlPiK#^+#D$3!mLKJi%AJ7ZIxuH$gR1DeCJEuu%=gWx;n42)=xIYo}Dr+qOR_s6$l z6jXszXl+j1i`8UOSA}6?pKW>2a*=aq!%`{RS>w`NWePu?a(X+sO9-}e{!qNmuz0U! zoGg@CJJ?DJ%`z)>dJ2DU9gE)@PJ=tiur9GOr%ZWgvvNE?Q&XOX;6gvna|&M`zD6N7 zwSE;%-=_$aI=sn+@G(t++2wG01+-|E4?#3U~4|9s#duLpk>@%=F$ zbix7Du|xx)9HL^4xRcwo<`>22FHRkRpeMJV`&&-klZ}6Z@VA`0OQr1UFXb5A|V)EkutCyX^enjPY)z~qp?M>C5yR0!iQmI|CI2_fXh)hfD*pw za;9loT&LGZ?R+@Yiy`f3$yFGbc+?Es8QWK!)1++~vj3eP2>tE(z%`>8;W4=X8_ame z)ZA=g<*E^eMfEGs{+08ovz3{qrSP+kV@F$iXiCbwvAB_$YyD+Wb2OMrVg6SOL1g~@ zO!EUp4K^)YNhxD_>Exbq`bF2I(w{tj^7!L(>x-|IwIXkX?L&~PvBnM4@N=uc5lmK* zpvQMw!Yy$V*l41Wdn$LE>opRZ9%`MQIqc3t%ECJCH`!w(PpalJ)!Pa$me`azZumx+Ez%6jH+b%BG z(*CYDalLr)GBJ7k%aZ1%?~UwYw@^tU;}o>6IYwU$G|`O&VB!m8FEH{BbCbQP9N5RL z&b2P|xp;`~3NXbT=ov1>)FSuRtOsJff){;Ml0&hz50Mi+Mfcf890Un|=RDKGEk zFnqSAgYQEI>*UY-FIg}&yidkGETmb;B9=#)6&arOSCcKG5=i=TQ&@P%8zg{k2F|`d z+nm%u{8UX5`L%5+5rVGZ!_iF8kLs=kNI*x~|Qo{D=p zHV`|>@_Ah?DEG%WueFc>Z$PrU)YjIH@XIcx>ESakbi^}i(Lm=7iZieMB?@#btkA69 zuK5TR)na`Q)P1C2eB9nl}&P&vr z<8j)3k$JOWJOAt_5cO;PP;4FnUJP@<>5)0#r5uiEK9i<hfM~-Ml*1@jPU6DL*(pjliUb<=%Fdlmwc2(m_nr=%JwdL(k8Ytirs3*v1}w! zE0(*&rHBXbE9h_;>FIF!Viq`DPAKcg{OLnS!P{S~nJWHCf!R)^7FE2le&h9pqIbftxj8^lf2vIII&)5d4DWyt%_P19cbh8frG?L5@B;j=vjbiz*e%j(`5=eNTkOX9)fb*D?c0onp#_d zrdE&Nn_46PYg6lF)>Bh!9kin5ucp>ASst`TtB{tV$yrZ~->;71h|Ax|+7ihX)@(Qm zeogxblakAned6(wRkd{yVklJo>(p2F4RR_Z-jUZHYFvv2SZd$$pMri+QS0Qdpnn1s z^fTn}=m|IOcLoD}^cQ^JlWd(hd^9?ePTnwOmUr%;J(1KnR%p_P%$$HQPyGsK(E0`- zsSyOoH#xICS6m_MZXC4;5p73JH9_eNcdRpe?&8&OGv6vn0rlN+xr zu*-bXmm6W;1V^r!9g-e<3~R#SJoT@pEus!% zhvQ0dC?YBB;S|R7mOFtG{&8~3$`M%#w-L8u4DW4E@8u;-H|~{SeSR03HYeYo)(F>8 z^TH5-5)89z9=?S?RXH+MmWi+Iz*7_Ynf4>xe@*LD$FepskxXi}b(;bF#Qg#6I%vap zl^@l^%KFuZf-*DyGqHQ37*O+RTwzLoLd3%OegJBPA#SYYYUay?1>>?>d@RFXvHq0M z+r5_8_s`GA@do>5efEPfxO(+|tnqU^=iuJROZmx6JH7=AXhW`Nj%kbl4SV{W)tmh%G%L5ch3l@{WG)e$15dXVc z@F(2^Nx5HDa*^s*$^fJIArn~oIrkrfhWVb*^9t#l=O2`%C-?6WG=WyBpln zP+i7I+X{PJ7C;S*t;uy@qecx7L3=+Fxu>!)){6LAU`Jhiu<0Fg*A_)yh>LxB-(MO> z6DI`D6T6{8Q;-OKfr(0idg)unDh(O;!tmw(4+)z4fW^Ls(NH{X@rwvGBS(%BZSWdQ zTbF^415wQj-EUBtQMgsyXJz5F$67<=Zv72?lHRMASsQ^MCy(|y)O#nSpCWAS*ePn^ zwBL_@Da6~!P({8JMxb4B443HLTLn35Sx-=k23}|sZ?Bh=vuy8CC=qcd>dVJ^4~5!nh=gj zI+|?VQX^YQk_Z}Ak*P&r6N~eoU2$I_@ zs9q91iP0zGrn5c1U0DnkX-GhJxkPrp6!`M+Fw*fb65Q3^ajF9d#nn%`29`It{1?l6 zPLFqEa^FSYOeo^@yi3fK84G6Y$rws{nLcvgYklM(q{~my4JMD1Fw)fn6VA+TyF$E_ z7(xnO=5ToRo~S$#-LtSeUGuwG38bVl0xCMhPYypcm-XA=Ok9`NK=0I<*k@aD3euyT zp*696B_iljI-;4RQ9}6JDB8BvMjORJH2KUub+_3Bo$s}tS*0^Iiwlmr#OlJf_uk)B zJUU6nJrX@^?r_bqnQC{4uRlti$t6Te=I^*y34TMd#=Sw?Q#;#hU>6Ar()p-QfV_F*^rU zKYOYB6LiR+uf}t>pO_iVNPAxsBjhKIzuHNe0%L^exnDK%n`fVj--rC{^*QpahIb$& zN%hUTjSLTxCz^`#S_6IYe30ec7%5e~vw3akLlYX)R}8ZEKh>5AYN@@-v1&=xyt37Z znS8$#Xue8qdGTT@Z^S9kfM?8QM6EcsDc#l2Jy z-Viz8=`+vU));Xa@}9sSlSWo!bl)u2bRPoXJ=mc))T&iAS8 zNu;^M*P(FqXsF(y(n$+b-fG~gC#X6X_$=*oZN!dNBOMt8KeRd&ZD9q7)XpL2+oCsb zGSJ~Q2)G$RB%!|#i2l@2@$3~<>`5+X`lDczirOcZFVslp4s@sknz3s!@`Bdy9Q58- zgjCz5W3(Dtepgl0b7;fbX}&A`Nopzr=PhQ(GFjGGo{LH8;jf?7gih`wyIB`+9_#kQ zR{0#2&qcF&=~-#wHFjup7$ompK94EBxc|uHyu4=Yuwj{b^H6+5#;2`LSdOxS*Zw9i zaPU6On`Vq!(_wEGSJj%oOMkrp;|FAN0yV{BJ{e1P55N_?nM$age-FT}e@jl-rf1jS%3J!Mh@sami7AvF{dfD4=_r|I; zxyvdg2G2)djuk%$-cP!PL?d+w|9nV<$ZhTpi_>k~S;qV@xO=v&Xi|CaiJzCdY+w8g zz<*ky{Jpq}_0I*ve^Bu2R24x_Pw&f0PMmH~St+YDBd6x`Av*=b6uxQev_s?UlA0fK zB&xBoRv7n3JW5J((0H~>aj6;no`P?wAr`A&o_h*5%m9y1p=Vs% zX!hRE3JBt{;Ka11zafHMf+N5v`3}3qNLE00$~9YYmUI|`tt&(1PDLs67Df1}rESH0 z(FK}>wL!aM2hKcCj2t{;r;m|@tAHbw4meV2KlPp*DJ3Zp)k>5nM=EvN#1m%rnLN@c zsN87~D0iBLnG3xU)A? zfE+1ODAiw%R0Rl;1JBy@gvg-)ql{|;A#$9|5iQ8`0B~?6oDb`8RHcy3b8^)JY8@IzT&P*EU`j z8T2eJ1lJ*jWeuup!yIFf$*Ziq(>6VRdw$loMfGshL2smf1pKJ+=w_LD9+gm}?w&AS1^8Fw zo(GPf-%7?E7m5_QtsonnQiMdQuX9&R&ozby8^gO0_M*rgeWhIoHpe7Nq1>GjSzI08 z9R+km1jW|s<`Ky<=W&e41(hINE4sp5IDVPBQFnhQdAQyB?no4dd9eD!h|k0$Hkc2J zd6{;arhjfDpf+8s@cp!WE>6A|)*Z4m3?#_!%W*yODO!axwhId)l9#S#6f5!edq ztPDelII*DBrFiLmQv$FoHs{|yfmX{p1X>nr_&7Z`O27h$*O2^H8rw%9-%zt9Fha# zd7WQ`^I;oTlC__sHGV%;VeCVl>}0r?#gtnX(xZ9K))29ZYrI~oy)O=4!)DizIJxQ1 zs8cxwc9suO5XVUWR@RjuvL|k*Q5rzy{d!iqyksrOwDH~e8eYRyB|C!`51nY1&jRd^ z*MXju5QWSmYoKT4X5jt0&Oq$=5%dQa8DR&`K(pC^qb_sS1K0Q>GiRq;M*pIf`+HmF z@E+yH*5HwYb&^!E2J~6oPTNy(f!sbZ7@++$+&0d#2mt+>0-#?X<*)K&Sfymf_Umt6 za+btNcAy1_mMci3Jv}Sc0h8(1vvP@a)5jbvUM>jf^fn2CwAb=%>%|zcP^i{%oH*(H zWu^p&3-($IzvD}i=Hwi@k(WI$;PfZS`SevI>#@82x#?YvX`zGlqdg>gE1IHPTDz=iO>;NZcSf$aMs$2_xT;^HYgAD?8W34#}Iw$V0PPJLylGIszfMU`%*^;b>d-E=H0n%3JcFfjQ zEsT0|9O8?zc+X^j-P=&21M-CG<;=4z@h&z!OntHX*>i$YV|eDepOv)#kF|FWuDy-6 zHDf0`wr$(CZQI(hZJRrGvSZt}ZQH*2zEgercHg?E>)h(UvMRM|t*TY^&fk2;oMSvh zj`NHbGV+Jce@w#4Y=pYK_Y$`;Nt&7`X)>%*ikZPO&a$a6+9Rrh5K@p$#Rd0MEWmwc zl3jukO>Zb3o&GxX6Q5zq>p^*(f$pD#s9>!-B&VF!?uuI|)4N+>uWS z+>hfa7Uv(w(_-lA`!z9aX(N<92jrN@%9eaLx)Mc!cZg4yQ0h>xvBNv=)1#HZ~L>lYzZ=agSz)$ zCjovs)99PlC0j5;%Iw0ls|P7~y?FHs915j^f0+`LR&F72WvIVJgao47l7?D;(wEL0 zpfn`UnGChL7G7k_@LooUfkQyeH@tGE{e*^NSbiV==blt zO+%Mt^}h7~o1%vF4@C{SZcKjP>)9WJvB&_pIMPQ;m7=M0RZI&D%l!0;2D_NF zZo(uNR4FF+#UJoXi_uA62#G4~EHmgC3))FcE33;6qv9n(kkE?jzuBssarPnO2fY5V)OJ*LIZTx8;NeAqPf&~w_=e#6NGH|Eu}ZIR3xQ2CLId2FflRd-Z! z`X*8}J=;4cb%W^juRQ6}8<)rT(@&E8mjDTY|K9D<*4V_&#Q6WcTWpdzYqv%ZKeT+&Pkf+LMkVYPHBTM!TIlE*aq&y(YN^^13 zTySnF?C+l7?a+DA84IcGdMkTUE){`Zmmi6848IiuxNHQ$e!R8;pV(d{sZ~FLXrZrq zQ>H5RT3S~Vsj)8VA&OIyvuIdS{|Ub1wX%vvOhA6Qaa!A4@05DvSrds{bpMn(=ZX9! z?_A>O$C~I>6;xcN#-&ekxMwY5;iMWk*TWdCTwgw_V`UIL(Wb8%HbsUoWLaB&!Q~j5 z#Qa(7x55CKO&>yj)w4_=vsdlp9+UFxzJ!E3^gqcj=+kD2<`|P^&TXOgPe9xGtA)_w zD<^~-DQ)Tg0TEynq@F$ud+qRLYoUxJj`2{k^P@ksBf;XI;Uz36$(dl<(J5v`8hfrb za$g$`1D@EufgIya*mLesR2be)4f~N#2x8;Tat>M+*AY@-;~$wg)fF6f2B{aNwK6bz z2L$Kgl;V3PJjX!|IIQAePh3I7frxhMm=(jei@q1JhbKN3&8z0vXWRMeGl`@qe9I^X z4#fBF)sWu9V}ozYl@5x2-S0ZKmVjP;XAX27SYQ9cWLfGgb~e>j7J;BlcwE%^ce?C= z@QreXT{3H(4U@qoxxY^Do1u`|b^$joa>bgnf(mYtoF)y|c!527(^jZ2GEf+rC0sm2 z&clPzh>&SQixxPH_`7`9|Ki2W$VTUMetI~-ADY1bZ;QLKB4YnGaQ~3!|Cz!6Ctl1V z<)0b6?p|e|X35`;{~0g#GlSnE`oW8>$>LdycX)a{Z*dI{BVhMOSG$TH1p~Wrq)QJy z+*4IT1!+uzeinJ`H*Mf=oQj%kNK}%B!`UfD9&4$F`AUdCFg3)IH% z80>VyV%pQHFp(0^|55~oJ-uOSFKF&ATrEE4mX51 z_kE}YP+GGa503748+iu}PM#|Dp~y4N8eEN#z=~!V+tV+`9G&0wtX2^aVF`&>2H0NC zrHs%_l41&ZiG&KqZbTinHzW~W-0!U0^xXNOGkQ$~o1xz*S0Ny-KU8b4{#g-n-w00f zxjL&7lVcN!b_4NT&5DWj6-g?bNfBYFY}iW#==GXtSGl#*`laK+CA+j~1l3Y6^-(-# zEZP~nzqPgpmuj9My9iI&+VIi*eyW3^g-E4wKa#}YRE=CnN&r#>Q1&eDzq!1WHk-{! zU>?7I{VGg5A*~970_0k1{^tQ>>jp~WbwW0GK25Iei;br_WBCu*ng;VrYpXAhf(F`7 z_tJ6#t^@ncPQz|UKtueBtDs&qF8Nz&U&p3Acj<$kkFN}t<0s}nA}7D*pBAtZJzk&n z=MnRdNcq1%mK^`RM~tkJvVg3Rh@9wu98MJ*xqZ=p=3qaVkFh@kkYWNVJLFyZ9;y}r zd-lVPCVmRyp@#L%tWKys31&2oRt&k8LxdwJqd(9|e_UlBWzcvFln(%}Hv!p) zcK&p6vU7uD852p4tbjS@2^(2?9?OAZo-rriejURj0Bl;S4tlbS()C zXfxHB9VpCL%r=1(W9=MiSn9yMe?EF#GD5GRFrJnqSDkHx5&2@j@c?bPZ5~rlf+Bv? zv=){hW9ftLMyzDb6kEdz0!b0iWut;UYdTKe7ebel&JKmQ&LvDsbq;F>CY0M@!Mjq2 z0@DTIbNj{Wq6g_<9ZJ!^Gq>jUqSq4*N);f4j5@|OV-b?qRiq>_@_o1E)ju`a`efb&&AsWKEJ4PtB4d9T(&35JdEFhwa)yJOdxE(1m^stX!JD3PB z1Z{l75?z}Sv5|d&a+=BPWAt)hd!!SRkqFsovu$olZt>fa3+JuTMMN+ur+XV}vAta^ zPdRVL$8BaC{`*YsGbeqIgp8Hi$1h*#+1sLi0Zs;)w&FL znD~PDsGh(^D`dxyjY=#NkBDNj=4I}$`7supVgr2^(2yefB9#WOCXehbt#UXUNE^xZ zGm0^N5W5o1vot%|e7--q4uhGz+UoJRQckc~(LmeY55Fv=Wr!sgsvQ^YzyN~iQn?;) zS7lG@Nf}jqo!g1a+m)%xa>WbljD3Jx*j2ewe1*`Jx62#c^DvK-X)=U zT0Q%vx*i`s<5m}@uMSXX#ze4)PsbriT5vez1#hU_096$qJa0qjfTn|m#hCYCd#&mA zQ@n_4OUs#w$dT3Afaio;DASC8uBT2q3XKm>L#3!Qk~b?oBm$gT_lr5ws@0PnD5*xg z<5e+B&veU^Sf-xs$KTc&!4DzPvjbZ|?wi(j3S9>CYiKlq|4A$zt9h+Z`DrK6{!2I! z=YOwu**ZBp{x)*9u(SQQcui{9IIXiHeqHI+E;<`hmdLv}j&7{T(A7~lcW@>QC#*kk zrXv#)K*H)N12yF9-f!EX0Z7Q_Ur2XvxRXYZ14Vjoo1uM{h}|HEta@Zd9!dgo^Ko#v zhv4~!u156hPYQn6WzZ~y9Aa135k{vWYDBD?lW9lBl_ZGy(Ye8uZy9et?1<$^Z2(Sx zBHfq^40oM5PYWQent~ErLt7O8iNh{~fP_YH+Q}8{QpHzb{e$j>Bq71(rlsfFH3NE)1qkPJ%47)jGktm_er69uhpP>U+%SM&WXt(*gvdp zXFgICobsg;j!~R$?pYd98#x-WnP81O>`CDmcBLfhVr!Kr)Oq69B(da-kE2Ap7i3{p za}1wrhn9Dx4xZA7>TLi<3$&oWw4mezt-mI7WqPr&_vAvK4wywIZKltPq6^fZ$Jn1o zff?fK|JD0a2adfM0)8uZo@LB03R;#VChDs+g(XeR*q@|*FHbETHdizrK*K>@@0n9V zj$G-U10k`LJYraQIzWgZ`5v}`HVIxZ`h{@zPJ|#7ojR5q%Keneeb@>y9UBwZPOWx> z)o#``@*!2cQYe2eD5El^;n>xVpBB~7yff-~T`ZnBxc7@u>E0wy_(IQ&z)APwj#*d( zSt^;kg)k~T>7aITEt5L(7wvMWt~E+-K9R$N1#D-|x0jQh(Z$ccP9OlsNMs!HZerBU9$t;CZdd+_&*R0xVEufmy@$us z-owRVg>N8KB)8&CBWXWWV_)Jh^gw%zudefaeD z1Nb(k7OE2rpgzfQh*>D?r3LqHsUZ50#@Hwvk9`%;HwR~an)Y$}9zkoTcKn%P4lTom zUjHe_!@Io=E<ODa*P6|`7 zCS)SZoVoY0UQ9KZ>oOB_L2+o)!gqnJ*r=w>tfmXr+z;6j-_FDfRzkyPjLqLAE6!7A zGE@~!QWep$D&h-|V_J7Pl;KErg560L1K9~|@J;mOp!E6q@jF_k)bZ`I-egU4R%h?5 zW|>~RHT{cR=RG-lBK7`geGKGi+IgpMq+cfJ*$8Sal;vyr8Jf{eq>5;ib-r%mdojFEX9E5}F z${W(-@)0F*jXqcIR`9-KpBiTk%~?_~N9j}7(M5DMw`vCJOG=a1#LV3T#|Hy$H?E8? z!;>z)((iMaQB%=Ka;d(BbZ?bvH^hqj1P7tZQN?Vb<5alL(T$mWwCrab@@5zAPEuQF zgU+V)RgQ@a)cSSq{)C`(qg6It^EBXab$o4=@v0k%v03y|GR9D+5#Vy=^w+&!Y$Uc} z4=vm?N;T@9`tEiQeb3mOs+X6I%LRoy3^(dmBIfMFP?(oAC~}pQ z1PmOXa79h*N{`Sa_vb%CJY%t7PKci*1%XaoI~*v&ed>&n*X|D@qD~dGK~`>IyP!fc zct?AK%9L|Vd4n3 zyT0x*j}%)0sYNdwW{4(=>nxJd00@b%Q2_LH=@`zVumI#`pPYvbSA4d{=};(<*a?KH zK+v=kEaUnuiC?zP5WEK+#Tl+6$G)gizv_JAot4PpCh^$e*l zl2$GmWek(fmxYY*D45PvTM(0?HnjJ8^f^3*1nK=@t=7Re!LqguZwN-Tl}nqSn^RF^6y ztjvGDqTYs>h`@QXPQyTD&|>v24{&Pph*U16B6bbVa@z?o?-!^U+j$EDr+g!TW&T_r zxl|!9jHI)Q6R?p>Hc&OGE&e;numY)MdcPg_4*q)yztndPRxlM$2tFRSh=0yj3q+H+ z9iAc*3!xbrM~nFd9m?|LndQVw({mf{h!wrgiri|)BUQ3i+P#n=X}?K8X{d98A3-<4 z`w}24H((q=6w(ClyeGH(epS%mR}lsY7$$+?YRTJTRCagI`!QH*>@h)PKb#4k)gxVT z0l^8*uFu6KQH<(v4WR^7krvfH1J54px&Xp_EKTKeZXe1}+j&P@;m}W!?CnLG~@5o^R@{E+q8?|kX#hR{j-Y~e2{a+>SE8{gDfNMhyGU})-%yV96 zcBo11O=a`cG-F9QhKn&c#gU!Vk!LWd%tCY01lyLu=1Tipyie;hoxPc;C z0}Og~E89gO!;V74Zk|pYZ5)@Ybkm;p4qTWY_DqmNOqAcnS6ZBZ$Ta3;TeJ9Z{+yg) z6@*>8X+j?S25MieLvcvt`;@I1zB*qK-nIo5>SSAAFkOh-R}#Nep?dSY1L?Zs&ZoL? z89?wjyCWJ0eKp$u%l93$IVeDn+tk&9GugJ;M5$46^4Ie0!yb%9oljk=%F#=MAZ!V? zp-`dN+92Oay4@|kH-F@jyBZ3CiHS)e!`2n&B>ya+eh_FH{EZBgV-NGwVf!4f2k{pN z!n4)G_8BXySYD+JcP*0?1Ih@{6Q^{hNuS9C?PBfITRbnSdxutyJFjtqr)k)6?9jFj z`200a4nqy7&_qi8FEXAT%70&F^_w9S>l&&pUhN%)v*5Yo;XEu*I7K#@}1Ytqg$<05;MP$!sCkMqna++Qbu{9Tr z>$78NYsWg9&c6!|z#}s|RoDD}APJQ~Td_!yX5FC%4LdZJq-N&wk=9;$pj&VI%0Roz zZf`F5HNUF=(q9nx_gjq%hY^XesTAVTBt9qM>w3bNqqDHJB>Iqaq6AYk znq#y=y(`Y{2zOz8TTaIA95Z3UvmjKPGy}nz1P^n;x^SC4@?B+ZW2?F)6~`l{Oy50d zLEgUL0qVS(6TRb;B^h*l^vDFR49Gc{0g2nxoqZ!oyRdf1hJD#;nc-B_lZ9G>go<9J z<0_#Aw&_R~V4*f5IrS>i)+?iCVz{ix6CPTh{nT!ir{l7MeSqY~%s6yVUVb!qf-F|ahHib%- ze2HKTXx_J{{<;syTC4u2!xe{gA&UfT?2axH#%J-MI#4~}|91McMnGyp&e;eVxf2>+kn8HDU?>%54kY`}qL#2YeUf~CMs6oaA)^-)~EjnFoyXzA3T zCiS>=oZ5md-hhtMQ001z3rnteUx!fFWHSOH87O?4kyhf-3znKhmp2n>J?t<}Tt82E zZ9aTATdKMhqWzB~5{+z6a*9{ZDeN(2N?{i+{}uz_a2z*n*S=Ewb#B=E1WsSQK{6 zMD9C!D*;r}2A^f42iMa5ZF7`}_PU~@K((>y z|46H*OBKGCeqnk>LZ6ISdht}MdGsoPUY&|Ts9`OQM%0A3i@`;R?K6eMF{E2!`?=gc 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%0D5#EEfu>hlUUE|f$&Pg{k1+nPbNpf!N^klgc=I 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�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�!KQel%GVQK%ibU{kKHrk02P&{FWS4ld%#N zG~@InN5G{J+%I+t_*BY<*=;iw^RXA;ZQK~48O^E!!^b9D<~=T;ERO1m4yaZz1=0AO zCj7~KZcW{F-%|!1+2Wd8t`jy8DUw&ZqY`iYrQS`0Ij5fNd8sL)C#X(&&cr(3-Jg)0 zMW{(HVmG?aHXi1qoLhIH%l_V0a^Y68FIM3+LP@i$R2btY0mUMP8G9>o0@adp4hd)< zCz#^`0ir1kV1RBqoFjZaortOWRLB;^FF=gC2V?<`Bm}&_%tfeMr$_BW;MzQ-a%0 zTsF*Sq}XSFin8Jnq*9|5L;=G&%@sL6y+l-4PFbjY4ktO8JVgY4(lxFf3ENr z9kIt^$%|JFIh->>&)6cJQQ8gIN1gH0_=yB-C6K6q)MuNXuRNxJMSmAL*L&6o0Udv2 z!m@Gy@H1#p9F#5|T?6q1aKqgFd_EvtETHT81)pqkm7OUY0#pD90X>Dp?^tqu=}d90 zvGhAZ3%ZYj-XVUI9|O`#ROez&C8kxUs6e%?G!cX7GabN1kD z?@HI9-Z?_2v8mFTx;kQAetLj0UgqiLIa;PA{WfbwChASWwE8ow=s+He^OL&3lDt-4 znp|OoOsfz{J(;vnl!)j|`wTbIkN-@{oU9E(DI!%S$y$CKliq8d-!>})FSq+sYGP(T z@isYjqEGNhzIgU|7RkK0;o@tH;E?jcQU*Q;l2IR~pUji65TOUHqxddg()_-G@Wxl* zh-f{s(XYtQ1cnS8h>ux6eTQV%MBA0^pd7+W#-Mc|LBDsz3?HiG75t zrAQd##Uu+5o}?<$J)wWw+dAG~zJ02wTtj3)^g(+B!Sex#F-H|BAY^2u@w2(yL89?8 zxxF194odjiMbCYUi8N+{R3zPK@YL&Hf+*dNzC;kz=%@3v?f<1J@xHy5;*@9? z)JmEn3k|kE2c%soDv<9dBc*4*BXbSw0e+5E($-FpSgrf)`O`AEyZ) z>?6p)0ijc+8|(BTcM2TGH0iTC?K+2C=rfndF_{sX)QOBAeB(E7n49Mjr1)lB4tfgX z*8{$bl@YZY&C}EUBe*Rf$j0RJt;N;L!GqO$Zq8s?-3sZO#stO$$HIG<2R#g&@a=|M z9?}^jX0O1bgQvE`i)X`ea#~Ek*Q{ugd$7OP>`1cv@Mw$a5gxbj8h9(QZLOu1=Aj+$ zrEPe2aNQUJ`XNnTtBh%=)SN8FQ2{npuLV^j;k^6+=LC9%m|ZLR23*aC8pR}iV_O() zv-0#ghT@Zmk^E%}qGvh%L@ax55|(}0nw^TH%AwZ-iV){B9HEAu#c|f4>m!G5fYo3Q zc@N-kR16t3nQ}e1z1>|&3My9^yh1f!pjgOWoxrJS2tEZDSaGTUgi<93MxcNarQ9Uc}pALx?JqfQRyw{ekL(e zpBOvR#sK+yg2!&7)E}RTSJI?&5W`UZ6*prcVoC%0N-RsEuX%p;imRfP8Ag<@D3H~Y z5K~fHJ~-~dATdG?DU8kAL}eSiVQY4yK#az+6mt6ZXTS~mVy^DSw`JsH`zlVWD`g0o z4)XXQ{`jf^F(rfiyhCtzQD;W^#-}prC(~_8D%&93zzjdHSDV2**}$`F!o33h#e&Bp zyrPPR94r#krid==&b>9g!%&oIOWsKTf<*L%LO-wSv-26s{jb83X|BSc*tkT$9@`7d zfj})WsXjUJ&oDqWT?t=NY}kGWzc`JvZ(DSSyf3C=X=f%0MU=#HD@7GQU&T(N#kCkzBq*q;jaHEtsOPRJPZ7DE}>M z9U4;R`yHEN+|og9fQ{Ir6OzhhFF1&jHvcqDj%9k0=9cT&*4k; zti{)@DSyZx(eBs?1f>+nroRFfL_*n|*rYV)kFh$P=1utuVJw|Oc_NY#2s;kECdjdw zUeQzZ!FrW@Rp*zb_D)YQS(4qA2C6pfPlYgYpGFh~NiUTQ@6 zT`r!M^ZphU$Hzrd+w{=9YCEvHN(l9;yZ@nXc(R`}jIKDH$)^mD`Gd^h=?F)?vi8K9 z*LxAP&gb1s23WZjU%<;|p}kT5g`w@t@JLvv`<^jVdnlg|zGM3P3*0=i&As(Xc@b3s z0ykfOyDMwmEH=nTp1+Wp9Qqxf?2uC>$SVATzDdPKfc$w4FXRdpV%oli0LA9btJ3N1 z>_5+m_i!P(6o4%W6UM(q#zp@BZ%h97;b>6R3a~vv2Ba-&i%*S87K$v3M;#AVP*&q` z8p{@H5030vS+PO_44H^};&O~8nLpp1f#V3t&klcN{y2dTAH1xe?)sUzOnQxdsn`%T zcq0a?nU$TLy}OP`=dm{vo)V0&&^SYh?$DxAdY6hWzQ?i#{e9Oi)fV5@cQ}VNy)IGV zDRUV5@~6ZjE-tdEkwoPK8YZztBLB$Jx5OZ(-4Y?9nlHeRAA7$={bP1Y>0rR(@q!a) zWR40Xqb(9VrxHq9jmf5MMFP6fjl^_0STnR`)I~O>O&Zl(ConI{TvwqhEa$M`uORkM zci`ZsUAV`7l0px>O)CzZ+UXARtK0B`O*wRJad@Wh__A&qBpUHW)EgEJlEPcDhKW6f}h zXwpB5>9Z+d^M>V(74=%&gT%rW(k)2;{4)r~FX0uvoBSB~5}$eQF(X zaH0EAtzhxDJv%bwFl#@O7h#!i{JHQVaaPNkHKNYaU#_YP;E<+!vpu+MlQnNtT~$a) zO*6xo-+HrBDHGOB(xl|S7P^-iO!bww_1H4dS@y<xxLROox73N%fHE*LW~>3X-z zJ|21%6vB`?D*?jc@y(VFx)9)fo zDshj34SMBq{aer0XA>qBs^KiCYC5YAar}Dl-tGKI1>@!E)vMUW05oILewfZ5 zUPK`V>{5mT@KBsUp+2#sRpaZZhol`;izZ=hDb5qF7K@yJn(%k>f|^v|u zWa=!pnyEzRiDQ~F_QsTqq<&4|rGotVE{czwkKH5#HP7ntgY)#pPXjo2zC5b873HA* z-vp1trc9Wh1p4%_d_q|_Zp0QBI?U|hqH2;wySU|FpW71UxYNZ}G&Tw~=7}r@ zX~&I86GK&ztt6S&(I8n9cYw$%F3^NC*3N3BA~ct*t@;nq6`Is|s~LPNq9)b*8cR*0 zEUyZrc;NHxEppoEhlfB&kW(x}PYrV9wT2NsLDtV1aw)`{^m!(50sLZ^mge%t#G^h!~R{Au5+g`Jekc7ayq~$X-T&Jc(KB}bOjYx4T zPfe7AcW|rvk_PmCvf@~0&FhB}@u(PL@=lq+RS=|#@0o@fW>_F5O8GiSo@U@}+CC&g z`W^=<3SW1`75*FLfMx~=1mZ||4;=Ir_etV1GMa8~xV9ZkrctFb z%cod>lbX7k1QiEV=LIu`fU(Ri-W{U=U{p@-Yzj}1ZJqZo5WPWP!+*cpu2*VwvO+C`loSrIA3TUw=*X0~8W z+0>2{1m-(+k8$Y_*CbP=j(%mph5-||D_AM1LtpJ~ki0)68ot=w(5({|jjB_zQF2~? z3>d|BNn2ood7Ax#mEUS)uCP<3`;HMPt4syX04a&=$>n=CRi3=E}TzcY$WIZ4pXPY#qE?*!6!}oQ)Y`5i0*Axyy!K0!zrA45L{F6-GI)2F^??6c)C;v{BCU@ zJei;bU9jb9Un@3nyiS-!Dvlu8&wjw0=W&(%3^90#A6}o;z2bX>L~P^P`!-jH-@Mi9 z;4YG3a9ipgGmSw7fA=ud39pxzR{&f3MzKgCp)YAX&VGh~vt-qLU_<)(x0?|l!9M>2 zxPDE={I~4}=YO}|kdcv4l2uReI zM18cBl)|}t9xSVET;TbXJ{~>VSq6%vG``~VN0@9)bh$CsXLh1r$mtwXQkytP+_kJ< z;O$J~J2IM_9TN5}t4dwSn-;9>CGKGV^W3 z(CyM2UPntuq?uFpt#E-d9E$EsV&WR}t=MBN?BW*^Nl*u_~Dq6Z_C z$S8*CA;bUyUC|!_of~aq14DY_s3MX3Ujbb~4gArP+TNWLs4XeO+G(U2-Bzwj=WpGO z2eKy}7BC{y{16!zM;XO9}Ha>Mh z+^96H=jVP;&r{l)*nk+@enex0v<9_daYJFXJ^_DeAEVx2NsXJ{uyVbqOfx)0zC$&- z;8w@FFl~iop98Ko8`%%( z1IXOD&u0(sp9gO<6-Nfj;+Y}_xxCmVZ2D7NwBOL?u(Gn9+-W<~`3}ciiR%Z!{0hjB zO6>P#JuTS7;l(p;4No=758Hr_AGd#U$T+m~?;C#6K~g)2;~QmrP>1t^#5V50?HOP; zsF8RYwjWEim}j2J;Rm852t!-W^52XJGIeYi4$x{B*pW_=IOSY@b$N5)b{Tj+^69Wh zR8uLoTp5}0eu*IX+17YYuF0Pcy`PBYKD6|(O4%U+ojWM0{+l{)j<-zHo& zK0K*~XUJ0GaQ5^|HVL+LlACmkIks2Rr3#f9A8>GeOoq0#i&>e{nTvV- zuze+!F|ej5y&=g3I2ElfrmUCjOP|0DN+I$Phq}1vPBY9xPlarT%V<(M0tC|_J^I*C z{Vde<_{!q9TE55#YVOaxRPQ-2_?&mAAIuoh5Qq~$>>Y}tKAyKKC{C*3%lDLnwh_xA zH$IY8mtWqn;u{Zq^qzBoUJ1qMu$ihbTE}pG8e)XonBy2&G;lE|yj`mA)=`%;;)5*a zS6aBwt;xKbYvzlLxY43E$Is6OU~Q8)W=jiT z-c6{U8=%$oB=%!JIj&fcVA>zmP$~~@Y<~B2$LI0vrV1O4{~`7XK)q{X21UQEMzK#oKzgwM?jQDl*p~4xhOf5GD%;<8vVlLG zZQ7omkx%lUAy8?ZpvSD{Jn~B#`m=;i#73j+hQD9L#Z}34-4gh3tZ$#5mgnu_;q*mT zx`-SE{=?V;KstaBRszbql&aQ~umd>Piz5JDw8STg=45~u4VJ2vxgZ#e;$W)fvA#K$P{rhz>=ZA&1#pRYu;NU?j^&M4qLQ7rr49bd=vJyeW5J zkS*5ZYMG&1lKff~-TE8?v}~p+%%RP{Cf0kmCQ*C?E=ovr>><8?`S}mbHvV7CHWan` zAELt_%=W3BEO+EqgQKQ+{gIq`;!F2_+rTN66WG^JgG-1k?UuH)Z&}?(AARviC(V@W z#(Q5{)pcw*bUP(#OS%HQ4zS^izGp;FO}^n}L=P6_k6=oX&CQM6p1#`H<}sxDtLA2~ zRuY76F$R6~#b>{Tjm;jL4KV5`ExO$S`r>sz`r;4AC_2qwtW}KA5lM?MAAeqs{_kQolaxqsGe)1>&pslcc_3dc_cs_4GI^*~8wF6EMbzp?@8W-yC z+NsUNVa*gR5}(|xKX?vASb>w^0G`8?4~uuiA3KXwqxV94ZnXd)8g*>-Q!7W;*l>ON zh3^b0Ky*pxi3&Cr&T# zte%Jp>{Ly)RkXRXWgFFUOAtU?@e8B=HM--j4x1hmoMb^yD_II)8Ea zSJ4XWL4J+u3(ovHk!h0evAe-5O1u+KxgOqezqB0@-OjlmI)Og4sWh6~{ZSeZ`EUI! z|6wjpL0J0F67|1(F-K&Qa%^h}((-e9k;$vqS=Q-c|MuC6{OPmp5Y=!#wcLh)LcYM; z?C==6Z2mMvudtvIPTd4V{^s2!8lA15L@b25dz)4osLc>*TV|fh_$8s>YciCJU;ft= z5UU*Um$dm)$88vMK}=iZ+uU7{l?j!XBM`1(jRm<{W-;Sj7BPz6ZUGd?$MKq40uozg zl|a2X;_`rrH*q+bE&fhs0&{E30jAO7Ba0e*sB!DiwnR-$xIWtkjZfq8@ClQ>2A?f@ z+l)}6i|nF9Z0dN%Kme`r@ACqR3pdQwVXk&8gE2(pgdAxi&J`F86@fR% zIzsJ+F}Fw~v1L~gcAB4qT}BsVf6BimWVpuo%ISHRbJVLh=%3z&|dQvprbnu zT;d<`-06GbR!+8x3j^a)SKB-@`c)Mr(J+E6w&V)9ebpS ztCAxrc}b3^@sT`DB*BaDr(R4Bt)VA9-sU#8V8Q*jkM&%ge{-to{F?8D$euD!kLR<+ z>?soWe349FLREnqBQSPz%S@c&4?8P+0kS@NVT`C`QC@Ulgt_#ShwwChw3Pn=PIN7< zlZVO`JO7-<`N=D|TF4Bp-y7xVkb2QvnB#TToc%Lv41BqR5HFwr^T)a4#wcfAqne1T zuOwURt*1P*9+{s^0GXZNJ_)~E+x>s`) z-i}f0`t3N#H!8N_=Ts^vUsux7G$>O!&}jpalG6B3_NmTN^1F3)BsiNOnYhHbVOb`n zIb+R!f^pyZ**T)eur&T!`_crtMrg@|Nsg5TB;9)R_@k_aZ{q9JqV==l*F6t>Kvi{< z7*Th(pwhf*E7OFSi2MZrmOBsraarf zqayjITzE5!velDF z2dL<`@kbS_4*s@P7K!!%ZVSsM6v79$1)y>Ox20qqv)ANn6313Vr2ZDn2OGi&9C$AW zz-U^@Pk*;glw>V_`#_(tfIg8wna6+?@cPtQLJ1% zL_o|+rBhR-X<&2rH-#J5Vjx{r{t`$1@PoG{1^w8-@loxUyo9TvdBg*7TQC9K7Ve7< z0Jp^wvJsVGs{p`lVQuip2e{RK@X`{THT(VM@?|^jtGXeP2?E}iZ2x`xSRX`pvtZt- zH53kpr)vAs+#bGowHv4MK(Ff^xVf{xju>N`o5E(lJ^Gzu}xGnB3H1blQGXJ0||1Usw#;#*V8=fEI?lfWs261Pq8=c*xsM)J?)O^M)plTdD67HjTpJJrRZqi z!9EJB9}x*$rQ2b<7jSqg&>p&OB>{Y;B2q~=oeiUX7|ELNZ=C*|8oI(azeEz;1=T_1 zZ5fNxv2}4u=NtQm!u;f6s_0(lem!9{X5=b%k(EY3&l(`LZQb%%(Hf_RQJQvR`Iwey%Xt;!^hsKFVvk#`ch2|CQW8 zj2_zCMgpfNCB8w%rL1Yu;-r}FsvqS#I$1Yx&SWFX1Tri~z}A^(Gtjh}otZITs~n_% zBy~uJOT#IFX%fXRA5@Jsu|E7>XIA%0CPU7T@zTqR^Vd}R*yq52kp(AmNRK5wDH4AZ z{sBW%fUptZuF{t2>|H>?L#umfTK_;5ijOE{C9|qO^(vg|ypMdK3TJLx8On6z2LZq( zaP-%1^kAw6h|2yjWJMSouGjVBN6#kX&Kwtk?*cDNY2b@5Gf$dnDZ8WU2QV_Upsx*c zax?U4_N_Fo^3&UldkTfhCl1xIDjX-_0ec*0%b(FI5w4>L>CX0wZ!s+2knZ^VkrQRx z{=(3p>3`mNdCzC@y9RlYqLUCq=F}Z10;+-~zpjON9!}|oCB>oh@ymSw7jVgA-2a~l zmm~nf1=m9I0hSe&wLJjN)0FcMaOuMgu9t6ovOjD5^96jfds~i$+S9G2jGjBicuF_u zj2>Q(@Z=&w#)3cp6+a>yKwLt($$ol*V%a;=`_*u>^7Lo08V*uxNdmOW|NpL575+?B zum4>t@BEL*27v(6KY^nEL#tKyEB{Wb8@-I8DJojivU!Wv0Bm7LrSfRzeAuWbDS)^% zY5-jiNLe-IITs<|�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

    85C2sR-{G&8xvKb$-5aErxS1(_s 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

    wIt2YNQ9eN26pb<@=K?pl30M;kT8^DT9uJ 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